[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] conditional dependencies between modules
From: |
Bruno Haible |
Subject: |
[PATCH 1/2] conditional dependencies between modules |
Date: |
Mon, 2 May 2011 01:50:51 +0200 |
User-agent: |
KMail/1.9.9 |
Paul Eggert wrote:
> Thanks, I can verify that this patch worked for Emacs, in that it caused
> 'configure' to not bother to test for strtoull on a host that had strtoumax.
> (Emacs uses strtoumax but not strtoull directly.)
Good, this means that the conditional dependencies worked also in --import
mode.
Meanwhile I've extended the patch so that it works also with circular
conditional dependencies. Previously it used AC_REQUIRE, hence worked only
with a direct acyclic graph of modules.
Here's the proposed patch.
2011-05-01 Bruno Haible <address@hidden>
Support for conditional dependencies.
* doc/gnulib.texi (Module description): Document the syntax of
conditional dependencies.
* gnulib-tool: New option --conditional-dependencies.
(func_usage): Document it.
(cond_dependencies): New variable.
(func_get_automake_snippet_conditional,
func_get_automake_snippet_unconditional): New functions, extracted from
func_get_automake_snippet.
(func_get_automake_snippet): Use them.
(sed_first_32_chars): New variable.
(func_module_shellfunc_name): New function.
(func_module_shellvar_name): New function.
(func_module_conditional_name): New function.
(func_uncond_add_module, func_conddep_add_module, func_cond_module_p,
func_cond_module_condition): New functions.
(func_modules_transitive_closure): Add support for conditional
dependencies.
(func_emit_lib_Makefile_am): For a conditional module, enclose the
conditional automake snippet in an automake conditional.
(func_emit_autoconf_snippet): New function, extracted from
func_emit_autoconf_snippets.
(func_emit_autoconf_snippets): Use it. Emit shell functions that
contain the code for conditional modules.
(func_import, func_create_testdir): Update specification.
*** doc/gnulib.texi.orig Mon May 2 01:40:50 2011
--- doc/gnulib.texi Sun May 1 16:01:50 2011
***************
*** 396,401 ****
--- 396,410 ----
depend on tests modules. (Recall that tests modules are built in a separate
directory.)
+ Each listed required module may be declared a conditional dependency. This
+ is indicated by placing the condition for the dependency on the same line,
+ enclosed in brackets, after the name of the required module. The condition
+ is a shell expression that is run after the module's @code{configure.ac}
+ statements. For example:
+ @smallexample
+ strtoull [test $ac_cv_func_strtoumax = no]
+ @end smallexample
+
@item configure.ac-early
This field contains @file{configure.ac} stuff (Autoconf macro invocations and
shell statements) that are logically placed early in the @file{configure.ac}
*** gnulib-tool.orig Mon May 2 01:40:50 2011
--- gnulib-tool Mon May 2 01:20:07 2011
***************
*** 223,228 ****
--- 223,232 ----
--avoid=MODULE Avoid including the given MODULE. Useful if you
have code that provides equivalent functionality.
This option can be repeated.
+ --conditional-dependencies
+ Support conditional dependencies (experimental,
+ may save configure time and object code, not
+ compatible with --with-tests).
--libtool Use libtool rules.
--no-libtool Don't use libtool rules.
***************
*** 912,917 ****
--- 916,923 ----
# - excl_unportable_tests true if --without-unportable-tests was given, blank
# otherwise
# - avoidlist list of modules to avoid, from --avoid
+ # - cond_dependencies true if --conditional-dependencies was given, blank
+ # otherwise
# - lgpl yes or a number if --lgpl was given, blank otherwise
# - makefile_name from --makefile-name
# - libtool true if --libtool was given, false if --no-libtool was
***************
*** 953,958 ****
--- 959,965 ----
excl_privileged_tests=
excl_unportable_tests=
avoidlist=
+ cond_dependencies=
lgpl=
makefile_name=
libtool=
***************
*** 1002,1008 ****
--extract-* )
mode=`echo "X$1" | sed -e 's/^X--//'`
shift ;;
! --copy-file | --copy-fil | --copy-fi | --copy-f | --copy- | --copy |
--cop | --co )
mode=copy-file
shift ;;
--dir )
--- 1009,1015 ----
--extract-* )
mode=`echo "X$1" | sed -e 's/^X--//'`
shift ;;
! --copy-file | --copy-fil | --copy-fi | --copy-f | --copy- | --copy |
--cop )
mode=copy-file
shift ;;
--dir )
***************
*** 1153,1158 ****
--- 1160,1168 ----
arg=`echo "X$1" | sed -e 's/^X--avoid=//'`
func_append avoidlist " $arg"
shift ;;
+ --conditional-dependencies | --conditional-dependencie |
--conditional-dependenci | --conditional-dependenc | --conditional-dependen |
--conditional-depende | --conditional-depend | --conditional-depen |
--conditional-depe | --conditional-dep | --conditional-de | --conditional-d |
--conditional- | --conditional | --conditiona | --condition | --conditio |
--conditi | --condit | --condi | --cond | --con)
+ cond_dependencies=true
+ shift ;;
--lgpl )
lgpl=yes
shift ;;
***************
*** 1298,1303 ****
--- 1308,1317 ----
if test -z "$pobase" && test -n "$po_domain"; then
func_warning "--po-domain has no effect without a --po-base option"
fi
+ if test -n "$cond_dependencies" && test -n "$inctests"; then
+ echo "gnulib-tool: option --conditional-dependencies is not supported
with --with-tests" 1>&2
+ func_exit 1
+ fi
# Determine the minimum supported autoconf version from the project's
# configure.ac.
***************
*** 2128,2138 ****
fi
}
! # func_get_automake_snippet module
# Input:
# - local_gnulib_dir from --local-dir
# - modcache true or false, from --cache-modules/--no-cache-modules
! func_get_automake_snippet ()
{
if ! $modcache; then
func_lookup_file "modules/$1"
--- 2142,2154 ----
fi
}
! # func_get_automake_snippet_conditional module
! # returns the part of the Makefile.am snippet that can be put inside Automake
! # conditionals.
# Input:
# - local_gnulib_dir from --local-dir
# - modcache true or false, from --cache-modules/--no-cache-modules
! func_get_automake_snippet_conditional ()
{
if ! $modcache; then
func_lookup_file "modules/$1"
***************
*** 2152,2157 ****
--- 2168,2183 ----
fi
fi
fi
+ }
+
+ # func_get_automake_snippet_unconditional module
+ # returns the part of the Makefile.am snippet that must stay outside of
+ # Automake conditionals.
+ # Input:
+ # - local_gnulib_dir from --local-dir
+ # - modcache true or false, from --cache-modules/--no-cache-modules
+ func_get_automake_snippet_unconditional ()
+ {
case "$1" in
*-tests)
# *-tests module live in tests/, not lib/.
***************
*** 2176,2183 ****
--- 2202,2211 ----
sed_extract_mentioned_files='s/^lib_SOURCES[ ]*+=[ ]*//p'
already_mentioned_files=` \
{ if ! $modcache; then
+ func_lookup_file "modules/$1"
sed -n -e "/^Makefile\.am$sed_extract_prog" < "$lookedup_file"
else
+ func_cache_lookup_module "$1"
if $have_associative; then
if eval 'test -n "${modcache_makefile[$1]+set}"'; then
eval 'echo "${modcache_makefile[$1]}"'
***************
*** 2243,2248 ****
--- 2271,2286 ----
esac
}
+ # func_get_automake_snippet module
+ # Input:
+ # - local_gnulib_dir from --local-dir
+ # - modcache true or false, from --cache-modules/--no-cache-modules
+ func_get_automake_snippet ()
+ {
+ func_get_automake_snippet_conditional "$1"
+ func_get_automake_snippet_unconditional "$1"
+ }
+
# func_get_include_directive module
# Input:
# - local_gnulib_dir from --local-dir
***************
*** 2380,2385 ****
--- 2418,2560 ----
return 0
}
+ # sed expression to keep the first 32 characters of each line.
+ sed_first_32_chars='s/^\(................................\).*/\1/'
+
+ # func_module_shellfunc_name module
+ # computes the shell function name that will contain the m4 macros for the
module.
+ # Input:
+ # - macro_prefix prefix to use
+ # Output:
+ # - shellfunc shell function name
+ func_module_shellfunc_name ()
+ {
+ case $1 in
+ *[!a-zA-Z0-9_]*)
+ shellfunc=func_${macro_prefix}_gnulib_m4code_`echo "$1" | md5sum |
LC_ALL=C sed -e "$sed_first_32_chars"` ;;
+ *)
+ shellfunc=func_${macro_prefix}_gnulib_m4code_$1 ;;
+ esac
+ }
+
+ # func_module_shellvar_name module
+ # computes the shell variable name the will be set to true once the m4 macros
+ # for the module have been executed.
+ # Output:
+ # - shellvar shell variable name
+ func_module_shellvar_name ()
+ {
+ case $1 in
+ *[!a-zA-Z0-9_]*)
+ shellvar=${macro_prefix}_gnulib_enabled_`echo "$1" | md5sum | LC_ALL=C
sed -e "$sed_first_32_chars"` ;;
+ *)
+ shellvar=${macro_prefix}_gnulib_enabled_$1 ;;
+ esac
+ }
+
+ # func_module_conditional_name module
+ # computes the automake conditional name for the module.
+ # Output:
+ # - conditional name of automake conditional
+ func_module_conditional_name ()
+ {
+ case $1 in
+ *[!a-zA-Z0-9_]*)
+ conditional=${macro_prefix}_GNULIB_ENABLED_`echo "$1" | md5sum |
LC_ALL=C sed -e "$sed_first_32_chars"` ;;
+ *)
+ conditional=${macro_prefix}_GNULIB_ENABLED_$1 ;;
+ esac
+ }
+
+ # func_uncond_add_module B
+ # notes the presence of B as an unconditional module.
+ #
+ # func_conddep_add_module A B cond
+ # notes the presence of a conditional dependency from module A to module B,
+ # subject to the condition that A is enabled and cond is true.
+ #
+ # func_cond_module_p B
+ # tests whether module B is conditional.
+ #
+ # func_cond_module_condition A B
+ # returns the condition when B should be enabled as a dependency of A, once
the
+ # m4 code for A has been executed.
+ # Output: - condition
+ #
+ if $have_associative; then
+ declare -A conddep_isuncond
+ declare -A conddep_dependers
+ declare -A conddep_condition
+ func_uncond_add_module ()
+ {
+ eval 'conddep_isuncond[$1]=true'
+ eval 'unset conddep_dependers[$1]'
+ }
+ func_conddep_add_module ()
+ {
+ eval 'isuncond="${conddep_isuncond[$2]}"'
+ if test -z "$isuncond"; then
+ # No unconditional dependency to B known at this point.
+ eval 'conddep_dependers[$2]="${conddep_dependers[$2]} $1"'
+ eval 'conddep_condition[$1---$2]="$3"'
+ fi
+ }
+ func_cond_module_p ()
+ {
+ eval 'previous_dependers="${conddep_dependers[$1]}"'
+ test -n "$previous_dependers"
+ }
+ func_cond_module_condition ()
+ {
+ eval 'condition="${conddep_condition[$1---$2]}"'
+ }
+ else
+ func_uncond_add_module ()
+ {
+ case $1 in
+ *[!a-zA-Z0-9_]*)
+ suffix=`echo "$1" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` ;;
+ *)
+ suffix=$1 ;;
+ esac
+ eval 'conddep_isuncond_'"$suffix"'=true'
+ eval 'unset conddep_dependers_'"$suffix"
+ }
+ func_conddep_add_module ()
+ {
+ case $2 in
+ *[!a-zA-Z0-9_]*)
+ suffix=`echo "$2" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` ;;
+ *)
+ suffix=$2 ;;
+ esac
+ eval 'isuncond="${conddep_isuncond_'"$suffix"'}"'
+ if test -z "$isuncond"; then
+ eval 'conddep_dependers_'"$suffix"'="${conddep_dependers_'"$suffix"'}
$1"'
+ suffix=`echo "$1---$2" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"`
+ eval 'conddep_condition_'"$suffix"'="$3"'
+ fi
+ }
+ func_cond_module_p ()
+ {
+ case $1 in
+ *[!a-zA-Z0-9_]*)
+ suffix=`echo "$1" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"` ;;
+ *)
+ suffix=$1 ;;
+ esac
+ eval 'previous_dependers="${conddep_dependers_'"$suffix"'}"'
+ test -n "$previous_dependers"
+ }
+ func_cond_module_condition ()
+ {
+ suffix=`echo "$1---$2" | md5sum | LC_ALL=C sed -e "$sed_first_32_chars"`
+ eval 'condition="${conddep_condition_'"$suffix"'}"'
+ }
+ fi
+
+ sed_dependencies_without_conditions='s/ *\[.*//'
+
# func_modules_transitive_closure
# Input:
# - local_gnulib_dir from --local-dir
***************
*** 2411,2421 ****
--- 2586,2601 ----
# - excl_unportable_tests true if tests that fail on some platforms should be
# excluded, blank otherwise
# - avoidlist list of modules to avoid
+ # - cond_dependencies true if conditional dependencies shall be supported,
+ # blank otherwise
# - tmp pathname of a temporary directory
# Output:
# - modules list of modules, including dependencies
+ # - conddep_dependers, conddep_condition information about conditionally
+ # enabled modules
func_modules_transitive_closure ()
{
+ sed_escape_dependency='s|\([/.]\)|\\\1|g'
# In order to process every module only once (for speed), process an "input
# list" of modules, producing an "output list" of modules. During each
round,
# more modules can be queued in the input list. Once a module on the input
***************
*** 2425,2430 ****
--- 2605,2620 ----
inmodules="$modules"
outmodules=
fmtc_inc_all_tests="$inc_all_direct_tests"
+ if test -n "$cond_dependencies"; then
+ for module in $inmodules; do
+ func_verify_module
+ if test -n "$module"; then
+ if func_acceptable $module; then
+ func_uncond_add_module $module
+ fi
+ fi
+ done
+ fi
while test -n "$inmodules"; do
inmodules_this_round="$inmodules"
inmodules= # Accumulator, queue for next round
***************
*** 2433,2439 ****
if test -n "$module"; then
if func_acceptable $module; then
func_append outmodules " $module"
! deps=`func_get_dependencies $module`
# Duplicate dependencies are harmless, but Jim wants a warning.
duplicated_deps=`echo "$deps" | LC_ALL=C sort | LC_ALL=C uniq -d`
if test -n "$duplicated_deps"; then
--- 2623,2645 ----
if test -n "$module"; then
if func_acceptable $module; then
func_append outmodules " $module"
! if test -n "$cond_dependencies"; then
! if func_get_automake_snippet_conditional $module | grep '^if ' >
/dev/null; then
! # A module whose Makefile.am snippet contains a reference to an
! # automake conditional. If we were to use it conditionally, we
! # would get an error
! # configure: error: conditional "..." was never defined.
! # because automake 1.11.1 does not handle nested conditionals
! # correctly. As a workaround, make the module unconditional.
! func_uncond_add_module $module
! fi
! if func_cond_module_p $module; then
! conditional=true
! else
! conditional=false
! fi
! fi
! deps=`func_get_dependencies $module | sed -e
"$sed_dependencies_without_conditions"`
# Duplicate dependencies are harmless, but Jim wants a warning.
duplicated_deps=`echo "$deps" | LC_ALL=C sort | LC_ALL=C uniq -d`
if test -n "$duplicated_deps"; then
***************
*** 2486,2491 ****
--- 2692,2715 ----
done
if $inc; then
func_append inmodules " $dep"
+ if test -n "$cond_dependencies"; then
+ escaped_dep=`echo "$dep" | sed -e "$sed_escape_dependency"`
+ sed_extract_condition1='/^ *'"$escaped_dep"'
*$/{s/^.*$/true/p}'
+ sed_extract_condition2='/^ *'"$escaped_dep"' *\[.*\] *$/{s/^
*'"$escaped_dep"' *\[\(.*\)\] *$/\1/p}'
+ condition=`func_get_dependencies $module | sed -n -e
"$sed_extract_condition1" -e "$sed_extract_condition2"`
+ if test "$condition" = true; then
+ condition=
+ fi
+ if test -n "$condition"; then
+ func_conddep_add_module "$module" "$dep" "$condition"
+ else
+ if $conditional; then
+ func_conddep_add_module "$module" "$dep" true
+ else
+ func_uncond_add_module "$dep"
+ fi
+ fi
+ fi
fi
done
fi
***************
*** 2807,2813 ****
func_verify_nontests_module
if test -n "$module"; then
{
! func_get_automake_snippet "$module" |
LC_ALL=C \
sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
-e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
--- 3031,3037 ----
func_verify_nontests_module
if test -n "$module"; then
{
! func_get_automake_snippet_conditional "$module" |
LC_ALL=C \
sed -e 's,lib_LIBRARIES,lib%_LIBRARIES,g' \
-e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
***************
*** 2820,2835 ****
echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@"
echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@"
fi
! } > "$tmp"/amsnippet
# Skip the contents if it's entirely empty.
! if grep '[^ ]' "$tmp"/amsnippet > /dev/null ; then
echo "## begin gnulib module $module"
echo
! cat "$tmp"/amsnippet
echo "## end gnulib module $module"
echo
fi
! rm -f "$tmp"/amsnippet
# Test whether there are some source files in subdirectories.
for f in `func_get_filelist "$module"`; do
case $f in
--- 3044,3075 ----
echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@"
echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@"
fi
! } > "$tmp"/amsnippet1
! {
! func_get_automake_snippet_unconditional "$module" |
! LC_ALL=C sed -e
's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g'
! } > "$tmp"/amsnippet2
# Skip the contents if it's entirely empty.
! if grep '[^ ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ;
then
echo "## begin gnulib module $module"
echo
! if test -n "$cond_dependencies"; then
! if func_cond_module_p "$module"; then
! func_module_conditional_name "$module"
! echo "if $conditional"
! fi
! fi
! cat "$tmp"/amsnippet1
! if test -n "$cond_dependencies"; then
! if func_cond_module_p "$module"; then
! echo "endif"
! fi
! fi
! cat "$tmp"/amsnippet2
echo "## end gnulib module $module"
echo
fi
! rm -f "$tmp"/amsnippet1 "$tmp"/amsnippet2
# Test whether there are some source files in subdirectories.
for f in `func_get_filelist "$module"`; do
case $f in
***************
*** 3360,3422 ****
echo "])"
}
# func_emit_autoconf_snippets modules verifier toplevel disable_libtool
disable_gettext
# collects and emit the autoconf snippets of a set of modules.
- # - modules is the list of modules.
- # - verifier is one of func_verify_module, func_verify_nontests_module,
- # func_verify_tests_module. It selects the subset of $modules to consider.
- # - toplevel is true or false. 'false' means a subordinate use of gnulib-tool.
- # - disable_libtool is true or false. It tells whether to disable libtool
- # handling even if it has been specified through the command line options.
- # - disable_gettext is true or false. It tells whether to disable
AM_GNU_GETTEXT
- # invocations.
# Input:
# - local_gnulib_dir from --local-dir
# - modcache true or false, from --cache-modules/--no-cache-modules
# - sed_replace_build_aux sed expression that replaces reference to build-aux
func_emit_autoconf_snippets ()
{
verifier="$2"
toplevel="$3"
disable_libtool="$4"
disable_gettext="$5"
! for module in $1; do
! eval $verifier # one of func_verify_module, func_verify_nontests_module,
func_verify_tests_module.
! if test -n "$module"; then
! if { case $module in
! gnumakefile | maintainer-makefile)
! # These modules are meant to be used only in the top-level
directory.
! $toplevel ;;
! *)
! true ;;
! esac
! }; then
! func_get_autoconf_snippet "$module" \
! | sed -e '/^$/d;' -e 's/^/ /' \
! -e "$sed_replace_build_aux" \
! | { if $disable_libtool; then
! sed -e 's/\$gl_cond_libtool/false/g' \
! -e 's/gl_libdeps/gltests_libdeps/g' \
! -e 's/gl_ltlibdeps/gltests_ltlibdeps/g'
else
! cat
fi
! } \
! | { if $disable_gettext; then
! sed -e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add
AM_GNU_GETTEXT([external]) or similar to configure.ac./'
else
! cat
fi
! }
! if test "$module" = 'alloca' && test "$libtool" = true && !
$disable_libtool; then
! echo 'changequote(,)dnl'
! echo 'LTALLOCA=`echo "$ALLOCA" | sed -e '"'"'s/\.[^.]* /.lo
/g;s/\.[^.]*$/.lo/'"'"'`'
! echo 'changequote([, ])dnl'
! echo 'AC_SUBST([LTALLOCA])'
fi
fi
! fi
! done
}
# func_import modules
--- 3600,3787 ----
echo "])"
}
+ # func_emit_autoconf_snippet indentation
+ # emits the autoconf snippet of a module.
+ # Input:
+ # - local_gnulib_dir from --local-dir
+ # - modcache true or false, from --cache-modules/--no-cache-modules
+ # - sed_replace_build_aux sed expression that replaces reference to build-aux
+ # - module the module name
+ # - toplevel true or false. 'false' means a subordinate use of
+ # gnulib-tool.
+ # - disable_libtool true or false. It tells whether to disable libtool
+ # handling even if it has been specified through the
+ # command line options.
+ # - disable_gettext true or false. It tells whether to disable
AM_GNU_GETTEXT
+ # invocations.
+ # - indentation spaces to prepend on each line
+ func_emit_autoconf_snippet ()
+ {
+ if { case $module in
+ gnumakefile | maintainer-makefile)
+ # These modules are meant to be used only in the top-level
directory.
+ $toplevel ;;
+ *)
+ true ;;
+ esac
+ }; then
+ func_get_autoconf_snippet "$module" \
+ | sed -e '/^$/d;' -e "s/^/$indentation/" \
+ -e "$sed_replace_build_aux" \
+ | { if $disable_libtool; then
+ sed -e 's/\$gl_cond_libtool/false/g' \
+ -e 's/gl_libdeps/gltests_libdeps/g' \
+ -e 's/gl_ltlibdeps/gltests_ltlibdeps/g'
+ else
+ cat
+ fi
+ } \
+ | { if $disable_gettext; then
+ sed -e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add
AM_GNU_GETTEXT([external]) or similar to configure.ac./'
+ else
+ cat
+ fi
+ }
+ if test "$module" = 'alloca' && test "$libtool" = true && !
$disable_libtool; then
+ echo 'changequote(,)dnl'
+ echo 'LTALLOCA=`echo "$ALLOCA" | sed -e '"'"'s/\.[^.]* /.lo
/g;s/\.[^.]*$/.lo/'"'"'`'
+ echo 'changequote([, ])dnl'
+ echo 'AC_SUBST([LTALLOCA])'
+ fi
+ fi
+ }
+
# func_emit_autoconf_snippets modules verifier toplevel disable_libtool
disable_gettext
# collects and emit the autoconf snippets of a set of modules.
# Input:
# - local_gnulib_dir from --local-dir
# - modcache true or false, from --cache-modules/--no-cache-modules
# - sed_replace_build_aux sed expression that replaces reference to build-aux
+ # - modules the list of modules.
+ # - verifier one of func_verify_module, func_verify_nontests_module,
+ # func_verify_tests_module. It selects the subset of
+ # $modules to consider.
+ # - toplevel true or false. 'false' means a subordinate use of
+ # gnulib-tool.
+ # - disable_libtool true or false. It tells whether to disable libtool
+ # handling even if it has been specified through the
+ # command line options.
+ # - disable_gettext true or false. It tells whether to disable
AM_GNU_GETTEXT
+ # invocations.
func_emit_autoconf_snippets ()
{
verifier="$2"
toplevel="$3"
disable_libtool="$4"
disable_gettext="$5"
! if test -n "$cond_dependencies"; then
! # Emit the autoconf code for the unconditional modules.
! for module in $1; do
! eval $verifier
! if test -n "$module"; then
! if func_cond_module_p "$module"; then
! :
! else
! func_emit_autoconf_snippet " "
! fi
! fi
! done
! # Initialize the shell variables indicating that the modules are enabled.
! for module in $1; do
! eval $verifier
! if test -n "$module"; then
! if func_cond_module_p "$module"; then
! func_module_shellvar_name "$module"
! echo " $shellvar=false"
! fi
! fi
! done
! # Emit the autoconf code for the conditional modules, each in a separate
! # function. This makes it possible to support cycles among conditional
! # modules.
! for module in $1; do
! eval $verifier
! if test -n "$module"; then
! if func_cond_module_p "$module"; then
! func_module_shellfunc_name "$module"
! func_module_shellvar_name "$module"
! echo " $shellfunc ()"
! echo ' {'
! echo " if ! \$$shellvar; then"
! func_emit_autoconf_snippet " "
! echo " $shellvar=true"
! deps=`func_get_dependencies $module | sed -e
"$sed_dependencies_without_conditions"`
! for dep in $deps; do
! if func_cond_module_p "$dep"; then
! func_module_shellfunc_name "$dep"
! func_cond_module_condition "$module" "$dep"
! if test "$condition" != true; then
! echo ' if $condition; then'
! echo " $shellfunc"
! echo ' fi'
else
! echo " $shellfunc"
fi
! else
! # The autoconf code for $dep has already been emitted above and
! # therefore is already executed when this function is run.
! :
! fi
! done
! echo ' fi'
! echo ' }'
! fi
! fi
! done
! # Emit the dependencies from the unconditional to the conditional modules.
! for module in $1; do
! eval $verifier
! if test -n "$module"; then
! if func_cond_module_p "$module"; then
! :
! else
! deps=`func_get_dependencies $module | sed -e
"$sed_dependencies_without_conditions"`
! for dep in $deps; do
! if func_cond_module_p "$dep"; then
! func_module_shellfunc_name "$dep"
! func_cond_module_condition "$module" "$dep"
! if test "$condition" != true; then
! echo " if $condition; then"
! echo " $shellfunc"
! echo ' fi'
else
! echo " $shellfunc"
fi
! else
! # The autoconf code for $dep has already been emitted above and
! # therefore is already executed when this code is run.
! :
! fi
! done
fi
fi
! done
! # Define the Automake conditionals.
! echo " m4_pattern_allow([^${macro_prefix}_GNULIB_ENABLED_])"
! for module in $1; do
! eval $verifier
! if test -n "$module"; then
! if func_cond_module_p "$module"; then
! func_module_conditional_name "$module"
! func_module_shellvar_name "$module"
! echo " AM_CONDITIONAL([$conditional], [\$$shellvar])"
! fi
! fi
! done
! else
! # Ignore the conditions, and enable all modules unconditionally.
! for module in $1; do
! eval $verifier
! if test -n "$module"; then
! func_emit_autoconf_snippet " "
! fi
! done
! fi
}
# func_import modules
***************
*** 3445,3450 ****
--- 3810,3817 ----
# otherwise
# - inc_all_tests true if --with-all-tests was given, blank otherwise
# - avoidlist list of modules to avoid, from --avoid
+ # - cond_dependencies true if conditional dependencies shall be supported,
+ # blank otherwise
# - lgpl yes or a number if library's license shall be LGPL,
# blank otherwise
# - makefile_name from --makefile-name
***************
*** 4897,4902 ****
--- 5264,5271 ----
# - excl_unportable_tests true if tests that fail on some platforms should be
# excluded, blank otherwise
# - avoidlist list of modules to avoid
+ # - cond_dependencies true if conditional dependencies shall be supported,
+ # blank otherwise
# - libtool true if --libtool was given, false if --no-libtool was
# given, blank otherwise
# - symbolic true if files should be symlinked, copied otherwise
--
In memoriam Itzhak Katzenelson <http://en.wikipedia.org/wiki/Itzhak_Katzenelson>
- [PATCH 1/2] conditional dependencies between modules,
Bruno Haible <=