This is an automated email from the git hooks/post-receive script.

guillem pushed a commit to branch main
in repository dpkg.

View the commit online:
https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=09ae886184684990ec59ed01e66212cb7e41342a

commit 09ae886184684990ec59ed01e66212cb7e41342a
Author: Guillem Jover <[email protected]>
AuthorDate: Mon Feb 26 02:12:30 2024 +0100

    dpkg-shlibdeps: Add support for new --package option
    
    This option takes care of changing some of the defaults based on the
    information from the debian/control file.
    
    We select whether to use the Pre-Depends or Depends field as the default
    on whether the package is Essential:yes. We select the package type from
    the Package-Type field. And add the package to the set of packages
    excluded by -x.
---
 man/dpkg-shlibdeps.pod    | 15 +++++++++++++++
 scripts/dpkg-shlibdeps.pl | 32 ++++++++++++++++++++++++++++++--
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/man/dpkg-shlibdeps.pod b/man/dpkg-shlibdeps.pod
index 5602010bd..2e83808dc 100644
--- a/man/dpkg-shlibdeps.pod
+++ b/man/dpkg-shlibdeps.pod
@@ -225,6 +225,21 @@ B<dpkg-shlibdeps>
 will automatically remove the dependency from all fields except the
 one representing the most important dependencies.
 
+=item B<--package=>I<package>
+
+Define the package name.
+
+When specified,
+the package name will be used to change defaults based on the
+binary package metadata in F<debian/control>.
+
+If the package is B<Essential: yes>,
+then the default dependency field is B<Pre-Depends>, otherwise B<Depends>.
+The default package type is set from the B<Package-Type> field.
+The package is added to the set of packages excluded by B<-x>.
+
+Option supported since dpkg 1.22.7.
+
 =item B<-p>I<varname-prefix>
 
 Start substitution variables with
diff --git a/scripts/dpkg-shlibdeps.pl b/scripts/dpkg-shlibdeps.pl
index 03f6d21d9..d482a98b2 100755
--- a/scripts/dpkg-shlibdeps.pl
+++ b/scripts/dpkg-shlibdeps.pl
@@ -42,6 +42,7 @@ use Dpkg::Shlibs::SymbolFile;
 use Dpkg::Substvars;
 use Dpkg::Arch qw(get_host_arch);
 use Dpkg::BuildAPI qw(get_build_api);
+use Dpkg::Package;
 use Dpkg::Deps;
 use Dpkg::Control::Info;
 use Dpkg::Control::Fields;
@@ -60,10 +61,11 @@ my $i = 0; my %depstrength = map { $_ => $i++ } @depfields;
 textdomain('dpkg-dev');
 
 my $admindir = $Dpkg::ADMINDIR;
+my $oppackage;
 my $shlibsoverride = "$Dpkg::CONFDIR/shlibs.override";
 my $shlibsdefault = "$Dpkg::CONFDIR/shlibs.default";
 my $shlibslocal = 'debian/shlibs.local';
-my $packagetype = 'deb';
+my $packagetype;
 my $dependencyfield;
 my $varlistfile = 'debian/substvars';
 my $varlistfilenew;
@@ -120,6 +122,13 @@ foreach (@ARGV) {
        $ignore_missing_info = 1;
     } elsif (m/^--warnings=(\d+)$/) {
        $warnings = $1;
+    } elsif (m/^--package=(.+)$/) {
+        $oppackage = $1;
+        my $err = pkg_name_is_illegal($oppackage);
+        error(g_("illegal package name '%s': %s"), $oppackage, $err) if $err;
+
+        # Exclude self.
+        push @exclude, $1;
     } elsif (m/^-t(.*)$/) {
        $packagetype = $1;
     } elsif (m/^-v$/) {
@@ -152,7 +161,25 @@ my $control = Dpkg::Control::Info->new();
 # Initialize build API level.
 get_build_api($control);
 
-my $default_depfield = 'Depends';
+my $default_depfield;
+
+if (defined $oppackage) {
+    my $pkg = $control->get_pkg_by_name($oppackage);
+    if (not defined $pkg) {
+        error(g_('package %s not in control info'), $oppackage);
+    }
+
+    $packagetype //= $pkg->{'Package-Type'} ||
+                     $pkg->get_custom_field('Package-Type');
+
+    # For essential packages we default to Pre-Depends.
+    if (defined $pkg->{Essential} && $pkg->{Essential} eq 'yes') {
+        $default_depfield = 'Pre-Depends';
+    }
+}
+
+$packagetype //= 'deb';
+$default_depfield //= 'Depends';
 
 my %exec;
 foreach my $exec_item (@execs) {
@@ -615,6 +642,7 @@ sub usage {
   -d<dependency-field>     next executable(s) set shlibs:<dependency-field>.")
     . "\n\n" . g_(
 "Options:
+  --package=<package>      generate substvars for <package> (default is unset).
   -l<library-dir>          add directory to private shared library search list.
   -p<varname-prefix>       set <varname-prefix>:* instead of shlibs:*.
   -O[<file>]               write variable settings to stdout (or <file>).

-- 
Dpkg.Org's dpkg

Reply via email to