diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | bin/autoconf.as | 208 | ||||
-rw-r--r-- | bin/autoconf.in | 213 | ||||
-rw-r--r-- | bin/local.mk | 21 | ||||
-rw-r--r-- | build-aux/help-extract.pl | 49 | ||||
-rwxr-xr-x | man/autoconf.w | 2 | ||||
-rw-r--r-- | man/local.mk | 2 | ||||
-rw-r--r-- | tests/tools.at | 2 |
8 files changed, 224 insertions, 274 deletions
@@ -43,7 +43,6 @@ Makefile.in /autom4te.cache /bin/autoheader /bin/autoconf -/bin/autoconf.in /bin/autom4te /bin/autoreconf /bin/autoscan diff --git a/bin/autoconf.as b/bin/autoconf.as deleted file mode 100644 index 1407739d..00000000 --- a/bin/autoconf.as +++ /dev/null @@ -1,208 +0,0 @@ -AS_INIT[]dnl -*- shell-script -*- -m4_divert_push([HEADER-COPYRIGHT])dnl -# @configure_input@ -# autoconf -- create 'configure' using m4 macros. - -# Copyright (C) 1992-1994, 1996, 1999-2017, 2020-2021 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 <https://www.gnu.org/licenses/>. - -m4_divert_pop([HEADER-COPYRIGHT])dnl back to BODY -AS_ME_PREPARE[]dnl - -help=["\ -Usage: $0 [OPTION]... [TEMPLATE-FILE] - -Generate a configuration script from a TEMPLATE-FILE if given, or -'configure.ac' if present, or else 'configure.in'. Output is sent -to the standard output if TEMPLATE-FILE is given, else into -'configure'. - -Operation modes: - -h, --help print this help, then exit - -V, --version print version number, then exit - -v, --verbose verbosely report processing - -d, --debug don't remove temporary files - -f, --force consider all files obsolete - -o, --output=FILE save output in FILE (stdout is the default) - -W, --warnings=CATEGORY report the warnings falling in CATEGORY - -Warning categories include: - cross cross compilation issues - gnu GNU coding standards (default in gnu and gnits modes) - obsolete obsolete features or constructions (default) - override user redefinitions of Automake rules or variables - portability portability issues (default in gnu and gnits modes) - portability-recursive nested Make variables (default with -Wportability) - extra-portability extra portability issues related to obscure tools - syntax dubious syntactic constructs (default) - unsupported unsupported or incomplete features (default) - all all the warnings - no-CATEGORY turn off warnings in CATEGORY - none turn off all the warnings - -The environment variables 'M4' and 'WARNINGS' are honored. - -Library directories: - -B, --prepend-include=DIR prepend directory DIR to search path - -I, --include=DIR append directory DIR to search path - -Tracing: - -t, --trace=MACRO[:FORMAT] report the list of calls to MACRO - -i, --initialization also trace Autoconf's initialization process - -In tracing mode, no configuration script is created. FORMAT defaults -to '\$f:\$l:\$n:\$%'; see 'autom4te --help' for information about FORMAT. - -Report bugs to <bug-autoconf@gnu.org>. -GNU Autoconf home page: <https://www.gnu.org/software/autoconf/>. -General help using GNU software: <https://www.gnu.org/gethelp/>."] - -version=["\ -autoconf (@PACKAGE_NAME@) @VERSION@ -Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc. -License GPLv3+/Autoconf: GNU GPL version 3 or later -<https://gnu.org/licenses/gpl.html>, <https://gnu.org/licenses/exceptions.html> -This is free software: you are free to change and redistribute it. -There is NO WARRANTY, to the extent permitted by law. - -Written by David J. MacKenzie and Akim Demaille."] - -usage_err="\ -Try '$as_me --help' for more information." - -exit_missing_arg=' - m4_bpatsubst([AS_ERROR([option '$[1]' requires an argument$as_nl$usage_err])], - ['], ['\\''])' -# restore font-lock: ' - -# Variables. -: ${AUTOM4TE='@bindir@/@autom4te-name@'} -: ${trailer_m4='@pkgdatadir@/autoconf/trailer.m4'} -autom4te_options= -outfile= -verbose=false - -# Parse command line. -while test $# -gt 0 ; do - option=[`expr "x$1" : 'x\(--[^=]*\)' \| \ - "x$1" : 'x\(-.\)'`] - optarg=[`expr "x$1" : 'x--[^=]*=\(.*\)' \| \ - "x$1" : 'x-.\(.*\)'`] - case $1 in - --version | -V ) - AS_ECHO(["$version"]); exit ;; - --help | -h ) - AS_ECHO(["$help"]); exit ;; - - --verbose | -v ) - verbose=: - autom4te_options="$autom4te_options $1"; shift ;; - - # Arguments passed as is to autom4te. - --debug | -d | \ - --force | -f | \ - --include=* | -I?* | \ - --prepend-include=* | -B?* | \ - --warnings=* | -W?* ) - case $1 in - *\'*) arg=`AS_ECHO(["$1"]) | sed "s/'/'\\\\\\\\''/g"` ;; #' - *) arg=$1 ;; - esac - autom4te_options="$autom4te_options '$arg'"; shift ;; - # Options with separated arg passed as is to autom4te. - --include | -I | \ - --prepend-include | -B | \ - --warnings | -W ) - test $# = 1 && eval "$exit_missing_arg" - case $2 in - *\'*) arg=`AS_ECHO(["$2"]) | sed "s/'/'\\\\\\\\''/g"` ;; #' - *) arg=$2 ;; - esac - autom4te_options="$autom4te_options $option '$arg'" - shift; shift ;; - - --trace=* | -t?* ) - traces="$traces --trace='"`AS_ECHO(["$optarg"]) | sed "s/'/'\\\\\\\\''/g"`"'" - shift ;; - --trace | -t ) - test $# = 1 && eval "$exit_missing_arg" - traces="$traces --trace='"`AS_ECHO(["$[2]"]) | sed "s/'/'\\\\\\\\''/g"`"'" - shift; shift ;; - --initialization | -i ) - autom4te_options="$autom4te_options --melt" - shift;; - - --output=* | -o?* ) - outfile=$optarg - shift ;; - --output | -o ) - test $# = 1 && eval "$exit_missing_arg" - outfile=$2 - shift; shift ;; - - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - exec >&2 - AS_ERROR([invalid option '$[1]'$as_nl$usage_err]) ;; - * ) - break ;; - esac -done - -# Find the input file. -case $# in - 0) - if test -f configure.ac; then - if test -f configure.in; then - AS_ECHO(["$as_me: warning: both 'configure.ac' and 'configure.in' are present."]) >&2 - AS_ECHO(["$as_me: warning: proceeding with 'configure.ac'."]) >&2 - fi - infile=configure.ac - elif test -f configure.in; then - infile=configure.in - else - AS_ERROR([no input file]) - fi - test -z "$traces" && test -z "$outfile" && outfile=configure;; - 1) - infile=$1 ;; - *) exec >&2 - AS_ERROR([invalid number of arguments$as_nl$usage_err]) ;; -esac - -# Unless specified, the output is stdout. -test -z "$outfile" && outfile=- - -# Don't read trailer.m4 if we are tracing. -if test -n "$traces"; then - trailer_m4="" -else - # The extra quotes will be stripped by eval. - trailer_m4=\""$trailer_m4"\" -fi - -# Run autom4te with expansion. -# trailer.m4 is read _before_ $infile, despite the name, -# because putting it afterward screws up autom4te's location tracing. -eval set x "$autom4te_options" \ - --language=autoconf --output=\"\$outfile\" "$traces" \ - $trailer_m4 \"\$infile\" -shift -$verbose && AS_ECHO(["$as_me: running $AUTOM4TE $*"]) >&2 -exec "$AUTOM4TE" "$@" diff --git a/bin/autoconf.in b/bin/autoconf.in new file mode 100644 index 00000000..706027e4 --- /dev/null +++ b/bin/autoconf.in @@ -0,0 +1,213 @@ +#! @PERL@ +# -*- Perl -*- +# @configure_input@ + +eval 'case $# in 0) exec @PERL@ -S "$0";; *) exec @PERL@ -S "$0" "$@";; esac' + if 0; + +# autoconf -- create 'configure' using m4 macros. + +# Copyright (C) 1992-1994, 1996, 1999-2017, 2020-2021 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 <https://www.gnu.org/licenses/>. + +use 5.006; +use strict; +use warnings FATAL => 'all'; + +BEGIN +{ + my $pkgdatadir = $ENV{'autom4te_perllibdir'} || '@pkgdatadir@'; + unshift @INC, $pkgdatadir; + + # Override SHELL. On DJGPP SHELL may not be set to a shell + # that can handle redirection and quote arguments correctly, + # e.g.: COMMAND.COM. For DJGPP always use the shell that configure + # has detected. + $ENV{'SHELL'} = '@SHELL@' if ($^O eq 'dos'); +} + +use Autom4te::ChannelDefs; +use Autom4te::Channels qw(msg); +use Autom4te::General; + +# Lib files. +my $autom4te = $ENV{'AUTOM4TE'} || '@bindir@/@autom4te-name@'; +my $trailer_m4 = $ENV{'trailer_m4'} || '@pkgdatadir@/autoconf/trailer.m4'; + +# $HELP +# ----- +$help = "Usage: $0 [OPTION]... [TEMPLATE-FILE] + +Generate a configuration script from a TEMPLATE-FILE if given, or +'configure.ac' if present, or else 'configure.in'. Output is sent +to the standard output if TEMPLATE-FILE is given, else into +'configure'. + +Operation modes: + -h, --help print this help, then exit + -V, --version print version number, then exit + -v, --verbose verbosely report processing + -d, --debug don't remove temporary files + -f, --force consider all files obsolete + -o, --output=FILE save output in FILE (stdout is the default) + -W, --warnings=CATEGORY report the warnings falling in CATEGORY + +" . Autom4te::ChannelDefs::usage . " + +Library directories: + -B, --prepend-include=DIR prepend directory DIR to search path + -I, --include=DIR append directory DIR to search path + +Tracing: + -t, --trace=MACRO[:FORMAT] report the list of calls to MACRO + -i, --initialization also trace Autoconf's initialization process + +In tracing mode, no configuration script is created. FORMAT defaults +to '\$f:\$l:\$n:\$%'; see 'autom4te --help' for information about FORMAT. + +Report bugs to <bug-autoconf\@gnu.org>. +GNU Autoconf home page: <https://www.gnu.org/software/autoconf/>. +General help using GNU software: <https://www.gnu.org/gethelp/>. +"; + +# $VERSION +# -------- +$version = "autoconf (@PACKAGE_NAME@) @VERSION@ +Copyright (C) @RELEASE_YEAR@ Free Software Foundation, Inc. +License GPLv3+/Autoconf: GNU GPL version 3 or later +<https://gnu.org/licenses/gpl.html>, <https://gnu.org/licenses/exceptions.html> +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Written by David J. MacKenzie and Akim Demaille. +"; + +## ---------- ## +## Routines. ## +## ---------- ## + +my $infile; +my $outfile; +my @autom4te_options; +my @traces; + +# parse_args () +# ------------- +# Process any command line arguments. +sub parse_args () +{ + getopt ( + # Arguments passed as-is to autom4te. + 'I|include=s' => sub { push @autom4te_options, '--include='.$_[1] }, + 'B|prepend-include=s' => sub { push @autom4te_options, + '--prepend-include='.$_[1] }, + 'W|warnings=s' => sub { push @autom4te_options, + '--warnings='.$_[1] }, + + # Arguments processed (somewhat) in this program. + 'i|initialization' => sub { push @autom4te_options, '--melt' }, + 't|trace=s' => sub { push @traces, '--trace='.$_[1] }, + 'o|output=s' => \$outfile, + ); + + # Also pass down certain options that were processed into their own + # variables by Autom4te::General::getopt. + push @autom4te_options, '--debug' if $debug; + push @autom4te_options, '--force' if $force; + push @autom4te_options, '--verbose' if $verbose; + + # Find the input file. + if (@ARGV == 0) + { + $outfile = 'configure' if !$outfile && !@traces; + + if (-f 'configure.ac') + { + $infile = 'configure.ac'; + if (-f 'configure.in') + { + msg 'obsolete', + q(both 'configure.ac' and 'configure.in' are present); + msg 'obsolete', + q(proceeding with 'configure.ac'); + } + } + elsif (-f 'configure.in') + { + $infile = 'configure.in'; + } + else + { + fatal 'no input file'; + } + } + elsif (@ARGV == 1) + { + $infile = $ARGV[0]; + } + else + { + fatal "invalid number of arguments.\n" + . "Try '$me --help' for more information."; + } + + # Unless already set, the output is stdout. + $outfile = '-' if !$outfile; +} + +## -------------- ## +## Main program. ## +## -------------- ## + +parse_args; + +# Construct the autom4te invocation. +# $autom4te might contain additional command line options; word-split it +# exactly as the shell would. +my @autom4te_command = split /[ \t\n]+/, $autom4te; +push @autom4te_command, @autom4te_options; +push @autom4te_command, '--language=autoconf', "--output=$outfile", @traces; + +# Don't read trailer.m4 if we are tracing. +# trailer.m4 is read _before_ $infile, despite the name, +# because putting it afterward screws up autom4te's location tracing. +push @autom4te_command, $trailer_m4 if !@traces; +push @autom4te_command, $infile; + +print {*STDERR} $me, + ': running ', + join (" ", map { shell_quote($_) } @autom4te_command), + "\n" + if $verbose; + +exec {$autom4te_command[0]} @autom4te_command; + +### 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: diff --git a/bin/local.mk b/bin/local.mk index e923707f..9a11589d 100644 --- a/bin/local.mk +++ b/bin/local.mk @@ -26,7 +26,7 @@ bin_SCRIPTS = \ bin/ifnames EXTRA_DIST += \ - bin/autoconf.as \ + bin/autoconf.in \ bin/autoheader.in \ bin/autom4te.in \ bin/autoreconf.in \ @@ -35,20 +35,12 @@ EXTRA_DIST += \ bin/ifnames.in # Files that should be removed, but which Automake does not know. -MOSTLYCLEANFILES += $(bin_SCRIPTS) bin/autoconf.in bin/*.tmp +MOSTLYCLEANFILES += $(bin_SCRIPTS) bin/*.tmp ## ------------- ## ## The scripts. ## ## ------------- ## -# autoconf is written in M4sh. -# FIXME: this target should depend on the frozen files below lib/m4sugar, -# otherwise autom4te may pick up a frozen m4sh.m4f from an earlier -# installation below the same $(prefix); work around this with --melt. -bin/autoconf.in: $(srcdir)/bin/autoconf.as $(m4sh_m4f_dependencies) - $(MY_AUTOM4TE) --language M4sh --cache '' \ - --melt $(srcdir)/bin/autoconf.as -o $@ - ## All the scripts depend on Makefile so that they are rebuilt when the ## prefix etc. changes. It took quite a while to have the rule correct, ## don't break it! @@ -83,13 +75,12 @@ LETTERS = ABCDEFGHIJKLMNOPQRSTUVWXYZ DIGITS = 0123456789 WORD_REGEXP = [$(LETTERS)$(letters)_][$(LETTERS)$(letters)$(DIGITS)_]* ETAGS_PERL = --lang=perl \ + bin/autoconf.in \ bin/autoheader.in \ + bin/autom4te.in \ bin/autoreconf.in \ - bin/autoupdate.in \ bin/autoscan.in \ - bin/autom4te.in \ + bin/autoupdate.in \ bin/ifnames.in -ETAGS_SH = --lang=none --regex='/\($(WORD_REGEXP)\)=/\1/' \ - bin/autoconf.in -ETAGS_ARGS += $(ETAGS_PERL) $(ETAGS_SH) +ETAGS_ARGS += $(ETAGS_PERL) diff --git a/build-aux/help-extract.pl b/build-aux/help-extract.pl index bb104253..75192ced 100644 --- a/build-aux/help-extract.pl +++ b/build-aux/help-extract.pl @@ -135,49 +135,10 @@ sub extract_perl_assignment (*$$$) } -## ------------------------------ ## -## Extraction from shell scripts. ## -## ------------------------------ ## - -sub extract_shell_assignment (*$$) -{ - my ($fh, $source, $what) = @_; - my $value = ""; - my $parse_state = 0; - local $_; - - while (<$fh>) - { - if ($parse_state == 0) - { - if (/^\Q${what}\E=\[\"\\$/) - { - $parse_state = 1; - } - } - elsif ($parse_state == 1) - { - my $done = s/"\]$//; - $value .= $_; - if ($done) - { - # This is not strictly correct but it works acceptably - # for the escapes that actually occur in the strings - # we're extracting. - return eval_qq_no_interpolation ('"'.$value.'"'); - } - } - } - - die "$source: unexpected EOF in state $parse_state\n"; -} - - ## -------------- ## ## Main program. ## ## -------------- ## - sub extract_assignment ($$$) { my ($source, $channeldefs_pm, $what) = @_; @@ -189,12 +150,6 @@ sub extract_assignment ($$$) { return extract_perl_assignment ($fh, $source, $channeldefs_pm, $what); } - elsif ($firstline =~ /\bAS_INIT\b/ - || $firstline =~ /bin\/[a-z0-9]*sh\b/ - || $firstline =~ /-\*-\s*shell-script\s*-\*-/i) - { - return extract_shell_assignment ($fh, $source, $what); - } else { die "$source: language not recognized\n"; @@ -209,7 +164,7 @@ sub main () # to not mess with the command line. my $usage = "Usage: $0 script-source (--help | --version) -Extract help and version information from a perl or shell script. +Extract help and version information from a perl script. Required environment variables: top_srcdir relative path from cwd to the top of the source tree @@ -242,7 +197,7 @@ The script-source argument should also be relative to top_srcdir. die $usage; } - my $cmd_name = $source =~ s{^.*/([^./]+)\.(?:as|in)$}{$1}r; + my $cmd_name = $source =~ s{^.*/([^./]+)\.in$}{$1}r; $source = File::Spec->catfile($top_srcdir, $source); $channeldefs_pm = File::Spec->catfile($top_srcdir, $channeldefs_pm); diff --git a/man/autoconf.w b/man/autoconf.w index 4bb2eb63..837b5dbe 100755 --- a/man/autoconf.w +++ b/man/autoconf.w @@ -1,4 +1,4 @@ #! /bin/sh # help-extract wrapper, see build-aux/help-extract.pl and man/local.mk exec "${PERL-perl}" "${top_srcdir}/build-aux/help-extract.pl" \ - bin/autoconf.as "$@" + bin/autoconf.in "$@" diff --git a/man/local.mk b/man/local.mk index 6e785790..cdecc095 100644 --- a/man/local.mk +++ b/man/local.mk @@ -50,7 +50,7 @@ man_common_dep = $(top_srcdir)/man/common.x \ $(top_srcdir)/.version \ $(top_srcdir)/configure.ac -man/autoconf.1: $(common_dep) man/autoconf.w man/autoconf.x $(binsrcdir)/autoconf.as +man/autoconf.1: $(common_dep) man/autoconf.w man/autoconf.x $(binsrcdir)/autoconf.in man/autoheader.1: $(common_dep) man/autoheader.w man/autoheader.x $(binsrcdir)/autoheader.in man/autom4te.1: $(common_dep) man/autom4te.w man/autom4te.x $(binsrcdir)/autom4te.in man/autoreconf.1: $(common_dep) man/autoreconf.w man/autoreconf.x $(binsrcdir)/autoreconf.in diff --git a/tests/tools.at b/tests/tools.at index 48cdd924..ddcf038d 100644 --- a/tests/tools.at +++ b/tests/tools.at @@ -50,7 +50,6 @@ AT_CHECK([test "$SHELL_N" != none || exit 77]) # Specify the absolute name of the tool, as some shells don't honor PATH when # running 'sh PROG'. -AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/bin/autoconf"]) AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/autoconf"]) AT_CHECK_SHELL_SYNTAX(["$abs_top_builddir/tests/testsuite"]) @@ -69,6 +68,7 @@ AT_CLEANUP AT_SETUP([Syntax of the Perl scripts]) +AT_CHECK_PERL_SYNTAX([autoconf]) AT_CHECK_PERL_SYNTAX([autoheader]) AT_CHECK_PERL_SYNTAX([autom4te]) AT_CHECK_PERL_SYNTAX([autoreconf]) |