-# Names and valid names must not contain the character `,'.
-m4_define([b4_check_for_unrecognized_names],
-[m4_foreach([b4_occurrence],
- $2,
- [m4_pushdef([b4_occurrence], b4_occurrence)
- m4_pushdef([b4_name], m4_car(b4_occurrence))
- m4_pushdef([b4_start], m4_car(m4_shift(b4_occurrence)))
- m4_pushdef([b4_end], m4_shift(m4_shift(b4_occurrence)))
- m4_if(m4_index(m4_if($#, 2, [],
- [[,]m4_quote(m4_shift(m4_shift($*)))[,]]),
- [,]b4_name[,]),
- [-1],
- [b4_complain_at([b4_start], [b4_end],
- [[`%s' is not a recognized %s]],
- [b4_name], [$1])
- ])
- m4_popdef([b4_occurrence])
- m4_popdef([b4_name])
- m4_popdef([b4_start])
- m4_popdef([b4_end])
- ])
-])
+# To invoke b4_check_user_names with TYPE foo, with USER-LIST
+# b4_foo_user_names, with SKELETON-NAMESPACE b4_foo_skeleton_names, and with
+# correct quoting:
+#
+# b4_check_user_names([[foo]], [b4_foo_user_names],
+# [[b4_foo_skeleton_names]])
+m4_define([b4_check_user_names],
+[m4_foreach([b4_occurrence], $2,
+[m4_pushdef([b4_occurrence], b4_occurrence)dnl
+m4_pushdef([b4_user_name], m4_car(b4_occurrence))dnl
+m4_pushdef([b4_start], m4_car(m4_shift(b4_occurrence)))dnl
+m4_pushdef([b4_end], m4_shift(m4_shift(b4_occurrence)))dnl
+m4_ifndef($3[(]m4_quote(b4_user_name)[)],
+ [b4_warn_at([b4_start], [b4_end],
+ [[%s `%s' is not used]],
+ [$1], [b4_user_name])])[]dnl
+m4_popdef([b4_occurrence])dnl
+m4_popdef([b4_user_name])dnl
+m4_popdef([b4_start])dnl
+m4_popdef([b4_end])dnl
+])])
+
+# b4_percent_define_get(VARIABLE)
+# -------------------------------
+# If the %define variable VARIABLE is defined, emit its value. Also, record
+# the skeleton's usage of VARIABLE by defining
+# b4_percent_define_skeleton_variables(VARIABLE).
+#
+# For example:
+#
+# b4_percent_define_get([[foo]])
+m4_define([b4_percent_define_get],
+[m4_define([b4_percent_define_skeleton_variables(]$1[)])dnl
+m4_ifdef([b4_percent_define(]$1[)], [m4_indir([b4_percent_define(]$1[)])])])
+
+# b4_percent_define_ifdef(VARIABLE, IF-TRUE, [IF-FALSE])
+# ------------------------------------------------------
+# If the %define variable VARIABLE is defined, expand IF-TRUE, else expand
+# IF-FALSE. Also, record the skeleton's usage of VARIABLE by defining
+# b4_percent_define_skeleton_variables(VARIABLE).
+m4_define([b4_percent_define_ifdef],
+[m4_ifdef([b4_percent_define(]$1[)],
+ [m4_define([b4_percent_define_skeleton_variables(]$1[)])$2],
+ [$3])])
+
+# b4_percent_define_flag_if(VARIABLE, IF-TRUE, [IF-FALSE])
+# --------------------------------------------------------
+# If the %define variable VARIABLE is defined to anything but "0" or "false",
+# expand IF-TRUE. If it is defined to "0" or "false", expand IF-FALSE. If
+# it is undefined, raise an error (this macro should be preceded by
+# b4_percent_define_default). Also, record the skeleton's usage of VARIABLE by
+# defining b4_percent_define_skeleton_variables(VARIABLE).
+m4_define([b4_percent_define_flag_if],
+[b4_percent_define_ifdef([$1],
+ [m4_case(b4_percent_define_get([$1]),
+ [0], [$3], [false], [$3],
+ [$2])],
+ [m4_fatal([invalid %define variable passed to b4_percent_define_flag_if: ]$1)])])
+
+# b4_percent_define_default(VARIABLE, DEFAULT)
+# --------------------------------------------
+# If the %define variable VARIABLE is undefined, set its value to DEFAULT.
+#
+# For example:
+#
+# b4_percent_define_default([[foo]], [[default value]])
+m4_define([b4_percent_define_default],
+[m4_ifndef([b4_percent_define(]$1[)],
+ [m4_define([b4_percent_define(]$1[)], [$2])])])