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).
+ Support conditional dependencies (may save configure
+ time and object code).
+ --no-conditional-dependencies
+ Don't use conditional dependencies.
--libtool Use libtool rules.
--no-libtool Don't use libtool rules.
'gl_INIT'. Default is 'gl'.
--po-domain=NAME Specify the prefix of the i18n domain. Usually use
the package name. A suffix '-gnulib' is appended.
+ --witness-c-macro=NAME Specify the C macro that is defined when the
+ sources in this directory are compiled or used.
--vc-files Update version control related files.
--no-vc-files Don't update version control related files
(.gitignore and/or .cvsignore).
Exclude unit tests that require root privileges.
--without-unportable-tests
Exclude unit tests that fail on some platforms.
+ --single-configure Generate a single configure file, not a separate
+ configure file for the tests directory.
Options for --import, --add/remove-import, --update,
--create-[mega]testdir, --[mega]test:
# otherwise
# - excl_unportable_tests true if --without-unportable-tests was given, blank
# otherwise
+# - single_configure true if --single-configure was given, false otherwise
# - avoidlist list of modules to avoid, from --avoid
-# - cond_dependencies true if --conditional-dependencies was given, blank
-# otherwise
+# - cond_dependencies true if --conditional-dependencies was given, false if
+# --no-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
# given, blank otherwise
# - macro_prefix from --macro-prefix
# - po_domain from --po-domain
+# - witness_c_macro from --witness-c-macro
# - vc_files true if --vc-files was given, false if --no-vc-files was
# given, blank otherwise
# - autoconf_minversion minimum supported autoconf version
excl_longrunning_tests=
excl_privileged_tests=
excl_unportable_tests=
+ single_configure=false
avoidlist=
cond_dependencies=
lgpl=
libtool=
macro_prefix=
po_domain=
+ witness_c_macro=
vc_files=
do_changelog=:
doit=:
--without-unportable-tests | --without-unportable-test | --without-unportable-tes | --without-unportable-te | --without-unportable-t | --without-unportable- | --without-unportable | --without-unportabl | --without-unportab | --without-unporta | --without-unport | --without-unpor | --without-unpo | --without-unp | --without-un | --without-u)
excl_unportable_tests=true
shift ;;
+ --single-configure | --single-configur | --single-configu | --single-config | --single-confi | --single-conf | --single-con | --single-con | --single-co | --single-c | --single- | --single | --singl | --sing | --sin | --si)
+ single_configure=true
+ shift ;;
--avoid )
shift
if test $# = 0; then
--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 ;;
+ --no-conditional-dependencies | --no-conditional-dependencie | --no-conditional-dependenci | --no-conditional-dependenc | --no-conditional-dependen | --no-conditional-depende | --no-conditional-depend | --no-conditional-depen | --no-conditional-depe | --no-conditional-dep | --no-conditional-de | --no-conditional-d | --no-conditional- | --no-conditional | --no-conditiona | --no-condition | --no-conditio | --no-conditi | --no-condit | --no-condi | --no-cond | --no-con | --no-co)
+ cond_dependencies=false
+ shift ;;
--lgpl )
lgpl=yes
shift ;;
--po-domain=* )
po_domain=`echo "X$1" | sed -e 's/^X--po-domain=//'`
shift ;;
+ --witness-c-macro )
+ shift
+ if test $# = 0; then
+ func_fatal_error "missing argument for --witness-c-macro"
+ fi
+ witness_c_macro="$1"
+ shift ;;
+ --witness-c-macro=* )
+ witness_c_macro=`echo "X$1" | sed -e 's/^X--witness-c-macro=//'`
+ shift ;;
--vc-files )
vc_files=true
shift ;;
if case "$mode" in import | add-import | remove-import) true;; *) false;; esac; then
if test -n "$excl_cxx_tests" || test -n "$excl_longrunning_tests" \
- || test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests"; then
+ || test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests" \
+ || test "$single_configure" != false; then
echo "gnulib-tool: invalid options for '$mode' mode" 1>&2
echo "Try 'gnulib-tool --help' for more information." 1>&2
func_exit 1
|| test -n "$excl_privileged_tests" || test -n "$excl_unportable_tests" \
|| test -n "$avoidlist" || test -n "$lgpl" || test -n "$makefile_name" \
|| test -n "$macro_prefix" || test -n "$po_domain" \
- || test -n "$vc_files"; then
+ || test -n "$witness_c_macro" || test -n "$vc_files"; then
echo "gnulib-tool: invalid options for 'update' mode" 1>&2
echo "Try 'gnulib-tool --help' for more information." 1>&2
echo "If you really want to modify the gnulib configuration of your project," 1>&2
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
+ if test "$cond_dependencies" = true && test -n "$inctests"; then
echo "gnulib-tool: option --conditional-dependencies is not supported with --with-tests" 1>&2
func_exit 1
fi
;;
esac
# Then the explicit dependencies listed in the module description.
- if ! $modcache; then
- func_lookup_file "modules/$1"
- sed -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file"
- else
- func_cache_lookup_module "$1"
- # Output the field's value, including the final newline (if any).
- if $have_associative; then
- if eval 'test -n "${modcache_dependson[$1]+set}"'; then
- eval 'echo "${modcache_dependson[$1]}"'
- fi
+ { if ! $modcache; then
+ func_lookup_file "modules/$1"
+ sed -n -e "/^Depends-on$sed_extract_prog" < "$lookedup_file"
else
- eval "field_set=\"\$${cachevar}_dependson_set\""
- if test -n "$field_set"; then
- eval "field_value=\"\$${cachevar}_dependson\""
- echo "${field_value}"
+ func_cache_lookup_module "$1"
+ # Output the field's value, including the final newline (if any).
+ if $have_associative; then
+ if eval 'test -n "${modcache_dependson[$1]+set}"'; then
+ eval 'echo "${modcache_dependson[$1]}"'
+ fi
+ else
+ eval "field_set=\"\$${cachevar}_dependson_set\""
+ if test -n "$field_set"; then
+ eval "field_value=\"\$${cachevar}_dependson\""
+ echo "${field_value}"
+ fi
fi
fi
- fi
+ } \
+ | sed -e '/^#/d'
}
# func_get_autoconf_early_snippet module
inmodules="$modules"
outmodules=
fmtc_inc_all_tests="$inc_all_direct_tests"
- if test -n "$cond_dependencies"; then
+ if test "$cond_dependencies" = true; then
for module in $inmodules; do
func_verify_module
if test -n "$module"; then
if test -n "$module"; then
if func_acceptable $module; then
func_append outmodules " $module"
- if test -n "$cond_dependencies"; then
+ if test "$cond_dependencies" = true; 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
done
if $inc; then
func_append inmodules " $dep"
- if test -n "$cond_dependencies"; then
+ if test "$cond_dependencies" = true; then
escaped_dep=`echo "$dep" | sed -e "$sed_escape_dependency"`
sed_extract_condition1='/^ *'"$escaped_dep"' *$/{
s/^.*$/true/p
| sed -e 's/^\(.*\)|.*/|\1/' -e 's/^/ /' -e 's/^ |\(.*\)$/ '"${bold_on}"'\1'"${bold_off}"'/'
}
+# func_modules_transitive_closure_separately
+# Determine main module list and tests-related module list separately.
+# The main module list is the transitive closure of the specified modules,
+# ignoring tests modules. Its lib/* sources go into $sourcebase/. If --lgpl
+# is specified, it will consist only of LGPLed source.
+# The tests-related module list is the transitive closure of the specified
+# modules, including tests modules, minus the main module list excluding
+# modules of applicability 'all'. Its lib/* sources (brought in through
+# dependencies of *-tests modules) go into $testsbase/. It may contain GPLed
+# source, even if --lgpl is specified.
+# Input:
+# - local_gnulib_dir from --local-dir
+# - modcache true or false, from --cache-modules/--no-cache-modules
+# - specified_modules list of specified modules
+# - inctests true if tests should be included, blank otherwise
+# - incobsolete true if obsolete modules among dependencies should be
+# included, blank otherwise
+# - inc_cxx_tests true if C++ interoperability tests should be included,
+# blank otherwise
+# - inc_longrunning_tests true if long-runnings tests should be included,
+# blank otherwise
+# - inc_privileged_tests true if tests that require root privileges should be
+# included, blank otherwise
+# - inc_unportable_tests true if tests that fail on some platforms should be
+# included, blank otherwise
+# - inc_all_direct_tests true if all kinds of problematic unit tests among
+# the unit tests of the specified modules should be
+# included, blank otherwise
+# - inc_all_indirect_tests true if all kinds of problematic unit tests among
+# the unit tests of the dependencies should be
+# included, blank otherwise
+# - excl_cxx_tests true if C++ interoperability tests should be excluded,
+# blank otherwise
+# - excl_longrunning_tests true if long-runnings tests should be excluded,
+# blank otherwise
+# - excl_privileged_tests true if tests that require root privileges should be
+# excluded, blank otherwise
+# - 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:
+# - main_modules list of modules, including dependencies
+# - testsrelated_modules list of tests-related modules, including dependencies
+# - conddep_dependers, conddep_condition information about conditionally
+# enabled modules
+func_modules_transitive_closure_separately ()
+{
+ # Determine main module list.
+ saved_inctests="$inctests"
+ inctests=""
+ modules="$specified_modules"
+ func_modules_transitive_closure
+ main_modules="$modules"
+ inctests="$saved_inctests"
+ if test $verbose -ge 1; then
+ echo "Main module list:"
+ echo "$main_modules" | sed -e 's/^/ /'
+ fi
+ # Determine tests-related module list.
+ echo "$final_modules" | LC_ALL=C sort -u > "$tmp"/final-modules
+ testsrelated_modules=`for module in $main_modules; do
+ if test \`func_get_applicability $module\` = main; then
+ echo $module
+ fi
+ done \
+ | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/final-modules`
+ if test $verbose -ge 1; then
+ echo "Tests-related module list:"
+ echo "$testsrelated_modules" | sed -e 's/^/ /'
+ fi
+}
+
+# func_determine_use_libtests
+# Determines whether a $testsbase/libtests.a is needed.
+# Input:
+# - local_gnulib_dir from --local-dir
+# - modcache true or false, from --cache-modules/--no-cache-modules
+# - testsrelated_modules list of tests-related modules, including dependencies
+# Output:
+# - use_libtests true if a $testsbase/libtests.a is needed, false otherwise
+func_determine_use_libtests ()
+{
+ use_libtests=false
+ for module in $testsrelated_modules; do
+ func_verify_nontests_module
+ if test -n "$module"; then
+ all_files=`func_get_filelist $module`
+ # Test whether some file in $all_files lies in lib/.
+ for f in $all_files; do
+ case $f in
+ lib/*)
+ use_libtests=true
+ break 2
+ ;;
+ esac
+ done
+ fi
+ done
+}
+
# func_modules_add_dummy
# Input:
# - local_gnulib_dir from --local-dir
fi
}
+# func_modules_add_dummy_separately
+# Input:
+# - local_gnulib_dir from --local-dir
+# - modcache true or false, from --cache-modules/--no-cache-modules
+# - main_modules list of modules, including dependencies
+# - testsrelated_modules list of tests-related modules, including dependencies
+# - use_libtests true if a $testsbase/libtests.a is needed, false otherwise
+# Output:
+# - main_modules list of modules, including 'dummy' if needed
+# - testsrelated_modules list of tests-related modules, including 'dummy' if
+# needed
+func_modules_add_dummy_separately ()
+{
+ # Add the dummy module to the main module list if needed.
+ modules="$main_modules"
+ func_modules_add_dummy
+ main_modules="$modules"
+
+ # Add the dummy module to the tests-related module list if needed.
+ if $use_libtests; then
+ modules="$testsrelated_modules"
+ func_modules_add_dummy
+ testsrelated_modules="$modules"
+ fi
+}
+
# func_modules_notice
# Input:
# - local_gnulib_dir from --local-dir
files=`for f in $files; do echo $f; done | LC_ALL=C sort -u`
}
+# func_modules_to_filelist_separately
+# Determine the final file lists.
+# They must be computed separately, because files in lib/* go into
+# $sourcebase/ if they are in the main file list but into $testsbase/
+# if they are in the tests-related file list. Furthermore lib/dummy.c
+# can be in both.
+# Input:
+# - local_gnulib_dir from --local-dir
+# - modcache true or false, from --cache-modules/--no-cache-modules
+# - main_modules list of modules, including dependencies
+# - testsrelated_modules list of tests-related modules, including dependencies
+func_modules_to_filelist_separately ()
+{
+ # Determine final main file list.
+ modules="$main_modules"
+ func_modules_to_filelist
+ main_files="$files"
+ # Determine final tests-related file list.
+ modules="$testsrelated_modules"
+ func_modules_to_filelist
+ testsrelated_files=`echo "$files" | sed -e 's,^lib/,tests=lib/,'`
+ # Merge both file lists.
+ sed_remove_empty_lines='/^$/d'
+ files=`{ echo "$main_files"; echo "$testsrelated_files"; } | sed -e "$sed_remove_empty_lines" | LC_ALL=C sort -u`
+ if test $verbose -ge 0; then
+ echo "File list:"
+ sed_prettyprint_files='s,^tests=lib/\(.*\)$,lib/\1 -> tests/\1,'
+ echo "$files" | sed -e "$sed_prettyprint_files" -e 's/^/ /'
+ fi
+}
+
+# func_compute_include_guard_prefix
+# Determine include_guard_prefix.
+# Input:
+# - macro_prefix prefix of gl_LIBOBJS macros to use
+# Output:
+# - include_guard_prefix replacement for ${gl_include_guard_prefix}
+# - sed_replace_include_guard_prefix
+# sed expression for resolving ${gl_include_guard_prefix}
+func_compute_include_guard_prefix ()
+{
+ if test "$macro_prefix" = gl; then
+ include_guard_prefix='GL'
+ else
+ include_guard_prefix='GL_'`echo "$macro_prefix" | LC_ALL=C tr '[a-z]' '[A-Z]'`
+ fi
+ sed_replace_include_guard_prefix='s/\${gl_include_guard_prefix}/'"${include_guard_prefix}"'/g'
+}
+
# func_execute_command command [args...]
# Executes a command.
# Uses also the variables
# - libtool true if libtool will be used, false or blank otherwise
# - macro_prefix prefix of gl_LIBOBJS macros to use
# - po_domain prefix of i18n domain to use (without -gnulib suffix)
+# - witness_c_macro from --witness-c-macro
# - actioncmd (optional) command that will reproduce this invocation
# - for_test true if creating a package for testing, false otherwise
+# - sed_replace_include_guard_prefix
+# sed expression for resolving ${gl_include_guard_prefix}
# - destfile filename relative to destdir of makefile being generated
# Input/Output:
# - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val}
-e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \
-e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
-e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
- -e "$sed_transform_check_PROGRAMS"
+ -e "$sed_transform_check_PROGRAMS" \
+ -e "$sed_replace_include_guard_prefix"
if test "$module" = 'alloca'; then
echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@"
echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@"
if grep '[^ ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ; then
echo "## begin gnulib module $module"
echo
- if test -n "$cond_dependencies"; then
+ if test "$cond_dependencies" = true; 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 test "$cond_dependencies" = true; then
if func_cond_module_p "$module"; then
echo "endif"
fi
fi
fi
done
+ if test -n "$witness_c_macro"; then
+ cppflags_part1=" -D$witness_c_macro=1"
+ else
+ cppflags_part1=
+ fi
+ if $for_test; then
+ cppflags_part2=" -DGNULIB_STRICT_CHECKING=1"
+ else
+ cppflags_part2=
+ fi
if test -z "$makefile_name"; then
echo
- if $for_test; then
- echo "AM_CPPFLAGS = -DGNULIB_STRICT_CHECKING=1"
- else
- echo "AM_CPPFLAGS ="
- fi
+ echo "AM_CPPFLAGS =$cppflags_part1$cppflags_part2"
echo "AM_CFLAGS ="
+ else
+ if test -n "$cppflags_part1$cppflags_part2"; then
+ echo
+ echo "AM_CPPFLAGS +=$cppflags_part1$cppflags_part2"
+ fi
fi
echo
if LC_ALL=C grep "^[a-zA-Z0-9_]*_${perhapsLT}LIBRARIES *+\{0,1\}= *$libname\\.$libext\$" "$tmp"/allsnippets > /dev/null \
# - m4base relative directory containing autoconf macros
# - testsbase relative directory containing unit test code
# - macro_prefix prefix of gl_LIBOBJS macros to use
+# - witness_c_macro from --witness-c-macro
# - for_test true if creating a package for testing, false otherwise
+# - single_configure true if a single configure file should be generated,
+# false for a separate configure file for the tests
# - use_libtests true if a libtests.a should be built, false otherwise
+# - sed_replace_include_guard_prefix
+# sed expression for resolving ${gl_include_guard_prefix}
# - destfile filename relative to destdir of makefile being generated
# Input/Output:
# - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val}
uses_subdirs=
{
for module in $modules; do
- if $for_test; then
+ if $for_test && ! $single_configure; then
func_verify_tests_module
else
func_verify_module
-e 's,lib_\([A-Z][A-Z]*\),libtests_a_\1,g' \
-e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
-e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
- -e "$sed_transform_check_PROGRAMS"
+ -e "$sed_transform_check_PROGRAMS" \
+ -e "$sed_replace_include_guard_prefix"
if $use_libtests && test "$module" = 'alloca'; then
echo "libtests_a_LIBADD += @${perhapsLT}ALLOCA@"
echo "libtests_a_DEPENDENCIES += @${perhapsLT}ALLOCA@"
fi
echo "AUTOMAKE_OPTIONS = 1.5 foreign${subdir_options}"
echo
- if $for_test; then
+ if $for_test && ! $single_configure; then
echo "ACLOCAL_AMFLAGS = -I ${testsbase_inverse}/${m4base}"
echo
fi
if $for_test; then
echo " -DGNULIB_STRICT_CHECKING=1 \\"
fi
+ if test -n "$witness_c_macro"; then
+ echo " -D$witness_c_macro=1 \\"
+ fi
if test -n "${witness_macro}"; then
echo " -D@${witness_macro}@=1 \\"
fi
toplevel="$3"
disable_libtool="$4"
disable_gettext="$5"
- if test -n "$cond_dependencies"; then
+ if test "$cond_dependencies" = true; then
# Emit the autoconf code for the unconditional modules.
for module in $1; do
eval $verifier
# 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
+# - cond_dependencies true if --conditional-dependencies was given, false if
+# --no-conditional-dependencies was given, blank otherwise
# - lgpl yes or a number if library's license shall be LGPL,
# blank otherwise
# - makefile_name from --makefile-name
# - guessed_libtool true if the configure.ac file uses libtool, false otherwise
# - macro_prefix prefix of gl_EARLY, gl_INIT macros to use
# - po_domain prefix of i18n domain to use (without -gnulib suffix)
+# - witness_c_macro from --witness-c-macro
# - vc_files true if --vc-files was given, false if --no-vc-files was
# given, blank otherwise
# - autoconf_minversion minimum supported autoconf version
cached_libname=
cached_lgpl=
cached_makefile_name=
+ cached_cond_dependencies=
cached_libtool=
cached_macro_prefix=
cached_po_domain=
+ cached_witness_c_macro=
cached_vc_files=
cached_files=
if test -f "$destdir"/$m4base/gnulib-cache.m4; then
/gl_MAKEFILE_NAME(/ {
s,^.*gl_MAKEFILE_NAME([[ ]*\([^]"$`\\)]*\).*$,cached_makefile_name="\1",p
}
+ /gl_CONDITIONAL_DEPENDENCIES/ {
+ s,^.*$,cached_cond_dependencies=true,p
+ }
/gl_LIBTOOL/ {
s,^.*$,cached_libtool=true,p
}
/gl_PO_DOMAIN(/ {
s,^.*gl_PO_DOMAIN([[ ]*\([^]"$`\\)]*\).*$,cached_po_domain="\1",p
}
+ /gl_WITNESS_C_MACRO(/ {
+ s,^.*gl_WITNESS_C_MACRO([[ ]*\([^]"$`\\)]*\).*$,cached_witness_c_macro="\1",p
+ }
/gl_VC_FILES(/ {
s,^.*gl_VC_FILES([[ ]*\([^]"$`\\)]*\).*$,cached_vc_files="\1",p
}'
if test -z "$makefile_name"; then
makefile_name="$cached_makefile_name"
fi
+ # Use conditional dependencies if specified either way.
+ if test -z "$cond_dependencies"; then
+ cond_dependencies="$cached_cond_dependencies"
+ fi
# Use libtool if specified either way, or if guessed.
if test -z "$libtool"; then
if test -n "$cached_m4base"; then
if test -z "$po_domain"; then
po_domain="$cached_po_domain"
fi
+ # The witness_c_macro defaults to the cached one.
+ if test -z "$witness_c_macro"; then
+ witness_c_macro="$cached_witness_c_macro"
+ fi
# The vc_files defaults to the cached one.
if test -z "$vc_files"; then
vc_files="$cached_vc_files"
fi
+ # Ensure constraints.
+ if test "$cond_dependencies" = true && test -n "$inctests"; then
+ echo "gnulib-tool: option --conditional-dependencies is not supported with --with-tests" 1>&2
+ func_exit 1
+ fi
fi
# --without-*-tests options are not supported here.
excl_cxx_tests=
final_modules="$modules"
# Determine main module list and tests-related module list separately.
- # The main module list is the transitive closure of the specified modules,
- # ignoring tests modules. Its lib/* sources go into $sourcebase/. If --lgpl
- # is specified, it will consist only of LGPLed source.
- # The tests-related module list is the transitive closure of the specified
- # modules, including tests modules, minus the main module list excluding
- # modules of applicability 'all'. Its lib/* sources (brought in through
- # dependencies of *-tests modules) go into $testsbase/. It may contain GPLed
- # source, even if --lgpl is specified.
- # Determine main module list.
- saved_inctests="$inctests"
- inctests=""
- modules="$specified_modules"
- func_modules_transitive_closure
- main_modules="$modules"
- inctests="$saved_inctests"
- if test $verbose -ge 1; then
- echo "Main module list:"
- echo "$main_modules" | sed -e 's/^/ /'
- fi
- # Determine tests-related module list.
- echo "$final_modules" | LC_ALL=C sort -u > "$tmp"/final-modules
- testsrelated_modules=`for module in $main_modules; do
- if test \`func_get_applicability $module\` = main; then
- echo $module
- fi
- done \
- | LC_ALL=C sort -u | LC_ALL=C join -v 2 - "$tmp"/final-modules`
- if test $verbose -ge 1; then
- echo "Tests-related module list:"
- echo "$testsrelated_modules" | sed -e 's/^/ /'
- fi
-
- # Add the dummy module to the main module list if needed.
- modules="$main_modules"
- func_modules_add_dummy
- main_modules="$modules"
+ func_modules_transitive_closure_separately
# Determine whether a $testsbase/libtests.a is needed.
- use_libtests=false
- for module in $testsrelated_modules; do
- func_verify_nontests_module
- if test -n "$module"; then
- all_files=`func_get_filelist $module`
- # Test whether some file in $all_files lies in lib/.
- for f in $all_files; do
- case $f in
- lib/*)
- use_libtests=true
- break 2
- ;;
- esac
- done
- fi
- done
+ func_determine_use_libtests
- # Add the dummy module to the tests-related module list if needed.
- if $use_libtests; then
- modules="$testsrelated_modules"
- func_modules_add_dummy
- testsrelated_modules="$modules"
- fi
+ # Add the dummy module to the main module list or to the tests-related module
+ # list if needed.
+ func_modules_add_dummy_separately
# If --lgpl, verify that the licenses of modules are compatible.
if test -n "$lgpl"; then
fi
# Determine the final file lists.
- # They must be computed separately, because files in lib/* go into
- # $sourcebase/ if they are in the main file list but into $testsbase/
- # if they are in the tests-related file list. Furthermore lib/dummy.c
- # can be in both.
- # Determine final main file list.
- modules="$main_modules"
- func_modules_to_filelist
- main_files="$files"
- # Determine final tests-related file list.
- modules="$testsrelated_modules"
- func_modules_to_filelist
- testsrelated_files=`echo "$files" | sed -e 's,^lib/,tests=lib/,'`
- # Merge both file lists.
- sed_remove_empty_lines='/^$/d'
- files=`{ echo "$main_files"; echo "$testsrelated_files"; } | sed -e "$sed_remove_empty_lines" | LC_ALL=C sort -u`
- if test $verbose -ge 0; then
- echo "File list:"
- sed_prettyprint_files='s,^tests=lib/\(.*\)$,lib/\1 -> tests/\1,'
- echo "$files" | sed -e "$sed_prettyprint_files" -e 's/^/ /'
- fi
+ func_modules_to_filelist_separately
test -n "$files" \
|| func_fatal_error "refusing to do nothing"
if test -n "$makefile_name"; then
func_append actioncmd " --makefile-name=$makefile_name"
fi
+ if test "$cond_dependencies" = true; then
+ func_append actioncmd " --conditional-dependencies"
+ else
+ func_append actioncmd " --no-conditional-dependencies"
+ fi
if test "$libtool" = true; then
func_append actioncmd " --libtool"
else
if test -n "$po_domain"; then
func_append actioncmd " --po-domain=$po_domain"
fi
+ if test -n "$witness_c_macro"; then
+ func_append actioncmd " --witness-c-macro=$witness_c_macro"
+ fi
if test -n "$vc_files"; then
if test "$vc_files" = true; then
func_append actioncmd " --vc-files"
fi
func_append actioncmd " `echo $specified_modules`"
+ # Determine include_guard_prefix.
+ func_compute_include_guard_prefix
+
# Default the makefile name to Makefile.am.
if test -n "$makefile_name"; then
makefile_am=$makefile_name
fi
fi
echo "gl_MAKEFILE_NAME([$makefile_name])"
+ if test "$cond_dependencies" = true; then
+ echo "gl_CONDITIONAL_DEPENDENCIES"
+ fi
if test "$libtool" = true; then
echo "gl_LIBTOOL"
fi
echo "gl_MACRO_PREFIX([$macro_prefix])"
echo "gl_PO_DOMAIN([$po_domain])"
+ echo "gl_WITNESS_C_DOMAIN([$witness_c_macro])"
if test -n "$vc_files"; then
echo "gl_VC_FILES([$vc_files])"
fi
echo " m4_pattern_allow([^gl_ES\$])dnl a valid locale name"
echo " m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable"
echo " m4_pattern_allow([^gl_LTLIBOBJS\$])dnl a variable"
- echo " AC_REQUIRE([AC_PROG_RANLIB])"
+ echo " AC_REQUIRE([gl_PROG_AR_RANLIB])"
if test -n "$uses_subdirs"; then
echo " AC_REQUIRE([AM_PROG_CC_C_O])"
fi
echo " gl_m4_base='$m4base'"
func_emit_initmacro_start $macro_prefix
echo " gl_source_base='$sourcebase'"
+ if test -n "$witness_c_macro"; then
+ echo " m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$witness_c_macro])"
+ fi
func_emit_autoconf_snippets "$main_modules" func_verify_module true false true
+ if test -n "$witness_c_macro"; then
+ echo " m4_popdef([gl_MODULE_INDICATOR_CONDITION])"
+ fi
echo " # End of code from modules"
func_emit_initmacro_end $macro_prefix
echo " gltests_libdeps="
# excluded, blank otherwise
# - excl_unportable_tests true if tests that fail on some platforms should be
# excluded, blank otherwise
+# - single_configure true if a single configure file should be generated,
+# false for a separate configure file for the tests
# - avoidlist list of modules to avoid
-# - cond_dependencies true if conditional dependencies shall be supported,
-# blank otherwise
+# - cond_dependencies true if --conditional-dependencies was given, false if
+# --no-conditional-dependencies was given, 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
testsbase=gltests
macro_prefix=gl
po_domain=
+ witness_c_macro=
vc_files=
# Determine final module list.
if test $verbose -ge 0; then
func_show_module_list
fi
+ final_modules="$modules"
+
+ if $single_configure; then
+ # Determine main module list and tests-related module list separately.
+ func_modules_transitive_closure_separately
+ fi
+
+ if $single_configure; then
+ # Determine whether a $testsbase/libtests.a is needed.
+ func_determine_use_libtests
+ fi
# Add the dummy module if needed.
- func_modules_add_dummy
+ if $single_configure; then
+ func_modules_add_dummy_separately
+ else
+ func_modules_add_dummy
+ fi
# Show banner notice of every module.
- func_modules_notice
+ if $single_configure; then
+ modules="$main_modules"
+ func_modules_notice
+ else
+ func_modules_notice
+ fi
# Determine final file list.
- func_modules_to_filelist
- if test $verbose -ge 0; then
- echo "File list:"
- echo "$files" | sed -e 's/^/ /'
+ if $single_configure; then
+ func_modules_to_filelist_separately
+ else
+ func_modules_to_filelist
+ if test $verbose -ge 0; then
+ echo "File list:"
+ echo "$files" | sed -e 's/^/ /'
+ fi
fi
# Add files for which the copy in gnulib is newer than the one that
# "automake --add-missing --copy" would provide.
s,^lib/,$rewritten$sourcebase/,
s,^m4/,$rewritten$m4base/,
s,^tests/,$rewritten$testsbase/,
+ s,^tests=lib/,$rewritten$testsbase/,
s,^top/,$rewritten,
s,^$rewritten,,"
# constructs are executed in a subshell e.g. by Solaris 10 /bin/sh.
exec 5<&0 < "$tmp"/files
while read g f; do
+ case "$f" in
+ tests=lib/*) f=`echo "$f" | sed -e 's,^tests=lib/,lib/,'` ;;
+ esac
func_lookup_file "$f"
if test -n "$lookedup_tmp"; then
cp -p "$lookedup_file" "$testdir/$g"
exec 0<&5 5<&-
}
+ # Determine include_guard_prefix.
+ func_compute_include_guard_prefix
+
# Create Makefile.ams that are for testing.
for_test=true
# Create $sourcebase/Makefile.am.
mkdir -p "$testdir/$sourcebase"
destfile="$sourcebase/Makefile.am"
+ if $single_configure; then
+ modules="$main_modules"
+ fi
func_emit_lib_Makefile_am > "$testdir/$sourcebase/Makefile.am"
any_uses_subdirs="$uses_subdirs"
if test -n "$inctests"; then
test -d "$testdir/$testsbase" || mkdir "$testdir/$testsbase"
- # Viewed from the $testsbase subdirectory, $auxdir is different.
- saved_auxdir="$auxdir"
- auxdir=`echo "$testsbase/" | sed -e 's%[^/][^/]*//*%../%g'`"$auxdir"
- # Create $testsbase/Makefile.am.
- use_libtests=false
- destfile="$testsbase/Makefile.am"
- func_emit_tests_Makefile_am "" > "$testdir/$testsbase/Makefile.am"
- any_uses_subdirs="$any_uses_subdirs$uses_subdirs"
- # Create $testsbase/configure.ac.
- (echo "# Process this file with autoconf to produce a configure script."
- echo "AC_INIT([dummy], [0])"
- echo "AC_CONFIG_AUX_DIR([$auxdir])"
- echo "AM_INIT_AUTOMAKE"
- echo
- echo "AC_CONFIG_HEADERS([config.h])"
- echo
- echo "AC_PROG_CC"
- echo "AC_PROG_INSTALL"
- echo "AC_PROG_MAKE_SET"
- echo "AC_PROG_RANLIB"
- echo
- if test -n "$uses_subdirs"; then
- echo "AM_PROG_CC_C_O"
+ if $single_configure; then
+ # Create $testsbase/Makefile.am.
+ destfile="$testsbase/Makefile.am"
+ modules="$testsrelated_modules"
+ func_emit_tests_Makefile_am "${macro_prefix}tests_WITNESS" > "$testdir/$testsbase/Makefile.am"
+ else
+ # Viewed from the $testsbase subdirectory, $auxdir is different.
+ saved_auxdir="$auxdir"
+ auxdir=`echo "$testsbase/" | sed -e 's%[^/][^/]*//*%../%g'`"$auxdir"
+ # Create $testsbase/Makefile.am.
+ use_libtests=false
+ destfile="$testsbase/Makefile.am"
+ func_emit_tests_Makefile_am "" > "$testdir/$testsbase/Makefile.am"
+ any_uses_subdirs="$any_uses_subdirs$uses_subdirs"
+ # Create $testsbase/configure.ac.
+ (echo "# Process this file with autoconf to produce a configure script."
+ echo "AC_INIT([dummy], [0])"
+ echo "AC_CONFIG_AUX_DIR([$auxdir])"
+ echo "AM_INIT_AUTOMAKE"
echo
- fi
- for module in $modules; do
- func_verify_module
- if test -n "$module"; then
- case $module in
- gnumakefile | maintainer-makefile)
- # These modules are meant to be used only in the top-level directory.
- ;;
- *)
- func_get_autoconf_early_snippet "$module"
- ;;
- esac
+ echo "AC_CONFIG_HEADERS([config.h])"
+ echo
+ echo "AC_PROG_CC"
+ echo "AC_PROG_INSTALL"
+ echo "AC_PROG_MAKE_SET"
+ echo "gl_PROG_AR_RANLIB"
+ echo
+ if test -n "$uses_subdirs"; then
+ echo "AM_PROG_CC_C_O"
+ echo
fi
- done \
- | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
- if test "$libtool" = true; then
- echo "LT_INIT([win32-dll])"
- echo "LT_LANG([C++])"
- echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
- echo "gl_cond_libtool=true"
- else
- echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])"
- echo "gl_cond_libtool=false"
- echo "gl_libdeps="
- echo "gl_ltlibdeps="
- fi
- # Wrap the set of autoconf snippets into an autoconf macro that is then
- # invoked. This is needed because autoconf does not support AC_REQUIRE
- # at the top level:
- # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro
- # but we want the AC_REQUIRE to have its normal meaning (provide one
- # expansion of the required macro before the current point, and only one
- # expansion total).
- echo "AC_DEFUN([gl_INIT], ["
- sed_replace_build_aux='
- :a
- /AC_CONFIG_FILES(.*:build-aux\/.*)/{
- s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)|
- ba
- }'
- echo "gl_m4_base='../$m4base'"
- func_emit_initmacro_start $macro_prefix
- # We don't have explicit ordering constraints between the various
- # autoconf snippets. It's cleanest to put those of the library before
- # those of the tests.
- echo "gl_source_base='../$sourcebase'"
- func_emit_autoconf_snippets "$modules" func_verify_nontests_module false false false
- echo "gl_source_base='.'"
- func_emit_autoconf_snippets "$modules" func_verify_tests_module false false false
- func_emit_initmacro_end $macro_prefix
- # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
- # created using libtool, because libtool already handles the dependencies.
- if test "$libtool" != true; then
- libname_upper=`echo "$libname" | LC_ALL=C tr '[a-z]-' '[A-Z]_'`
- echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\""
- echo " AC_SUBST([${libname_upper}_LIBDEPS])"
- echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
- echo " AC_SUBST([${libname_upper}_LTLIBDEPS])"
- fi
- echo "])"
- func_emit_initmacro_done $macro_prefix $sourcebase # FIXME use $sourcebase or $testsbase?
- echo
- echo "gl_INIT"
- echo
- # Usually $testsbase/config.h will be a superset of config.h. Verify this
- # by "merging" config.h into $testsbase/config.h; look out for gcc warnings.
- echo "AH_TOP([#include \"../config.h\"])"
- echo
- echo "AC_CONFIG_FILES([Makefile])"
- echo "AC_OUTPUT"
- ) > "$testdir/$testsbase/configure.ac"
- auxdir="$saved_auxdir"
+ for module in $modules; do
+ func_verify_module
+ if test -n "$module"; then
+ case $module in
+ gnumakefile | maintainer-makefile)
+ # These modules are meant to be used only in the top-level directory.
+ ;;
+ *)
+ func_get_autoconf_early_snippet "$module"
+ ;;
+ esac
+ fi
+ done \
+ | sed -e '/^$/d;' -e 's/AC_REQUIRE(\[\([^()]*\)\])/\1/'
+ if test "$libtool" = true; then
+ echo "LT_INIT([win32-dll])"
+ echo "LT_LANG([C++])"
+ echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])"
+ echo "gl_cond_libtool=true"
+ else
+ echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])"
+ echo "gl_cond_libtool=false"
+ echo "gl_libdeps="
+ echo "gl_ltlibdeps="
+ fi
+ # Wrap the set of autoconf snippets into an autoconf macro that is then
+ # invoked. This is needed because autoconf does not support AC_REQUIRE
+ # at the top level:
+ # error: AC_REQUIRE(gt_CSHARPCOMP): cannot be used outside of an AC_DEFUN'd macro
+ # but we want the AC_REQUIRE to have its normal meaning (provide one
+ # expansion of the required macro before the current point, and only one
+ # expansion total).
+ echo "AC_DEFUN([gl_INIT], ["
+ sed_replace_build_aux='
+ :a
+ /AC_CONFIG_FILES(.*:build-aux\/.*)/{
+ s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)|
+ ba
+ }'
+ echo "gl_m4_base='../$m4base'"
+ func_emit_initmacro_start $macro_prefix
+ # We don't have explicit ordering constraints between the various
+ # autoconf snippets. It's cleanest to put those of the library before
+ # those of the tests.
+ echo "gl_source_base='../$sourcebase'"
+ func_emit_autoconf_snippets "$modules" func_verify_nontests_module false false false
+ echo "gl_source_base='.'"
+ func_emit_autoconf_snippets "$modules" func_verify_tests_module false false false
+ func_emit_initmacro_end $macro_prefix
+ # _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
+ # created using libtool, because libtool already handles the dependencies.
+ if test "$libtool" != true; then
+ libname_upper=`echo "$libname" | LC_ALL=C tr '[a-z]-' '[A-Z]_'`
+ echo " ${libname_upper}_LIBDEPS=\"\$gl_libdeps\""
+ echo " AC_SUBST([${libname_upper}_LIBDEPS])"
+ echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
+ echo " AC_SUBST([${libname_upper}_LTLIBDEPS])"
+ fi
+ echo "])"
+ func_emit_initmacro_done $macro_prefix $sourcebase # FIXME use $sourcebase or $testsbase?
+ echo
+ echo "gl_INIT"
+ echo
+ # Usually $testsbase/config.h will be a superset of config.h. Verify this
+ # by "merging" config.h into $testsbase/config.h; look out for gcc warnings.
+ echo "AH_TOP([#include \"../config.h\"])"
+ echo
+ echo "AC_CONFIG_FILES([Makefile])"
+ echo "AC_OUTPUT"
+ ) > "$testdir/$testsbase/configure.ac"
+ auxdir="$saved_auxdir"
+ subdirs_with_configure_ac="$subdirs_with_configure_ac $testsbase"
+ fi
func_append subdirs " $testsbase"
- subdirs_with_configure_ac="$subdirs_with_configure_ac $testsbase"
fi
# Create Makefile.am.
echo "m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable"
echo "m4_pattern_allow([^gl_LTLIBOBJS\$])dnl a variable"
echo
- echo "AC_PROG_RANLIB"
+ echo "gl_PROG_AR_RANLIB"
echo
if test -n "$any_uses_subdirs"; then
echo "AM_PROG_CC_C_O"
echo
fi
- for module in $modules; do
- func_verify_nontests_module
+ for module in $final_modules; do
+ if $single_configure; then
+ func_verify_module
+ else
+ func_verify_nontests_module
+ fi
if test -n "$module"; then
func_get_autoconf_early_snippet "$module"
fi
echo "gl_m4_base='$m4base'"
func_emit_initmacro_start $macro_prefix
echo "gl_source_base='$sourcebase'"
- func_emit_autoconf_snippets "$modules" func_verify_nontests_module true false false
+ if $single_configure; then
+ func_emit_autoconf_snippets "$main_modules" func_verify_module true false false
+ else
+ func_emit_autoconf_snippets "$modules" func_verify_nontests_module true false false
+ fi
func_emit_initmacro_end $macro_prefix
+ if $single_configure; then
+ echo " gltests_libdeps="
+ echo " gltests_ltlibdeps="
+ func_emit_initmacro_start ${macro_prefix}tests
+ echo " gl_source_base='$testsbase'"
+ # Define a tests witness macro.
+ echo " ${macro_prefix}tests_WITNESS=IN_GNULIB_TESTS"
+ echo " AC_SUBST([${macro_prefix}tests_WITNESS])"
+ echo " gl_module_indicator_condition=\$${macro_prefix}tests_WITNESS"
+ echo " m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [\$gl_module_indicator_condition])"
+ func_emit_autoconf_snippets "$testsrelated_modules" func_verify_module true false false
+ echo " m4_popdef([gl_MODULE_INDICATOR_CONDITION])"
+ func_emit_initmacro_end ${macro_prefix}tests
+ fi
# _LIBDEPS and _LTLIBDEPS variables are not needed if this library is
# created using libtool, because libtool already handles the dependencies.
if test "$libtool" != true; then
echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\""
echo " AC_SUBST([${libname_upper}_LTLIBDEPS])"
fi
+ if $single_configure; then
+ if $use_libtests; then
+ echo " LIBTESTS_LIBDEPS=\"\$gltests_libdeps\""
+ echo " AC_SUBST([LIBTESTS_LIBDEPS])"
+ fi
+ fi
echo "])"
func_emit_initmacro_done $macro_prefix $sourcebase
+ if $single_configure; then
+ func_emit_initmacro_done ${macro_prefix}tests $testsbase
+ fi
echo
echo "gl_INIT"
echo
func_execute_command ${AUTOHEADER} || func_exit 1
func_execute_command ${AUTOMAKE} --add-missing --copy || func_exit 1
) || func_exit 1
- if test -n "$inctests"; then
+ if test -n "$inctests" && ! $single_configure; then
# Create autogenerated files.
(cd "$testdir/$testsbase" || func_exit 1
# Do not use "${AUTORECONF} --force --install", because it may invoke
# inc_longrunning_tests, inc_privileged_tests,
# inc_unportable_tests, inc_all_tests, avoidlist, sourcebase,
# m4base, pobase, docbase, testsbase, inctests, libname, lgpl,
- # makefile_name, libtool, macro_prefix, po_domain, vc_files
+ # makefile_name, libtool, macro_prefix, po_domain,
+ # witness_c_macro, vc_files
# don't propagate from one directory to another.
(func_import) || func_exit 1
done