X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_shlibdeps;h=b3648e514d1d97fdccc713f92cbb3189ab277cf7;hb=088be5d001d899c42b9d572e91198791748e5b46;hp=237d92db5a0dbb648fd1e7819dc86df1ce6643f1;hpb=a10ba9f809e534c3ee57cb3c99011f6f2bbb8e2b;p=debhelper.git diff --git a/dh_shlibdeps b/dh_shlibdeps index 237d92d..b3648e5 100755 --- a/dh_shlibdeps +++ b/dh_shlibdeps @@ -1,26 +1,94 @@ #!/usr/bin/perl -w -# -# Find dependancies. Simple dpkg-shlibdeps wrapper. +=head1 NAME + +dh_shlibdeps - calculate shared library dependancies + +=cut + +use strict; +use Cwd; use Debian::Debhelper::Dh_Lib; + +=head1 SYNOPSIS + +B [S>] [B<-l>I] [B<-X>I] [S I>] + +=head1 DESCRIPTION + +dh_shlibdeps is a debhelper program that is responsible for calculating +shared library dependancies for packages. + +This program is merely a wrapper around L that calls it +once for each package listed in the control file, passing it +a list of ELF executables and shared libraries it has found. + +=head1 OPTIONS + +=over 4 + +=item B<-u>I, B<--dpkg-shlibdeps-params=>I + +=item B<--> I + +Pass "params" to L. + +=item B<-X>I, B<--exclude=>I + +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. + +=item B<-l>I[:directory:directory:..] + +Before dpkg-shlibdeps is run, LD_LIBRARY_PATH will have added to it the +specified directory (or directories -- separate with colons). 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. + +=back + +=cut + init(); -foreach $PACKAGE (@{$dh{DOPACKAGES}}) { - $TMP=tmpdir($PACKAGE); - $EXT=pkgext($PACKAGE); +# 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}}) { + my $tmp=tmpdir($package); + my $ext=pkgext($package); my @filelist; my $ff; # Generate a list of ELF binaries in the package, ignoring any # we were told to exclude. - if (! defined($dh{EXCLUDE_FIND}) || $dh{EXCLUDE_FIND} eq '') { - $find_options=""; - } - else { + my $find_options=''; + if (defined($dh{EXCLUDE_FIND}) && $dh{EXCLUDE_FIND} ne '') { $find_options="! \\( $dh{EXCLUDE_FIND} \\)"; } - foreach $file (split(/\n/,`find $TMP -type f \\( -perm +111 -or -name "*.so*" \\) $find_options`)) { + 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.. $ff=`file "$file"`; if ($ff=~m/ELF/ && $ff!~/statically linked/) { @@ -29,10 +97,18 @@ foreach $PACKAGE (@{$dh{DOPACKAGES}}) { } if (@filelist) { - if ($dh{L_PARAMS}) { - $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); + doit("dpkg-shlibdeps","-Tdebian/${ext}substvars",@{$dh{U_PARAMS}},'-dDepends',@filelist); } } + +=head1 SEE ALSO + +L + +This program is a part of debhelper. + +=head1 AUTHOR + +Joey Hess + +=cut