sub getoptions {
my $array=shift;
- my $extraoptions=shift;
+ my %options=%{shift()} if ref $_[0];
+
+ my $oldwarn;
+ if ($ENV{DH_IGNORE_UNKNOWN_OPTIONS}) {
+ $oldwarn=$SIG{__WARN__};
+ $SIG{__WARN__}=sub {};
+ }
- my %options=(
+ my $ret=Getopt::Long::GetOptionsFromArray($array,
"v" => \$dh{VERBOSE},
"verbose" => \$dh{VERBOSE},
"A" => \$dh{PARAMS_ALL},
"all" => \$dh{PARAMS_ALL},
- "sourcedir=s" => \$dh{SOURCEDIR},
-
- "destdir=s" => \$dh{DESTDIR},
-
"priority=s" => \$dh{PRIORITY},
"h|help" => \&showhelp,
"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);
+ if ($ENV{DH_IGNORE_UNKNOWN_OPTIONS}) {
+ $SIG{__WARN__}=$oldwarn;
+ return 1;
+ }
+ else {
+ return $ret;
+ }
}
sub split_options_string {
my $str=shift;
-
$str=~s/^\s+//;
- return map { $_=~s/\\(\s)/$1/g; $_=~s/\s+$//g; $_ } split(/(?<!\\)\s+/,$str);
+ return 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}) {
- @ARGV_extra=split_options_string($ENV{DH_INTERNAL_OPTIONS});
- # Unknown options will be silently ignored.
- my $oldwarn=$SIG{__WARN__};
- $SIG{__WARN__}=sub {};
+ @ARGV_extra=split(/\x1e/, $ENV{DH_INTERNAL_OPTIONS});
getoptions(\@ARGV_extra, $options);
- $SIG{__WARN__}=$oldwarn;
# Avoid forcing acting on packages specified in
# DH_INTERNAL_OPTIONS. This way, -p can be specified
}
}
- 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");