Hi, On Tue, 07 Mar 2006, Davor Ocelic wrote: > A simple patch to allow this behavior is attached. It adds the -M > option which should be used like say: > > dpkg-buildpackage -M'/usr/local/bin/make -f'
I didn't like this intermediary command. What you really wanted to do is not use "debian/rules" as build command but a custom command that is "/usr/local/bin/make -f debian/rules". On Sun, 26 Aug 2007, Robert Millan wrote: > I'm attaching an updated version of Davor's patch (against 1.14.5). > Note that this allows to do very useful things such as: > dpkg-buildpackage -B -rfakeroot -M"make -j `getconf _NPROCESSORS_ONLN` -f" We have the -j command now, so it's much less useful. Still I have created another patch that implements what I explained above: it offers a -R option to replace "debian/rules" by whatever you want. (the other patches were meant for the old shell version of dpkg-buildpackage anyway) Frank, any comments or is it safe to commit? Cheers, -- Raphaël Hertzog Le best-seller français mis à jour pour Debian Etch : http://www.ouaza.com/livre/admin-debian/
>From 1b77732a7ab316ca7d71f8db62b5079aa5915adc Mon Sep 17 00:00:00 2001 From: Raphael Hertzog <[EMAIL PROTECTED]> 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. --- man/dpkg-buildpackage.1 | 20 +++++++++++++------- scripts/dpkg-buildpackage.pl | 26 +++++++++++++++----------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/man/dpkg-buildpackage.1 b/man/dpkg-buildpackage.1 index 2a84119..e0a16b7 100644 --- a/man/dpkg-buildpackage.1 +++ b/man/dpkg-buildpackage.1 @@ -117,24 +117,30 @@ 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 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 executable as rules file to build the package. +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 a841e3d..2c8911f 100755 --- a/scripts/dpkg-buildpackage.pl +++ b/scripts/dpkg-buildpackage.pl @@ -38,6 +38,7 @@ Usage: %s [<options> ...] Options: -r<gain-root-command> command to gain root privileges (default is fakeroot). + -R<rules> rules file to execute (default is debian/rules). -p<sign-command> -d do not check build dependencies and conflicts. -D check build dependencies and conflicts. @@ -86,7 +87,8 @@ sub testcommand { return $fullcmd && -x $fullcmd; } -my $rootcommand = ''; +my @debian_rules = ("debian/rules"); +my @rootcommand = (); my $signcommand = ''; if ( ( ($ENV{GNUPGHOME} && -e $ENV{GNUPGHOME}) || ($ENV{HOME} && -e "$ENV{HOME}/.gnupg") ) @@ -122,7 +124,7 @@ while (@ARGV) { } elsif (/^-j(\d*)$/) { $parallel = $1 || '-1'; } elsif (/^-r(.*)$/) { - $rootcommand = $1; + @rootcommand = split /\s+/, $1; } elsif (/^-p(.*)$/) { $signcommand = $1; } elsif (/^-k(.*)$/) { @@ -203,23 +205,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]); } } } @@ -354,7 +358,7 @@ if ($checkbuilddep) { } unless ($noclean) { - withecho($rootcommand, 'debian/rules', 'clean'); + withecho(@rootcommand, @debian_rules, 'clean'); } unless ($binaryonly) { chdir('..') or failure('chdir ..'); @@ -365,8 +369,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 )) ) { @@ -451,7 +455,7 @@ if ($signchanges && signfile("$pva.changes")) { } if ($cleansource) { - withecho($rootcommand, 'debian/rules', 'clean'); + withecho(@rootcommand, @debian_rules, 'clean'); } print "$progname: $srcmsg\n"; -- 1.5.3.8