#!/usr/bin/perl -w =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 my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); my %seen; my $need_ldconfig = 0; doit("rm", "-f", "$tmp/DEBIAN/shlibs"); 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$#) { $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"); } my $deps=$package; if ($dh{V_FLAG_SET}) { if ($dh{V_FLAG} ne '') { $deps=$dh{V_FLAG}; } else { # Call isnative becuase it sets $dh{VERSION} # as a side effect. isnative($package); $deps="$package (>= $dh{VERSION})"; } } if (defined($library) && defined($major) && defined($deps) && $library ne '' && $major ne '' && $deps ne '') { # Prevent duplicate lines from entering the file. my $line="$library $major $deps"; if (! $seen{$line}) { $seen{$line}=1; complex_doit("echo '$line' >>$tmp/DEBIAN/shlibs"); } } } close FIND; # New as of dh_v3. 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"); } } =head1 SEE ALSO L This program is a part of debhelper. =head1 AUTHOR Joey Hess =cut