bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH]: Missing tests-base in gnulib-cache.m4


From: Bruno Haible
Subject: Re: [PATCH]: Missing tests-base in gnulib-cache.m4
Date: Thu, 25 Sep 2008 14:42:39 +0200
User-agent: KMail/1.5.4

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  <address@hidden>

        * 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 <address@hidden>.

*** 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.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]