Go back to requiring only Perl 5.6+ for users
[autoconf.git] / lib / Autom4te / Getopt.pm
blob6ad3dad00e814e0f44b004bf98bfe17936095cbe
1 # Copyright (C) 2012-2023 Free Software Foundation, Inc.
3 # This program is free software: you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation, either version 3 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program. If not, see <https://www.gnu.org/licenses/>.
16 package Autom4te::Getopt;
18 =head1 NAME
20 Autom4te::Getopt - GCS conforming parser for command line options
22 =head1 SYNOPSIS
24 use Autom4te::Getopt;
26 =head1 DESCRIPTION
28 Export a function C<parse_options>, performing parsing of command
29 line options in conformance to the GNU Coding standards.
31 =cut
33 use 5.006;
34 use strict;
35 use warnings FATAL => 'all';
37 use Carp qw (confess croak);
38 use Exporter ();
39 use Getopt::Long ();
41 use Autom4te::ChannelDefs qw (fatal);
43 our @ISA = qw (Exporter);
44 our @EXPORT = qw (getopt);
46 =item C<parse_options (%option)>
48 Wrapper around C<Getopt::Long>, trying to conform to the GNU
49 Coding Standards for error messages.
51 =cut
53 sub parse_options (%)
55 my %option = @_;
57 Getopt::Long::Configure ("bundling", "pass_through");
58 # Unrecognized options are passed through, so GetOption can only fail
59 # due to internal errors or misuse of options specification.
60 Getopt::Long::GetOptions (%option)
61 or confess "error in options specification (likely)";
63 if (@ARGV && $ARGV[0] =~ /^-./)
65 my %argopts;
66 for my $k (keys %option)
68 if ($k =~ /(.*)=s$/)
70 map { $argopts{(length ($_) == 1)
71 ? "-$_" : "--$_" } = 1; } (split (/\|/, $1));
74 if ($ARGV[0] eq '--')
76 shift @ARGV;
78 elsif (exists $argopts{$ARGV[0]})
80 fatal ("option '$ARGV[0]' requires an argument\n"
81 . "Try '$0 --help' for more information.");
83 else
85 fatal ("unrecognized option '$ARGV[0]'.\n"
86 . "Try '$0 --help' for more information.");
91 =back
93 =head1 SEE ALSO
95 L<Getopt::Long>
97 =cut
99 1; # for require