📄 general.m4
字号:
# This file is part of Autoconf. -*- Autoconf -*-# M4 macros used in building test suites.# Copyright (C) 2000, 2001, 2002, 2003 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 2, 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, write to the Free Software# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA# 02111-1307, USA.# As a special exception, the Free Software Foundation gives unlimited# permission to copy, distribute and modify the configure scripts that# are the output of Autoconf. You need not follow the terms of the GNU# General Public License when using or distributing such scripts, even# though portions of the text of Autoconf appear in them. The GNU# General Public License (GPL) does govern all other use of the material# that constitutes the Autoconf program.## Certain portions of the Autoconf source text are designed to be copied# (in certain cases, depending on the input) into the output of# Autoconf. We call these the "data" portions. The rest of the Autoconf# source text consists of comments plus executable code that decides which# of the data portions to output in any given case. We call these# comments and executable code the "non-data" portions. Autoconf never# copies any of the non-data portions into its output.## This special exception to the GPL applies to versions of Autoconf# released by the Free Software Foundation. When you make and# distribute a modified version of Autoconf, you may extend this special# exception to the GPL to apply to your modified version as well, *unless*# your modified version has the potential to copy into its output some# of the text that was the non-data portion of the version that you started# with. (In other words, unless your change moves or copies text from# the non-data portions to the data portions.) If your modification has# such potential, you must delete any notice of this special exception# to the GPL from your modified version.# _m4_divert(DIVERSION-NAME)# --------------------------# Convert a diversion name into its number. Otherwise, return# DIVERSION-NAME which is supposed to be an actual diversion number.# Of course it would be nicer to use m4_case here, instead of zillions# of little macros, but it then takes twice longer to run `autoconf'!## From M4sugar:# -1. KILL# 10000. GROW## From M4sh:# 0. BINSH# 1. HEADER-REVISION# 2. HEADER-COMMENT# 3. HEADER-COPYRIGHT# 4. M4SH-INIT# 1000. BODY## Defined below:# - DEFAULTS# Overall initialization, value of $at_groups_all.# - PARSE_ARGS_BEGIN# Setup defaults required for option processing.# - PARSE_ARGS# Option processing. After AT_INIT, user options can be entered here as# cases of a case statement.# - PARSE_ARGS_END# Finish up the option processing.# - HELP# Start printing the help message.# - HELP_MODES# Modes help text. Additional modes can be appended as self-contained# cat'd here-docs as generated by AS_HELP_STRING.# - HELP_TUNING# TUning help text. Additional tuning options can be appended as# self-contained cat'd here-docs as generated by AS_HELP_STRING.# - HELP_OTHER# User help can be appended to this as self-contained cat'd here-docs.# - HELP_END# Finish up the help texts.# - PREPARE_TESTS# Like DEFAULTS but run after argument processing for purposes of# optimization. Do anything else that needs to be done to prepare for# tests. Sets up verbose and log file descriptors. Sets and logs PATH.# - TESTS# The core of the test suite.# - TESTS_END# tail of the core for;case, overall wrap up, generation of debugging# scripts and statistics.# - TEST_SCRIPT# The code for each test, the ``normal'' diversionm4_define([_m4_divert(DEFAULTS)], 100)m4_define([_m4_divert(PARSE_ARGS_BEGIN)], 200)m4_define([_m4_divert(PARSE_ARGS)], 201)m4_define([_m4_divert(PARSE_ARGS_END)], 202)m4_define([_m4_divert(HELP)], 300)m4_define([_m4_divert(HELP_MODES)], 301)m4_define([_m4_divert(HELP_TUNING)], 302)m4_define([_m4_divert(HELP_OTHER)], 303)m4_define([_m4_divert(HELP_END)], 304)m4_define([_m4_divert(PREPARE_TESTS)], 400)m4_define([_m4_divert(TESTS)], 401)m4_define([_m4_divert(TESTS_END)], 402)m4_define([_m4_divert(TEST_SCRIPT)], 403)# AT_LINE# -------# Return the current file sans directory, a colon, and the current# line. Be sure to return a _quoted_ filename, so if, for instance,# the user is lunatic enough to have a file named `dnl' (and I, for# one, love to be brainless and stubborn sometimes), then we return a# quoted name.## Gee, we can't use simply## m4_bpatsubst(__file__, [^.*/\(.*\)], [[\1]])## since then, since `dnl' doesn't match the pattern, it is returned# with once quotation level less, so you lose! And since GNU M4# is one of the biggest junk in the whole universe wrt regexp, don't# even think about using `?' or `\?'. Bah, `*' will do.# Pleeeeeeeease, Gary, provide us with dirname and ERE!m4_define([AT_LINE],[m4_bpatsubst(__file__, [^\(.*/\)*\(.*\)], [[\2]]):__line__])# AT_INIT([TESTSUITE-NAME])# -------------------------# Begin test suite.m4_define([AT_INIT],[m4_pattern_forbid([^_?AT_])m4_define([AT_TESTSUITE_NAME], m4_defn([AT_PACKAGE_STRING])[ test suite]m4_ifval([$1], [: $1]))m4_define([AT_ordinal], 0)m4_define([AT_banner_ordinal], 0)AS_INITAS_PREPAREm4_divert_push([DEFAULTS])dnlSHELL=${CONFIG_SHELL-/bin/sh}# How were we run?at_cli_args="$[@]"# Load the config file.for at_file in atconfig atlocaldo test -r $at_file || continue . ./$at_file || AS_ERROR([invalid content: $at_file])done# atconfig delivers paths relative to the directory the test suite is# in, but the groups themselves are run in testsuite-dir/group-dir.if test -n "$at_top_srcdir"; then builddir=../.. for at_dir in srcdir top_srcdir top_builddir do at_val=AS_VAR_GET(at_$at_dir) AS_VAR_SET($at_dir, $at_val/../..) donefi# Not all shells have the 'times' builtin; the subshell is needed to make# sure we discard the 'times: not found' message from the shell.at_times_p=false(times) >/dev/null 2>&1 && at_times_p=:# CLI Arguments to pass to the debugging scripts.at_debug_args=# -e sets to trueat_errexit_p=false# Shall we be verbose?at_verbose=:at_quiet=echo# Shall we keep the debug scripts? Must be `:' when the suite is# run by a debug script, so that the script doesn't remove itself.at_debug_p=false# Display help message?at_help_p=false# List test groups?at_list_p=false# Test groups to runat_groups=# The directory we are in.at_dir=`pwd`# The directory the whole suite works in.# Should be absolutely to let the user `cd' at will.at_suite_dir=$at_dir/$as_me.dir# The file containing the suite.at_suite_log=$at_dir/$as_me.log# The file containing the location of the last AT_CHECK.at_check_line_file=$at_suite_dir/at-check-line# The file containing the exit status of the last command.at_status_file=$at_suite_dir/at-status# The files containing the output of the tested commands.at_stdout=$at_suite_dir/at-stdoutat_stder1=$at_suite_dir/at-stder1at_stderr=$at_suite_dir/at-stderr# The file containing dates.at_times_file=$at_suite_dir/at-timesm4_divert_pop([DEFAULTS])dnlm4_wrap([m4_divert_text([DEFAULTS],[# List of the tested programs.at_tested='m4_ifdef([AT_tested], [AT_tested])'# List of the all the test groups.at_groups_all='AT_groups_all'# As many dots as there are digits in the last test group number.# Used to normalize the test group numbers so that `ls' lists them in# numerical order.at_format='m4_bpatsubst(m4_defn([AT_ordinal]), [.], [.])'# Description of all the test groups.at_help_all='AT_help_all'])])dnlm4_divert_push([PARSE_ARGS])dnlat_keywords=at_prev=for at_optiondo # If the previous option needs an argument, assign it. if test -n "$at_prev"; then at_option=$at_prev=$at_option at_prev= fi at_optarg=`expr "x$at_option" : 'x[[^=]]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $at_option in --help | -h ) at_help_p=: ;; --list | -l ) at_list_p=: ;; --version | -V ) echo "$as_me (AT_PACKAGE_STRING)" exit 0 ;; --clean | -c ) rm -rf $at_suite_dir $at_suite_log exit 0 ;; --debug | -d ) at_debug_p=: ;; --errexit | -e ) at_debug_p=: at_errexit_p=: ;; --verbose | -v ) at_verbose=echo; at_quiet=: ;; --trace | -x ) at_traceon='set -vx'; at_traceoff='set +vx' ;; [[0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]]) at_groups="$at_groups$at_option " ;; # Ranges [[0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-]) at_range_start=`echo $at_option |tr -d '-'` at_range=`echo " $at_groups_all " | \ sed -e 's,^.* '$at_range_start' ,'$at_range_start' ,'` at_groups="$at_groups$at_range " ;; [-[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9]]) at_range_end=`echo $at_option |tr -d '-'` at_range=`echo " $at_groups_all " | \ sed -e 's, '$at_range_end' .*$, '$at_range_end','` at_groups="$at_groups$at_range " ;; [[0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9]] | \ [[0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9]] | \ [[0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9]] | \ [[0-9][0-9][0-9]-[0-9][0-9][0-9]] | \ [[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]] | \ [[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]] ) at_range_start=`echo $at_option |sed 's,-.*,,'` at_range_end=`echo $at_option |sed 's,.*-,,'` # FIXME: Maybe test to make sure start <= end? at_range=`echo " $at_groups_all " | \ sed -e 's,^.* '$at_range_start' ,'$at_range_start' ,' \ -e 's, '$at_range_end' .*$, '$at_range_end','` at_groups="$at_groups$at_range " ;; # Keywords. --keywords | -k ) at_prev=--keywords ;; --keywords=* ) at_keywords="$at_keywords,$at_optarg" ;;m4_divert_pop([PARSE_ARGS])dnldnl Process *=* last to allow for user specified --option=* type arguments.m4_divert_push([PARSE_ARGS_END])dnl *=*) at_envvar=`expr "x$at_option" : 'x\([[^=]]*\)='` # Reject names that are not valid shell variable names. expr "x$at_envvar" : "[.*[^_$as_cr_alnum]]" >/dev/null && AS_ERROR([invalid variable name: $at_envvar]) at_value=`echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$at_envvar='$at_value'" export $at_envvar # Propagate to debug scripts. at_debug_args="$at_debug_args $at_option" ;; *) echo "$as_me: invalid option: $at_option" >&2 echo "Try \`$[0] --help' for more information." >&2 exit 1 ;; esacdone# Process the --keywordsif test -n "$at_keywords"; then at_groups_selected=$at_help_all for at_keyword in `IFS=,; set X $at_keywords; shift; echo ${1+$[@]}` do # It is on purpose that we match the test group titles too. at_groups_selected=`echo "$at_groups_selected" | grep -i "^[[^;]]*;[[^;]]*.*[[; ]]$at_keyword[[ ;]]"` done at_groups_selected=`echo "$at_groups_selected" | sed 's/;.*//'` # Smash the end of lines. at_groups_selected=`echo $at_groups_selected` at_groups="$at_groups$at_groups_selected "fi# Selected test groups.test -z "$at_groups" && at_groups=$at_groups_allm4_divert_pop([PARSE_ARGS_END])dnlm4_divert_push([HELP])dnl# Help message.if $at_help_p; then cat <<_ATEOFUsage: $[0] [[OPTION]... [VARIABLE=VALUE]... [TESTS]]Run all the tests, or the selected TESTS, and save a detailed log file.Upon failure, create debugging scripts.You should not change environment variables unless explicitly passedas command line arguments. Set \`AUTOTEST_PATH' to select the executablesto exercise. Each relative directory is expanded as build and sourcedirectories relatively to the top level of this distribution. E.g., $ $[0] AUTOTEST_PATH=binpossibly amounts into PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH_ATEOFm4_divert_pop([HELP])dnlm4_divert_push([HELP_MODES])dnlcat <<_ATEOFOperation modes: -h, --help print the help message, then exit -V, --version print version number, then exit -c, --clean remove all the files this test suite might create and exit -l, --list describes all the tests, or the selected TESTS_ATEOFm4_divert_pop([HELP_MODES])dnlm4_divert_push([HELP_TUNING])dnlcat <<_ATEOFExecution tuning: -k, --keywords=KEYWORDS select the tests matching all the comma separated KEYWORDS accumulates -e, --errexit abort as soon as a test fails; implies --debug -v, --verbose force more detailed output default for debugging scripts -d, --debug inhibit clean up and debug script creation default for debugging scripts -x, --trace enable tests shell tracing_ATEOFm4_divert_pop([HELP_TUNING])dnlm4_divert_push([HELP_END])dnlcat <<_ATEOFReport bugs to <AT_PACKAGE_BUGREPORT>._ATEOF exit 0fi# List of tests.if $at_list_p; then cat <<_ATEOFAT_TESTSUITE_NAME test groups: NUM: FILENAME:LINE TEST-GROUP-NAME KEYWORDS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -