From 548af97fcec5543603c20b61fec60f8147a05b29 Mon Sep 17 00:00:00 2001 From: Tom Lane 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 811d05f460..c211a2d2e7 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 ec2dc7be40..3b08defe2b 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 9f62e299f6..647b4b1b96 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 892662755a..3ce99046f8 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 f5ed474d6e..6a275cb729 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 -- 2.40.0