# Copyright © 2011 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 # 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. # # 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 GLCAT = cat /dev/null GLSYM_V = $(GLSYM_V_$(V)) GLSYM_V_ = $(GLSYM_V_$(AM_DEFAULT_VERBOSITY)) GLSYM_V_0 = @echo " GLSYM " $<; gnulib_symfiles = $(gnulib_lt_objects:.lo=.glsym) gnulib_src_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. .c.glsym: $(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 $< $(AM_V_at) $(SHELL) $(top_builddir)/exported.sh \ $(@D)/.syms/$(*F).o > $(@D)/.syms/$(*F).sym $(gnulib_symfiles): $(gnulib_core_headers) clean-local: clean-glconfig clean-glconfig: @for sym in $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES); do \ symdir=`expr "$$sym" : '\(.*/\)'`.syms; \ if test -d "$$symdir"; then \ echo "rm -rf $$symdir"; rm -rf "$$symdir"; \ fi; \ done .PHONY: 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. # # Thus, we delete the header, then perform a recursive make call to regenerate # the header, which can in turn parallelize the required compilation. # # 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 $@ $(AM_V_at) $(MAKE) $(AM_MAKEFLAGS) glconfig-gen $(AM_V_GEN) cat $(top_builddir)/config.h >> $@.tmp $(AM_V_at) mv -f $@.tmp $@ CLEANFILES += $(GLCONFIG) # The glconfig-gen target is intended only for use in recursive make # invocations. glconfig-gen: $(gnulib_symfiles) $(AM_V_at) depfiles=; symfiles=; \ for sym in $(gnulib_symfiles); do \ symdir=`expr "$$sym" : '\(.*/\)'`; \ symfile=`expr "$$sym" : '.*/\(.*\)' || printf '%s\n' "$$sym"`; \ symbase=$$symdir.syms/`expr "$$symfile" : '\(.*\)\..*'`; \ test -f "$$symbase.deps" && \ depfiles="$$depfiles $$symbase.deps"; \ symfiles="$$symfiles $$symbase.sym"; \ done; \ $(GLCAT) $$depfiles > @GLSRC@/$(DEPDIR)/glconfig.Ph && \ $(GLCAT) $$symfiles | sed 's/.*/#define & $(GLSYM_PREFIX)&/' \ > $(GLCONFIG).tmp .PHONY: glconfig-gen @AMDEP_TRUE@@am__include@ @am__quote@@GLSRC@/$(DEPDIR)/glconfig.Ph@am__quote@