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

