X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_makeshlibs;h=1e5dd797fc15c71090ed8e65e3287b324dc8dd39;hb=23a8188b668fbbdd8e84260040e276a6ef3a879c;hp=fe31f5ff7319743df5b8b3dff84aa8c81654e0fd;hpb=515a01d46a768ee63a4665c643cdd6889ffaebfc;p=debhelper.git diff --git a/dh_makeshlibs b/dh_makeshlibs index fe31f5f..1e5dd79 100755 --- a/dh_makeshlibs +++ b/dh_makeshlibs @@ -11,7 +11,7 @@ use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS - dh_makeshlibs [debhelper options] [-mmajor] [-V[dependancies]] [-n] + dh_makeshlibs [debhelper options] [-mmajor] [-V[dependancies]] [-n] [-Xitem] =head1 DESCRIPTION @@ -19,7 +19,8 @@ dh_makeshlibs is a debhelper program that automatically scans for shared libraries, and generates a shlibs file for the libraries it finds. It also adds a call to ldconfig in the postinst and postrm scripts (in -DH_COMPAT=3 mode and above only). +DH_COMPAT=3 mode and above only) to any packages which it finds shared +libraries in. =head1 OPTIONS @@ -41,14 +42,19 @@ depend on any particular version of the package containing the shared library. It may be necessary for you to add some version dependancy information to the shlibs file. If -V is specified with no dependancy information, the current version of the package is plugged into a -dependancy that looks like "packagename (>= packageversion)". If -V is specified with -parameters, the parameters can be used to specify the exact dependancy -information needed (be sure to include the package name). +dependancy that looks like "packagename (>= packageversion)". If -V is +specified with parameters, the parameters can be used to specify the exact +dependancy information needed (be sure to include the package name). =item B<-n>, B<--noscripts> Do not modify postinst/postrm scripts. +=item B<-X>I, B<--exclude=>I + +Exclude files that contain "item" anywhere in their filename from +being treated as shared libraries. + =back =head1 EXAMPLES @@ -82,10 +88,31 @@ foreach my $package (@{$dh{DOPACKAGES}}) { doit("rm", "-f", "$tmp/DEBIAN/shlibs"); - open (FIND, "find $tmp -xtype f -name '*.so*' |"); + # So, we look for files or links to existing files with names that + # match "*.so*". Matching *.so.* is not good enough because of + # broken crap like db3. And we only look at real files not + # symlinks, so we don't accidentually add shlibs data to -dev + # packages. This may have a few false positives, which is ok, + # because only if we can get a library name and a major number from + # objdump is anything actually added. + my $exclude=''; + if (defined($dh{EXCLUDE_FIND}) && $dh{EXCLUDE_FIND} ne '') { + $exclude="! \\( $dh{EXCLUDE_FIND} \\) "; + } + open (FIND, "find $tmp -type f -name '*.so*' $exclude |"); while () { - my ($library, $major) = - `objdump -p $_` =~ m/\s+SONAME\s+(.+)\.so\.(.+)/; + my ($library, $major); + my $objdump=`objdump -p $_`; + if ($objdump=~m/\s+SONAME\s+(.+)\.so\.(.+)/) { + # proper soname format + $library=$1; + $major=$2; + } + elsif ($objdump=~m/\s+SONAME\s+(.+)-(.+)\.so/) { + # idiotic crap soname format + $library=$1; + $major=$2; + } if (defined($dh{M_PARAMS}) && $dh{M_PARAMS} ne '') { $major=$dh{M_PARAMS};