From: Stefano Lattarini Date: Sun, 15 Jan 2012 08:54:22 +0000 (+0100) Subject: getopt: remove hack for special handling of "-" argument X-Git-Tag: v2.68b~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3797b86ccbd96c7353254fc0a36611cfdc4379b;p=thirdparty%2Fautoconf.git getopt: remove hack for special handling of "-" argument Older versions of Getopt::Long acted bogusly and died when they where configured with the 'bundling' flag and an argument '-' was seen on the command line they were parsing. That is no longer the case though, and has not been for quite a long time: the bug is no longer present in the 5.6.2 version of perl and the 2.25 version of Getopt::Long (and today, the latest versions of perl and Getopt::Long are respectively 5.14.2 and 2.38). The obsolete workaround for that Getopt::Long bug can thus be removed from our 'getopt' function. It is also worth noting that such a workaround was quite buggy and brittle itself; for example, a command like this: "autom4te --output -" would have caused the incorrect diagnostic: "autom4te: option `--output' requires an argument" Much worse, a command like this: "autom4te --language=autoconf --output - configure.ac" would have caused the standard input of autom4te to be processed and copied into the 'configure.ac' file, deleting its pre-existing content! Surely not what a user would have expected. After this change, a command like this: autom4te --language=autoconf --output - - out works as expected, processing the input from 'configure.ac' and writing it to the 'out' file. * lib/Autom4te/General.pm (use): Require perl version 5.6.2. (getopt): Remove the old workaround. --- diff --git a/ChangeLog b/ChangeLog index 2ab830e9..4adfc589 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,36 @@ +2011-01-15 Stefano Lattarini + + getopt: remove hack for special handling of "-" argument + + Older versions of Getopt::Long acted bogusly and died when they + where configured with the 'bundling' flag and an argument '-' was + seen on the command line they were parsing. That is no longer + the case though, and has not been for quite a long time: the bug + is no longer present in the 5.6.2 version of perl and the 2.25 + version of Getopt::Long (and today, the latest versions of perl + and Getopt::Long are respectively 5.14.2 and 2.38). The obsolete + workaround for that Getopt::Long bug can thus be removed from our + 'getopt' function. + + It is also worth noting that such a workaround was quite buggy + and brittle itself; for example, a command like this: + "autom4te --output -" + would have caused the incorrect diagnostic: + "autom4te: option `--output' requires an argument" + Much worse, a command like this: + "autom4te --language=autoconf --output - configure.ac" + would have caused the standard input of autom4te to be processed + and copied into the 'configure.ac' file, deleting its pre-existing + content! Surely not what a user would have expected. + + After this change, a command like this: + autom4te --language=autoconf --output - - out + works as expected, processing the input from 'configure.ac' and + writing it to the 'out' file. + + * lib/Autom4te/General.pm (use): Require perl version 5.6.2. + (getopt): Remove the old workaround. + 2012-01-15 Jim Meyering avoid new warning about undefined $ARGV[0] diff --git a/lib/Autom4te/General.pm b/lib/Autom4te/General.pm index 2379ce32..e427aa79 100644 --- a/lib/Autom4te/General.pm +++ b/lib/Autom4te/General.pm @@ -32,7 +32,7 @@ used in several executables of the Autoconf and Automake packages. =cut -use 5.005_03; +use 5.006_002; use Exporter; use Autom4te::ChannelDefs; use Autom4te::Channels; @@ -244,16 +244,11 @@ rejecting it as a broken option. # getopt (%OPTION) # ---------------- # Handle the %OPTION, plus all the common options. -# Work around Getopt bugs wrt `-'. sub getopt (%) { my (%option) = @_; use Getopt::Long; - # F*k. Getopt seems bogus and dies when given `-' with `bundling'. - # If fixed some day, use this: '' => sub { push @ARGV, "-" } - my $stdin = grep /^-$/, @ARGV; - @ARGV = grep !/^-$/, @ARGV; %option = ("h|help" => sub { print $help; exit 0 }, "V|version" => sub { print $version; exit 0 }, @@ -297,9 +292,6 @@ sub getopt (%) } } - push @ARGV, '-' - if $stdin; - setup_channel 'note', silent => !$verbose; setup_channel 'verb', silent => !$verbose; }