]> err.no Git - dpkg/commitdiff
dpkg-buildpackage: add a new -R option and allow parameters in -r
authorRaphael Hertzog <hertzog@debian.org>
Sat, 19 Jan 2008 20:53:18 +0000 (21:53 +0100)
committerRaphael Hertzog <hertzog@debian.org>
Tue, 29 Jan 2008 21:54:52 +0000 (22:54 +0100)
* 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
debian/changelog
man/dpkg-buildpackage.1
scripts/dpkg-buildpackage.pl

index 7f225d02e6488b04fb727791199561aad2c95c82..9ee2a7d1ffb45713ec15da32072ae04a460f7ace 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-01-29  Raphael Hertzog  <hertzog@debian.org>
+
+       * 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  <guillem@debian.org>
 
        * getopt: Rename to ...
index 08528d2ad813692ec0a3cd82f15ebbbf6b89c34f..9e8b77e41c348b02eb6eb883c349452d4a3455df 100644 (file)
@@ -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).
index 2a84119e7bdc6a61e41e2a1e8f53c739eb479dbb..f12cb07c57bd0809f4ea13558f823915d64fca3f 100644 (file)
@@ -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
index ebb9247fd3197acf3a8e1d511270ae2a24c68f55..7498d4fed59cd1a6741ce3cf3238e583fe280b2b 100755 (executable)
@@ -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.
@@ -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";