diff options
author | Modestas Vainius <modestas@vainius.eu> | 2009-06-08 21:32:27 +0300 |
---|---|---|
committer | Modestas Vainius <modestas@vainius.eu> | 2009-06-08 23:01:02 +0300 |
commit | f897611a77726655aea258af0c4d52a8ce759ebc (patch) | |
tree | 7e89d87f0a98706d4b7864eb571d341e1ade7542 /Debian/Debhelper/Dh_Getopt.pm | |
parent | 9c95d2ea547f3566f1bf8b67c08da57845325341 (diff) |
Improvements in DH_OPTIONS handling and DH_AUTO_OPTIONS envvar support.
* DH_AUTO_OPTIONS is like existing DH_OPTIONS, just only for dh_auto
stuff. This also avoids "explosion" of separate DH_AUTO_* environment
variables (i.e. exports in debian/rules) and encourages usage of dh_auto
command line option names. DH_AUTO_OPTIONS is passed via "extra_args" to
Dh_Lib::init() (API addition).
* When splitting options from DH_OPTIONS and its flavours, allow arguments
to include whitespaces if they are escaped with backslash (\) (see
split_options_string()). Document this in debhelper.pod.
* Short option for --buildsystem is -c (aka class).
* Provide API to cancel option specs from default debhelper options.
It will be used in the feature.
Diffstat (limited to 'Debian/Debhelper/Dh_Getopt.pm')
-rw-r--r-- | Debian/Debhelper/Dh_Getopt.pm | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/Debian/Debhelper/Dh_Getopt.pm b/Debian/Debhelper/Dh_Getopt.pm index 5585a54c..bddc06b8 100644 --- a/Debian/Debhelper/Dh_Getopt.pm +++ b/Debian/Debhelper/Dh_Getopt.pm @@ -71,9 +71,9 @@ sub NonOption { sub getoptions { my $array=shift; - my %options=%{shift()} if ref $_[0]; + my $extraoptions=shift; - Getopt::Long::GetOptionsFromArray($array, + my %options=( "v" => \$dh{VERBOSE}, "verbose" => \$dh{VERBOSE}, @@ -137,24 +137,42 @@ sub getoptions { "ignore=s" => \&AddIgnore, - %options, - "<>" => \&NonOption, - ) + ); + + # Merge extra options and cancel default ones as needed (undef) + if (defined $extraoptions) { + for my $opt (keys %$extraoptions) { + if (defined $extraoptions->{$opt}) { + $options{$opt}=$extraoptions->{$opt}; + } + else { + delete $options{$opt}; + } + } + } + + Getopt::Long::GetOptionsFromArray($array, %options); +} + +sub split_options_string { + my $str=shift; + + $str=~s/^\s+//; + return map { $_=~s/\\(\s)/$1/g; $_=~s/\s+$//g; $_ } split(/(?<!\\)\s+/,$str); } # Parse options and set %dh values. sub parseopts { my $options=shift; + my $extra_args=shift; my @ARGV_extra; # DH_INTERNAL_OPTIONS is used to pass additional options from # dh through an override target to a command. if (defined $ENV{DH_INTERNAL_OPTIONS}) { - $ENV{DH_INTERNAL_OPTIONS}=~s/^\s+//; - $ENV{DH_INTERNAL_OPTIONS}=~s/\s+$//; - @ARGV_extra=split(/\s+/,$ENV{DH_INTERNAL_OPTIONS}); + @ARGV_extra=split_options_string($ENV{DH_INTERNAL_OPTIONS}); my $ret=getoptions(\@ARGV_extra, $options); if (!$ret) { warning("warning: unknown options will be a fatal error in a future debhelper release"); @@ -183,15 +201,22 @@ sub parseopts { # to be parsed like @ARGV, but with unknown options # skipped. if (defined $ENV{DH_OPTIONS}) { - $ENV{DH_OPTIONS}=~s/^\s+//; - $ENV{DH_OPTIONS}=~s/\s+$//; - @ARGV_extra=split(/\s+/,$ENV{DH_OPTIONS}); + @ARGV_extra=split_options_string($ENV{DH_OPTIONS}); my $ret=getoptions(\@ARGV_extra, $options); if (!$ret) { warning("warning: ignored unknown options in DH_OPTIONS"); } } + if (defined $extra_args) { + my @extra_opts=split_options_string($extra_args); + my $ret=getoptions(\@extra_opts, $options); + if (!$ret) { + warning("warning: ignored unknown options"); + } + push @ARGV_extra, @extra_opts; + } + my $ret=getoptions(\@ARGV, $options); if (!$ret) { warning("warning: unknown options will be a fatal error in a future debhelper release"); |