Simon Josefsson wrote: > The last patch wasn't working, but this is somewhat better.
This appears to work reasonably well, and I need it also for gettext, so I committed it. Simon, compared to your proposed patch, I - applied the same change to func_create_testdir as well, - made the backslashing in sed_drop_objext unambiguous, - removed the $(top_builddir)/${sourcebase}/ construct - the variable $(${macro_prefix}_LIBOBJS) is only accessed from the $sourcebase directory and does therefore not need this pathname prefix. Attention: coreutils needs the following patch, because it mixes AC_LIBOBJs from outside the gnulib-tool generated file list with gnulib-tool gl_LIBOBJs in the same library. *** coreutils/lib/Makefile.am 23 Aug 2006 18:37:27 -0000 1.252 --- coreutils/lib/Makefile.am 12 Oct 2006 12:29:41 -0000 *************** *** 29,34 **** --- 29,37 ---- xmemcoll.c xmemcoll.h \ xmemxfrm.c xmemxfrm.h + libcoreutils_a_LIBADD += $(LIBOBJS) + libcoreutils_a_DEPENDENCIES += $(LIBOBJS) + check: unit-test .PHONY: unit-test 2006-10-11 Simon Josefsson <[EMAIL PROTECTED]> Bruno Haible <[EMAIL PROTECTED]> Add support for multiple gnulib-tool invocations in the scope of a single configure.ac file. * gnulib-tool (func_emit_lib_Makefile_am): In the _LIBADD variable, use a private [LT]LIBOBJS variant. Define a _DEPENDENCIES variable with the same contents as the _LIBADD variable. (func_emit_initmacro_start, func_emit_initmacro_end, func_emit_initmacro_done): New functions. (func_import, func_create_testdir): Invoke them. Allow the identifiers gl_LIBOBJS and gl_LTLIBOBJS. *** gnulib-tool.bak 2006-10-12 04:02:26.000000000 +0200 --- gnulib-tool 2006-10-12 04:19:48.000000000 +0200 *************** *** 1078,1083 **** --- 1078,1084 ---- # - libname library name # - makefile_name from --makefile-name # - libtool true if libtool will be used, false or blank otherwise + # - macro_prefix prefix of gl_LIBOBJS macros to use # - actioncmd (optional) command that will reproduce this invocation func_emit_lib_Makefile_am () { *************** *** 1122,1127 **** --- 1123,1129 ---- -e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' if test "$module" = 'alloca'; then echo "${libname}_${libext}_LIBADD += @${perhapsLT}ALLOCA@" + echo "${libname}_${libext}_DEPENDENCIES += @${perhapsLT}ALLOCA@" fi } > amsnippet.tmp # Skip the contents if its entirely empty. *************** *** 1148,1154 **** echo "${libname}_${libext}_SOURCES =" # Here we use $(LIBOBJS), not @[EMAIL PROTECTED] The value is the same. However, # automake during its analyses looks for $(LIBOBJS), not for @[EMAIL PROTECTED] ! echo "${libname}_${libext}_LIBADD = \$(${perhapsLT}LIBOBJS)" if test "$libtool" = true; then echo "${libname}_${libext}_LDFLAGS = \$(AM_LDFLAGS)" fi --- 1150,1157 ---- echo "${libname}_${libext}_SOURCES =" # Here we use $(LIBOBJS), not @[EMAIL PROTECTED] The value is the same. However, # automake during its analyses looks for $(LIBOBJS), not for @[EMAIL PROTECTED] ! echo "${libname}_${libext}_LIBADD = \$(${macro_prefix}_${perhapsLT}LIBOBJS)" ! echo "${libname}_${libext}_DEPENDENCIES = \$(${macro_prefix}_${perhapsLT}LIBOBJS)" if test "$libtool" = true; then echo "${libname}_${libext}_LDFLAGS = \$(AM_LDFLAGS)" fi *************** *** 1288,1293 **** --- 1291,1346 ---- rm -f allsnippets.tmp } + # func_emit_initmacro_start + # emits the first few statements of the gl_INIT macro to standard output. + # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use + func_emit_initmacro_start () + { + echo " m4_pushdef([AC_LIBOBJ], m4_defn([${macro_prefix}_LIBOBJ]))" + echo " m4_pushdef([AC_REPLACE_FUNCS], m4_defn([${macro_prefix}_REPLACE_FUNCS]))" + } + + # func_emit_initmacro_end + # emits the last few statements of the gl_INIT macro to standard output. + # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use + func_emit_initmacro_end () + { + echo " m4_popdef([AC_REPLACE_FUNCS])" + echo " m4_popdef([AC_LIBOBJ])" + echo " AC_CONFIG_COMMANDS_PRE([" + echo " ${macro_prefix}_libobjs=" + echo " ${macro_prefix}_ltlibobjs=" + echo " if test -n \"\$${macro_prefix}_LIBOBJS\"; then" + echo " for i in \$${macro_prefix}_LIBOBJS; do" + echo " # Remove the extension." + echo " sed_drop_objext='s/\\.o\$//;s/\\.obj\$//'" + echo " i=\`echo \"\$i\" | sed \"\$sed_drop_objext\"\`" + echo " ${macro_prefix}_libobjs=\"\$${macro_prefix}_libobjs \$i.\$ac_objext\"" + echo " ${macro_prefix}_ltlibobjs=\"\$${macro_prefix}_ltlibobjs \$i.lo\"" + echo " done" + echo " fi" + echo " AC_SUBST([${macro_prefix}_LIBOBJS], [\$${macro_prefix}_libobjs])" + echo " AC_SUBST([${macro_prefix}_LTLIBOBJS], [\$${macro_prefix}_ltlibobjs])" + echo " ])" + } + + # func_emit_initmacro_done + # emits a few statements after the gl_INIT macro to standard output. + # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use + func_emit_initmacro_done () + { + echo + echo "# Like AC_LIBOBJ, except that the module name goes" + echo "# into ${macro_prefix}_LIBOBJS instead of into LIBOBJS." + echo "AC_DEFUN([${macro_prefix}_LIBOBJ]," + echo " [${macro_prefix}_LIBOBJS=\"\$${macro_prefix}_LIBOBJS \$1.\$ac_objext\"])" + echo + echo "# Like AC_REPLACE_FUNCS, except that the module name goes" + echo "# into ${macro_prefix}_LIBOBJS instead of into LIBOBJS." + echo "AC_DEFUN([${macro_prefix}_REPLACE_FUNCS]," + echo " [AC_CHECK_FUNCS([\$1], , [${macro_prefix}_LIBOBJ(\$ac_func)])])" + } + # func_import modules # Uses also the variables # - destdir target directory *************** *** 1874,1880 **** echo "AC_DEFUN([${macro_prefix}_EARLY]," echo "[" echo " m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace" ! echo " m4_pattern_allow([^gl_ES$])dnl a valid locale name" echo " AC_REQUIRE([AC_PROG_RANLIB])" if grep AC_GNU_SOURCE "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then echo " AC_REQUIRE([AC_GNU_SOURCE])" --- 1927,1935 ---- echo "AC_DEFUN([${macro_prefix}_EARLY]," echo "[" echo " m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace" ! 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])" if grep AC_GNU_SOURCE "$destdir"/$m4base/*.m4 >/dev/null 2>/dev/null; then echo " AC_REQUIRE([AC_GNU_SOURCE])" *************** *** 1891,1896 **** --- 1946,1952 ---- echo "# \"Check for header files, types and library functions\"." echo "AC_DEFUN([${macro_prefix}_INIT]," echo "[" + func_emit_initmacro_start if test "$libtool" = true; then echo " AM_CONDITIONAL([GL_COND_LIBTOOL], [true])" echo " gl_cond_libtool=true" *************** *** 1936,1942 **** --- 1992,2000 ---- echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\"" echo " AC_SUBST([${libname_upper}_LTLIBDEPS])" fi + func_emit_initmacro_end echo "])" + func_emit_initmacro_done echo echo "# This macro records the list of files which have been installed by" echo "# gnulib-tool and may be removed by future gnulib-tool invocations." *************** *** 2079,2084 **** --- 2137,2143 ---- m4base=glm4 docbase=gldoc testsbase=gltests + macro_prefix=gl # Determine final module list. func_modules_transitive_closure *************** *** 2212,2217 **** --- 2271,2277 ---- # expansion of the required macro before the current point, and only one # expansion total). echo "AC_DEFUN([gl_INIT], [" + func_emit_initmacro_start if test "$auxdir" != "build-aux"; then sed_replace_build_aux=' :a *************** *** 2249,2255 **** --- 2309,2318 ---- echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\"" echo " AC_SUBST([${libname_upper}_LTLIBDEPS])" fi + func_emit_initmacro_end echo "])" + func_emit_initmacro_done + echo echo "gl_INIT" echo # Usually $testsbase/config.h will be a superset of config.h. Verify this *************** *** 2287,2293 **** echo "AC_PROG_MAKE_SET" echo echo "m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace" ! echo "m4_pattern_allow([^gl_ES$])dnl a valid locale name" echo echo "AC_PROG_RANLIB" echo --- 2350,2358 ---- echo "AC_PROG_MAKE_SET" echo echo "m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace" ! 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 echo "AC_PROG_RANLIB" echo *************** *** 2321,2326 **** --- 2386,2392 ---- # expansion of the required macro before the current point, and only one # expansion total). echo "AC_DEFUN([gl_INIT], [" + func_emit_initmacro_start if test "$auxdir" != "build-aux"; then sed_replace_build_aux=' :a *************** *** 2348,2354 **** --- 2414,2423 ---- echo " ${libname_upper}_LTLIBDEPS=\"\$gl_ltlibdeps\"" echo " AC_SUBST([${libname_upper}_LTLIBDEPS])" fi + func_emit_initmacro_end echo "])" + func_emit_initmacro_done + echo echo "gl_INIT" echo if test -n "$subdirs_with_configure_ac"; then