]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_shlibdeps
r1655: * Added udeb support, as pioneered by di-packages-build. Understands
[debhelper.git] / dh_shlibdeps
index ebba4746a26132858ae87564b6b9451603863538..c92d1bf100b9208a3cb93791c911d01c705db5f0 100755 (executable)
@@ -12,7 +12,7 @@ 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
 
@@ -49,13 +49,60 @@ package and another package contains binaries linked against said
 library. Relative paths will be made absolute for the benefit of
 dpkg-shlibdeps.
 
+Note that the directory given should be the complete or relative path to
+a directory that contains the library. See example below.
+
+=item B<-L>I<package>, B<--libpackage=>I<package>
+
+Use the shlibs file automatically generated by dh_makeshlibs for the named
+package as a kind of automatically generated shlibs.local file. You can use
+this switch in concert with the -l switch to make dpkg-shlibdeps find a
+library built as part of the current package, and get the shlibs information.
+See example below.
+
 =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 dh_makeshlibs, then dh_shlibdeps:
+
+       dh_makeshlibs
+       dh_shlibdeps -L libfoo1 -l debian/libfoo1/usr/lib
+
+This will have the effect of generating automatically a shlibs file for
+libfoo1, and using that file and the libfoo1 library in the
+debian/libfoo1/usr/lib directory to calculate shared library dependency
+information.
+
 =cut
 
 init();
 
+# Add directory to library search path.
+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, getcwd()."/$_";
+               }
+       }
+       $dh{L_PARAMS}=join(':', @paths);
+       $ENV{'LD_LIBRARY_PATH'}=$dh{L_PARAMS};
+       verbose_print("LD_LIBRARY_PATH=$dh{L_PARAMS}");
+}
+
 foreach my $package (@{$dh{DOPACKAGES}}) {
+       next if is_udeb($package);
+       
        my $tmp=tmpdir($package);
        my $ext=pkgext($package);
 
@@ -68,8 +115,9 @@ 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 -path $tmp/usr/lib/debug -prune -or -type f \\( -perm +111 -or -name "*.so*" \\) $find_options -print`)) {
+               # 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;
@@ -77,31 +125,18 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        }
 
        if (@filelist) {
-               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, getcwd()."/$_";
-                               }
-                       }
-                       $dh{L_PARAMS}=join(':', @paths);
-                       $ENV{'LD_LIBRARY_PATH'}=$dh{L_PARAMS};
-                       verbose_print("LD_LIBRARY_PATH=$dh{L_PARAMS} \\");
+               my @opts;
+               if (defined $dh{LIBPACKAGE} && length $dh{LIBPACKAGE}) {
+                       @opts=("-L".tmpdir($dh{LIBPACKAGE}."/DEBIAN/shlibs"));
                }
-               doit("dpkg-shlibdeps","-Tdebian/${ext}substvars",@{$dh{U_PARAMS}},'-dDepends',@filelist);
+               doit("dpkg-shlibdeps","-Tdebian/${ext}substvars",
+                       @opts,@{$dh{U_PARAMS}},@filelist);
        }
 }
 
 =head1 SEE ALSO
 
-L<debhelper(1)>
+L<debhelper(7)>
 
 This program is a part of debhelper.