Hi Yoann, > The --tests-base argument is not saved within gnulib-cache.m4. The > attached patch fixes this issue.
It is saved, but only as argument of gl_TESTS_BASE, not in the comment. I have applied your patch. > Additionally, I'm running into another problem when cross compiling for > Win32 systems: > > - Importing GnuLib file using the following command: > > ../gnulib/gnulib-tool --import --dir=. --lib=libmissing > --tests-base=libmissing/tests --source-base=libmissing > --m4-base=libmissing/m4 --doc-base=libmissing/doc --aux-dir=. > --with-tests --lgpl --libtool --macro-prefix=gl --no-vc-files [modules > list] > > - Then editing libmissing/Makefile.am by hand to list the "tests" > directory as SUBDIRS (shouldn't this be handled automatically?). Right, it should be handled automatically. Currently gnulib-tool is asking the user to make a change to a file that is generated by gnulib-tool, and invoking "gnulib-tool --import" once again will erase the manual change. I'm fixing this through the patch below. > - After generating the autotools build system, doing 'make check' will > result in the following error (only when cross compiling for Win32 > systems): > > > $ make check > make check-recursive > make[1]: Entering directory > `/home/yoann/dev/prelude/git/libprelude/libmissing' > Making check in tests > make[2]: Entering directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > make check-recursive > make[3]: Entering directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > make[4]: Entering directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > make libtests.a test-alloca-opt.exe test-arpa_inet.exe test-c-ctype.exe > test-cond.exe test-errno.exe test-fopen.exe test-fseeko.exe > test-getaddrinfo.exe test-getdelim.exe test-getline.exe > test-gettimeofday.exe test-lock.exe test-lseek.exe test-memchr.exe > test-memcmp.exe test-memmem.exe test-netinet_in.exe test-perror.exe > test-poll.exe test-sleep.exe test-snprintf.exe test-sockets.exe > test-stdbool.exe test-stdint.exe test-stdio.exe test-stdlib.exe > test-strcasestr.exe test-strerror.exe test-string.exe test-strings.exe > test-sys_select.exe test-sys_socket.exe test-sys_stat.exe > test-sys_time.exe test-time.exe test-tls.exe test-unistd.exe > test-vasnprintf.exe test-vsnprintf.exe test-wchar.exe test-wctype.exe > make[5]: Entering directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > make[5]: `libtests.a' is up to date. > make[5]: `test-alloca-opt.exe' is up to date. > make[5]: `test-arpa_inet.exe' is up to date. > make[5]: `test-c-ctype.exe' is up to date. > make[5]: `test-cond.exe' is up to date. > make[5]: `test-errno.exe' is up to date. > make[5]: `test-fopen.exe' is up to date. > make[5]: `test-fseeko.exe' is up to date. > make[5]: `test-getaddrinfo.exe' is up to date. > make[5]: `test-getdelim.exe' is up to date. > make[5]: `test-getline.exe' is up to date. > make[5]: `test-gettimeofday.exe' is up to date. > make[5]: `test-lock.exe' is up to date. > make[5]: `test-lseek.exe' is up to date. > make[5]: `test-memchr.exe' is up to date. > make[5]: `test-memcmp.exe' is up to date. > make[5]: `test-memmem.exe' is up to date. > make[5]: `test-netinet_in.exe' is up to date. > make[5]: `test-perror.exe' is up to date. > make[5]: `test-poll.exe' is up to date. > make[5]: `test-sleep.exe' is up to date. > make[5]: `test-snprintf.exe' is up to date. > make[5]: `test-sockets.exe' is up to date. > make[5]: `test-stdbool.exe' is up to date. > make[5]: `test-stdint.exe' is up to date. > make[5]: `test-stdio.exe' is up to date. > make[5]: `test-stdlib.exe' is up to date. > make[5]: `test-strcasestr.exe' is up to date. > make[5]: `test-strerror.exe' is up to date. > make[5]: `test-string.exe' is up to date. > make[5]: `test-strings.exe' is up to date. > make[5]: `test-sys_select.exe' is up to date. > make[5]: `test-sys_socket.exe' is up to date. > make[5]: `test-sys_stat.exe' is up to date. > make[5]: `test-sys_time.exe' is up to date. > make[5]: `test-time.exe' is up to date. > make[5]: `test-tls.exe' is up to date. > make[5]: `test-unistd.exe' is up to date. > make[5]: `test-vasnprintf.exe' is up to date. > make[5]: `test-vsnprintf.exe' is up to date. > make[5]: `test-wchar.exe' is up to date. > make[5]: `test-wctype.exe' is up to date. > make[5]: Leaving directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > make check-TESTS > make[5]: Entering directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > i586-mingw32msvc-gcc -std=gnu99 -g -O2 test-alloca-opt.c -o > test-alloca-opt > test-alloca-opt.c:19:20: error: config.h: No such file or directory > test-alloca-opt.c:21:20: error: alloca.h: No such file or directory > make[5]: *** [test-alloca-opt] Error 1 > make[5]: Leaving directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > make[4]: *** [check-am] Error 2 > make[4]: Leaving directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > make[3]: *** [check-recursive] Error 1 > make[3]: Leaving directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > make[2]: *** [check] Error 2 > make[2]: Leaving directory > `/home/yoann/dev/prelude/git/libprelude/libmissing/tests' > make[1]: *** [check-recursive] Error 1 > make[1]: Leaving directory > `/home/yoann/dev/prelude/git/libprelude/libmissing' > make: *** [check] Error 2 Can you investigate? I cannot reproduce. I took GNU hello-2.3, executed $ .../gnulib-tool --import --dir=. --lib=libmissing --tests-base=libmissing/tests --source-base=libmissing --m4-base=libmissing/m4 --doc-base=libmissing/doc --aux-dir=build-aux --with-tests --lgpl --macro-prefix=mi --no-vc-files alloca-opt c-ctype errno fopen fseeko gettimeofday lseek memchr memcmp memmem perror stdbool stdint stdio stdlib wchar wctype $ ./configure; make clean; make distclean $ ./configure; make; make check and the compilation of test-alloca-opt.c succeeded: gcc -DHAVE_CONFIG_H -I. -I../.. -I. -I. -I../.. -I./../.. -I../../libmissing -I./../../libmissing -g -O2 -MT test-alloca-opt.o -MD -MP -MF .deps/test-alloca-opt.Tpo -c -o test-alloca-opt.o test-alloca-opt.c mv -f .deps/test-alloca-opt.Tpo .deps/test-alloca-opt.Po gcc -g -O2 -o test-alloca-opt test-alloca-opt.o libtests.a ../../libmissing/libmissing.a libtests.a You may want to look what are the definitions of DEFS, AM_CPPFLAGS and similar in your libmissing/tests/Makefile.am and in your config.status. Bruno 2008-09-25 Bruno Haible <[EMAIL PROTECTED]> * gnulib-tool: Don't ask the user to perform edits in the generated Makefile.ams. (func_emit_lib_Makefile_am): Emit empty SUBDIRS. Execute edits that apply to the Makefile.am being generated. (func_emit_tests_Makefile_am): Execute edits that apply to the Makefile.am being generated. (func_import): Setup list of Makefile.am edits before emitting the Makefile.ams, not at the end. (func_create_testdir): Update. Reported by Yoann Vandoorselaere <[EMAIL PROTECTED]>. *** gnulib-tool.orig 2008-09-25 14:32:03.000000000 +0200 --- gnulib-tool 2008-09-25 14:25:41.000000000 +0200 *************** *** 1664,1669 **** --- 1664,1673 ---- # - po_domain prefix of i18n domain to use (without -gnulib suffix) # - actioncmd (optional) command that will reproduce this invocation # - for_test true if creating a package for testing, false otherwise + # - destfile filename relative to destdir of makefile being generated + # Input/Output: + # - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val} + # list of edits to be done to Makefile.am variables # Output: # - uses_subdirs nonempty if object files in subdirs exist func_emit_lib_Makefile_am () *************** *** 1748,1753 **** --- 1752,1758 ---- fi echo if test -z "$makefile_name"; then + echo "SUBDIRS =" echo "noinst_HEADERS =" echo "noinst_LIBRARIES =" echo "noinst_LTLIBRARIES =" *************** *** 1766,1771 **** --- 1771,1792 ---- echo "CLEANFILES =" echo "DISTCLEANFILES =" echo "MAINTAINERCLEANFILES =" + fi + # Execute edits that apply to the Makefile.am being generated. + edit=0 + while test $edit != $makefile_am_edits; do + edit=`expr $edit + 1` + eval dir=\"\$makefile_am_edit${edit}_dir\" + eval var=\"\$makefile_am_edit${edit}_var\" + eval val=\"\$makefile_am_edit${edit}_val\" + if test -n "$var"; then + if test "${dir}Makefile.am" = "$destfile" || test "./${dir}Makefile.am" = "$destfile"; then + echo "${var} += ${val}" + eval "makefile_am_edit${edit}_var=" + fi + fi + done + if test -z "$makefile_name"; then echo echo "AM_CPPFLAGS =" fi *************** *** 1897,1902 **** --- 1918,1927 ---- # - macro_prefix prefix of gl_LIBOBJS macros to use # - for_test true if creating a package for testing, false otherwise # - use_libtests true if a libtests.a should be built, false otherwise + # - destfile filename relative to destdir of makefile being generated + # Input/Output: + # - makefile_am_edits and makefile_am_edit${edit}_{dir,var,val} + # list of edits to be done to Makefile.am variables # Output: # - uses_subdirs nonempty if object files in subdirs exist func_emit_tests_Makefile_am () *************** *** 2008,2013 **** --- 2033,2052 ---- echo "CLEANFILES =" echo "DISTCLEANFILES =" echo "MAINTAINERCLEANFILES =" + # Execute edits that apply to the Makefile.am being generated. + edit=0 + while test $edit != $makefile_am_edits; do + edit=`expr $edit + 1` + eval dir=\"\$makefile_am_edit${edit}_dir\" + eval var=\"\$makefile_am_edit${edit}_var\" + eval val=\"\$makefile_am_edit${edit}_val\" + if test -n "$var"; then + if test "${dir}Makefile.am" = "$destfile" || test "./${dir}Makefile.am" = "$destfile"; then + echo "${var} += ${val}" + eval "makefile_am_edit${edit}_var=" + fi + fi + done echo echo "AM_CPPFLAGS = \\" echo " -I. -I\$(srcdir) \\" *************** *** 2857,2864 **** --- 2896,2949 ---- # Create normal Makefile.ams. for_test=false + # Setup list of Makefile.am edits that are to be performed afterwards. + # Some of these edits apply to files that we will generate; others are + # under the responsibility of the developer. + makefile_am_edits=0 + # func_note_Makefile_am_edit dir var value + # remembers that ${dir}Makefile.am needs to be edited to that ${var} mentions + # ${value}. + func_note_Makefile_am_edit () + { + makefile_am_edits=`expr $makefile_am_edits + 1` + eval makefile_am_edit${makefile_am_edits}_dir=\"\$1\" + eval makefile_am_edit${makefile_am_edits}_var=\"\$2\" + eval makefile_am_edit${makefile_am_edits}_val=\"\$3\" + } + if test "$makefile_am" = Makefile.am; then + sourcebase_dir=`echo "$sourcebase" | sed -n -e 's,/[^/]*$,/,p'` + sourcebase_base=`basename "$sourcebase"` + func_note_Makefile_am_edit "$sourcebase_dir" SUBDIRS "$sourcebase_base" + fi + if test -n "$pobase"; then + pobase_dir=`echo "$pobase" | sed -n -e 's,/[^/]*$,/,p'` + pobase_base=`basename "$pobase"` + func_note_Makefile_am_edit "$pobase_dir" SUBDIRS "$pobase_base" + fi + if test -n "$inctests"; then + if test "$makefile_am" = Makefile.am; then + testsbase_dir=`echo "$testsbase" | sed -n -e 's,/[^/]*$,/,p'` + testsbase_base=`basename "$testsbase"` + func_note_Makefile_am_edit "$testsbase_dir" SUBDIRS "$testsbase_base" + fi + fi + func_note_Makefile_am_edit "" ACLOCAL_AMFLAGS "-I ${m4base}" + { + # Find the first parent directory of $m4base that contains a Makefile.am. + sed_last='s,^.*/\([^/][^/]*\)//*$,\1/, + s,//*$,/,' + sed_butlast='s,[^/][^/]*//*$,,' + dir1="${m4base}/"; dir2="" + while test -n "$dir1" && test ! -f "${destdir}/${dir1}Makefile.am"; do + dir2=`echo "$dir1" | sed -e "$sed_last"`"$dir2" + dir1=`echo "$dir1" | sed -e "$sed_butlast"` + done + func_note_Makefile_am_edit "$dir1" EXTRA_DIST "${dir2}gnulib-cache.m4" + } + # Create library makefile. func_dest_tmpfilename $sourcebase/$makefile_am + destfile="$sourcebase/$makefile_am" modules="$main_modules" func_emit_lib_Makefile_am > "$tmpfile" if test -f "$destdir"/$sourcebase/$makefile_am; then *************** *** 3252,3257 **** --- 3337,3343 ---- if test -n "$inctests"; then # Create tests makefile. func_dest_tmpfilename $testsbase/$makefile_am + destfile="$testsbase/$makefile_am" modules="$testsrelated_modules" func_emit_tests_Makefile_am > "$tmpfile" if test -f "$destdir"/$testsbase/$makefile_am; then *************** *** 3444,3479 **** echo " - \"include $makefile_name\" from within \"$testsbase/Makefile.am\"," fi fi ! if test "$makefile_am" = Makefile.am; then ! sourcebase_dir=`echo "$sourcebase" | sed -n -e 's,/[^/]*$,/,p'` ! sourcebase_base=`basename "$sourcebase"` ! echo " - mention \"${sourcebase_base}\" in SUBDIRS in ${sourcebase_dir}Makefile.am," ! fi ! if test -n "$pobase"; then ! pobase_dir=`echo "$pobase" | sed -n -e 's,/[^/]*$,/,p'` ! pobase_base=`basename "$pobase"` ! echo " - mention \"${pobase_base}\" in SUBDIRS in ${pobase_dir}Makefile.am," ! fi ! if test -n "$inctests"; then ! if test "$makefile_am" = Makefile.am; then ! testsbase_dir=`echo "$testsbase" | sed -n -e 's,/[^/]*$,/,p'` ! testsbase_base=`basename "$testsbase"` ! echo " - mention \"${testsbase_base}\" in SUBDIRS in ${testsbase_dir}Makefile.am," fi ! fi ! echo " - mention \"-I ${m4base}\" in ACLOCAL_AMFLAGS in Makefile.am," ! { ! # Find the first parent directory of $m4base that contains a Makefile.am. ! sed_last='s,^.*/\([^/][^/]*\)//*$,\1/, ! s,//*$,/,' ! sed_butlast='s,[^/][^/]*//*$,,' ! dir1="${m4base}/"; dir2="" ! while test -n "$dir1" && test ! -f "${destdir}/${dir1}Makefile.am"; do ! dir2=`echo "$dir1" | sed -e "$sed_last"`"$dir2" ! dir1=`echo "$dir1" | sed -e "$sed_butlast"` ! done ! echo " - mention ${dir2}gnulib-cache.m4 in EXTRA_DIST in ${dir1}Makefile.am." ! } echo " - invoke ${macro_prefix}_EARLY in $configure_ac, right after AC_PROG_CC," echo " - invoke ${macro_prefix}_INIT in $configure_ac." } --- 3530,3545 ---- echo " - \"include $makefile_name\" from within \"$testsbase/Makefile.am\"," fi fi ! edit=0 ! while test $edit != $makefile_am_edits; do ! edit=`expr $edit + 1` ! eval dir=\"\$makefile_am_edit${edit}_dir\" ! eval var=\"\$makefile_am_edit${edit}_var\" ! eval val=\"\$makefile_am_edit${edit}_val\" ! if test -n "$var"; then ! echo " - mention \"${val}\" in ${var} in ${dir}Makefile.am," fi ! done echo " - invoke ${macro_prefix}_EARLY in $configure_ac, right after AC_PROG_CC," echo " - invoke ${macro_prefix}_INIT in $configure_ac." } *************** *** 3630,3637 **** --- 3696,3707 ---- # Create Makefile.ams that are for testing. for_test=true + # No special edits are needed. + makefile_am_edits=0 + # Create $sourcebase/Makefile.am. mkdir -p "$testdir/$sourcebase" + destfile="$sourcebase/Makefile.am" func_emit_lib_Makefile_am > "$testdir/$sourcebase/Makefile.am" any_uses_subdirs="$uses_subdirs" *************** *** 3667,3672 **** --- 3737,3743 ---- auxdir=`echo "$testsbase/"|sed '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.