X-Git-Url: https://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/414e48faf73d99ea0242b13f3c22e64fb5adff64..92a89700c65e52fac8c2cace51a7112d60b3f42f:/snippet/glconfig.mk diff --git a/snippet/glconfig.mk b/snippet/glconfig.mk index 0673817..b18d50b 100644 --- a/snippet/glconfig.mk +++ b/snippet/glconfig.mk @@ -1,28 +1,27 @@ -# Copyright © 2011 Nick Bowler +# Copyright © 2011-2013,2019 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 @@ -80,3 +79,13 @@ glconfig-gen: $(gnulib_symfiles) .PHONY: glconfig-gen @AMDEP_TRUE@@am__include@ @am__quote@@GLSRC@/$(DEPDIR)/glconfig.Ph@am__quote@ + +# 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_glconfig_depfiles = am--depfiles +$(_dx_glconfig_depfiles): @GLSRC@/$(DEPDIR)/glconfig.Ph +@GLSRC@/$(DEPDIR)/glconfig.Ph: + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && mv -f $@-t $@ +DISTCLEANFILES += @GLSRC@/$(DEPDIR)/glconfig.Ph