summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2010-01-04 18:41:51 -0500
committerJoey Hess <joey@gnu.kitenet.net>2010-01-04 19:00:49 -0500
commit02bf22b2c4c695fd959f11c0d6a803795e014c2e (patch)
tree826d990cda08018db2c6cab9f62bc51b520a1952
parent09d21e9f004aabe6a409c981c8d11e7cb4c2051f (diff)
solve the dh -Bbuild problem
* Add -O option, which can be used to pass options to commands, ignoring options that they do not support. * dh: Use -O to pass user-specified options to the commands it runs. This solves the problem with passing "-Bbuild" to dh, where commands that do not support -B would see a bogus -u option. Closes: #541773 (It also ensures that the commands dh prints out can really be run.)
-rw-r--r--Debian/Debhelper/Dh_Getopt.pm42
-rw-r--r--debhelper.pod7
-rw-r--r--debian/changelog6
-rwxr-xr-xdh20
4 files changed, 55 insertions, 20 deletions
diff --git a/Debian/Debhelper/Dh_Getopt.pm b/Debian/Debhelper/Dh_Getopt.pm
index 0d021072..4df3eed2 100644
--- a/Debian/Debhelper/Dh_Getopt.pm
+++ b/Debian/Debhelper/Dh_Getopt.pm
@@ -69,15 +69,8 @@ sub NonOption {
sub getoptions {
my $array=shift;
my %params=@_;
- my %options=%{$params{options}} if ref $params{options};
-
- my $oldwarn;
- if ($params{ignore_unknown_options}) {
- $oldwarn=$SIG{__WARN__};
- $SIG{__WARN__}=sub {};
- }
- my $ret=Getopt::Long::GetOptionsFromArray($array,
+ my %options=(
"v" => \$dh{VERBOSE},
"verbose" => \$dh{VERBOSE},
@@ -137,18 +130,37 @@ sub getoptions {
"ignore=s" => \&AddIgnore,
- %options,
+ "O=s" => sub { my($option,$value)=@_;
+ # Try to parse an option, but ignore it
+ # if it is not known.
+ if (getoptions([$value], %params, test => 1)) {
+ getoptions([$value], %params);
+ }
+ },
+
+ (ref $params{options} ? %{$params{options}} : ()) ,
"<>" => \&NonOption,
);
- if ($params{ignore_unknown_options}) {
- $SIG{__WARN__}=$oldwarn;
- return 1;
+ if ($params{test}) {
+ foreach my $key (keys %options) {
+ $options{$key}=sub {};
+ }
}
- else {
- return $ret;
+
+ my $oldwarn;
+ if ($params{test} || $params{ignore_unknown_options}) {
+ $oldwarn=$SIG{__WARN__};
+ $SIG{__WARN__}=sub {};
+ }
+ my $ret=Getopt::Long::GetOptionsFromArray($array, %options);
+ if ($oldwarn) {
+ $SIG{__WARN__}=$oldwarn;
}
+
+ return 1 if $params{ignore_unknown_options};
+ return $ret;
}
sub split_options_string {
@@ -171,7 +183,7 @@ sub parseopts {
# Avoid forcing acting on packages specified in
# DH_INTERNAL_OPTIONS. This way, -p can be specified
- # at the command line to act on a specific package, and if
+ # at the command line to act on a specific package, but when
# nothing is specified, the excludes will cause the set of
# packages DH_INTERNAL_OPTIONS specifies to be acted on.
if (defined $dh{DOPACKAGES}) {
diff --git a/debhelper.pod b/debhelper.pod
index a4765bab..03d0f90b 100644
--- a/debhelper.pod
+++ b/debhelper.pod
@@ -156,6 +156,13 @@ This little-used option changes the package which debhelper considers the
one for which debian/foo files can be used instead of the usual
debian/package.foo files.
+=item B<-O=>I<option|bundle>
+
+This is used by L<dh(1)> when passing user-specified options to all the
+commands it runs. If the command supports the specified option or option
+bundle, it will take effect. If the command does not support the option (or
+any part of an option bundle), it will be ignored.
+
=back
=head1 COMMON DEBHELPER OPTIONS
diff --git a/debian/changelog b/debian/changelog
index a3f1fbcf..a7aa1dc1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,12 @@ debhelper (7.4.12) UNRELEASED; urgency=low
* makefile: Support the (asking for trouble) case of MAKE being set to
something with a space in it. Closes: #563557
* Fix warning about unknown options passed to commands in override targets.
+ * Add -O option, which can be used to pass options to commands, ignoring
+ options that they do not support.
+ * dh: Use -O to pass user-specified options to the commands it runs.
+ This solves the problem with passing "-Bbuild" to dh, where commands
+ that do not support -B would see a bogus -u option. Closes: #541773
+ (It also ensures that the commands dh prints out can really be run.)
-- Joey Hess <joeyh@debian.org> Fri, 01 Jan 2010 13:00:22 -0500
diff --git a/dh b/dh
index 96a6b84a..9fb209ad 100755
--- a/dh
+++ b/dh
@@ -175,7 +175,7 @@ default. This is how to use dh_pycentral instead.
#!/usr/bin/make -f
%:
- dh --with python-central $@
+ dh $@ --with python-central
Here is how to force use of perl's Module::Build build system,
which can be necessary if debhelper wrongly detects that the package
@@ -183,14 +183,14 @@ uses MakeMaker.
#!/usr/bin/make -f
%:
- dh --buildsystem=perl_build $@
+ dh $@ --buildsystem=perl_build
To patch your package using quilt, you can tell dh to use quilt's dh
sequence addons like this:
#!/usr/bin/make -f
%:
- dh --with quilt $@
+ dh $@ --with quilt
Here is an example of overriding where the dh_auto_* commands find
the package's source, for a package where the source is located in a
@@ -198,7 +198,7 @@ subdirectory.
#!/usr/bin/make -f
%:
- dh --sourcedirectory=src $@
+ dh $@ --sourcedirectory=src
Finally, here is a way to prevent dh from running several commands
that you don't want it to run, by defining empty override targets for each
@@ -459,7 +459,17 @@ while (@ARGV_orig) {
elsif ($opt =~ /^--?(no-act|remaining|(after|until|before|with|without)=)/) {
next;
}
- push @options, $opt;
+ elsif ($opt=~/^-/) {
+ push @options, "-O".$opt;
+ }
+ elsif (@options) {
+ if ($options[$#options]=~/^-O--/) {
+ $options[$#options].="=".$opt;
+ }
+ else {
+ $options[$#options].=$opt;
+ }
+ }
}
# Figure out at what point in the sequence to start for each package.