Rearrange makefile rules for running Gen_fmgrtab.pl.
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
This commit is contained in:
parent
fa03769e4c
commit
9bf28f96c7
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
1
src/backend/utils/.gitignore
vendored
1
src/backend/utils/.gitignore
vendored
@ -1,5 +1,6 @@
|
||||
/fmgrtab.c
|
||||
/fmgroids.h
|
||||
/fmgrprotos.h
|
||||
/fmgr-stamp
|
||||
/probes.h
|
||||
/errcodes.h
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
1
src/include/utils/.gitignore
vendored
1
src/include/utils/.gitignore
vendored
@ -2,3 +2,4 @@
|
||||
/fmgrprotos.h
|
||||
/probes.h
|
||||
/errcodes.h
|
||||
/header-stamp
|
||||
|
Loading…
x
Reference in New Issue
Block a user