]> granicus.if.org Git - postgresql/commitdiff
Rearrange makefile rules for running Gen_fmgrtab.pl.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 3 May 2018 21:54:18 +0000 (17:54 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 3 May 2018 21:54:18 +0000 (17:54 -0400)
Make these rules look more like the ones associated with genbki.pl,
to wit:

* Use a stamp file to record when we last ran the script, instead of
relying on the timestamps of the individual output files.

* Take the knowledge out of backend/Makefile and put it in utils/Makefile
where it belongs.  I moved down the handling of errcodes.h and probes.h
too, although those continue to be built by separate processes.

In itself, this is just much-needed cleanup with little practical effect.
However, by decoupling these makefile rules from the timestamps of the
generated header files, we open the door to not advancing those timestamps
unnecessarily, which will be taken advantage of by the next commit.

msvc/Solution.pm should be taught to do things similarly, but I'll leave
that for another commit.

Discussion: https://postgr.es/m/16925.1525376229@sss.pgh.pa.us

src/backend/Makefile
src/backend/catalog/Makefile
src/backend/utils/.gitignore
src/backend/utils/Makefile
src/include/Makefile
src/include/utils/.gitignore

index 1aaf1ec2f59819f390631fd0b9323430df8a0221..25af514fba59c9b87db41ba2b65940906e07d1a8 100644 (file)
@@ -53,7 +53,7 @@ endif
 
 ##########################################################################
 
-all: submake-libpgport submake-catalog-headers postgres $(POSTGRES_IMP)
+all: submake-libpgport submake-catalog-headers submake-utils-headers postgres $(POSTGRES_IMP)
 
 ifneq ($(PORTNAME), cygwin)
 ifneq ($(PORTNAME), win32)
@@ -136,24 +136,15 @@ parser/gram.h: parser/gram.y
 storage/lmgr/lwlocknames.h: storage/lmgr/generate-lwlocknames.pl storage/lmgr/lwlocknames.txt
        $(MAKE) -C storage/lmgr lwlocknames.h lwlocknames.c
 
-utils/errcodes.h: utils/generate-errcodes.pl utils/errcodes.txt
-       $(MAKE) -C utils errcodes.h
-
-# see notes in src/backend/parser/Makefile
-utils/fmgrprotos.h: utils/fmgroids.h
-       touch $@
-
-utils/fmgroids.h: utils/Gen_fmgrtab.pl catalog/Catalog.pm $(top_srcdir)/src/include/catalog/pg_proc.dat $(top_srcdir)/src/include/access/transam.h
-       $(MAKE) -C utils fmgroids.h fmgrprotos.h
-
-utils/probes.h: utils/probes.d
-       $(MAKE) -C utils probes.h
-
 # run this unconditionally to avoid needing to know its dependencies here:
 submake-catalog-headers:
        $(MAKE) -C catalog distprep generated-header-symlinks
 
-.PHONY: submake-catalog-headers
+# run this unconditionally to avoid needing to know its dependencies here:
+submake-utils-headers:
+       $(MAKE) -C utils distprep generated-header-symlinks
+
+.PHONY: submake-catalog-headers submake-utils-headers
 
 # Make symlinks for these headers in the include directory. That way
 # we can cut down on the -I options. Also, a symlink is automatically
@@ -168,7 +159,7 @@ submake-catalog-headers:
 
 .PHONY: generated-headers
 
-generated-headers: $(top_builddir)/src/include/parser/gram.h $(top_builddir)/src/include/storage/lwlocknames.h $(top_builddir)/src/include/utils/errcodes.h $(top_builddir)/src/include/utils/fmgroids.h $(top_builddir)/src/include/utils/fmgrprotos.h $(top_builddir)/src/include/utils/probes.h submake-catalog-headers
+generated-headers: $(top_builddir)/src/include/parser/gram.h $(top_builddir)/src/include/storage/lwlocknames.h submake-catalog-headers submake-utils-headers
 
 $(top_builddir)/src/include/parser/gram.h: parser/gram.h
        prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
@@ -180,25 +171,6 @@ $(top_builddir)/src/include/storage/lwlocknames.h: storage/lmgr/lwlocknames.h
          cd '$(dir $@)' && rm -f $(notdir $@) && \
          $(LN_S) "$$prereqdir/$(notdir $<)" .
 
-$(top_builddir)/src/include/utils/errcodes.h: utils/errcodes.h
-       prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
-         cd '$(dir $@)' && rm -f $(notdir $@) && \
-         $(LN_S) "$$prereqdir/$(notdir $<)" .
-
-$(top_builddir)/src/include/utils/fmgroids.h: utils/fmgroids.h
-       prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
-         cd '$(dir $@)' && rm -f $(notdir $@) && \
-         $(LN_S) "$$prereqdir/$(notdir $<)" .
-
-$(top_builddir)/src/include/utils/fmgrprotos.h: utils/fmgrprotos.h
-       prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
-         cd '$(dir $@)' && rm -f $(notdir $@) && \
-         $(LN_S) "$$prereqdir/$(notdir $<)" .
-
-$(top_builddir)/src/include/utils/probes.h: utils/probes.h
-       cd '$(dir $@)' && rm -f $(notdir $@) && \
-           $(LN_S) "../../../$(subdir)/utils/probes.h" .
-
 
 utils/probes.o: utils/probes.d $(SUBDIROBJS)
        $(DTRACE) $(DTRACEFLAGS) -C -G -s $(call expand_subsys,$^) -o $@
@@ -213,7 +185,7 @@ distprep:
        $(MAKE) -C catalog      distprep
        $(MAKE) -C replication  repl_gram.c repl_scanner.c syncrep_gram.c syncrep_scanner.c
        $(MAKE) -C storage/lmgr lwlocknames.h lwlocknames.c
-       $(MAKE) -C utils        fmgrtab.c fmgroids.h fmgrprotos.h errcodes.h
+       $(MAKE) -C utils        distprep
        $(MAKE) -C utils/misc   guc-file.c
        $(MAKE) -C utils/sort   qsort_tuple.c
 
@@ -325,6 +297,7 @@ distclean: clean
 
 maintainer-clean: distclean
        $(MAKE) -C catalog $@
+       $(MAKE) -C utils $@
        rm -f bootstrap/bootparse.c \
              bootstrap/bootscanner.c \
              parser/gram.c \
@@ -336,10 +309,6 @@ maintainer-clean: distclean
              replication/syncrep_scanner.c \
              storage/lmgr/lwlocknames.c \
              storage/lmgr/lwlocknames.h \
-             utils/fmgroids.h \
-             utils/fmgrprotos.h \
-             utils/fmgrtab.c \
-             utils/errcodes.h \
              utils/misc/guc-file.c \
              utils/sort/qsort_tuple.c
 
index a54197da5171c491a9a1f350d2d086a60a0cef79..0865240f11fcecb6d8ba3c832d265c3b9802bb05 100644 (file)
@@ -79,8 +79,11 @@ distprep: bki-stamp
 
 generated-header-symlinks: $(top_builddir)/src/include/catalog/header-stamp
 
+# bki-stamp records the last time we ran genbki.pl.  We don't rely on
+# the timestamps of the individual output files, because the Perl script
+# won't update them if they didn't change (to avoid unnecessary recompiles).
 # Technically, this should depend on Makefile.global which supplies
-# $(MAJORVERSION); but then postgres.bki would need to be rebuilt after every
+# $(MAJORVERSION); but then genbki.pl would need to be re-run after every
 # configure run, even in distribution tarballs.  So depending on configure.in
 # instead is cheating a bit, but it will achieve the goal of updating the
 # version number when it changes.
index f26215c631570b16093b36782fe88eaa7f3c3ccb..068555695946f9770c0519a5656a559a2b55b472 100644 (file)
@@ -1,5 +1,6 @@
 /fmgrtab.c
 /fmgroids.h
 /fmgrprotos.h
+/fmgr-stamp
 /probes.h
 /errcodes.h
index 343637af858c492f93c900e4e58211f3bbc6f53a..966e3bc2ed321924bd71a423e946d73a2e396794 100644 (file)
@@ -21,23 +21,26 @@ catalogdir  = $(top_srcdir)/src/backend/catalog
 
 include $(top_srcdir)/src/backend/common.mk
 
-all: errcodes.h fmgroids.h fmgrprotos.h probes.h
+all: distprep probes.h generated-header-symlinks
 
-$(SUBDIRS:%=%-recursive): fmgroids.h fmgrprotos.h
+distprep: fmgr-stamp errcodes.h
+
+.PHONY: generated-header-symlinks
+
+generated-header-symlinks: $(top_builddir)/src/include/utils/header-stamp $(top_builddir)/src/include/utils/probes.h
+
+$(SUBDIRS:%=%-recursive): fmgr-stamp errcodes.h
 
 FMGR_DATA := $(addprefix $(top_srcdir)/src/include/catalog/,\
        pg_language.dat pg_proc.dat \
        )
 
-# see notes in src/backend/parser/Makefile
-fmgrprotos.h: fmgroids.h
-       touch $@
-
-fmgroids.h: fmgrtab.c
-       touch $@
-
-fmgrtab.c: Gen_fmgrtab.pl $(catalogdir)/Catalog.pm $(FMGR_DATA) $(top_srcdir)/src/include/access/transam.h
+# fmgr-stamp records the last time we ran Gen_fmgrtab.pl.  We don't rely on
+# the timestamps of the individual output files, because the Perl script
+# won't update them if they didn't change (to avoid unnecessary recompiles).
+fmgr-stamp: Gen_fmgrtab.pl $(catalogdir)/Catalog.pm $(FMGR_DATA) $(top_srcdir)/src/include/access/transam.h
        $(PERL) -I $(catalogdir) $< -I $(top_srcdir)/src/include/ $(FMGR_DATA)
+       touch $@
 
 errcodes.h: $(top_srcdir)/src/backend/utils/errcodes.txt generate-errcodes.pl
        $(PERL) $(srcdir)/generate-errcodes.pl $< > $@
@@ -55,6 +58,23 @@ else
        sed -f $(srcdir)/Gen_dummy_probes.sed $< >$@
 endif
 
+# These generated headers must be symlinked into builddir/src/include/,
+# using absolute links for the reasons explained in src/backend/Makefile.
+# We use header-stamp to record that we've done this because the symlinks
+# themselves may appear older than fmgr-stamp.
+$(top_builddir)/src/include/utils/header-stamp: fmgr-stamp errcodes.h
+       prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
+       cd '$(dir $@)' && for file in fmgroids.h fmgrprotos.h errcodes.h; do \
+         rm -f $$file && $(LN_S) "$$prereqdir/$$file" . ; \
+       done
+       touch $@
+
+# probes.h is handled differently because it's not in the distribution tarball.
+$(top_builddir)/src/include/utils/probes.h: probes.h
+       cd '$(dir $@)' && rm -f $(notdir $@) && \
+           $(LN_S) "../../../$(subdir)/probes.h" .
+
+
 .PHONY: install-data
 install-data: errcodes.txt installdirs
        $(INSTALL_DATA) $(srcdir)/errcodes.txt '$(DESTDIR)$(datadir)/errcodes.txt'
@@ -66,10 +86,10 @@ installdirs:
 uninstall-data:
        rm -f $(addprefix '$(DESTDIR)$(datadir)'/, errcodes.txt)
 
-# fmgroids.h, fmgrprotos.h, fmgrtab.c and errcodes.h are in the
+# fmgroids.h, fmgrprotos.h, fmgrtab.c, fmgr-stamp, and errcodes.h are in the
 # distribution tarball, so they are not cleaned here.
 clean:
        rm -f probes.h
 
 maintainer-clean: clean
-       rm -f fmgroids.h fmgrprotos.h fmgrtab.c errcodes.h
+       rm -f fmgroids.h fmgrprotos.h fmgrtab.c fmgr-stamp errcodes.h
index ba4b5f27fc6ed0e4196f06125e3323ef81fa242b..901eddbd4485c6401d813ae6c3d2048099139f8b 100644 (file)
@@ -77,7 +77,7 @@ uninstall:
 
 
 clean:
-       rm -f utils/fmgroids.h utils/fmgrprotos.h utils/errcodes.h
+       rm -f utils/fmgroids.h utils/fmgrprotos.h utils/errcodes.h utils/header-stamp
        rm -f parser/gram.h storage/lwlocknames.h utils/probes.h
        rm -f catalog/schemapg.h catalog/pg_*_d.h catalog/header-stamp
 
index 25db658da51cc2d463de47743b5e0828f26d8ca2..05cfa7a8d6cee02913266e8bbbf4c815ea9cb0d4 100644 (file)
@@ -2,3 +2,4 @@
 /fmgrprotos.h
 /probes.h
 /errcodes.h
+/header-stamp