Increase minimum supported GNU make version to 3.81.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 23 Jul 2022 16:12:42 +0000 (12:12 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 23 Jul 2022 16:12:42 +0000 (12:12 -0400)
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
src/Makefile.global.in

index 32e0d3fd9d31be72a5829a353c6d080d9050de69..70d188e2bc4960e8c18a3b1038214b93ac51a4ee 100644 (file)
@@ -77,7 +77,7 @@ su - postgres
        <primary>make</primary>
       </indexterm>
 
-      <acronym>GNU</acronym> <application>make</application> version 3.80 or newer is required; other
+      <acronym>GNU</acronym> <application>make</application> version 3.81 or newer is required; other
       <application>make</application> programs or older <acronym>GNU</acronym> <application>make</application> versions will <emphasis>not</emphasis> work.
       (<acronym>GNU</acronym> <application>make</application> is sometimes installed under
       the name <filename>gmake</filename>.)  To test for <acronym>GNU</acronym>
index bb177a816226b3f87795931f114ce33d4da5f5af..14fdd4ef7b1f732a721b2d8d64486ccf2f52339a 100644 (file)
@@ -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.