aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-07-03 13:55:02 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2011-07-03 13:55:12 -0400
commitacb9198b960caaa2fe9f31258116eaa7c1154093 (patch)
treecc981e64fbc8e0a0c3dd88935fa6367790d59d21 /src
parent19b7fac86d85c89f2c9173906722da70c6eebad2 (diff)
downloadpostgresql-acb9198b960caaa2fe9f31258116eaa7c1154093.tar.gz
postgresql-acb9198b960caaa2fe9f31258116eaa7c1154093.zip
Make distprep and *clean build targets recurse into all subdirectories.
Certain subdirectories do not get built if corresponding options are not selected at configure time. However, "make distprep" should visit such directories anyway, so that constructing derived files to be included in the tarball happens without requiring all configure options to be given in the tarball build script. Likewise, it's better if cleanup actions unconditionally visit all directories (for example, this ensures proper cleanup if someone has done a manual make in such a subdirectory). To handle this, set up a convention that subdirectories that are conditionally included in SUBDIRS should be added to ALWAYS_SUBDIRS instead when they are excluded. Back-patch to 9.1, so that plpython's spiexceptions.h will get provided in 9.1 tarballs. There don't appear to be any instances where distprep actions got missed in previous releases, and anyway this fix requires gmake 3.80 so we don't want to apply it before 9.1.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.global.in12
-rw-r--r--src/bin/Makefile6
-rw-r--r--src/pl/Makefile7
-rw-r--r--src/pl/plpython/Makefile28
4 files changed, 39 insertions, 14 deletions
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index ba0822383f2..3bf658d6b0c 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -19,6 +19,8 @@
# Meta configuration
standard_targets = all install installdirs uninstall distprep clean distclean maintainer-clean coverage check installcheck maintainer-check
+# these targets should recurse even into subdirectories not being built:
+standard_always_targets = distprep clean distclean maintainer-clean
.PHONY: $(standard_targets) install-strip html man installcheck-parallel
@@ -603,6 +605,16 @@ endef
# $3: target to run in subdir (defaults to current element of $1)
recurse = $(foreach target,$(if $1,$1,$(standard_targets)),$(foreach subdir,$(if $2,$2,$(SUBDIRS)),$(eval $(call _create_recursive_target,$(target),$(subdir),$(if $3,$3,$(target))))))
+# If a makefile's list of SUBDIRS varies depending on configuration, then
+# any subdirectories excluded from SUBDIRS should instead be added to
+# ALWAYS_SUBDIRS, and then it must call recurse_always as well as recurse.
+# This ensures that distprep, distclean, etc will apply to all subdirectories.
+# In the normal case all arguments will be defaulted.
+# $1: targets to make recursive (defaults to standard_always_targets)
+# $2: list of subdirs (defaults to ALWAYS_SUBDIRS variable)
+# $3: target to run in subdir (defaults to current element of $1)
+recurse_always = $(foreach target,$(if $1,$1,$(standard_always_targets)),$(foreach subdir,$(if $2,$2,$(ALWAYS_SUBDIRS)),$(eval $(call _create_recursive_target,$(target),$(subdir),$(if $3,$3,$(target))))))
+
##########################################################################
#
diff --git a/src/bin/Makefile b/src/bin/Makefile
index 3809412a2d0..c333a489f1a 100644
--- a/src/bin/Makefile
+++ b/src/bin/Makefile
@@ -15,8 +15,12 @@ include $(top_builddir)/src/Makefile.global
SUBDIRS = initdb pg_ctl pg_dump \
psql scripts pg_config pg_controldata pg_resetxlog pg_basebackup
+
ifeq ($(PORTNAME), win32)
-SUBDIRS+=pgevent
+SUBDIRS += pgevent
+else
+ALWAYS_SUBDIRS += pgevent
endif
$(recurse)
+$(recurse_always)
diff --git a/src/pl/Makefile b/src/pl/Makefile
index ef630fe8d2e..c4a0d1cd07a 100644
--- a/src/pl/Makefile
+++ b/src/pl/Makefile
@@ -16,14 +16,21 @@ SUBDIRS = plpgsql
ifeq ($(with_perl), yes)
SUBDIRS += plperl
+else
+ALWAYS_SUBDIRS += plperl
endif
ifeq ($(with_python), yes)
SUBDIRS += plpython
+else
+ALWAYS_SUBDIRS += plpython
endif
ifeq ($(with_tcl), yes)
SUBDIRS += tcl
+else
+ALWAYS_SUBDIRS += tcl
endif
$(recurse)
+$(recurse_always)
diff --git a/src/pl/plpython/Makefile b/src/pl/plpython/Makefile
index 2c0575501a4..56e06d74f12 100644
--- a/src/pl/plpython/Makefile
+++ b/src/pl/plpython/Makefile
@@ -95,16 +95,8 @@ PSQLDIR = $(bindir)
include $(top_srcdir)/src/Makefile.shlib
-# Force this dependency to be known even without dependency info built:
-plpython.o: spiexceptions.h
-
-spiexceptions.h: $(top_srcdir)/src/backend/utils/errcodes.txt generate-spiexceptions.pl
- $(PERL) $(srcdir)/generate-spiexceptions.pl $< > $@
-
all: all-lib
-distprep: spiexceptions.h
-
install: all install-lib install-data
@@ -151,13 +143,13 @@ installcheck: submake prep3
$(pg_regress_installcheck) --inputdir=./python3 --outputdir=./python3 $(REGRESS_OPTS) $(REGRESS)
clean: clean3
-else
+else # not Python 3
check: submake
$(pg_regress_check) $(REGRESS_OPTS) $(REGRESS)
installcheck: submake
$(pg_regress_installcheck) $(REGRESS_OPTS) $(REGRESS)
-endif
+endif # not Python 3
.PHONY: submake
submake:
@@ -170,9 +162,6 @@ ifeq ($(PORTNAME), win32)
rm -f python${pytverstr}.def
endif
-maintainer-clean: distclean
- rm -f spiexceptions.h
-
else # can't build
all:
@@ -183,3 +172,16 @@ all:
echo ""
endif # can't build
+
+# distprep and maintainer-clean rules should be run even if we can't build.
+
+# Force this dependency to be known even without dependency info built:
+plpython.o: spiexceptions.h
+
+spiexceptions.h: $(top_srcdir)/src/backend/utils/errcodes.txt generate-spiexceptions.pl
+ $(PERL) $(srcdir)/generate-spiexceptions.pl $< > $@
+
+distprep: spiexceptions.h
+
+maintainer-clean: distclean
+ rm -f spiexceptions.h