From dbbfee440da79dbc513d93eb29eacdcdd088dca2 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 3 Feb 2025 23:55:39 +0100 Subject: [PATCH] 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. --- ChangeLog | 14 ++++++++++++++ gnulib-tool.sh | 26 ++++++++++++++++++-------- pygnulib/GLEmiter.py | 29 ++++++++++++++++++++--------- 3 files changed, 52 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index f7baa468ea..62827cda3f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2025-02-03 Bruno Haible + + 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-02-02 Paul Eggert savewd, xstrtol-error: pacify -Wswitch-enum diff --git a/gnulib-tool.sh b/gnulib-tool.sh index e1188eeb20..eedeb306bc 100755 --- a/gnulib-tool.sh +++ b/gnulib-tool.sh @@ -4030,8 +4030,8 @@ 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)" + echo "${libname}_${libext}_LIBADD = \$(${macro_prefix}_${libname}_${perhapsLT}LIBOBJS)" + echo "${libname}_${libext}_DEPENDENCIES = \$(${macro_prefix}_${libname}_${perhapsLT}LIBOBJS)" echo "EXTRA_${libname}_${libext}_SOURCES =" if test "$libtool" = true; then echo "${libname}_${libext}_LDFLAGS = \$(AM_LDFLAGS)" @@ -4067,7 +4067,7 @@ 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@" + echo " -rm -f @${macro_prefix}_${libname}_LIBOBJDEPS@" # Extend the 'maintainer-clean' rule. echo "maintainer-clean-local: distclean-gnulib-libobjs" rm -f "$tmp"/allsnippets @@ -4537,6 +4537,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 +4569,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 +4591,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 " ])" } diff --git a/pygnulib/GLEmiter.py b/pygnulib/GLEmiter.py index 42cd616f6e..a8f22ed97c 100644 --- a/pygnulib/GLEmiter.py +++ b/pygnulib/GLEmiter.py @@ -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,8 @@ 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) + 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) emit += 'EXTRA_%s_%s_SOURCES =\n' % (libname, libext) if libtool: emit += '%s_%s_LDFLAGS = $(AM_LDFLAGS)\n' % (libname, libext) @@ -944,7 +955,7 @@ 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) + emit += '\t-rm -f @%s_%s_LIBOBJDEPS@\n' % (macro_prefix, libname) # Extend the 'maintainer-clean' rule. emit += 'maintainer-clean-local: distclean-gnulib-libobjs\n' return emit -- 2.39.5