User: malcolmp
Date: 05/02/09 04:40:39
Modified: xemacs Tag: sjt-xft ChangeLog configure configure.ac
Log:
configure.ac: Rewritten complex option support with a simpler API and support
for --enable as well a --with.
Revision Changes Path
No revision
No revision
1.418.2.5 +9 -0 XEmacs/xemacs/ChangeLog
Index: ChangeLog
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/ChangeLog,v
retrieving revision 1.418.2.4
retrieving revision 1.418.2.5
diff -u -r1.418.2.4 -r1.418.2.5
--- ChangeLog 2005/02/02 06:06:45 1.418.2.4
+++ ChangeLog 2005/02/09 03:40:18 1.418.2.5
@@ -1,3 +1,12 @@
+2005-02-09 Malcolm Purvis <malcolmp(a)xemacs.org>
+
+ * configure.ac (XE_COMPLEX_OPTION):
+ * configure.ac (XE_COMPLEX_OPTION_HELP_STRING):
+ * configure.ac (XE_COMPLEX_ARG_WITH):
+ * configure.ac (XE_COMPLEX_ARG_ENABLE):
+ Rewritten complex option support with a simpler API and support
+ for --enable as well a --with.
+
2005-02-02 Malcolm Purvis <malcolmp(a)xemacs.org>
* configure.ac Align with the current mainline version of
1.232.2.4 +36 -37 XEmacs/xemacs/configure
Index: configure
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/configure,v
retrieving revision 1.232.2.3
retrieving revision 1.232.2.4
diff -u -r1.232.2.3 -r1.232.2.4
--- configure 2005/02/02 06:06:46 1.232.2.3
+++ configure 2005/02/09 03:40:18 1.232.2.4
@@ -1652,6 +1652,12 @@
+
+
+
+
+
+
MAKE_SUBDIR="$MAKE_SUBDIR lib-src" && if test
"$extra_verbose" = "yes"; then echo " Appending
\"lib-src\" to \$MAKE_SUBDIR"; fi
INSTALL_ARCH_DEP_SUBDIR="$INSTALL_ARCH_DEP_SUBDIR lib-src" && if
test "$extra_verbose" = "yes"; then echo " Appending
\"lib-src\" to \$INSTALL_ARCH_DEP_SUBDIR"; fi
with_dragndrop_default="no"
@@ -1798,85 +1804,78 @@
fi;
-# Xft uses an option complex similar to sound and database
-with_xft_default="" with_xft_types=""
-with_xft_emacs=yes
-test -n "${with_xft_default}" &&
with_xft_default="${with_xft_default},"
-test "${with_xft_emacs}" != "yes" &&
with_xft_default="${with_xft_default}no"
-with_xft_default="${with_xft_default}emacs"
with_xft_notfirst=""
-test -n "${with_xft_types}" && with_xft_types="${with_xft_types}
"
-with_xft_types="${with_xft_types}emacs"
+with_xft_emacs=yes
+
+
with_xft_menubars=yes
-test -n "${with_xft_default}" &&
with_xft_default="${with_xft_default},"
-test "${with_xft_menubars}" != "yes" &&
with_xft_default="${with_xft_default}no"
-with_xft_default="${with_xft_default}menubars"
-with_xft_notfirst=""
-test -n "${with_xft_types}" && with_xft_types="${with_xft_types}
"
-with_xft_types="${with_xft_types}menubars"
+
+
with_xft_tabs=yes
-test -n "${with_xft_default}" &&
with_xft_default="${with_xft_default},"
-test "${with_xft_tabs}" != "yes" &&
with_xft_default="${with_xft_default}no"
-with_xft_default="${with_xft_default}tabs"
-with_xft_notfirst=""
-test -n "${with_xft_types}" && with_xft_types="${with_xft_types}
"
-with_xft_types="${with_xft_types}tabs"
+
+
with_xft_gauges=yes
-test -n "${with_xft_default}" &&
with_xft_default="${with_xft_default},"
-test "${with_xft_gauges}" != "yes" &&
with_xft_default="${with_xft_default}no"
-with_xft_default="${with_xft_default}gauges"
-with_xft_notfirst=""
-test -n "${with_xft_types}" && with_xft_types="${with_xft_types}
"
-with_xft_types="${with_xft_types}gauges"
+
+
+
+with_xft_types="emacs menubars tabs gauges"
+with_xft_default="emacs,menubars,tabs,gauges"
+
+
+
+
# Check whether --with-xft or --without-xft was given.
if test "${with_xft+set}" = set; then
withval="$with_xft"
- for x in `echo "$withval" | sed -e 's/,/ /g'` ; do
+ for x in `echo "$with_xft" | sed -e 's/,/ /g'` ; do
with_xft_all_default=""
with_xft_found=""
case "$x" in
n | no | non | none ) with_xft_all_default=no ;;
a | al | all | both ) with_xft_all_default=yes ;;
esac
+
if test -z "$with_xft_all_default"; then
for y in $with_xft_types; do
if test "$x" = "$y"; then
with_xft_found=yes
- eval `echo "with_xft_$y=yes"`
+ eval "with_xft_$y=yes"
elif test "$x" = "no$y"; then
with_xft_found=yes
- eval `echo "with_xft_$y=no"`
+ eval "with_xft_$y=no"
fi
done
- test -z "with_xft_found" && with_xft_bogus=yes
+ test -z "$with_xft_found" && with_xft_bogus=yes
fi
if test "$with_xft_bogus" = "yes" -o \
\( -n "$with_xft_all_default" -a -n "$with_xft_notfirst"
\) ; then
(echo "$progname: Usage error:"
-echo " " "Valid values for the \`--with-xft' option are:
+echo " " "Valid values for the --with-xft option are:
$with_xft_types. With prefix \"no\", switch it off.
Defaults may be overridden with \`all' or \`none' first in the list.
-Hardcoded default is: \`$with_xft_default'."
+Hardcoded default is: $with_xft_default."
echo " Use \`$progname --help' to show usage.") >&2 &&
exit 1
elif test -n "$with_xft_all_default" ; then
- for y in "$with_xft_types"; do
- eval `echo "with_xft_$y="'$with_xft_all_default'`
+ for y in $with_xft_types; do
+ eval "with_xft_$y=$with_xft_all_default"
done
fi
with_xft_notfirst=yes
done
+unset with_xft_bogus with_xft_found with_xft_notfirst with_xft_types
+unset with_xft_default with_xft_all_default x y
+
+
fi;
+
if test \( "$with_xft_menubars" = "yes" -o
"$with_xft_tabs" = "yes" \
-o "$with_xft_gauges" = "yes" \) -a
"$with_xft_emacs" = "no"; then
{ echo "$as_me:$LINENO: WARNING: Forcing --with-xft=emacs because Xft is
enabled" >&5
echo "$as_me: WARNING: Forcing --with-xft=emacs because Xft is enabled"
>&2;}
with_xft_emacs=yes
fi
-# cleanup
-unset with_xft_bogus with_xft_found with_xft_notfirst with_xft_types
-unset with_xft_default with_xft_all_default x y
# end of Xft parsing
# Check whether --with-zlib or --without-zlib was given.
1.1.14.3 +124 -77 XEmacs/xemacs/configure.ac
Index: configure.ac
===================================================================
RCS file: /pack/xemacscvs/XEmacs/xemacs/configure.ac,v
retrieving revision 1.1.14.2
retrieving revision 1.1.14.3
diff -u -r1.1.14.2 -r1.1.14.3
--- configure.ac 2005/02/02 06:06:58 1.1.14.2
+++ configure.ac 2005/02/09 03:40:30 1.1.14.3
@@ -233,31 +233,20 @@
dnl For example, we might use "--with-xft=all,nomenubars" for compatibility
dnl with XFontSet i18n of menubars. (Silly, Xft looks much better than XFS.)
dnl Processing such an option requires a number of auxiliary variables.
-dnl Use the main variable name for a prefix, eg, "with_xft" for --with-xft.
-dnl Start by declaring it with XE_INIT_COMPLEX_OPTION (prefix), eg:
-dnl XE_INIT_COMPLEX_OPTION ([with_xft])
-dnl which also initializes auxiliary variables. For each possible value,
-dnl declare and intialize it with
-dnl XE_APPEND_COMPLEX_OPTION_DEFAULT (prefix, component, yesno), eg:
-dnl XE_APPEND_COMPLEX_OPTION_DEFAULT ([with_xft], [emacs], [yes])
-dnl This will create a variable named ${prefix}_${component}.
-dnl Next, use XE_PARSE_COMPLEX_OPTION(prefix, cmdline-option) in AC_ARG_WITH
-dnl to parse the value. After XE_PARSE_COMPLEX_OPTION is done, all the
-dnl component variables will have values. The variable $prefix will contain
-dnl the complex value assigned on the command line. Do any sanity-checking
-dnl now. Finally, use XE_CLEANUP_COMPLEX_OPTION(prefix) to clear out the
-dnl namespace of the auxiliary variables.
-dnl
-dnl Probably a preferable API would look like
-dnl
-dnl XE_INIT_COMPLEX_OPTION([--with-xft])
-dnl XE_APPEND_COMPLEX_OPTION_DEFAULT([--with-xft],[tabs],[yes])
-dnl XE_PARSE_COMPLEX_OPTION([--with-xft])
-dnl XE_CLEANUP_COMPLEX_OPTION([--with-xft])
dnl
-dnl The reason for suggesting the command-line flag is that there is already
-dnl a facility for converting it to the variable name somewhere in autoconf.
+dnl Complex options used an expanded forms of AC_ARG_[WITH|ENABLE] called
+dnl XE_COMPLEX_ARG_[WITH|ENABLE] both taking 5 parameters. The first 4
+dnl parameters of these macros are the same as original macros with the
+dnl exception that all four paramaters are REQUIRED. The ACTION-IF-TRUE code
+dnl is run after the argument list has been parsed.
dnl
+dnl The 5th parameter is a list of XE_COMPLEX_OPTION macros that define the
+dnl valid components and their default values. The list must be quoted but
+dnl the individual macros should not.
+dnl
+dnl Option values are stored in the variables with_<package>_<component>
or
+dnl enable_<feature>_<component> (eg with_xft_menubars)
+dnl
dnl There are two possible uses in XEmacs for this kind of facility. One is
dnl exemplified by sound: there are alternative protocols (native, ESD, NAS)
dnl and each is supported by a corresponding library. The other is a single
@@ -265,53 +254,67 @@
dnl XEmacs, as exemplified by Xft. This latter usage may be more common
dnl during development of a feature. Perhaps specialized APIs should be
dnl provided, see comment on XE_COMPLEX_OPTION_HELP_STRING below.
-
-dnl XE_INIT_COMPLEX_OPTION(prefix)
-define([XE_INIT_COMPLEX_OPTION],[[$1]_default="" [$1]_types=""])
-dnl XE_CLEANUP_COMPLEX_OPTION(prefix)
-define([XE_CLEANUP_COMPLEX_OPTION],
-[# cleanup
-unset [$1]_bogus [$1]_found [$1]_notfirst [$1]_types
-unset [$1]_default [$1]_all_default x y])
+dnl XE_COMPLEX_OPTION_DEFAULT(prefix, component, yesno)
+dnl ---------------------------------------------------
+dnl
+dnl Internal macro create the option's shell variable containing the default
+dnl value and to note the values in an option list.
+dnl
+define([XE_EXPAND_COMPLEX_OPTION],
+[[$1]_[$2]=[$3]
+m4_append([XE_COMPONENT_LIST],[$2],[ ])
+dnl Separate with a ':' instead of a ',' (see <prefix>_default
below) to avoid
+dnl confusion with marco parameter lists.
+m4_append([XE_COMPONENT_DEFAULT],[m4_if([$3],no,no)[$2]],[:])
+])
-dnl #### This doesn't read so well for alternative libraries like sound.
-dnl #### Fucking autocrap. AC_HELP_STRING does some weird internal shit,
-dnl so if you quote the second arg with [], you get really bizarre output
-dnl from ./configure --help. Multiple quotes make it worse, and it matters
-dnl whether you define AC_HELP_STRING into XE_COMPLEX_OPTION_HELP_STRING, or
-dnl define XE_COMPLEX_OPTION_HELP_STRING to just do the string substitution
-dnl and invoke it inside of AC_HELP_STRING in the call to AC_ARG_WITH. But
-dnl St. IGNUble himself won't be able to help you if you put a comma into the
-dnl second arg to AC_HELP_STRING without the quotes; autocrap will shit its
-dnl pants. Yet it does fine if arguments to XE_COMPLEX_OPTION_HELP_STRING
-dnl contain commas!
+dnl XE_EXPAND_COMPLEX_OPTIONS(prefix, option_list)
+dnl ----------------------------------------------
dnl
-dnl XE_COMPLEX_OPTION_HELP_STRING(flag, long, short, components, libraries)
-define([XE_COMPLEX_OPTION_HELP_STRING],
-[AC_HELP_STRING([$1],Compile with support for [$2]. Components that can use
-[$3] are [$4]. Prefix component with `no' to disable its use of [$3]. Requires
-[$5] support. Default is [$6].)])
+dnl Internal macro to recursively expand all the options in the option list.
+dnl
+define([XE_EXPAND_COMPLEX_OPTIONS],
+[m4_if([$2], [[]], [],
+ [XE_EXPAND_COMPLEX_OPTION([$1], m4_fst($2))[]dnl
+XE_EXPAND_COMPLEX_OPTIONS([$1], m4_cdr($2))])])
-dnl XE_APPEND_COMPLEX_OPTION_DEFAULT(prefix, component, yesno)
-define([XE_APPEND_COMPLEX_OPTION_DEFAULT],
-[[$1]_[$2]=[$3]
-test -n "${[$1]_default}" &&
[$1]_default="${[$1]_default},"
-test "${[$1]_[$2]}" != "yes" &&
[$1]_default="${[$1]_default}no"
-[$1]_default="${[$1]_default}[$2]"
-[$1]_notfirst=""
-test -n "${[$1]_types}" && [$1]_types="${[$1]_types} "
-[$1]_types="${[$1]_types}[$2]"])
+dnl XE_INIT_COMPLEX_OPTION(prefix, option_list)
+dnl -------------------------------------------
+dnl
+dnl Internal macro to initialise the complex option shell variables.
+dnl Variables of the form <prefix>_<option> contain the default value for
that
+dnl option. <prefix>_types contains a space-separated list of all the options
+dnl and <prefix>_default contains a comma-separated list of all the default
+dnl values.
+dnl
+define([XE_INIT_COMPLEX_OPTION],
+[[$1]_notfirst=""
+dnl
+XE_EXPAND_COMPLEX_OPTIONS($@)
+[$1]_types="XE_COMPONENT_LIST"
+[$1]_default="m4_translit(XE_COMPONENT_DEFAULT,[:],[,])"
+dnl Undefine these macros so that they can be reused by later complex
+dnl options.
+undefine([XE_COMPONENT_LIST])
+undefine([XE_COMPONENT_DEFAULT])
+])
dnl XE_PARSE_COMPLEX_OPTION(prefix, cmdline-flag)
+dnl ---------------------------------------------
+dnl
+dnl Internal macro to parse the option values. If an undeclared option is
+dnl found then an error is generated.
+dnl
define([XE_PARSE_COMPLEX_OPTION],
-[for x in `echo "$withval" | sed -e 's/,/ /g'` ; do
+[for x in `echo "$[$1]" | sed -e 's/,/ /g'` ; do
[$1]_all_default=""
[$1]_found=""
case "$x" in
n | no | non | none ) [$1]_all_default=no ;;
a | al | all | both ) [$1]_all_default=yes ;;
esac
+
if test -z "$[$1]_all_default"; then
for y in $[$1]_types; do
dnl echo "testing x='$x' against y='$y'"
@@ -319,29 +322,79 @@
dnl echo "$x" = "$y"
[$1]_found=yes
dnl echo eval `echo "[$1]_$y=yes"`
- eval `echo "[$1]_$y=yes"`
+ eval "[$1]_$y=yes"
elif test "$x" = "no$y"; then
dnl echo "$x" = "no$y"
[$1]_found=yes
dnl echo eval `echo "[$1]_$y=no"`
- eval `echo "[$1]_$y=no"`
+ eval "[$1]_$y=no"
fi
done
- test -z "[$1]_found" && [$1]_bogus=yes
+ test -z "$[$1]_found" && [$1]_bogus=yes
fi
if test "$[$1]_bogus" = "yes" -o \
\( -n "$[$1]_all_default" -a -n "$[$1]_notfirst" \) ;
then
- USAGE_ERROR(["Valid values for the \`[$2]' option are:
+ USAGE_ERROR(["Valid values for the [$2] option are:
$[$1]_types. With prefix \"no\", switch it off.
Defaults may be overridden with \`all' or \`none' first in the list.
-Hardcoded default is: \`$[$1]_default'."])
+Hardcoded default is: $[$1]_default."])
elif test -n "$[$1]_all_default" ; then
- for y in "$[$1]_types"; do
- eval `echo "[$1]_$y="'$[$1]_all_default'`
+ for y in $[$1]_types; do
+ eval "[$1]_$y=$[$1]_all_default"
done
fi
[$1]_notfirst=yes
done
+unset [$1]_bogus [$1]_found [$1]_notfirst [$1]_types
+unset [$1]_default [$1]_all_default x y
+])
+
+dnl XE_COMPLEX_OPTION(option, yesno)
+dnl --------------------------------
+dnl
+dnl Declare a complex option and its default value. The value MUST be either
+dnl yes or no.
+dnl
+define([XE_COMPLEX_OPTION],[[$1,$2]])
+
+dnl XE_COMPLEX_OPTION_HELP_STRING(flag, long, short, components, libraries)
+dnl -----------------------------------------------------------------------
+dnl Boilerplate help string for complex options.
+dnl #### This doesn't read so well for alternative libraries like sound.
+dnl
+define([XE_COMPLEX_OPTION_HELP_STRING],
+[AC_HELP_STRING([$1],[Compile with support for $2. Components that can use
+$3 are $4. Prefix component with `no' to disable its use of $3. Requires
+$5 support. Default is $6.])])
+
+dnl XE_COMPLEX_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
+dnl [XE_COMPLEX_OPTION(a,yes), ....])
+dnl --------------------------------------------------------------------------
+dnl
+dnl Expanded version of AC_ARG_WITH for complex options. All the parameters
+dnl are required.
+dnl
+define([XE_COMPLEX_ARG_WITH],
+[XE_INIT_COMPLEX_OPTION([with_]patsubst([$1], -, _), m4_shiftn(4, $@))
+AC_ARG_WITH([$1],[$2],
+[XE_PARSE_COMPLEX_OPTION([with_]patsubst([$1], -, _), [--with-$1])
+$3
+],[$4])
+])
+
+dnl XE_COMPLEX_ARG_ENABLE(FEATURE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE,
+dnl [XE_COMPLEX_OPTION, ....])
+dnl --------------------------------------------------------------------------
+dnl
+dnl Expanded version of AC_ARG_ENABLE for complex options. All the parameters
+dnl are required.
+dnl
+define([XE_COMPLEX_ARG_ENABLE],
+[XE_INIT_COMPLEX_OPTION([enable_]patsubst([$1], -, _), m4_shiftn(4, $@))
+AC_ARG_ENABLE([$1],[$2],
+[XE_PARSE_COMPLEX_OPTION([enable_]patsubst([$1], -, _), [--enable-$1])
+$3
+],[$4])
])
dnl -------------------------------------------------------------------------
@@ -439,25 +492,20 @@
useful, for the same reason as JPEG images.]),
[], [])
-# Xft uses an option complex similar to sound and database
-XE_INIT_COMPLEX_OPTION([with_xft])
dnl if you change defaults, make sure to fix arg 6 of the OPTION_HELP macro.
-dnl these should really be enable_xft_*, but COMPLEX_OPTION support doesn't
-dnl grok that mixed with AC_ARG_WITH.
-XE_APPEND_COMPLEX_OPTION_DEFAULT([with_xft],[emacs],[yes])
-XE_APPEND_COMPLEX_OPTION_DEFAULT([with_xft],[menubars],[yes])
-XE_APPEND_COMPLEX_OPTION_DEFAULT([with_xft],[tabs],[yes])
-XE_APPEND_COMPLEX_OPTION_DEFAULT([with_xft],[gauges],[yes])
-dnl handle arguments
-AC_ARG_WITH([xft],
+XE_COMPLEX_ARG_WITH([xft],
[XE_COMPLEX_OPTION_HELP_STRING([--with-xft],
[Xft client-side font rendering and anti-aliasing],
[Xft],
[`emacs' (buffers), `menubars', `tabs', and `gauges'],
[X11, Xft, Xrender, freetype, and fontconfig],
[`emacs,menubars,tabs,gauges'])],
- [XE_PARSE_COMPLEX_OPTION([with_xft],[--with-xft])],
- [])
+ [],[],
+ [XE_COMPLEX_OPTION([emacs],[yes]),
+ XE_COMPLEX_OPTION([menubars],[yes]),
+ XE_COMPLEX_OPTION([tabs],[yes]),
+ XE_COMPLEX_OPTION([gauges],[yes])]
+)
dnl sanity checking
dnl #### Maybe we should XE_DIE here instead? Or fix the UI so that
dnl emacs is always implicit? (I worry that --without-xft would be weird.)
@@ -466,7 +514,6 @@
AC_MSG_WARN([Forcing --with-xft=emacs because Xft is enabled])
with_xft_emacs=yes
fi
-XE_CLEANUP_COMPLEX_OPTION([with_xft])
# end of Xft parsing
AC_ARG_WITH([zlib],
AC_HELP_STRING([--with-zlib],[Support inflate (de)compression internally.]),