From: Akim Demaille Date: Tue, 8 Feb 2000 13:11:21 +0000 (+0000) Subject: Improve support of name spaces in libm4. Put the m4 builtins X-Git-Tag: autoconf-2.50~1204 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df16b72f8518ba5b8f2cc04a7a46bb20b1ec14f1;p=thirdparty%2Fautoconf.git Improve support of name spaces in libm4. Put the m4 builtins in the `libm4' name space. * libm4 (m4_changequote, m4_define, m4_defn, m4_dnl, m4_indir, m4_undefine): Private copies in the global name space. Used by the name space mechanisms. (m4_namespace_register): New macro. (m4_namespace_define): Use it. (builtin, changequote, defn, dnl, esyscmd, ifdef, ifelse, indir, patsubst, popdef, pushdef, regexp, undefine, syscmd, sysval): Put in the `libm4' name space. (m4_disable, m4_enable): Use the private m4_indir, otherwise once `libm4' closed, there is no `indir' available, and therefore no means to reopen a name space. --- diff --git a/ChangeLog b/ChangeLog index 419124db4..c37fbccce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2000-02-08 Akim Demaille + + Improve support of name spaces in libm4. Put the m4 builtins + in the `libm4' name space. + + * libm4 (m4_changequote, m4_define, m4_defn, m4_dnl, m4_indir, + m4_undefine): Private copies in the global name space. Used by + the name space mechanisms. + (m4_namespace_register): New macro. + (m4_namespace_define): Use it. + (builtin, changequote, defn, dnl, esyscmd, ifdef, ifelse, indir, + patsubst, popdef, pushdef, regexp, undefine, syscmd, sysval): Put + in the `libm4' name space. + (m4_disable, m4_enable): Use the private m4_indir, otherwise once + `libm4' closed, there is no `indir' available, and therefore no + means to reopen a name space. + 2000-02-08 Akim Demaille Output really nothing if AC_INIT was not given. Unconditional diff --git a/libm4.m4 b/libm4.m4 index 49d3d5ef8..f7cd7768d 100644 --- a/libm4.m4 +++ b/libm4.m4 @@ -61,18 +61,9 @@ m4exit(2)]) -## ---------------------------------------------- ## -## Defining macros and disabling/enabling libm4. ## -## ---------------------------------------------- ## - -# Private copies of the macros we used in disabling/enabling libm4. -# It is much more convenient than fighting with the renamed version -# of define etc. - -define([m4_dnl], defn([dnl])) -define([m4_define], defn([define])) -define([m4_undefine], defn([undefine])) -define([m4_defn], defn([defn])) +## --------------------------------- ## +## Defining macros and name spaces. ## +## --------------------------------- ## # Name spaces. @@ -110,19 +101,38 @@ m4_define([m4_namespace_pop], [popdef([m4_namespace])]) m4_namespace_push([libm4]) +# Private copies of the macros we used in entering / exiting the +# libm4 name space. It is much more convenient than fighting with +# the renamed version of define etc. + +define([m4_changequote], defn([changequote])) +define([m4_define], defn([define])) +define([m4_defn], defn([defn])) +define([m4_dnl], defn([dnl])) +define([m4_indir], defn([indir])) +define([m4_undefine], defn([undefine])) + + +# m4_namespace_register(NAMESPACE, NAME) +# -------------------------------------- +# +# Register NAME in NAMESPACE, i.e., append the binding/unbinding in +# `m4_disable(NAMESPACE)'/`m4_enable(NAMESPACE)'. +m4_define([m4_namespace_register], +[m4_define([m4_disable($1)], + m4_defn([m4_disable($1)])[m4_undefine([$2])])dnl +m4_define([m4_enable($1)], + m4_defn([m4_enable($1)])[m4_define([$2], m4_defn([$1::$2]))])dnl +]) + + # m4_namespace_define(NAMESPACE, NAME, VALUE) # ------------------------------------------- # -# Assign VALUE to NAME in NAMESPACE, and append the binding/unbinding -# in `m4_disable(NAMESPACE)'/`m4_enable(NAMESPACE)'. +# Assign VALUE to NAME in NAMESPACE, and register it. m4_define([m4_namespace_define], [m4_define([$1::$2], [$3])dnl -m4_define([m4_disable($1)], -defn([m4_disable($1)])dnl -[m4_undefine([$2])])dnl -m4_define([m4_enable($1)], -defn([m4_enable($1)])dnl -[m4_define([$2], defn([$1::$2]))])dnl +m4_namespace_register([$1], [$2])dnl ]) @@ -135,19 +145,48 @@ m4_define([define], m4_define([$1], [$2])dnl ]) +# Register define too. +m4_namespace_register(libm4, [define]) + + +# Put the m4 builtins into the `libm4' name space. We cannot use `define' +# here because of the very special handling of `defn' for builtins. +# The following macro is useless but here, so undefine once done. +m4_define(m4_namespace_builtin, +[m4_define([libm4::$1], defn([$1])) +m4_namespace_register(libm4, [$1])]) + +m4_namespace_builtin([builtin]) +m4_namespace_builtin([changequote]) +m4_namespace_builtin([defn]) +m4_namespace_builtin([dnl]) +m4_namespace_builtin([esyscmd]) +m4_namespace_builtin([ifdef]) +m4_namespace_builtin([ifelse]) +m4_namespace_builtin([indir]) +m4_namespace_builtin([patsubst]) +m4_namespace_builtin([popdef]) +m4_namespace_builtin([pushdef]) +m4_namespace_builtin([regexp]) +m4_namespace_builtin([undefine]) +m4_namespace_builtin([syscmd]) +m4_namespace_builtin([sysval]) + +m4_undefine([m4_namespace_builtin]) + # m4_disable(NAMESPACE) # --------------------- # # Undefine all the macros of NAMESPACE. -m4_define([m4_disable], [indir([m4_disable($1)])]) +m4_define([m4_disable], [m4_indir([m4_disable($1)])]) # m4_enable(NAMESPACE) # -------------------- # # Restore all the macros of NAMESPACE. -m4_define([m4_enable], [indir([m4_enable($1)])]) +m4_define([m4_enable], [m4_indir([m4_enable($1)])]) # m4_rename(SRC, DST)