From c2acc4de8e86a9f1ad56c546f16355b796be0c60 Mon Sep 17 00:00:00 2001 From: Raphael Hertzog Date: Sat, 19 Jan 2008 21:53:18 +0100 Subject: [PATCH] dpkg-buildpackage: add a new -R option and allow parameters in -r * scripts/dpkg-buildpackage.pl: Add a new -R option to be able to replace "debian/rules" by something else. The replacement command can contain parameters (and thus spaces). Fix -r option to also accept parameters. * man/dpkg-buildpackage.1: Document the new option and the changed behaviour of -r. --- ChangeLog | 8 ++++++++ debian/changelog | 2 ++ man/dpkg-buildpackage.1 | 22 +++++++++++++++------- scripts/dpkg-buildpackage.pl | 26 +++++++++++++++----------- 4 files changed, 40 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7f225d02..9ee2a7d1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-01-29 Raphael Hertzog + + * scripts/dpkg-buildpackage.pl: Add a new -R option to be able to replace + "debian/rules" by something else. The replacement command can contain + parameters (and thus spaces). Fix -r option to also accept parameters. + * man/dpkg-buildpackage.1: Document the new option and the changed + behaviour of -r. + 2008-01-28 Guillem Jover * getopt: Rename to ... diff --git a/debian/changelog b/debian/changelog index 08528d2a..9e8b77e4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -16,6 +16,8 @@ dpkg (1.14.17) UNRELEASED; urgency=low build-depends/conflicts. Closes: #114774 * Include list of libraries in dpkg-gensymbols' warning about new/lost libraries. + * Add -R option to dpkg-buildpackage so that one can replace the usual + "debian/rules" by something else. Closes: #355654 [ Updated manpages translations ] * German (Helge Kreutzmann). diff --git a/man/dpkg-buildpackage.1 b/man/dpkg-buildpackage.1 index 2a84119e..f12cb07c 100644 --- a/man/dpkg-buildpackage.1 +++ b/man/dpkg-buildpackage.1 @@ -117,24 +117,32 @@ command it executes with if one has been specified. Otherwise, if none has been specified, \fBfakeroot\fP will be used by default, if the command is present. .I gain-root-command -should be the name of a program on the +should start with the name of a program on the .B PATH and will get as arguments the name of the real command to run and the arguments it should take. .I gain-root-command -should not contain spaces or any other shell metacharacters. -.\" what happens, if it contains spaces? (hs) +can include parameters (they must be space-separated) but no shell +metacharacters. .I gain-root-command might typically be .BR fakeroot ", " sudo ", " super " or " really . .B su -is not suitable, since it requires a -.B \-c -option to run a command and even then it can only invoke the user's -shell with +is not suitable, since it can only invoke the user's shell with .B \-c instead of passing arguments individually to the command to be run. .TP +.BI \-R rules-file +Building a Debian package usually involves invoking +.B debian/rules +as a command with several standard parameters. With this option it's +possible to use another program invocation to build the package (it can +include space separated parameters). +Alternatively it can be used to execute the standard rules file with +another make program (for example by using +.B /usr/local/bin/make -f debian/rules +as \fIrules-file\fR). +.TP .BI \-p sign-command When .B dpkg\-buildpackage diff --git a/scripts/dpkg-buildpackage.pl b/scripts/dpkg-buildpackage.pl index ebb9247f..7498d4fe 100755 --- a/scripts/dpkg-buildpackage.pl +++ b/scripts/dpkg-buildpackage.pl @@ -38,6 +38,7 @@ Usage: %s [ ...] Options: -r command to gain root privileges (default is fakeroot). + -R rules file to execute (default is debian/rules). -p -d do not check build dependencies and conflicts. -D check build dependencies and conflicts. @@ -78,7 +79,8 @@ Options: "), $progname; } -my $rootcommand = ''; +my @debian_rules = ("debian/rules"); +my @rootcommand = (); my $signcommand = ''; if ( ( ($ENV{GNUPGHOME} && -e $ENV{GNUPGHOME}) || ($ENV{HOME} && -e "$ENV{HOME}/.gnupg") ) @@ -114,7 +116,7 @@ while (@ARGV) { } elsif (/^-j(\d*)$/) { $parallel = $1 || '-1'; } elsif (/^-r(.*)$/) { - $rootcommand = $1; + @rootcommand = split /\s+/, $1; } elsif (/^-p(.*)$/) { $signcommand = $1; } elsif (/^-k(.*)$/) { @@ -195,23 +197,25 @@ while (@ARGV) { } elsif (/^-E$/) { $warnable_error = 0; push @passopts, '-E'; + } elsif (/^-R(.*)$/) { + @debian_rules = split /\s+/, $1; } else { usageerr(_g("unknown option or argument %s"), $_); } } if ($< == 0) { - warning(_g("using a gain-root-command while being root")) if ($rootcommand); + warning(_g("using a gain-root-command while being root")) if (@rootcommand); } else { - $rootcommand ||= 'fakeroot'; + push @rootcommand, "fakeroot" unless @rootcommand; - if (!testcommand($rootcommand)) { - if ($rootcommand eq 'fakeroot') { + if (!testcommand($rootcommand[0])) { + if ($rootcommand[0] eq 'fakeroot') { error(_g("fakeroot not found, either install the fakeroot\n" . "package, specify a command with the -r option, " . "or run this as root")); } else { - error(_g("gain-root-commmand '%s' not found"), $rootcommand); + error(_g("gain-root-commmand '%s' not found"), $rootcommand[0]); } } } @@ -308,7 +312,7 @@ if ($checkbuilddep) { } unless ($noclean) { - withecho($rootcommand, 'debian/rules', 'clean'); + withecho(@rootcommand, @debian_rules, 'clean'); } unless ($binaryonly) { chdir('..') or failure('chdir ..'); @@ -319,8 +323,8 @@ unless ($binaryonly) { chdir($dir) or failure("chdir $dir"); } unless ($sourceonly) { - withecho('debian/rules', 'build'); - withecho($rootcommand, 'debian/rules', $binarytarget); + withecho(@debian_rules, 'build'); + withecho(@rootcommand, @debian_rules, $binarytarget); } if ($usepause && ($signchanges || ( !$binaryonly && $signsource )) ) { @@ -400,7 +404,7 @@ if ($signchanges && signfile("$pva.changes")) { } if ($cleansource) { - withecho($rootcommand, 'debian/rules', 'clean'); + withecho(@rootcommand, @debian_rules, 'clean'); } print "$progname: $srcmsg\n"; -- 2.39.5