A testdir created by this command: ./gnulib-tool --create-testdir --dir=../testdir --single-configure clean-temp crypto/gc getaddrinfo getlogin getlogin_r gettimeofday isatty link localename opendir physmem poll putenv read readdir relocatable-prog rename rewinddir select sethostname socket stat fstat tmpdir tmpfile uname utime write cond lock
produces link errors on mingw, regarding symbols such as rpl_malloc, rpl_strdup, etc., all found in the generated gllib/libgnu.a. This patch fixes it. 2020-05-29 Bruno Haible <br...@clisp.org> gnulib-tool: Fix link errors with a particular set of modules on mingw. * gnulib-tool (func_emit_tests_Makefile_am): Add ../lib/libgnu.a to LDADD a second time, after the second occurrence of libtests.a. * pygnulib/GLEmiter.py (tests_Makefile_am): Likewise. diff --git a/gnulib-tool b/gnulib-tool index 01c6745..20a2a3e 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -4165,8 +4165,6 @@ func_emit_tests_Makefile_am () echo " -I${testsbase_inverse} -I\$(srcdir)/${testsbase_inverse} \\" echo " -I${testsbase_inverse}/${sourcebase-lib} -I\$(srcdir)/${testsbase_inverse}/${sourcebase-lib}" echo - local_ldadd_before='' - local_ldadd_after='' if $use_libtests; then # All test programs need to be linked with libtests.a. # It needs to be passed to the linker before ${libname}.${libext}, since @@ -4176,10 +4174,10 @@ func_emit_tests_Makefile_am () # module whose dependency to 'progname' is voluntarily omitted). # The LIBTESTS_LIBDEPS can be passed to the linker once or twice, it does # not matter. - local_ldadd_before=' libtests.a' - local_ldadd_after=' libtests.a $(LIBTESTS_LIBDEPS)' + echo "LDADD = libtests.a ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext} libtests.a ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext} \$(LIBTESTS_LIBDEPS)" + else + echo "LDADD = ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext}" fi - echo "LDADD =${local_ldadd_before} ${testsbase_inverse}/${sourcebase-lib}/${libname}.${libext}${local_ldadd_after}" echo if $use_libtests; then echo "libtests_a_SOURCES =" diff --git a/pygnulib/GLEmiter.py b/pygnulib/GLEmiter.py index f0746f8..441d295 100644 --- a/pygnulib/GLEmiter.py +++ b/pygnulib/GLEmiter.py @@ -1123,8 +1123,6 @@ AC_DEFUN([%V1%_LIBSOURCES], [ (testsbase_inverse, sourcebase, testsbase_inverse, sourcebase) emit += '\n' - local_ldadd_before = string() - local_ldadd_after = string() if libtests: # All test programs need to be linked with libtests.a. # It needs to be passed to the linker before ${libname}.${libext}, since @@ -1134,11 +1132,12 @@ AC_DEFUN([%V1%_LIBSOURCES], [ # 'error' module whose dependency to 'progname' is voluntarily omitted). # The LIBTESTS_LIBDEPS can be passed to the linker once or twice, it does # not matter. - local_ldadd_before = ' libtests.a' - local_ldadd_after = ' libtests.a $(LIBTESTS_LIBDEPS)' - emit += 'LDADD =%s %s/%s/%s.%s%s\n\n' % \ - (local_ldadd_before, testsbase_inverse, sourcebase, libname, libext, - local_ldadd_after) + emit += 'LDADD = libtests.a %s/%s/%s.%s libtests.a %s/%s/%s.%s $(LIBTESTS_LIBDEPS)\n\n' % \ + (testsbase_inverse, sourcebase, libname, libext, + testsbase_inverse, sourcebase, libname, libext) + else: + emit += 'LDADD = %s/%s/%s.%s\n\n' % \ + (testsbase_inverse, sourcebase, libname, libext) if libtests: emit += 'libtests_a_SOURCES =\n' # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However,