X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_makeshlibs;h=de29453c21e1c63c6ecdbca79f4ddb8c13e00f85;hb=ccbd3d9f501bc8d31e9fa82d04e4989f7e43c2a3;hp=1b50ea115a7e7bae350c30d7d12b9c3c53bfa85a;hpb=dffd90e48bd1c4bb45cf42b6394478a7d2590b5a;p=debhelper.git diff --git a/dh_makeshlibs b/dh_makeshlibs index 1b50ea1..de29453 100755 --- a/dh_makeshlibs +++ b/dh_makeshlibs @@ -1,35 +1,113 @@ #!/usr/bin/perl -w -# -# Automatically generate shlibs files. +=head1 NAME + +dh_makeshlibs - automatically create shlibs file + +=cut + +use strict; use Debian::Debhelper::Dh_Lib; + +=head1 SYNOPSIS + + dh_makeshlibs [debhelper options] [-mmajor] [-V[dependancies]] [-n] + +=head1 DESCRIPTION + +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). + +=head1 OPTIONS + +=over 4 + +=item B<-m>I, B<--major=>I + +Instead of trying to guess the major number of the library from the +filename of the library, use the major number specified after the -m parameter. + +=item B<-V>, B<-V>I + +=item B<--version-info>, B<--version-info=>I + +By default, the shlibs file generated by this program does not make packages +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). + +=item B<-n>, B<--noscripts> + +Do not modify postinst/postrm scripts. + +=back + +=head1 EXAMPLES + + dh_makeshlibs + +Assuming this is a package named libfoobar1, generates a shlibs file that +looks something like: + libfoobar 1 libfoobar1 + + dh_makeshlibs -V + +Assuming the current version of the package is 1.0-3, generates a shlibs +file that looks something like: + libfoobar 1 libfoobar1 (>= 1.0-3) + + dh_makeshlibs -V 'libfoobar1 (>= 1.0)' + +Generates a shlibs file that looks something like: + libfoobar 1 libfoobar1 (>= 1.0) + +=head1 NOTES + +There is no guarantee that the program will get the shlibs file right. For +example, it may not correctly guess the major number of your package. In +cases like these (and perhaps in general, just to be safe), it is better to +create a debian/shlibs file by hand, or force it to use the correct major +number by specifying the -m parameter. + +=cut + init(); -foreach $PACKAGE (@{$dh{DOPACKAGES}}) { - $TMP=tmpdir($PACKAGE); +foreach my $package (@{$dh{DOPACKAGES}}) { + my $tmp=tmpdir($package); my %seen; my $need_ldconfig = 0; - doit("rm", "-f", "$TMP/DEBIAN/shlibs"); + doit("rm", "-f", "$tmp/DEBIAN/shlibs"); - open (FIND, "find $TMP -xtype f -name '*.so*' |"); + open (FIND, "find $tmp -xtype f -name '*.so*' |"); while () { + my $library; + my $major; + chomp; $need_ldconfig=1; # The second evil regexp is for db3, whose author should # be shot. - if (m#.*/(.*)\.so\.(\d*)\.?# || m#.*/(.*)-(\S+)\.so$#) { + if (m#.*/([^/]*)\.so\.(\d*)\.?# || m#.*/([^/]*)-([^\s/]+)\.so$#) { $library = $1; $major = $2; } if (defined($dh{M_PARAMS}) && $dh{M_PARAMS} ne '') { $major=$dh{M_PARAMS}; } - if (! -d "$TMP/DEBIAN") { - doit("install","-d","$TMP/DEBIAN"); + if (! -d "$tmp/DEBIAN") { + doit("install","-d","$tmp/DEBIAN"); } - $deps=$PACKAGE; + my $deps=$package; if ($dh{V_FLAG_SET}) { if ($dh{V_FLAG} ne '') { $deps=$dh{V_FLAG}; @@ -37,8 +115,8 @@ foreach $PACKAGE (@{$dh{DOPACKAGES}}) { else { # Call isnative becuase it sets $dh{VERSION} # as a side effect. - isnative($PACKAGE); - $deps="$PACKAGE (>= $dh{VERSION})"; + isnative($package); + $deps="$package (>= $dh{VERSION})"; } } if (defined($library) && defined($major) && defined($deps) && @@ -47,21 +125,32 @@ foreach $PACKAGE (@{$dh{DOPACKAGES}}) { my $line="$library $major $deps"; if (! $seen{$line}) { $seen{$line}=1; - complex_doit("echo '$line' >>$TMP/DEBIAN/shlibs"); + complex_doit("echo '$line' >>$tmp/DEBIAN/shlibs"); } } } close FIND; # New as of dh_v3. - if (! Debian::Debhelper::Dh_Lib::compat(2) && - ! $dh{NOSCRIPTS} && $need_ldconfig) { - autoscript($PACKAGE,"postinst","postinst-makeshlibs"); - autoscript($PACKAGE,"postrm","postrm-makeshlibs"); + if (! compat(2) && ! $dh{NOSCRIPTS} && $need_ldconfig) { + autoscript($package,"postinst","postinst-makeshlibs"); + autoscript($package,"postrm","postrm-makeshlibs"); } - if (-e "$TMP/DEBIAN/shlibs") { - doit("chmod",644,"$TMP/DEBIAN/shlibs"); - doit("chown","0.0","$TMP/DEBIAN/shlibs"); + if (-e "$tmp/DEBIAN/shlibs") { + doit("chmod",644,"$tmp/DEBIAN/shlibs"); + doit("chown","0.0","$tmp/DEBIAN/shlibs"); } } + +=head1 SEE ALSO + +L + +This program is a part of debhelper. + +=head1 AUTHOR + +Joey Hess + +=cut