m4_match.
(m4_re_escape): New.
* lib/autoconf/status.m4 (AC_CONFIG_IF_MEMBER): Use it.
* lib/autoconf/general.m4 (AC_CACHE_SAVE): Use m4_match.
* lib/autoconf/status.m4 (AC_CONFIG_IF_MEMBER, AC_CONFIG_LINKS):
Likewise.
* lib/autoconf/types.m4 (_AC_CHECK_TYPE_REPLACEMENT_TYPE_P)
(_AC_CHECK_TYPE_MAYBE_TYPE_P, AC_CHECK_MEMBER): Likewise.
* lib/autotest/general.m4 (AT_INIT): Rename AT_TESTS_ALL as
AT_tests_all for consistency.
Set at_victims.
(AT_VICTIMS): Similar to AT_KEYWORDS.
(_AT_CLEANUP_FILE_IF): Use m4_match and m4_re_escape.
+2001-09-13 Akim Demaille <akim@epita.fr>
+
+ * lib/m4sugar/m4sugar.m4 (_AS_QUOTE_IFELSE, _AS_BOX_INDIR): Use
+ m4_match.
+ (m4_re_escape): New.
+ * lib/autoconf/status.m4 (AC_CONFIG_IF_MEMBER): Use it.
+ * lib/autoconf/general.m4 (AC_CACHE_SAVE): Use m4_match.
+ * lib/autoconf/status.m4 (AC_CONFIG_IF_MEMBER, AC_CONFIG_LINKS):
+ Likewise.
+ * lib/autoconf/types.m4 (_AC_CHECK_TYPE_REPLACEMENT_TYPE_P)
+ (_AC_CHECK_TYPE_MAYBE_TYPE_P, AC_CHECK_MEMBER): Likewise.
+ * lib/autotest/general.m4 (AT_INIT): Rename AT_TESTS_ALL as
+ AT_tests_all for consistency.
+ Set at_victims.
+ (AT_VICTIMS): Similar to AT_KEYWORDS.
+ (_AT_CLEANUP_FILE_IF): Use m4_match and m4_re_escape.
+
2001-09-13 Akim Demaille <akim@epita.fr>
* lib/autotest/general.m4 (AT_INIT): Fix stupid bugs.
# The name of shell var CACHE-ID must contain `_cv_' in order to get saved.
# Should be dnl'ed. Try to catch common mistakes.
m4_define([AC_CACHE_VAL],
-[m4_if(m4_regexp([$2], [AC_DEFINE]), [-1], [],
- [AC_DIAGNOSE(syntax,
+[m4_match([$2], [AC_DEFINE],
+ [AC_DIAGNOSE(syntax,
[$0($1, ...): suspicious presence of an AC_DEFINE in the second argument, ]dnl
[where no actions should be taken])])dnl
AS_VAR_SET_IF([$1],
# matching. The big problem is then that the active characters should
# be quoted. Currently `+*.' are quoted.
m4_define([AC_CONFIG_IF_MEMBER],
-[m4_if(m4_regexp($2, [\(^\| \)]m4_patsubst([$1],
- [\([+*.]\)], [\\\1])[\(:\| \|$\)]),
- -1, [$4], [$3])])
+[m4_match($2, [\(^\| \)]m4_re_escape([$1])[\(:\| \|$\)]),
+ [$3], [$4])])
# AC_FILE_DEPENDENCY_TRACE(DEST, SOURCE1, [SOURCE2...])
[m4_divert_push([KILL])
_AC_CONFIG_UNIQUE([$1])
_AC_CONFIG_DEPENDENCIES([$1])
-m4_if(m4_regexp([$1], [^\.:\| \.:]), -1,,
- [AC_FATAL([$0: invalid destination: `.'])])
+m4_match([$1], [^\.:\| \.:], [m4_fatal([$0: invalid destination: `.'])])
m4_append([AC_LIST_LINKS], [ $1])
dnl Register the commands
m4_ifval([$2], [AC_FOREACH([AC_File], [$1],
# Because many people have used `off_t' and `size_t' too, they are added
# for better common-useward backward compatibility.
m4_define([_AC_CHECK_TYPE_REPLACEMENT_TYPE_P],
-[m4_if(m4_regexp([$1],
- [^\(_Bool\|bool\|char\|double\|float\|int\|long\|short\|\(un\)?signed\|[_a-zA-Z][_a-zA-Z0-9]*_t\)[][_a-zA-Z0-9() *]*$]),
- 0, 1, 0)dnl
+[m4_match([$1],
+ [^\(_Bool\|bool\|char\|double\|float\|int\|long\|short\|\(un\)?signed\|[_a-zA-Z][_a-zA-Z0-9]*_t\)[][_a-zA-Z0-9() *]*$],
+ 1, 0)dnl
])# _AC_CHECK_TYPE_REPLACEMENT_TYPE_P
# -----------------------------------
# Return `1' if STRING looks like a C/C++ type.
m4_define([_AC_CHECK_TYPE_MAYBE_TYPE_P],
-[m4_if(m4_regexp([$1], [^[_a-zA-Z0-9 ]+\([_a-zA-Z0-9() *]\|\[\|\]\)*$]),
- 0, 1, 0)dnl
+[m4_match([$1], [^[_a-zA-Z0-9 ]+\([_a-zA-Z0-9() *]\|\[\|\]\)*$],
+ 1, 0)dnl
])# _AC_CHECK_TYPE_MAYBE_TYPE_P
AC_DEFUN([AC_CHECK_MEMBER],
[AS_LITERAL_IF([$1], [],
[AC_FATAL([$0: requires literal arguments])])dnl
-m4_if(m4_regexp([$1], [\.]), -1,
- [AC_FATAL([$0: Did not see any dot in `$1'])])dnl
+m4_match([$1], [\.], ,
+ [m4_fatal([$0: Did not see any dot in `$1'])])dnl
AS_VAR_PUSHDEF([ac_Member], [ac_cv_member_$1])dnl
dnl Extract the aggregate name, and the member name
AC_CACHE_CHECK([for $1], ac_Member,
exit 0
m4_divert_pop([TAIL])dnl
m4_wrap([m4_divert_text([DEFAULT],
- [# List of the tests.
-at_tests_all="AT_TESTS_ALL "
+ [# List of the tested programs.
+at_victims="AT_victims"
+# List of the tests.
+at_tests_all="AT_tests_all "
# Number of the last test.
at_last_test=AT_ordinal
# Description of all the tests.
# must correspond to the version of the package.. The PATH should be
# already preset so the proper executable will be selected.
m4_define([AT_VICTIMS],
-[m4_divert_text([DEFAULT],
-[# List of the tested programs.
-at_victims="$1"
-])
-])# AT_VICTIMS
+[m4_append([AT_victims], [$1], [ ])])
# AT_SETUP(DESCRIPTION)
m4_define([AT_line], AT_LINE)
m4_define([AT_description], [$1])
m4_define([AT_ordinal], m4_incr(AT_ordinal))
-m4_append([AT_TESTS_ALL], [ ]m4_defn([AT_ordinal]))
+m4_append([AT_tests_all], [ ]m4_defn([AT_ordinal]))
m4_divert_push([TESTS])dnl
AT_ordinal ) @%:@ AT_ordinal. m4_defn([AT_line]): $1
at_setup_line='m4_defn([AT_line])'
# We try to build a regular expression matching `[', `]', `*', and
# `.', i.e., the regexp active characters.
m4_define([_AT_CLEANUP_FILE_IF],
-[m4_if(m4_regexp(AT_data_files, m4_patsubst([ $1 ], [[][*.]], [\\\&])),
- -1,
- [$3], [$2])])
+[m4_match(AT_data_files, m4_re_escape([ $1 ]),
+ [$2], [$3])])
# _AT_CLEANUP_FILE(FILE)
# Output TEXT without any shell expansion.
m4_define([AT_BANNER],
[m4_define([AT_banner_ordinal], m4_incr(AT_banner_ordinal))
-m4_append([AT_TESTS_ALL], [ banner-]m4_defn([AT_banner_ordinal]))
+m4_append([AT_tests_all], [ banner-]m4_defn([AT_banner_ordinal]))
m4_divert_text([TESTS],
[
banner-AT_banner_ordinal ) @%:@ Banner AT_banner_ordinal. AT_LINE
# Otherwise it's modern.
# We use two quotes in the pattern to keep highlighting tools at peace.
m4_define([_AS_QUOTE_IFELSE],
-[m4_if(m4_regexp([$1], [\\[\\$]]),
- [-1], [m4_if(m4_regexp([$1], [\\[`""]]),
- [-1], [$2],
- [$3])],
- [$2])])
+[m4_match([$1],
+ [\\[\\$]], [$2],
+ [\\[`""]], [$3],
+ [$2])])
# _AS_ECHO_UNQUOTED(STRING, [FD = AS_MESSAGE_FD])
# This is an *approximation*: for instance EXPRESSION = `\$' is
# definitely a literal, but will not be recognized as such.
m4_define([AS_LITERAL_IF],
-[m4_if(m4_regexp([$1], [[`$]]),
- -1, [$2],
- [$3])])
+[m4_match([$1], [[`$]],
+ [$3], [$2])])
# AS_TMPDIR(PREFIX)
# else into the appropriate `eval' sequence.
m4_define([AS_VAR_GET],
[AS_LITERAL_IF([$1],
- [$[]$1],
+ [$$1],
[`eval echo '${'m4_patsubst($1, [[\\`]], [\\\&])'}'`])])
## 9. Text processing. ##
## -------------------- ##
+
# m4_cr_letters
# m4_cr_LETTERS
# m4_cr_Letters
m4_defn([m4_cr_LETTERS])dnl
)
+
# m4_cr_digits
# ------------
m4_define([m4_cr_digits], [0123456789])
)
+# m4_re_escape(STRING)
+# --------------------
+# Escape BRE active characters in STRING.
+m4_define([m4_re_escape],
+[m4_patsubst([$1],
+ [[][+*.]], [\\\&])])
+
+
# m4_re_string
# ------------
# Regexp for `[a-zA-Z_0-9]*'
m4_defn([m4_re_string])dnl
)
+
# m4_tolower(STRING)
# m4_toupper(STRING)
# ------------------
# These macros lowercase and uppercase strings.
m4_define([m4_tolower],
-[m4_translit([$1],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ],
- [abcdefghijklmnopqrstuvwxyz])])
-
+[m4_translit([$1], m4_defn([m4_cr_LETTERS]), m4_defn([m4_cr_letters]))])
m4_define([m4_toupper],
-[m4_translit([$1],
- [abcdefghijklmnopqrstuvwxyz],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ])])
+[m4_translit([$1], m4_defn([m4_cr_letters]), m4_defn([m4_cr_LETTERS]))])
# m4_split(STRING, [REGEXP])