]> git.donarmstrong.com Git - debhelper.git/blobdiff - Debian/Debhelper/Dh_Getopt.pm
makefile: Support the (asking for trouble) case of MAKE being set to something with...
[debhelper.git] / Debian / Debhelper / Dh_Getopt.pm
index bddc06b8102bd3aaf63e43cb7f0dee9e581c3451..edb3be764edf114493efd5f15a213fdcc0b73838 100644 (file)
@@ -28,17 +28,14 @@ sub AddPackage { my($option,$value)=@_;
                push @{$dh{DOPACKAGES}}, getpackages('indep');
                $dh{DOINDEP}=1;
        }
-       elsif ($option eq 'a' or $option eq 'arch') {
+       elsif ($option eq 'a' or $option eq 'arch' or
+              $option eq 's' or $option eq 'same-arch') {
                push @{$dh{DOPACKAGES}}, getpackages('arch');
                $dh{DOARCH}=1;
        }
        elsif ($option eq 'p' or $option eq 'package') {
                push @{$dh{DOPACKAGES}}, $value;
        }
-       elsif ($option eq 's' or $option eq 'same-arch') {
-               push @{$dh{DOPACKAGES}}, getpackages('same');
-               $dh{DOSAME}=1;
-       }
        else {
                error("bad option $option - should never happen!\n");
        }
@@ -71,9 +68,15 @@ sub NonOption {
 
 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},
 
@@ -121,10 +124,6 @@ sub getoptions {
                "A" => \$dh{PARAMS_ALL},
                "all" => \$dh{PARAMS_ALL},
        
-               "sourcedir=s" => \$dh{SOURCEDIR},
-               
-               "destdir=s" => \$dh{DESTDIR},
-               
                "priority=s" => \$dh{PRIORITY},
                
                "h|help" => \&showhelp,
@@ -137,47 +136,37 @@ 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);
+       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});
-               my $ret=getoptions(\@ARGV_extra, $options);
-               if (!$ret) {
-                       warning("warning: unknown options will be a fatal error in a future debhelper release");
-                       #error("unknown option; aborting");
-               }
+               @ARGV_extra=split(/\x1e/, $ENV{DH_INTERNAL_OPTIONS});
+               getoptions(\@ARGV_extra, $options);
 
                # Avoid forcing acting on packages specified in
                # DH_INTERNAL_OPTIONS. This way, -p can be specified
@@ -194,7 +183,6 @@ sub parseopts {
                delete $dh{DOPACKAGES};
                delete $dh{DOINDEP};
                delete $dh{DOARCH};
-               delete $dh{DOSAME};
        }
        
        # DH_OPTIONS can contain additional options
@@ -208,15 +196,6 @@ sub parseopts {
                }
        }
 
-       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");
@@ -233,7 +212,7 @@ sub parseopts {
        # want us to act on them all. Note we have to do this before excluding
        # packages out, below.
        if (! defined $dh{DOPACKAGES} || ! @{$dh{DOPACKAGES}}) {
-               if ($dh{DOINDEP} || $dh{DOARCH} || $dh{DOSAME}) {
+               if ($dh{DOINDEP} || $dh{DOARCH}) {
                        # User specified that all arch (in)dep package be
                        # built, and there are none of that type.
                        warning("You asked that all arch in(dep) packages be built, but there are none of that type.");