From 8efefa748777baf6a61a0e5ec3858a2b90fd8e84 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 23 Jul 2022 12:12:42 -0400 Subject: [PATCH] Increase minimum supported GNU make version to 3.81. We've long held the minimum at 3.80, but that's required more than one workaround. Commit 0f39b70a6 broke it again, because it turns out that exporting a target-specific variable didn't work in 3.80. Considering that 3.81 is now old enough to get a driver's license, and that the only remaining buildfarm member testing 3.80 (prairiedog) is likely to be retired soon, let's just stop supporting 3.80. Adjust docs and Makefile.global's minimum-version check to match. There are a couple of comments in the Makefiles suggesting that random things could be done differently after we desupport 3.80, but I couldn't get excited about changing any of them right now. Back-patch to v15, as 0f39b70a6 was. Discussion: https://postgr.es/m/20220720172321.GL12702@telsasoft.com --- doc/src/sgml/installation.sgml | 2 +- src/Makefile.global.in | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml index 32e0d3fd9d3..70d188e2bc4 100644 --- a/doc/src/sgml/installation.sgml +++ b/doc/src/sgml/installation.sgml @@ -77,7 +77,7 @@ su - postgres make - GNU make version 3.80 or newer is required; other + GNU make version 3.81 or newer is required; other make programs or older GNU make versions will not work. (GNU make is sometimes installed under the name gmake.) To test for GNU diff --git a/src/Makefile.global.in b/src/Makefile.global.in index bb177a81622..14fdd4ef7b1 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -635,7 +635,6 @@ submake-libpgfeutils: | submake-generated-headers ifneq ($(USE_MODULE_DB),) PL_TESTDB = pl_regression_$(NAME) - # Replace this with $(or ...) if we ever require GNU make 3.81. ifneq ($(MODULE_big),) CONTRIB_TESTDB=contrib_regression_$(MODULE_big) ISOLATION_TESTDB=isolation_regression_$(MODULE_big) @@ -872,11 +871,11 @@ install-strip: # allows parallel make across directories and lets make -k and -q work # correctly. -# We need the $(eval) function and order-only prerequisites, which are -# available in GNU make 3.80. That also happens to be the version -# where the .VARIABLES variable was introduced, so this is a simple check. -ifndef .VARIABLES -$(error GNU make 3.80 or newer is required. You are using version $(MAKE_VERSION)) +# We need the ability to export target-specific variables, which was +# added in GNU make 3.81. That also happens to be the version +# where the .FEATURES variable was introduced, so this is a simple check. +ifndef .FEATURES +$(error GNU make 3.81 or newer is required. You are using version $(MAKE_VERSION)) endif # This function is only for internal use below. It should be called @@ -884,7 +883,7 @@ endif # given subdirectory. For the tree-wide all/install/check/installcheck cases, # ensure we do our one-time tasks before recursing (see targets above). # Note that to avoid a nasty bug in make 3.80, -# this function has to avoid using any complicated constructs (like +# this function was written to not use any complicated constructs (like # multiple targets on a line) and also not contain any lines that expand # to more than about 200 bytes. This is why we make it apply to just one # subdirectory at a time, rather than to a list of subdirectories.