bug-gnulib
[Top][All Lists]
Advanced

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

Re: [bug-gnulib] gnulib taking over libobjs?


From: Bruno Haible
Subject: Re: [bug-gnulib] gnulib taking over libobjs?
Date: Thu, 12 Oct 2006 14:30:56 +0200
User-agent: KMail/1.9.1

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

        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 @address@hidden The value is the same. 
However,
    # automake during its analyses looks for $(LIBOBJS), not for @address@hidden
!   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 @address@hidden The value is the same. 
However,
    # automake during its analyses looks for $(LIBOBJS), not for @address@hidden
!   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




reply via email to

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