]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_makeshlibs
Updated French man page translation. Closes: #685560
[debhelper.git] / dh_makeshlibs
index 03a54f95420d3d990f39ef14c962863730608f18..66e8b961d2d4658a176c6b097ed606f043a8d8b7 100755 (executable)
@@ -15,11 +15,16 @@ B<dh_makeshlibs> [S<I<debhelper options>>] [B<-m>I<major>] [B<-V>I<[dependencies
 
 =head1 DESCRIPTION
 
-dh_makeshlibs is a debhelper program that automatically scans for shared
+B<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
-V3 mode and above only) to any packages in which it finds shared libraries.
+It also adds a call to ldconfig in the F<postinst> and F<postrm> scripts (in
+v3 mode and above only) to any packages in which it finds shared libraries.
+
+Packages that support multiarch are detected, and
+a Pre-Dependency on multiarch-support is set in ${misc:Pre-Depends} ;
+you should make sure to put that token into an appropriate place in your
+debian/control file for packages supporting multiarch.
 
 =head1 FILES
 
@@ -52,16 +57,16 @@ looked at library filenames rather than using objdump.
 
 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 dependency
+library. It may be necessary for you to add some version dependency
+information to the shlibs file. If B<-V> is specified with no dependency
 information, the current upstream version of the package is plugged into a
-dependency that looks like "packagename (>= packageversion)". Note that in
-debhelper compatibility levels before v4, the debian part of the package
-version number is also included. If -V is specified with parameters, the
+dependency that looks like "I<packagename> B<(E<gt>>= I<packageversion>B<)>". Note that in
+debhelper compatibility levels before v4, the Debian part of the package
+version number is also included. If B<-V> is specified with parameters, the
 parameters can be used to specify the exact dependency information needed
 (be sure to include the package name).
 
-Beware of using -V without any parameters; this is a conservative setting
+Beware of using B<-V> without any parameters; this is a conservative setting
 that always ensures that other packages' shared library dependencies are at
 least as tight as they need to be (unless your library is prone to changing
 ABI without updating the upstream version number), so that if the
@@ -71,21 +76,21 @@ be upgraded.
 
 =item B<-n>, B<--noscripts>
 
-Do not modify postinst/postrm scripts.
+Do not modify F<postinst>/F<postrm> scripts.
 
 =item B<-X>I<item>, B<--exclude=>I<item>
 
-Exclude files that contain "item" anywhere in their filename or directory 
+Exclude files that contain I<item> anywhere in their filename or directory 
 from being treated as shared libraries.
 
 =item B<--add-udeb=>I<udeb>
 
-Create an additional line for udebs in the shlibs file and use "udeb" as the
+Create an additional line for udebs in the shlibs file and use I<udeb> as the
 package name for udebs to depend on instead of the regular library package.
 
 =item B<--> I<params>
 
-Pass "params" to L<dpkg-gensymbols(1)>.
+Pass I<params> to L<dpkg-gensymbols(1)>.
 
 =back
 
@@ -93,19 +98,19 @@ Pass "params" to L<dpkg-gensymbols(1)>.
 
 =over 4
 
-=item dh_makeshlibs
+=item B<dh_makeshlibs>
 
-Assuming this is a package named libfoobar1, generates a shlibs file that
+Assuming this is a package named F<libfoobar1>, generates a shlibs file that
 looks something like:
  libfoobar 1 libfoobar1
 
-=item dh_makeshlibs -V
+=item B<dh_makeshlibs -V>
 
 Assuming the current version of the package is 1.1-3, generates a shlibs
 file that looks something like:
  libfoobar 1 libfoobar1 (>= 1.1)
 
-=item dh_makeshlibs -V 'libfoobar1 (>= 1.0)'
+=item B<dh_makeshlibs -V 'libfoobar1 (E<gt>= 1.0)'>
 
 Generates a shlibs file that looks something like:
   libfoobar 1 libfoobar1 (>= 1.0)
@@ -121,6 +126,9 @@ init(options => {
        "add-udeb=s" => \$dh{SHLIBS_UDEB},
 });
 
+my $objdump=cross_command("objdump");
+my $multiarch=dpkg_architecture_value("DEB_HOST_MULTIARCH");
+
 foreach my $package (@{$dh{DOPACKAGES}}) {
        next if is_udeb($package);
        
@@ -128,31 +136,35 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
 
        my %seen;
        my $need_ldconfig = 0;
+       my $is_multiarch = 0;
 
        doit("rm", "-f", "$tmp/DEBIAN/shlibs");
 
        # 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
+       # match "*.so.*". And we only look at real files not
+       # symlinks, so we don't accidentally 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='';
-       my @udeb_lines;
+       my (@udeb_lines, @lib_files);
        if (defined($dh{EXCLUDE_FIND}) && $dh{EXCLUDE_FIND} ne '') {
                $exclude="! \\( $dh{EXCLUDE_FIND} \\) ";
        }
        open (FIND, "find $tmp -type f \\( -name '*.so' -or -name '*.so.*' \\) $exclude |");
        while (<FIND>) {
                my ($library, $major);
-               my $objdump=`objdump -p $_`;
-               if ($objdump=~m/\s+SONAME\s+(.+)\.so\.(.+)/) {
+               push @lib_files, $_;
+               if (defined $multiarch && $multiarch ne '' && m,/$multiarch/,) {
+                       $is_multiarch=1;
+               }
+               my $ret=`$objdump -p $_`;
+               if ($ret=~m/\s+SONAME\s+(.+)\.so\.(.+)/) {
                        # proper soname format
                        $library=$1;
                        $major=$2;
                }
-               elsif ($objdump=~m/\s+SONAME\s+(.+)-(.+)\.so/) {
+               elsif ($ret=~m/\s+SONAME\s+(.+)-(.+)\.so/) {
                        # idiotic crap soname format
                        $library=$1;
                        $major=$2;
@@ -171,7 +183,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                                $deps=$dh{V_FLAG};
                        }       
                        else {
-                               # Call isnative becuase it sets $dh{VERSION}
+                               # Call isnative because it sets $dh{VERSION}
                                # as a side effect.
                                isnative($package);
                                my $version = $dh{VERSION};
@@ -222,16 +234,25 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        # dpkg-gensymbols files
        my $symbols=pkgfile($package, "symbols");
        if (-e $symbols) {
+               my @liblist;
+               if (! compat(7)) {
+                       @liblist=map { "-e$_" } @lib_files;
+               }
                # -I is used rather than using dpkg-gensymbols
                # own search for symbols files, since that search
                # is not 100% compatible with debhelper. (For example,
                # this supports --ignore being used.)
                doit("dpkg-gensymbols", "-p$package", "-I$symbols",
-                       "-P$tmp", @{$dh{U_PARAMS}});
+                       "-P$tmp",
+                       @liblist,
+                       @{$dh{U_PARAMS}});
                if (-s "$tmp/DEBIAN/symbols" == 0) {
                        doit("rm", "-f", "$tmp/DEBIAN/symbols");
                }
        }
+       if ($is_multiarch) {
+               addsubstvar($package, "misc:Pre-Depends", "multiarch-support");
+       }
 }
 
 =head1 SEE ALSO