# Copyright (C) 2012-2013 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:
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
ChannelDefs.pm | File | 10.98 KB | 0644 |
|
Channels.pm | File | 20.46 KB | 0644 |
|
Condition.pm | File | 15.29 KB | 0644 |
|
Config.pm | File | 1.76 KB | 0644 |
|
Configure_ac.pm | File | 3.38 KB | 0644 |
|
DisjConditions.pm | File | 14.44 KB | 0644 |
|
FileUtils.pm | File | 9.36 KB | 0644 |
|
General.pm | File | 2.14 KB | 0644 |
|
Getopt.pm | File | 2.71 KB | 0644 |
|
Item.pm | File | 4.5 KB | 0644 |
|
ItemDef.pm | File | 2.4 KB | 0644 |
|
Location.pm | File | 5.84 KB | 0644 |
|
Options.pm | File | 11.03 KB | 0644 |
|
Rule.pm | File | 24.06 KB | 0644 |
|
RuleDef.pm | File | 2.7 KB | 0644 |
|
VarDef.pm | File | 8.83 KB | 0644 |
|
Variable.pm | File | 45.21 KB | 0644 |
|
Version.pm | File | 4.25 KB | 0644 |
|
Wrap.pm | File | 4.12 KB | 0644 |
|
XFile.pm | File | 7.76 KB | 0644 |
|