summaryrefslogtreecommitdiffstats
path: root/scripts/dpkg-vendor.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/dpkg-vendor.pl')
-rwxr-xr-xscripts/dpkg-vendor.pl108
1 files changed, 108 insertions, 0 deletions
diff --git a/scripts/dpkg-vendor.pl b/scripts/dpkg-vendor.pl
new file mode 100755
index 0000000..a3887ec
--- /dev/null
+++ b/scripts/dpkg-vendor.pl
@@ -0,0 +1,108 @@
+#!/usr/bin/perl
+#
+# dpkg-vendor
+#
+# Copyright © 2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2009,2012 Guillem Jover <guillem@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, see <https://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+use Dpkg ();
+use Dpkg::Gettext;
+use Dpkg::ErrorHandling;
+use Dpkg::Vendor qw(get_vendor_dir get_vendor_info get_current_vendor);
+
+textdomain('dpkg-dev');
+
+sub version {
+ printf g_("Debian %s version %s.\n"), $Dpkg::PROGNAME, $Dpkg::PROGVERSION;
+
+ printf g_('
+This is free software; see the GNU General Public License version 2 or
+later for copying conditions. There is NO warranty.
+');
+}
+
+sub usage {
+ printf g_(
+'Usage: %s [<option>...] [<command>]')
+ . "\n\n" . g_(
+'Commands:
+ --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.')
+ . "\n\n" . g_(
+'Options:
+ --vendor <vendor> assume <vendor> is the current vendor.')
+ . "\n", $Dpkg::PROGNAME;
+}
+
+my ($vendor, $param, $action);
+
+while (@ARGV) {
+ $_ = shift(@ARGV);
+ if (m/^--vendor$/) {
+ $vendor = shift(@ARGV);
+ usageerr(g_('%s needs a parameter'), $_) unless defined $vendor;
+ } elsif (m/^--(is|derives-from|query)$/) {
+ usageerr(g_('two commands specified: --%s and --%s'), $1, $action)
+ if defined($action);
+ $action = $1;
+ $param = shift(@ARGV);
+ usageerr(g_('%s needs a parameter'), $_) unless defined $param;
+ } elsif (m/^-(?:\?|-help)$/) {
+ usage();
+ exit 0;
+ } elsif (m/^--version$/) {
+ version();
+ exit 0;
+ } else {
+ usageerr(g_("unknown option '%s'"), $_);
+ }
+}
+
+usageerr(g_('need an action option')) unless defined($action);
+
+# Uses $ENV{DEB_VENDOR} if set
+$vendor //= get_current_vendor();
+
+my $info = get_vendor_info($vendor);
+unless (defined($info)) {
+ error(g_("vendor %s doesn't exist in %s"), $vendor || 'default',
+ get_vendor_dir());
+}
+
+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);
+ }
+}