]> err.no Git - dpkg/commitdiff
Bug fix in Dpkg::Path::get_pkg_root_dir() and related changes in dpkg-shlibdeps
authorRaphael Hertzog <hertzog@debian.org>
Mon, 19 Nov 2007 21:10:55 +0000 (22:10 +0100)
committerRaphael Hertzog <hertzog@debian.org>
Mon, 19 Nov 2007 21:10:55 +0000 (22:10 +0100)
* scripts/Dpkg/Path.pm: Fix behaviour of get_pkg_root_dir() when there's
no DEBIAN subdirectory in none of the parent directories.

* scripts/dpkg-shlibdeps.pl: Handle undef values returned by
get_pkg_root_dir() and complain when it's likely to create a problem (when
a RPATH contains $ORIGIN and when the value of this variable can't be
determined because we don't know what is the root directory of the
temporary tree).

ChangeLog
debian/changelog
scripts/Dpkg/Path.pm
scripts/dpkg-shlibdeps.pl

index a258fe827800a09c57624fc31a00a62244c4d719..1acb09197c5d884f733a416d9424708bdb2c89d0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2007-11-19  Raphael Hertzog  <hertzog@debian.org>
+
+       * scripts/Dpkg/Path.pm: Fix behaviour of get_pkg_root_dir() when
+       there's no DEBIAN subdirectory in none of the parent directories.
+       * scripts/dpkg-shlibdeps.pl: Handle undef values returned by
+       get_pkg_root_dir() and complain when it's likely to create a
+       problem (when a RPATH contains $ORIGIN and when the value of
+       this variable can't be determined because we don't know what
+       is the root directory of the temporary tree).
+
 2007-11-19  Guillem Jover  <guillem@debian.org>
 
        * configure.ac: Bump version to 1.14.9~.
index 1174a1d2a9ff70bcea8c5b6069a54fb299aa3e24..c07bcd45aa250a50e4cd72988f0d27de21168e79 100644 (file)
@@ -1,5 +1,9 @@
 dpkg (1.14.9) UNRELEASED; urgency=low
 
+  [ Raphael Hertzog ]
+  * Fix bad behaviour of Dpkg::Path::get_pkg_root_dir() and adjust
+    dpkg-shlibdeps accordingly.
+
   [ Updated man pages translations ]
     * German (Helge Kreutzmann).
 
index 5422e0f78d512926ff368fbcf07001d779323dac..32d57fc9e26604efded64a39a908cceaf46f9982 100644 (file)
@@ -41,17 +41,19 @@ This function will scan upwards the hierarchy of directory to find out
 the directory which contains the "DEBIAN" sub-directory and it will return
 its path. This directory is the root directory of a package being built.
 
+If no DEBIAN subdirectory is found, it will return undef.
+
 =cut
 
 sub get_pkg_root_dir($) {
     my $file = shift;
     $file =~ s{/+$}{};
     $file =~ s{/+[^/]+$}{} if not -d $file;
-    do {
+    while ($file) {
        return $file if -d "$file/DEBIAN";
        last if $file !~ m{/};
        $file =~ s{/+[^/]+$}{};
-    } while ($file);
+    }
     return undef;
 }
 
index e152e0ffb0f4f3f22196bb9f3aac52bfd9e2e14b..1599aa6d96b9daeb095141a3288e8be4c8613b37 100755 (executable)
@@ -424,12 +424,24 @@ sub my_find_library {
     # Create real RPATH in case $ORIGIN is used
     # Note: ld.so also supports $PLATFORM and $LIB but they are
     # used in real case (yet)
-    my $origin = "/" . relative_to_pkg_root($execfile);
-    $origin =~ s{/+[^/]*$}{};
+    my $libdir = relative_to_pkg_root($execfile);
+    my $origin;
+    if (defined $libdir) {
+       $origin = "/$libdir";
+       $origin =~ s{/+[^/]*$}{};
+    }
     my @RPATH = ();
     foreach my $path (@{$rpath}) {
-       $path =~ s/\$ORIGIN/$origin/g;
-       $path =~ s/\$\{ORIGIN\}/$origin/g;
+       if ($path =~ /\$ORIGIN|\$\{ORIGIN\}/) {
+           if (defined $origin) {
+               $path =~ s/\$ORIGIN/$origin/g;
+               $path =~ s/\$\{ORIGIN\}/$origin/g;
+           } else {
+               warning(_g("\$ORIGIN is used in RPATH of %s and the corresponding " .
+               "directory could not be identified due to lack of DEBIAN " .
+               "sub-directory in the root of package's build tree"), $execfile);
+           }
+       }
        push @RPATH, $path;
     }