]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_shlibdeps
Updated French man page translation. Closes: #685560
[debhelper.git] / dh_shlibdeps
index 33fd9411512457f6e57060132b3717a53f21a8a8..a41732fcee1678c9c5a1814334760e2cf25f96f8 100755 (executable)
@@ -2,7 +2,7 @@
 
 =head1 NAME
 
-dh_shlibdeps - calculate shared library dependancies
+dh_shlibdeps - calculate shared library dependencies
 
 =cut
 
@@ -12,52 +12,118 @@ use Debian::Debhelper::Dh_Lib;
 
 =head1 SYNOPSIS
 
-  dh_shlibdeps [debhelper options] [-ldirectory] [-Xitem] [-- params]
+B<dh_shlibdeps> [S<I<debhelper options>>] [B<-L>I<package>] [B<-l>I<directory>] [B<-X>I<item>] [S<B<--> I<params>>]
 
 =head1 DESCRIPTION
 
-dh_shlibdeps is a debhelper program that is responsible for calculating
-shared library dependancies for packages.
+B<dh_shlibdeps> is a debhelper program that is responsible for calculating
+shared library dependencies for packages.
 
 This program is merely a wrapper around L<dpkg-shlibdeps(1)> that calls it
-once for each package listed in the control file, passing it
+once for each package listed in the F<control> file, passing it
 a list of ELF executables and shared libraries it has found.
 
 =head1 OPTIONS
 
 =over 4
 
-=item B<-u>I<params>, B<--dpkg-shlibdeps-params=>I<params>
+=item B<-X>I<item>, B<--exclude=>I<item>
+
+Exclude files that contain F<item> anywhere in their filename from being
+passed to B<dpkg-shlibdeps>. This will make their dependencies be ignored.
+This may be useful in some situations, but use it with caution. This option
+may be used more than once to exclude more than one thing.
 
 =item B<--> I<params>
 
-Pass "params" to L<dpkg-shlibdeps(1)>.
+Pass I<params> to L<dpkg-shlibdeps(1)>.
 
-=item B<-X>I<item>, B<--exclude=>I<item>
+=item B<-u>I<params>, B<--dpkg-shlibdeps-params=>I<params>
 
-Exclude files that contain "item" anywhere in their filename from being
-passed to dpkg-shlibdeps. This will make their dependancies be ignored.
-This may be useful in some situations, but use it with caution. This option
-may be used more than once to exclude more than one thing.
+This is another way to pass I<params> to L<dpkg-shlibdeps(1)>.
+It is deprecated; use B<--> instead.
+
+=item B<-l>I<directory>[B<:>I<directory> ...]
+
+With recent versions of B<dpkg-shlibdeps>, this option is generally not
+needed.
+
+Before B<dpkg-shlibdeps> is run, B<LD_LIBRARY_PATH> will have added to it the 
+specified directory (or directories -- separate with colons). With recent
+versions of B<dpkg-shlibdeps>, this is mostly only useful for packages that
+build multiple flavors of the same library, or other situations where
+the library is installed into a directory not on the regular library search
+path.
 
-=item B<-l>I<directory>
+=item B<-L>I<package>, B<--libpackage=>I<package>
 
-Before dpkg-shlibdeps is run, LD_LIBRARY_PATH will be set to the specified
-directory. This is useful for multi-binary packages where a library
-is built in one package and another package contains binaries linked
-against said library. Relative paths will be made absolute for the
-benefit of dpkg-shlibdeps.
+With recent versions of B<dpkg-shlibdeps>, this option is generally not
+needed, unless your package builds multiple flavors of the same library.
+
+It tells B<dpkg-shlibdeps> (via its B<-S> parameter) to look first in the package
+build directory for the specified package, when searching for libraries,
+symbol files, and shlibs files.
 
 =back
 
+=head1 EXAMPLES
+
+Suppose that your source package produces libfoo1, libfoo-dev, and
+libfoo-bin binary packages. libfoo-bin links against libfoo1, and should
+depend on it. In your rules file, first run B<dh_makeshlibs>, then B<dh_shlibdeps>:
+
+       dh_makeshlibs
+       dh_shlibdeps
+
+This will have the effect of generating automatically a shlibs file for
+libfoo1, and using that file and the libfoo1 library in the
+F<debian/libfoo1/usr/lib> directory to calculate shared library dependency
+information.
+
+If a libbar1 package is also produced, that is an alternate build of
+libfoo, and is installed into F</usr/lib/bar/>, you can make libfoo-bin depend
+on libbar1 as follows:
+
+       dh_shlibdeps -Llibbar1 -l/usr/lib/bar
+       
 =cut
 
-init();
+init(options => {
+       "L|libpackage=s" => \$dh{LIBPACKAGE},
+       "dpkg-shlibdeps-params=s", => \$dh{U_PARAMS},
+       "l=s", => \$dh{L_PARAMS},
+});
+
+if ($dh{L_PARAMS}) {
+       my @paths=();
+       # Add to existing paths, if set.
+       push @paths, $ENV{'LD_LIBRARY_PATH'}
+               if exists $ENV{'LD_LIBRARY_PATH'};
+       foreach (split(/:/, $dh{L_PARAMS})) {
+               # Force the path absolute.
+               if (m:^/:) {
+                       push @paths, $_;
+               }
+               else {
+                       push @paths, "/$_";
+               }
+       }
+       $dh{L_PARAMS}=join(':', @paths);
+}
+
+if (defined $dh{V_FLAG}) {
+       warning("You probably wanted to pass -V to dh_makeshlibs, it has no effect on dh_shlibdeps");
+}
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
        my $tmp=tmpdir($package);
        my $ext=pkgext($package);
 
+       # dpkg-shlibdeps expects this directory to exist
+       if (! -d "$tmp/DEBIAN") {
+               doit("install","-o",0,"-g",0,"-d","$tmp/DEBIAN");
+       }
+
        my @filelist;
        my $ff;
 
@@ -67,8 +133,11 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        if (defined($dh{EXCLUDE_FIND}) && $dh{EXCLUDE_FIND} ne '') {
                $find_options="! \\( $dh{EXCLUDE_FIND} \\)";
        }
-       foreach my $file (split(/\n/,`find $tmp -type f \\( -perm +111 -or -name "*.so*" \\) $find_options`)) {
-               # TODO: this is slow, optimize. Ie, file can run once on multiple files..
+       foreach my $file (split(/\n/,`find $tmp -type f \\( -perm +111 -or -name "*.so*" -or -name "*.cmxs" \\) $find_options -print`)) {
+               # Prune directories that contain separated debug symbols.
+               next if $file=~m!^\Q$tmp\E/usr/lib/debug/(lib|lib64|usr|bin|sbin|opt|dev|emul)/!;
+               # TODO this is slow, optimize. Ie, file can run once on
+               # multiple files..
                $ff=`file "$file"`;
                if ($ff=~m/ELF/ && $ff!~/statically linked/) {
                        push @filelist,$file;
@@ -76,21 +145,36 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        }
 
        if (@filelist) {
+               my @opts;
+               if (defined $dh{LIBPACKAGE} && length $dh{LIBPACKAGE}) {
+                       @opts=("-S".tmpdir($dh{LIBPACKAGE}));
+               }
+               
+               push @opts, "-tudeb" if is_udeb($package);
+               
+               my $ld_library_path_orig=$ENV{LD_LIBRARY_PATH};
                if ($dh{L_PARAMS}) {
-                       # Force the path absolute.
-                       unless ($dh{L_PARAMS}=~m:^/:) {
-                               $dh{L_PARAMS}=getcwd()."/$dh{L_PARAMS}";
+                       $ENV{LD_LIBRARY_PATH}=$dh{L_PARAMS};
+                       verbose_print("LD_LIBRARY_PATH=$dh{L_PARAMS}");
+               }
+               
+               doit("dpkg-shlibdeps","-Tdebian/${ext}substvars",
+                       @opts,@{$dh{U_PARAMS}},@filelist);
+
+               if ($dh{L_PARAMS}) {
+                       if (defined $ld_library_path_orig) {
+                               $ENV{LD_LIBRARY_PATH}=$ld_library_path_orig;
+                       }
+                       else {
+                               delete $ENV{LD_LIBRARY_PATH};
                        }
-                       $ENV{'LD_LIBRARY_PATH'}=$dh{L_PARAMS};
-                       verbose_print("LD_LIBRARY_PATH=$dh{L_PARAMS} \\");
                }
-               doit("dpkg-shlibdeps","-Tdebian/${ext}substvars",@{$dh{U_PARAMS}},'-dDepends',@filelist);
        }
 }
 
 =head1 SEE ALSO
 
-L<debhelper(1)>
+L<debhelper(7)>, L<dpkg-shlibdeps(1)>
 
 This program is a part of debhelper.