]> Savannah Git Hosting - gnulib.git/commitdiff
gnulib-tool: Apply libgnu.{,l}a specific CFLAGS to all its object files.
authorBruno Haible <bruno@clisp.org>
Mon, 3 Feb 2025 22:55:39 +0000 (23:55 +0100)
committerBruno Haible <bruno@clisp.org>
Fri, 7 Mar 2025 19:47:34 +0000 (20:47 +0100)
* gnulib-tool.sh (func_emit_initmacro_end): Define
${macro_prefix}_${libname}_{LIBOBJS,LTLIBOBJS,LIBOBJDEPS} macros, that
include libname in the base name of the object files.
(func_emit_lib_Makefile_am): Use ${macro_prefix}_${libname}_*LIBOBJS
values instead of ${macro_prefix}_*LIBOBJS values.
* pygnulib/GLEmiter.py (GLEmiter.initmacro_end): Define
{macro_prefix_arg}_{libname}_{LIBOBJS,LTLIBOBJS,LIBOBJDEPS} macros, that
include libname in the base name of the object files.
(GLEmiter.lib_Makefile_am):Use {macro_prefix}_{libname}_*LIBOBJS
values instead of {macro_prefix}_*LIBOBJS values.

ChangeLog
gnulib-tool.sh
pygnulib/GLEmiter.py

index 5dfa3608f2c1cc97b2d18f4016e9188c99efb97f..93258f9ba919e05c34c369b6f2339bbd2953ed06 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2025-02-03  Bruno Haible  <bruno@clisp.org>
+
+       gnulib-tool: Apply libgnu.{,l}a specific CFLAGS to all its object files.
+       * gnulib-tool.sh (func_emit_initmacro_end): Define
+       ${macro_prefix}_${libname}_{LIBOBJS,LTLIBOBJS,LIBOBJDEPS} macros, that
+       include libname in the base name of the object files.
+       (func_emit_lib_Makefile_am): Use ${macro_prefix}_${libname}_*LIBOBJS
+       values instead of ${macro_prefix}_*LIBOBJS values.
+       * pygnulib/GLEmiter.py (GLEmiter.initmacro_end): Define
+       {macro_prefix_arg}_{libname}_{LIBOBJS,LTLIBOBJS,LIBOBJDEPS} macros, that
+       include libname in the base name of the object files.
+       (GLEmiter.lib_Makefile_am):Use {macro_prefix}_{libname}_*LIBOBJS
+       values instead of {macro_prefix}_*LIBOBJS values.
+
 2025-01-26  Bruno Haible  <bruno@clisp.org>
 
        file-has-acl: Fix --with-libsmack option handling.
index e1188eeb208c74950fa4c2656bfa7c9332cd5085..221343bea07adec8dc6cbdcaad609746cb3400a3 100755 (executable)
@@ -4030,8 +4030,16 @@ func_emit_lib_Makefile_am ()
   fi
   # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However,
   # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@.
-  echo "${libname}_${libext}_LIBADD = \$(${macro_prefix}_${perhapsLT}LIBOBJS)"
-  echo "${libname}_${libext}_DEPENDENCIES = \$(${macro_prefix}_${perhapsLT}LIBOBJS)"
+  if ! $for_test; then
+    # When there is a ${libname}_${libext}_CFLAGS or ${libname}_${libext}_CPPFLAGS
+    # definition, Automake emits rules for creating object files prefixed with
+    # "${libname}_${libext}-".
+    echo "${libname}_${libext}_LIBADD = \$(${macro_prefix}_${libname}_${perhapsLT}LIBOBJS)"
+    echo "${libname}_${libext}_DEPENDENCIES = \$(${macro_prefix}_${libname}_${perhapsLT}LIBOBJS)"
+  else
+    echo "${libname}_${libext}_LIBADD = \$(${macro_prefix}_${perhapsLT}LIBOBJS)"
+    echo "${libname}_${libext}_DEPENDENCIES = \$(${macro_prefix}_${perhapsLT}LIBOBJS)"
+  fi
   echo "EXTRA_${libname}_${libext}_SOURCES ="
   if test "$libtool" = true; then
     echo "${libname}_${libext}_LDFLAGS = \$(AM_LDFLAGS)"
@@ -4067,7 +4075,14 @@ func_emit_lib_Makefile_am ()
   # Extend the 'distclean' rule.
   echo "distclean-local: distclean-gnulib-libobjs"
   echo "distclean-gnulib-libobjs:"
-  echo "       -rm -f @${macro_prefix}_LIBOBJDEPS@"
+  if ! $for_test; then
+    # When there is a ${libname}_${libext}_CFLAGS or ${libname}_${libext}_CPPFLAGS
+    # definition, Automake emits rules for creating object files prefixed with
+    # "${libname}_${libext}-".
+    echo "     -rm -f @${macro_prefix}_${libname}_LIBOBJDEPS@"
+  else
+    echo "     -rm -f @${macro_prefix}_LIBOBJDEPS@"
+  fi
   # Extend the 'maintainer-clean' rule.
   echo "maintainer-clean-local: distclean-gnulib-libobjs"
   rm -f "$tmp"/allsnippets
@@ -4537,6 +4552,7 @@ func_emit_initmacro_start ()
 # - gentests                 true if a tests Makefile.am is being generated,
 #                            false otherwise
 # - automake_subdir  true if --automake-subdir was given, false otherwise
+# - libname         library name
 # - libtool         true if --libtool was given, false if --no-libtool was
 #                   given, blank otherwise
 func_emit_initmacro_end ()
@@ -4568,14 +4584,16 @@ func_emit_initmacro_end ()
   echo "    ${macro_prefix_arg}_libobjs="
   echo "    ${macro_prefix_arg}_ltlibobjs="
   echo "    ${macro_prefix_arg}_libobjdeps="
+  echo "    ${macro_prefix_arg}_${libname}_libobjs="
+  echo "    ${macro_prefix_arg}_${libname}_ltlibobjs="
+  echo "    ${macro_prefix_arg}_${libname}_libobjdeps="
   echo "    if test -n \"\$${macro_prefix_arg}_LIBOBJS\"; then"
   echo "      # Remove the extension."
   echo "changequote(,)dnl"
   echo "      sed_drop_objext='s/\\.o\$//;s/\\.obj\$//'"
   echo "      sed_dirname1='s,//*,/,g'"
   echo "      sed_dirname2='s,\\(.\\)/\$,\\1,'"
-  echo "      sed_dirname3='s,^[^/]*\$,.,'"
-  echo "      sed_dirname4='s,\\(.\\)/[^/]*\$,\\1,'"
+  echo "      sed_dirname3='s,[^/]*\$,,'"
   echo "      sed_basename1='s,.*/,,'"
   echo "changequote([, ])dnl"
   if $automake_subdir && ! "$2" && test -n "$sourcebase" && test "$sourcebase" != '.'; then
@@ -4588,18 +4606,25 @@ func_emit_initmacro_end ()
   echo "      for i in \`for i in \$${macro_prefix_arg}_LIBOBJS; do echo \"\$i\"; done | sed -e \"\$sed_drop_objext\" | sort | uniq\`; do"
   echo "        ${macro_prefix_arg}_libobjs=\"\$${macro_prefix_arg}_libobjs ${subdir}\$i.\$ac_objext\""
   echo "        ${macro_prefix_arg}_ltlibobjs=\"\$${macro_prefix_arg}_ltlibobjs ${subdir}\$i.lo\""
-  echo "        i_dir=\`echo \"\$i\" | sed -e \"\$sed_dirname1\" -e \"\$sed_dirname2\" -e \"\$sed_dirname3\" -e \"\$sed_dirname4\"\`"
+  echo "        i_dir=\`echo \"\$i\" | sed -e \"\$sed_dirname1\" -e \"\$sed_dirname2\" -e \"\$sed_dirname3\"\`"
   echo "        i_base=\`echo \"\$i\" | sed -e \"\$sed_basename1\"\`"
+  echo "        ${macro_prefix_arg}_${libname}_libobjs=\"\$${macro_prefix_arg}_${libname}_libobjs ${subdir}\$i_dir\"\"${libname}_a-\$i_base.\$ac_objext\""
+  echo "        ${macro_prefix_arg}_${libname}_ltlibobjs=\"\$${macro_prefix_arg}_${libname}_ltlibobjs ${subdir}\$i_dir\"\"${libname}_la-\$i_base.lo\""
   if test "$libtool" = true; then
-    echo "        ${macro_prefix_arg}_libobjdeps=\"\$${macro_prefix_arg}_libobjdeps ${subdir}\$i_dir/\\\$(DEPDIR)/\$i_base.Plo\""
+    echo "        ${macro_prefix_arg}_libobjdeps=\"\$${macro_prefix_arg}_libobjdeps ${subdir}\$i_dir\\\$(DEPDIR)/\$i_base.Plo\""
+    echo "        ${macro_prefix_arg}_${libname}_libobjdeps=\"\$${macro_prefix_arg}_${libname}_libobjdeps ${subdir}\$i_dir\\\$(DEPDIR)/${libname}_la-\$i_base.Plo\""
   else
-    echo "        ${macro_prefix_arg}_libobjdeps=\"\$${macro_prefix_arg}_libobjdeps ${subdir}\$i_dir/\\\$(DEPDIR)/\$i_base.Po\""
+    echo "        ${macro_prefix_arg}_libobjdeps=\"\$${macro_prefix_arg}_libobjdeps ${subdir}\$i_dir\\\$(DEPDIR)/\$i_base.Po\""
+    echo "        ${macro_prefix_arg}_${libname}_libobjdeps=\"\$${macro_prefix_arg}_${libname}_libobjdeps ${subdir}\$i_dir\\\$(DEPDIR)/${libname}_a-\$i_base.Po\""
   fi
   echo "      done"
   echo "    fi"
   echo "    AC_SUBST([${macro_prefix_arg}_LIBOBJS], [\$${macro_prefix_arg}_libobjs])"
   echo "    AC_SUBST([${macro_prefix_arg}_LTLIBOBJS], [\$${macro_prefix_arg}_ltlibobjs])"
   echo "    AC_SUBST([${macro_prefix_arg}_LIBOBJDEPS], [\$${macro_prefix_arg}_libobjdeps])"
+  echo "    AC_SUBST([${macro_prefix_arg}_${libname}_LIBOBJS], [\$${macro_prefix_arg}_${libname}_libobjs])"
+  echo "    AC_SUBST([${macro_prefix_arg}_${libname}_LTLIBOBJS], [\$${macro_prefix_arg}_${libname}_ltlibobjs])"
+  echo "    AC_SUBST([${macro_prefix_arg}_${libname}_LIBOBJDEPS], [\$${macro_prefix_arg}_${libname}_libobjdeps])"
   echo "  ])"
 }
 
index 42cd616f6eb2c1b966e559d05a7740908449ca73..1dcfb2f696c4b32587791a2676684fe8b149d180 100644 (file)
@@ -540,6 +540,7 @@ USE_MSGCTXT = no\n'''
         testsbase = self.config['testsbase']
         automake_subdir = self.config['automake_subdir']
         automake_subdir_tests = self.config['automake_subdir_tests']
+        libname = self.config['libname']
         libtool = self.config['libtool']
         emit = ''
         # Check the presence of files that are mentioned as AC_LIBSOURCES
@@ -553,9 +554,11 @@ USE_MSGCTXT = no\n'''
         else:
             subdir = ''
         if libtool:
-            libobjdeps = f'{macro_prefix_arg}_libobjdeps="${macro_prefix_arg}_libobjdeps {subdir}$i_dir/\\$(DEPDIR)/$i_base.Plo"'
+            libobjdeps_line1 = f'{macro_prefix_arg}_libobjdeps="${macro_prefix_arg}_libobjdeps {subdir}$i_dir\\$(DEPDIR)/$i_base.Plo"'
+            libobjdeps_line2 = f'{macro_prefix_arg}_{libname}_libobjdeps="${macro_prefix_arg}_{libname}_libobjdeps {subdir}$i_dir\\$(DEPDIR)/{libname}_la-$i_base.Plo"'
         else:
-            libobjdeps = f'{macro_prefix_arg}_libobjdeps="${macro_prefix_arg}_libobjdeps {subdir}$i_dir/\\$(DEPDIR)/$i_base.Po"'
+            libobjdeps_line1 = f'{macro_prefix_arg}_libobjdeps="${macro_prefix_arg}_libobjdeps {subdir}$i_dir\\$(DEPDIR)/$i_base.Po"'
+            libobjdeps_line2 = f'{macro_prefix_arg}_{libname}_libobjdeps="${macro_prefix_arg}_{libname}_libobjdeps {subdir}$i_dir\\$(DEPDIR)/{libname}_a-$i_base.Po"'
         emit += fr'''  m4_ifval({macro_prefix_arg}_LIBSOURCES_LIST, [
     m4_syscmd([test ! -d ]m4_defn([{macro_prefix_arg}_LIBSOURCES_DIR])[ ||
       for gl_file in ]{macro_prefix_arg}_LIBSOURCES_LIST[ ; do
@@ -578,27 +581,35 @@ USE_MSGCTXT = no\n'''
     {macro_prefix_arg}_libobjs=
     {macro_prefix_arg}_ltlibobjs=
     {macro_prefix_arg}_libobjdeps=
+    {macro_prefix_arg}_{libname}_libobjs=
+    {macro_prefix_arg}_{libname}_ltlibobjs=
+    {macro_prefix_arg}_{libname}_libobjdeps=
     if test -n "${macro_prefix_arg}_LIBOBJS"; then
       # Remove the extension.
 changequote(,)dnl
       sed_drop_objext='s/\.o$//;s/\.obj$//'
       sed_dirname1='s,//*,/,g'
       sed_dirname2='s,\(.\)/$,\1,'
-      sed_dirname3='s,^[^/]*$,.,'
-      sed_dirname4='s,\(.\)/[^/]*$,\1,'
+      sed_dirname3='s,[^/]*$,,'
       sed_basename1='s,.*/,,'
 changequote([, ])dnl
       for i in `for i in ${macro_prefix_arg}_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
         {macro_prefix_arg}_libobjs="${macro_prefix_arg}_libobjs {subdir}$i.$ac_objext"
         {macro_prefix_arg}_ltlibobjs="${macro_prefix_arg}_ltlibobjs {subdir}$i.lo"
-        i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"`
+        i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3"`
         i_base=`echo "$i" | sed -e "$sed_basename1"`
-        {libobjdeps}
+        {macro_prefix_arg}_{libname}_libobjs="${macro_prefix_arg}_{libname}_libobjs {subdir}$i_dir""{libname}_a-$i_base.$ac_objext"
+        {macro_prefix_arg}_{libname}_ltlibobjs="${macro_prefix_arg}_{libname}_ltlibobjs {subdir}$i_dir""{libname}_la-$i_base.lo"
+        {libobjdeps_line1}
+        {libobjdeps_line2}
       done
     fi
     AC_SUBST([{macro_prefix_arg}_LIBOBJS], [${macro_prefix_arg}_libobjs])
     AC_SUBST([{macro_prefix_arg}_LTLIBOBJS], [${macro_prefix_arg}_ltlibobjs])
     AC_SUBST([{macro_prefix_arg}_LIBOBJDEPS], [${macro_prefix_arg}_libobjdeps])
+    AC_SUBST([{macro_prefix_arg}_{libname}_LIBOBJS], [${macro_prefix_arg}_{libname}_libobjs])
+    AC_SUBST([{macro_prefix_arg}_{libname}_LTLIBOBJS], [${macro_prefix_arg}_{libname}_ltlibobjs])
+    AC_SUBST([{macro_prefix_arg}_{libname}_LIBOBJDEPS], [${macro_prefix_arg}_{libname}_libobjdeps])
   ])
 '''
         return emit
@@ -904,8 +915,15 @@ AC_DEFUN([%V1%_LIBSOURCES], [
             emit += '%s_%s_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS)\n' % (libname, libext)
         # Here we use $(LIBOBJS), not @LIBOBJS@. The value is the same. However,
         # automake during its analysis looks for $(LIBOBJS), not for @LIBOBJS@.
-        emit += '%s_%s_LIBADD = $(%s_%sLIBOBJS)\n' % (libname, libext, macro_prefix, perhapsLT)
-        emit += '%s_%s_DEPENDENCIES = $(%s_%sLIBOBJS)\n' % (libname, libext, macro_prefix, perhapsLT)
+        if not for_test:
+            # When there is a {libname}_{libext}_CFLAGS or {libname}_{libext}_CPPFLAGS
+            # definition, Automake emits rules for creating object files prefixed with
+            # "{libname}_{libext}-".
+            emit += '%s_%s_LIBADD = $(%s_%s_%sLIBOBJS)\n' % (libname, libext, macro_prefix, libname, perhapsLT)
+            emit += '%s_%s_DEPENDENCIES = $(%s_%s_%sLIBOBJS)\n' % (libname, libext, macro_prefix, libname, perhapsLT)
+        else:
+            emit += '%s_%s_LIBADD = $(%s_%sLIBOBJS)\n' % (libname, libext, macro_prefix, perhapsLT)
+            emit += '%s_%s_DEPENDENCIES = $(%s_%sLIBOBJS)\n' % (libname, libext, macro_prefix, perhapsLT)
         emit += 'EXTRA_%s_%s_SOURCES =\n' % (libname, libext)
         if libtool:
             emit += '%s_%s_LDFLAGS = $(AM_LDFLAGS)\n' % (libname, libext)
@@ -944,7 +962,13 @@ AC_DEFUN([%V1%_LIBSOURCES], [
         # Extend the 'distclean' rule.
         emit += 'distclean-local: distclean-gnulib-libobjs\n'
         emit += 'distclean-gnulib-libobjs:\n'
-        emit += '\t-rm -f @%s_LIBOBJDEPS@\n' % (macro_prefix)
+        if not for_test:
+            # When there is a {libname}_{libext}_CFLAGS or {libname}_{libext}_CPPFLAGS
+            # definition, Automake emits rules for creating object files prefixed with
+            # "{libname}_{libext}-".
+            emit += '\t-rm -f @%s_%s_LIBOBJDEPS@\n' % (macro_prefix, libname)
+        else:
+            emit += '\t-rm -f @%s_LIBOBJDEPS@\n' % (macro_prefix)
         # Extend the 'maintainer-clean' rule.
         emit += 'maintainer-clean-local: distclean-gnulib-libobjs\n'
         return emit