From: Paul Eggert Date: Tue, 4 Apr 2006 22:36:02 +0000 (+0000) Subject: * tests/mktests.sh: Use awk rather than grep -E or egrep, to avoid X-Git-Tag: AUTOCONF-2.59c~78 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b73069a8622b1da1379873e2e926eba4e81f203;p=thirdparty%2Fautoconf.git * tests/mktests.sh: Use awk rather than grep -E or egrep, to avoid portability problems with regular expressions containing newlines. (exclude_list, ac_exclude_list, au_exclude_list, ac_exclude_script): Switch from grep to awk syntax. (ac_exclude_script): Renamed from ac_exclude_egrep. (au_exclude_script): Renamed from au_exclude_egrep. --- diff --git a/ChangeLog b/ChangeLog index 39947160d..be77aab48 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-04-04 Paul Eggert + + * tests/mktests.sh: Use awk rather than grep -E or egrep, to avoid + portability problems with regular expressions containing newlines. + (exclude_list, ac_exclude_list, au_exclude_list, ac_exclude_script): + Switch from grep to awk syntax. + (ac_exclude_script): Renamed from ac_exclude_egrep. + (au_exclude_script): Renamed from au_exclude_egrep. + 2006-04-04 Noah Misch * lib/autoconf/general.m4 (_AC_INIT_HELP): Only `configure.in' evidences diff --git a/tests/mktests.sh b/tests/mktests.sh index bc6168911..4d8462064 100755 --- a/tests/mktests.sh +++ b/tests/mktests.sh @@ -66,11 +66,11 @@ cat $src | # ------------ # Macros which must not be checked at all (not by ac-macros.at, nor # au-macros.at). -# The trailing new line is meant. # # - ac_cv_prog_gcc, gxx, g77 # Not macros, just mapping from old variable name to a new one. -exclude_list='^ac_cv_prog_(gcc|gxx|g77)$ +exclude_list=' + /^ac_cv_prog_(gcc|gxx|g77)$/ {next} ' @@ -78,130 +78,104 @@ exclude_list='^ac_cv_prog_(gcc|gxx|g77)$ # --------------- # The test `ac-macros.at' tries to run all the macros of Autoconf to check # for syntax problems, etc. Not all the macros can be run without argument, -# and some are already tested elsewhere. EGREP_EXCLUDE must filter out +# and some are already tested elsewhere. AC_EXCLUDE_LIST must filter out # the macros we don't want to test in ac-macros.at. -# -# - AC_CANONICALIZE, AC_PREFIX_PROGRAM, AC_PREREQ -# Need an argument. -# -# - AC_CHECK alignof, decl, file, func, header, lib, member, prog, sizeof, -# host/target tool, type -# Performed in the semantics tests. -# -# - AC_CONFIG -# They fail when the source does not exist. -# -# - AC_FUNC_GETLOADAVG, AC_REPLACE_FNMATCH, AC_FUNC_FNMATCH_GNU -# Require a file that is not shipped with Autoconf. But it should. -# -# - AC_INIT -# AC_INIT includes all the AC_INIT macros. Note that there is an -# infinite m4 recursion if AC_INIT it used twice. -# -# - AC_LANG* -# Heavily used by other macros. -# -# - AC_PATH_PROGS?, AC_PATH_TOOL, AC_PATH_TARGET_TOOL, AC_F77_FUNC, AC_FC_FUNC, -# AC_FC_SRCEXT -# They produce `= val' because $1, the variable used to store the result, -# is empty. -# -# - AC_FC_FREEFORM -# Requires the current language to be Fortran, not C. -# -# - AC_TRY, AC_.*_IFELSE, AC_RUN_LOG. -# Used in many places. -# -# - _AC_ -# Internal macros are used elsewhere. -# -# - AC_OUTPUT -# Already tested by `AT_CHECK_MACRO'. -# -# - AC_FD_CC -# Is a number. -# -# - AC_PROG_CC, AC_C_(CONST|VOLATILE), AC_PATH_XTRA -# Checked in semantics. -# -# - AC_CYGWIN, AC_CYGWIN32, AC_EMXOS2, AC_MING32, AC_EXEEXT, AC_OBJEXT -# AU defined to nothing. -# -# - AC_PATH_XTRA -# Checked in semantics. -# -# - AC_SYS_RESTARTABLE_SYSCALLS, AC_FUNC_WAIT3 -# Obsolete, checked in semantics. -# -# - AC_FOREACH -# Obsolete, but needs to be AC_DEFUN'ed. -# -ac_exclude_list='^AC_ARG_VAR$ -^AC_CANONICALIZE|AC_PREFIX_PROGRAM|AC_PREREQ$ -^AC_CHECK_(ALIGNOF|DECL|FILE|FUNC|HEADER|LIB|MEMBER|PROG|SIZEOF|(TARGET_)?TOOL|TYPE)S?$ -^AC_CONFIG -^AC_(F77|FC)_FUNC$ -^AC_FC_(FUNC|FREEFORM|SRCEXT)$ -^AC_FD_CC$ -^AC_FUNC_(GETLOADAVG|FNMATCH_GNU|WAIT3)$ -^AC_INIT -^AC_LANG -^AC_LINKER_OPTION$ -^AC_LINK_FILES$ -^AC_LIST_MEMBER_OF$ -^AC_OUTPUT$ -^AC_PATH_((TARGET_)?TOOL|PROG)S?$ -^AC_REPLACE_(FNMATCH|FUNCS)$ -^AC_SEARCH_LIBS$ -^(AC_TRY.*|AC_RUN_LOG)$ -^AC_.*_IFELSE$ -^(AC_(PROG_CC|C_CONST|C_VOLATILE))$ -^AC_(CYGWIN|CYGWIN32|EMXOS2|MING32|EXEEXT|OBJEXT)$ -^AC_PATH_XTRA$ -^AC_SYS_RESTARTABLE_SYSCALLS$ -^AC_FOREACH$ -_AC_' - - -# ac_exclude_egrep -# ---------------- -# Build a single extended regular expression out of filter_macros_list. -ac_exclude_egrep=$exclude_list$ac_exclude_list +ac_exclude_list=' + # Internal macros are used elsewhere. + /_AC_/ {next} + + # Dunno why these are ignored. + /^AC_ARG_VAR$/ {next} + /^AC_LINKER_OPTION$/ {next} + /^AC_LINK_FILES$/ {next} + /^AC_LIST_MEMBER_OF$/ {next} + /^AC_REPLACE_FUNCS$/ {next} + /^AC_SEARCH_LIBS$/ {next} + + # Used in many places. + /^AC_.*_IFELSE$/ {next} + /^AC_LANG/ {next} + /^AC_RUN_LOG$/ {next} + /^AC_TRY/ {next} + + # Need an argument. + /^AC_CANONICALIZE|AC_PREFIX_PROGRAM|AC_PREREQ$/ {next} + + # Performed in the semantics tests. + /^AC_CHECK_(ALIGNOF|DECL|FILE|FUNC|HEADER|LIB|MEMBER|PROG|SIZEOF|(TARGET_)?TOOL|TYPE)S?$/ {next} + + # Fail when the source does not exist. + /^AC_CONFIG/ {next} + + # AU defined to nothing. + /^AC_(CYGWIN|CYGWIN32|EMXOS2|MING32|EXEEXT|OBJEXT)$/ {next} + + # Produce "= val" because $1, the variable used to store the result, + # is empty. + /^AC_(F77|FC)_FUNC$/ {next} + /^AC_FC_SRCEXT$/ {next} + /^AC_PATH_((TARGET_)?TOOL|PROG)S?$/ {next} + + # Requires the current language to be Fortran, not C. + /^AC_FC_FREEFORM$/ {next} + + # Is a number. + /^AC_FD_CC$/ {next} + + # Obsolete, but needs to be AC_DEFUNed. + /^AC_FOREACH$/ {next} + + # Require a file that is not shipped with Autoconf. But it should. + /^AC_FUNC_(GETLOADAVG|FNMATCH_GNU)$/ {next} + /^AC_REPLACE_FNMATCH$/ {next} + + # Obsolete, checked in semantics. + /^AC_FUNC_WAIT3$/ {next} + /^AC_SYS_RESTARTABLE_SYSCALLS$/ {next} + + # AC_INIT includes all the AC_INIT macros. + # There is an infinite m4 recursion if AC_INIT is used twice. + /^AC_INIT/ {next} + + # Checked in semantics. + /^AC_(PROG_CC|C_CONST|C_VOLATILE)$/ {next} + /^AC_PATH_XTRA$/ {next} + + # Already tested by AT_CHECK_MACRO. + /^AC_OUTPUT$/ {next} +' + + +# ac_exclude_script +# ----------------- +# Build a single awk script out of the above. +ac_exclude_script="$exclude_list $ac_exclude_list {print}" # au_exclude_list # --------------- -# AC_LANG_SAVE -# needs user interaction to be removed. -# AC_LANG_RESTORE -# cannot be used alone. -# AC_LINK_FILES, AC_PREREQ -# need arguments and are tested elsewhere. -# AC_INIT and AC_OUTPUT -# are already in `configure.ac'. -# AC_C_CROSS and AC_PROG_CC_STDC -# are empty. -# AC_CYGWIN, AC_MINGW32, AC_EMXOS2 -# are using AC_REQUIRE. -au_exclude_list='^AC_LANG_(SAVE|RESTORE)$ -^AC_LINK_FILES|AC_PREREQ$ -^AC_(INIT|OUTPUT)$ -^AC_C_CROSS|AC_PROG_CC_STDC$ -^AC_(CYGWIN|MINGW32|EMXOS2)$' - - -# au_exclude_egrep -# ---------------- -# Build a single extended regular expression out of filter_macros_list. -au_exclude_egrep=$exclude_list$au_exclude_list - - -# egrep -# ----- -if echo a | grep -E '(a|b)' >/dev/null 2>&1 -then egrep='grep -E' -else egrep='egrep' -fi +au_exclude_list=' + # Empty. + /^AC_C_CROSS|AC_PROG_CC_STDC$/ {next} + + # Use AC_REQUIRE. + /^AC_(CYGWIN|MINGW32|EMXOS2)$/ {next} + + # Already in configure.ac. + /^AC_(INIT|OUTPUT)$/ {next} + + # AC_LANG_SAVE needs user interaction to be removed. + # AC_LANG_RESTORE cannot be used alone. + /^AC_LANG_(SAVE|RESTORE)$/ {next} + + # Need arguments and are tested elsewhere. + /^AC_LINK_FILES|AC_PREREQ$/ {next} +' + +# au_exclude_script +# ----------------- +# Build a single awk script out of the above. +au_exclude_script="$exclude_list $au_exclude_list {print}" ## ------------------------- ## @@ -218,15 +192,14 @@ do -e 's/^AC_DEFUN_ONCE(\[*\([a-zA-Z0-9_]*\).*$/\1/p' | sort | uniq | - # Watch out we are `set -e': don't fail. - ($egrep -v "$ac_exclude_egrep" || true) >acdefuns + awk "$ac_exclude_script" >acdefuns # Get the list of macros which are defined in Autoupdate level. cat $file | sed -n 's/^AU_DEFUN(\[*\([a-zA-Z][a-zA-Z0-9_]*\).*$/\1/p' | sort | uniq | - ($egrep -v "$au_exclude_egrep" || true) > audefuns + awk "$au_exclude_script" >audefuns # Filter out required macros. {