From 548af97fcec5543603c20b61fec60f8147a05b29 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 1 Jul 2016 15:08:55 -0400
Subject: [PATCH] Provide and use a makefile target to build all generated
 headers.

As of 9.6, pg_regress doesn't build unless storage/lwlocknames.h has been
created; but there was nothing forcing that to happen if you just went into
src/test/regress/ and built there.  We previously had a similar complaint
about plpython.

To fix in a way that won't break next time we invent a generated header,
make src/backend/Makefile expose a phony target for updating all the
include files it builds, and invoke that before building pg_regress or
plpython.  In principle, maybe we ought to invoke that everywhere; but
it would add a lot of usually-useless make cycles, so let's just do it
in the places where people have complained.

I made a couple of cosmetic adjustments in src/backend/Makefile as well,
to deal with the generated headers in consistent orders.

Michael Paquier and Tom Lane

Report: <31398.1467036827@sss.pgh.pa.us>
Report: <20150916200959.GB32090@msg.df7cb.de>
---
 src/Makefile.global.in       |  9 ++++++++-
 src/backend/Makefile         | 30 ++++++++++++++++++------------
 src/pl/plpython/Makefile     | 10 +++++-----
 src/test/modules/Makefile    |  5 +----
 src/test/regress/GNUmakefile |  4 ++--
 5 files changed, 34 insertions(+), 24 deletions(-)

diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 811d05f4608..c211a2d2e75 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -494,6 +494,10 @@ libpq_pgport += $(LDAP_LIBS_FE)
 endif
 
 
+##########################################################################
+#
+# Commonly used submake targets
+
 submake-libpq:
 	$(MAKE) -C $(libpq_builddir) all
 
@@ -506,7 +510,10 @@ submake-libpgfeutils:
 	$(MAKE) -C $(top_builddir)/src/common all
 	$(MAKE) -C $(top_builddir)/src/fe_utils all
 
-.PHONY: submake-libpq submake-libpgport submake-libpgfeutils
+submake-generated-headers:
+	$(MAKE) -C $(top_builddir)/src/backend generated-headers
+
+.PHONY: submake-libpq submake-libpgport submake-libpgfeutils submake-generated-headers
 
 
 ##########################################################################
diff --git a/src/backend/Makefile b/src/backend/Makefile
index ec2dc7be404..3b08defe2bc 100644
--- a/src/backend/Makefile
+++ b/src/backend/Makefile
@@ -110,18 +110,12 @@ endif
 endif # aix
 
 # Update the commonly used headers before building the subdirectories
-$(SUBDIRS:%=%-recursive): $(top_builddir)/src/include/parser/gram.h $(top_builddir)/src/include/catalog/schemapg.h $(top_builddir)/src/include/storage/lwlocknames.h $(top_builddir)/src/include/utils/fmgroids.h $(top_builddir)/src/include/utils/errcodes.h $(top_builddir)/src/include/utils/probes.h
+$(SUBDIRS:%=%-recursive): | generated-headers
 
-# run this unconditionally to avoid needing to know its dependencies here:
-submake-schemapg:
-	$(MAKE) -C catalog schemapg.h
-
-# src/port needs a convenient way to force errcodes.h to get built
+# src/port needs a convenient way to force just errcodes.h to get built
 submake-errcodes: $(top_builddir)/src/include/utils/errcodes.h
 
-.PHONY: submake-schemapg submake-errcodes
-
-catalog/schemapg.h: | submake-schemapg
+.PHONY: submake-errcodes
 
 $(top_builddir)/src/port/libpgport_srv.a: | submake-libpgport
 
@@ -142,15 +136,23 @@ 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
 
-utils/fmgroids.h: utils/Gen_fmgrtab.pl catalog/Catalog.pm $(top_srcdir)/src/include/catalog/pg_proc.h
-	$(MAKE) -C utils fmgroids.h
-
 utils/errcodes.h: utils/generate-errcodes.pl utils/errcodes.txt
 	$(MAKE) -C utils errcodes.h
 
+utils/fmgroids.h: utils/Gen_fmgrtab.pl catalog/Catalog.pm $(top_srcdir)/src/include/catalog/pg_proc.h
+	$(MAKE) -C utils fmgroids.h
+
 utils/probes.h: utils/probes.d
 	$(MAKE) -C utils probes.h
 
+# run this unconditionally to avoid needing to know its dependencies here:
+catalog/schemapg.h: | submake-schemapg
+
+submake-schemapg:
+	$(MAKE) -C catalog schemapg.h
+
+.PHONY: submake-schemapg
+
 # Make symlinks for these headers in the include directory. That way
 # we can cut down on the -I options. Also, a symlink is automatically
 # up to date when we update the base file.
@@ -162,6 +164,10 @@ utils/probes.h: utils/probes.d
 # will be in the build tree, so a simple ../.. reference won't work.
 # For headers generated during regular builds, we prefer a relative symlink.
 
+.PHONY: generated-headers
+
+generated-headers: $(top_builddir)/src/include/parser/gram.h $(top_builddir)/src/include/catalog/schemapg.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/probes.h
+
 $(top_builddir)/src/include/parser/gram.h: parser/gram.h
 	prereqdir=`cd '$(dir $<)' >/dev/null && pwd` && \
 	  cd '$(dir $@)' && rm -f $(notdir $@) && \
diff --git a/src/pl/plpython/Makefile b/src/pl/plpython/Makefile
index 9f62e299f60..647b4b1b96f 100644
--- a/src/pl/plpython/Makefile
+++ b/src/pl/plpython/Makefile
@@ -95,7 +95,7 @@ REGRESS_PLPYTHON3_MANGLE := $(REGRESS)
 
 include $(top_srcdir)/src/Makefile.shlib
 
-all: all-lib
+all: submake-generated-headers all-lib
 
 
 install: all install-lib install-data
@@ -119,15 +119,15 @@ uninstall-data:
 include $(srcdir)/regress-python3-mangle.mk
 
 
-check: submake
+check: submake-pg-regress
 	$(pg_regress_check) $(REGRESS_OPTS) $(REGRESS)
 
-installcheck: submake
+installcheck: submake-pg-regress
 	$(pg_regress_installcheck) $(REGRESS_OPTS) $(REGRESS)
 
 
-.PHONY: submake
-submake:
+.PHONY: submake-pg-regress
+submake-pg-regress:
 	$(MAKE) -C $(top_builddir)/src/test/regress pg_regress$(X)
 
 clean distclean: clean-lib
diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile
index 892662755a8..3ce99046f84 100644
--- a/src/test/modules/Makefile
+++ b/src/test/modules/Makefile
@@ -17,9 +17,6 @@ SUBDIRS = \
 		  test_shm_mq \
 		  worker_spi
 
-all: submake-errcodes
-
-submake-errcodes:
-	$(MAKE) -C $(top_builddir)/src/backend submake-errcodes
+all: submake-generated-headers
 
 $(recurse)
diff --git a/src/test/regress/GNUmakefile b/src/test/regress/GNUmakefile
index f5ed474d6e3..6a275cb729c 100644
--- a/src/test/regress/GNUmakefile
+++ b/src/test/regress/GNUmakefile
@@ -36,7 +36,7 @@ EXTRADEFS = '-DHOST_TUPLE="$(host_tuple)"' \
 
 all: pg_regress$(X)
 
-pg_regress$(X): pg_regress.o pg_regress_main.o $(WIN32RES) | submake-libpgport
+pg_regress$(X): pg_regress.o pg_regress_main.o $(WIN32RES) | submake-libpgport submake-generated-headers
 	$(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@
 
 # dependencies ensure that path changes propagate
@@ -105,7 +105,7 @@ $(top_builddir)/contrib/spi/refint$(DLSUFFIX): | submake-contrib-spi ;
 
 $(top_builddir)/contrib/spi/autoinc$(DLSUFFIX): | submake-contrib-spi ;
 
-submake-contrib-spi:
+submake-contrib-spi: | submake-libpgport submake-generated-headers
 	$(MAKE) -C $(top_builddir)/contrib/spi
 
 .PHONY: submake-contrib-spi
-- 
GitLab