The following commit has been merged in the master branch: commit 349aeaa4f2673678cf09d5a31d4b80db1f534639 Author: Raphael Hertzog <hert...@debian.org> Date: Thu Apr 9 18:07:09 2009 +0200
dpkg-vendor: new script to query various vendor information This tool is meant to be used in debian/rules files to have common source packages across multiple distributions and yet still have slightly different binary packages. To automatically conserve customizations across derivatives of a given distribution, one can use “dpkg-vendor --derives-from vendor” so that all derivatives keep the same customizations when they rebuild the source package even if the current vendor is no more the same. diff --git a/debian/changelog b/debian/changelog index 4038122..604d9f7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -66,6 +66,10 @@ dpkg (1.15.1) UNRELEASED; urgency=low * Fix update-alternatives to not remove real files installed in place of an alternative link when the corresponding alternative is fully removed. Closes: #526538 + * Add a new dpkg-vendor tool to query vendor information stored in + /etc/dpkg/origins. It can be used in debian/rules to enable different + behaviour depending on the current vendor at the time of the build. + Closes: #498380 [ Guillem Jover ] * Fix typo in dpkg output (‘unexecpted’ → ‘unexpected’). Closes: #519082 diff --git a/debian/dpkg-dev.install b/debian/dpkg-dev.install index 229fd3c..628468d 100644 --- a/debian/dpkg-dev.install +++ b/debian/dpkg-dev.install @@ -15,6 +15,7 @@ usr/bin/dpkg-scanpackages usr/bin/dpkg-scansources usr/bin/dpkg-shlibdeps usr/bin/dpkg-source +usr/bin/dpkg-vendor usr/lib/dpkg/parsechangelog usr/share/locale/*/LC_MESSAGES/dpkg-dev.mo usr/share/man/{*/*,*}/822-date.1 @@ -40,4 +41,5 @@ usr/share/man/{*/*,*}/dpkg-scanpackages.1 usr/share/man/{*/*,*}/dpkg-scansources.1 usr/share/man/{*/*,*}/dpkg-shlibdeps.1 usr/share/man/{*/*,*}/dpkg-source.1 +usr/share/man/{*/*,*}/dpkg-vendor.1 usr/share/perl5/Dpkg diff --git a/man/Makefile.am b/man/Makefile.am index cba3101..6c582dc 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -100,6 +100,7 @@ dist_man_MANS = \ dpkg-split.1 \ dpkg-statoverride.8 \ dpkg-trigger.1 \ + dpkg-vendor.1 \ dpkg.1 \ dpkg.cfg.5 \ install-info.8 \ diff --git a/man/dpkg-vendor.1 b/man/dpkg-vendor.1 new file mode 100644 index 0000000..1d7b051 --- /dev/null +++ b/man/dpkg-vendor.1 @@ -0,0 +1,53 @@ +.TH dpkg\-vendor 1 "2009-05-10" "Debian Project" "dpkg suite" +.SH NAME +dpkg\-vendor \- queries information about distribution vendors +. +.SH SYNOPSIS +.B dpkg\-vendor +.RI [ option "...] " command +. +.SH DESCRIPTION +\fBdpkg\-vendor\fP is a tool to query information about vendors listed in +\fB/etc/dpkg/origins\fP. \fB/etc/dpkg/origins/default\fP contains +information about the current vendor. +. +.SH COMMANDS +.TP +.BI \-\-is " vendor" +Exits with 0 if the current vendor is \fIvendor\fP. Otherwise exits +with non-zero. +.TP +.BI \-\-derives\-from " vendor" +Exits with 0 if the current vendor distribution is a derivative of +\fIvendor\fP, otherwise exits with non-zero. It uses the "Parent" field +to browse all ancestors of the current vendor. +.TP +.BI \-\-query " field" +Print on standard output the value of the vendor-specific \fIfield\fP for +the current vendor. +.TP +.B \-\-help +Show the usage message and exit. +.TP +.B \-\-version +Show the version and exit. +. +.SH OPTIONS +.TP +.BI \-\-vendor " vendor" +Assumes the current vendor is \fIvendor\fP instead of discovering it +with the DEB_VENDOR environment variable or +\fB/etc/dpkg/origins/default\fP. +. +.SH ENVIRONMENT +.TP +\fBDEB_VENDOR\fP +This setting defines the current vendor. If not set, il will discover the +current vendor by reading \fB/etc/dpkg/origins/default\fP. +. +.SH AUTHOR +Copyright \(co 2009 Rapha\[:e]l Hertzog +.sp +This is free software; see the GNU General Public Licence version 2 or +later for copying conditions. There is NO WARRANTY. + diff --git a/man/po/po4a.cfg b/man/po/po4a.cfg index 90b0c8f..0e6524f 100644 --- a/man/po/po4a.cfg +++ b/man/po/po4a.cfg @@ -163,6 +163,11 @@ add_$lang:$(srcdir)/po/$lang.add +[type:man] $(srcdir)/dpkg-vendor.1 \ + $lang:$lang/dpkg-vendor.1 \ + add_$lang:$(srcdir)/po/$lang.add + + [type:man] $(srcdir)/dselect.1 \ $lang:$lang/dselect.1 \ add_$lang:$(srcdir)/po/$lang.add diff --git a/scripts/Makefile.am b/scripts/Makefile.am index dae6b44..d96f760 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -19,6 +19,7 @@ bin_SCRIPTS = \ dpkg-shlibdeps \ dpkg-statoverride \ dpkg-source \ + dpkg-vendor \ update-alternatives changelogdir = $(pkglibdir)/parsechangelog @@ -43,6 +44,7 @@ EXTRA_DIST = \ dpkg-source.pl \ dpkg-divert.pl \ dpkg-statoverride.pl \ + dpkg-vendor.pl \ install-info.pl \ update-alternatives.pl \ changelog/debian.pl \ diff --git a/scripts/dpkg-vendor.pl b/scripts/dpkg-vendor.pl new file mode 100755 index 0000000..d4c6d29 --- /dev/null +++ b/scripts/dpkg-vendor.pl @@ -0,0 +1,113 @@ +#!/usr/bin/perl +# +# dpkg-vendor +# +# Copyright © 2009 Raphaël Hertzog <hert...@debian.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +use strict; +use warnings; + +use Dpkg; +use Dpkg::Gettext; +use Dpkg::ErrorHandling; +use Dpkg::Vendor qw(get_vendor_info get_current_vendor); + +textdomain("dpkg-dev"); + +sub version { + printf _g("Debian %s version %s.\n"), $progname, $version; + + printf _g(" +Copyright (C) 2009 Raphael Hertzog <hertz...@debian.org>."); + + printf _g(" +This is free software; see the GNU General Public Licence version 2 or +later for copying conditions. There is NO warranty. +"); +} + +sub usage { + printf _g( +"Usage: %s [<option> ...] [<action>] + +Options: + --vendor <vendor> assume <vendor> is the current vendor + +Actions: + --is <vendor> returns true if current vendor is <vendor>. + --derives-from <vendor> returns true if current vendor derives from <vendor>. + --query <field> print the content of the vendor-specific field. + --help show this help message. + --version show the version. +"), $progname; +} + +my ($vendor, $param, $action); + +while (@ARGV) { + $_ = shift(@ARGV); + if (m/^--vendor$/) { + $vendor = shift(@ARGV); + } elsif (m/^--(is|derives-from|query)$/) { + badusage(_g("two commands specified: --%s and --%s"), $1, $action) + if defined($action); + $action = $1; + $param = shift(@ARGV); + } elsif (m/^-(h|-help)$/) { + usage(); + exit 0; + } elsif (m/^--version$/) { + version(); + exit 0; + } else { + usageerr(_g("unknown option \`%s'"), $_); + } +} + +# Uses $ENV{DEB_VENDOR} if set +$vendor = get_current_vendor() unless defined($vendor); + +my $info = get_vendor_info($vendor); +unless (defined($info)) { + error(_g("vendor %s doesn't exist in /etc/dpkg/origins/"), + $vendor || "default"); +} + +if ($action eq 'is') { + + exit(0) if lc($param) eq lc($info->{'Vendor'}); + exit(1); + +} elsif ($action eq 'derives-from') { + + exit(0) if lc($param) eq lc($info->{'Vendor'}); + while (defined($info) && exists $info->{'Parent'}) { + $info = get_vendor_info($info->{'Parent'}); + exit(0) if lc($param) eq lc($info->{'Vendor'}); + } + exit(1); + +} elsif ($action eq 'query') { + + if (exists $info->{$param}) { + print $info->{$param} . "\n"; + exit(0); + } else { + exit(1); + } + +} -- dpkg's main repository -- To UNSUBSCRIBE, email to debian-dpkg-cvs-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org