autoconf-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] getopt: fix diagnostic for missing mandatory option argument


From: Stefano Lattarini
Subject: Re: [PATCH] getopt: fix diagnostic for missing mandatory option argument
Date: Sun, 15 Jan 2012 10:14:05 +0100

On 01/15/2012 09:35 AM, Stefano Lattarini wrote:
> On 01/15/2012 09:18 AM, Stefano Lattarini wrote:
>> On 01/15/2012 06:59 AM, Paul Eggert wrote:
>>> Thanks, that patch looks good to me; please install.
>>>
>> Done.
>>
> And introduced a new bug in doing so, sigh.  The attached patch
> should fix it.  OK to apply?
> 

And as a follow-up, another nice simplification which also offer some
bug fixes for free.  OK to apply?

Thanks,
  Stefano

-*-*-

From: Stefano Lattarini <address@hidden>
Date: Sun, 15 Jan 2012 09:54:22 +0100
Subject: [PATCH] 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.  This is not the case
today anymore though, and has not been for quite a long time: the
bug is no more 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 - - <configure.ac >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.
---
 ChangeLog               |   33 +++++++++++++++++++++++++++++++++
 lib/Autom4te/General.pm |   10 +---------
 2 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b5af5bb..0832b8a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,38 @@
 2011-01-15  Stefano Lattarini  <address@hidden>

+       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.  This is not the case
+       today anymore though, and has not been for quite a long time: the
+       bug is no more 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 - - <configure.ac >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.
+
+2011-01-15  Stefano Lattarini  <address@hidden>
+
        getopt: avoid perl warning upon incorrect command line usages
        After the previous change 'v2.68-113-g5bc3e85', incorrect
        command line usages (like autom4te being called without any
diff --git a/lib/Autom4te/General.pm b/lib/Autom4te/General.pm
index 1be4f90..3355a49 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;
 }
-- 
1.7.7.3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]