]> git.draconx.ca Git - dxcommon.git/blobdiff - snippet/glconfig.mk
Fix glconfig depfiles generation with non-GNU makes.
[dxcommon.git] / snippet / glconfig.mk
index 0673817451ced47815f8b0808d3ad7ec58be2f99..71ca8802fac33026f42a33930f893f3099bc3aaf 100644 (file)
@@ -1,28 +1,27 @@
-# Copyright © 2011 Nick Bowler
+# Copyright © 2011-2013, 2019, 2021 Nick Bowler
 #
 # Automake fragment to generate a Gnulib config header to rewrite exported
-# symbols.  This fragment relies on the Gnulib makefile enhancements done by
-# fix-gnulib.pl.  Furthermore, the following additional changes may be
+# symbols.  This fragment relies on the Gnulib makefile postprocessing done by
+# fix-gnulib.pl.  Furthermore, the following additions to configure.ac may be
 # required:
 #
-#   * Add AUTOMAKE_OPTIONS = nostdinc to Makefile.am (or equivalent).
-#   * Ensure that -I$(top_builddir)/@GLSRC@ and -I$(top_builddir) are
-#     listed in AM_CPPFLAGS (in that order).
-#   * Pass the desired symbol prefix to DX_FIX_GNULIB in configure.ac.
+#   * Add AM_PROC_CC_C_O to configure.ac
+#   * Pass the desired symbol prefix to DX_GLSYM_PREFIX in configure.ac,
+#     after including the fix-gnulib.pl output.
 #
 # License WTFPL2: Do What The Fuck You Want To Public License, version 2.
 # This is free software: you are free to do what the fuck you want to.
 # There is NO WARRANTY, to the extent permitted by law.
 
-GLCONFIG = @GLSRC@/config.h
+GLCONFIG = @GLSRC@/glconfig.h
 GLCAT    = cat /dev/null
 
-GLSYM_V   = $(GLSYM_V_$(V))
-GLSYM_V_  = $(GLSYM_V_$(AM_DEFAULT_VERBOSITY))
-GLSYM_V_0 = @echo "  GLSYM " $<;
+GLSYM_V   = $(GLSYM_V_@AM_V@)
+GLSYM_V_  = $(GLSYM_V_@AM_DEFAULT_V@)
+GLSYM_V_0 = @printf '  %$(DX_ALIGN_V)s %s\n' 'GLSYM   ' $<;
 
 gnulib_symfiles = $(gnulib_lt_objects:.lo=.glsym)
-gnulib_src_headers += $(GLCONFIG)
+gnulib_headers += $(GLCONFIG)
 
 # This suffix rule triggers symbol generation only on demand.  Dependencies are
 # not tracked directly, so it must remain phony and thus not create the target.
@@ -30,7 +29,8 @@ gnulib_src_headers += $(GLCONFIG)
        $(GLSYM_V) $(MKDIR_P) $(@D)/.syms
        $(AM_V_at) depfile=$(@D)/.syms/$(*F).deps \
                source=$< object=$(GLCONFIG) $(CCDEPMODE) \
-               $(depcomp) $(COMPILE) -c -o $(@D)/.syms/$(*F).o $<
+               $(depcomp) $(COMPILE) -DNO_GLCONFIG \
+               -c -o $(@D)/.syms/$(*F).o $<
        $(AM_V_at) $(SHELL) $(top_builddir)/exported.sh \
                $(@D)/.syms/$(*F).o > $(@D)/.syms/$(*F).sym
 $(gnulib_symfiles): $(gnulib_core_headers)
@@ -47,19 +47,18 @@ clean-glconfig:
 
 # The config header requires compilation of all gnulib object files via the
 # .glsym rule above.  However, it cannot depend on those build products
-# directly because those compilations will include this header if it exists,
-# which is (by definition) out of date when this rule gets triggered.
+# directly because they are phony, and would make this header never up-to-date.
 #
-# Thus, we delete the header, then perform a recursive make call to regenerate
-# the header, which can in turn parallelize the required compilation.
+# Thus, we use a recursive make call to regenerate the header, which avoids
+# the need to list prerequisites.
 #
-# Also delete the phony symbol files so the build doesn't fail badly if they
-# got created somehow (for instance by make -t).
-$(GLCONFIG): $(top_builddir)/config.h $(gnulib_core_headers)
-       -$(AM_V_at) rm -f $(gnulib_symfiles) $@.tmp $@
+# Since GNU make does not appear to allow the target of a suffix rule to be
+# marked .PHONY, we also delete the .glsym files here just in case they were
+# created for some reason (e.g., make -t).
+$(GLCONFIG): $(gnulib_core_headers)
+       -$(AM_V_at) rm -f $(gnulib_symfiles)
        $(AM_V_at) $(MAKE) $(AM_MAKEFLAGS) glconfig-gen
-       $(AM_V_GEN) cat $(top_builddir)/config.h >> $@.tmp
-       $(AM_V_at) mv -f $@.tmp $@
+       $(AM_V_GEN) mv -f $@.tmp $@
 CLEANFILES += $(GLCONFIG)
 
 # The glconfig-gen target is intended only for use in recursive make
@@ -79,4 +78,13 @@ glconfig-gen: $(gnulib_symfiles)
                        > $(GLCONFIG).tmp
 .PHONY: glconfig-gen
 
-@AMDEP_TRUE@@am__include@ @am__quote@@GLSRC@/$(DEPDIR)/glconfig.Ph@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@GLSRC@/$(DEPDIR)/glconfig.Ph@am__quote@@dx_include_marker@
+
+# Automake 1.16 and newer use make rules to generate the dependency stubs.
+# we must hook those which is kind of annoying to do.  This should be harmless
+# on previous versions which generate the stubs directly in config.status.
+@dx_depfiles_target@: @GLSRC@/$(DEPDIR)/glconfig.Ph
+@GLSRC@/$(DEPDIR)/glconfig.Ph:
+       @$(MKDIR_P) $(@D)
+       @echo '# dummy' >$@-t && mv -f $@-t $@
+DISTCLEANFILES += @GLSRC@/$(DEPDIR)/glconfig.Ph