123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- # Copyright (C) 2012-2017 Free Software Foundation, Inc.
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- package Automake::Getopt;
- =head1 NAME
- Automake::Getopt - GCS conforming parser for command line options
- =head1 SYNOPSIS
- use Automake::Getopt;
- =head1 DESCRIPTION
- Export a function C<parse_options>, performing parsing of command
- line options in conformance to the GNU Coding standards.
- =cut
- use 5.006;
- use strict;
- use warnings FATAL => 'all';
- use Exporter ();
- use Getopt::Long ();
- use Automake::ChannelDefs qw/fatal/;
- use Carp qw/croak confess/;
- use vars qw (@ISA @EXPORT);
- @ISA = qw (Exporter);
- @EXPORT= qw/getopt/;
- =item C<parse_options (%option)>
- Wrapper around C<Getopt::Long>, trying to conform to the GNU
- Coding Standards for error messages.
- =cut
- sub parse_options (%)
- {
- my %option = @_;
- Getopt::Long::Configure ("bundling", "pass_through");
- # Unrecognized options are passed through, so GetOption can only fail
- # due to internal errors or misuse of options specification.
- Getopt::Long::GetOptions (%option)
- or confess "error in options specification (likely)";
- if (@ARGV && $ARGV[0] =~ /^-./)
- {
- my %argopts;
- for my $k (keys %option)
- {
- if ($k =~ /(.*)=s$/)
- {
- map { $argopts{(length ($_) == 1)
- ? "-$_" : "--$_" } = 1; } (split (/\|/, $1));
- }
- }
- if ($ARGV[0] eq '--')
- {
- shift @ARGV;
- }
- elsif (exists $argopts{$ARGV[0]})
- {
- fatal ("option '$ARGV[0]' requires an argument\n"
- . "Try '$0 --help' for more information.");
- }
- else
- {
- fatal ("unrecognized option '$ARGV[0]'.\n"
- . "Try '$0 --help' for more information.");
- }
- }
- }
- =back
- =head1 SEE ALSO
- L<Getopt::Long>
- =cut
- 1; # for require
- ### Setup "GNU" style for perl-mode and cperl-mode.
- ## Local Variables:
- ## perl-indent-level: 2
- ## perl-continued-statement-offset: 2
- ## perl-continued-brace-offset: 0
- ## perl-brace-offset: 0
- ## perl-brace-imaginary-offset: 0
- ## perl-label-offset: -2
- ## cperl-indent-level: 2
- ## cperl-brace-offset: 0
- ## cperl-continued-brace-offset: 0
- ## cperl-label-offset: -2
- ## cperl-extra-newline-before-brace: t
- ## cperl-merge-trailing-else: nil
- ## cperl-continued-statement-offset: 2
- ## End:
|