From 99c51d5ed88c92db7d9b61b3c53c3d1eea32f9ec Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon, 21 Oct 2019 12:32:36 -0400
Subject: [PATCH] Select CFLAGS_SL at configure time, not in platform-specific
 Makefiles.

Move the platform-dependent logic that sets CFLAGS_SL from
src/makefiles/Makefile.foo to src/template/foo, so that the value
is determined at configure time and thus is available while running
configure's tests.

On a couple of platforms this might save a few microseconds of build
time by eliminating a test that make otherwise has to do over and over.
Otherwise it's pretty much a wash for build purposes; in particular,
this makes no difference to anyone who might be overriding CFLAGS_SL
via a make option.

This patch in itself does nothing with the value and thus should not
change any behavior, though you'll probably have to re-run configure
to get a correctly updated Makefile.global.  We'll use the new
configure variable in a follow-on patch.

Per gripe from Kyotaro Horiguchi.  Back-patch to all supported branches,
because the follow-on patch is a portability bug fix.

Discussion: https://postgr.es/m/20191010.144533.263180400.horikyota.ntt@gmail.com
---
 configure                      | 7 ++++---
 configure.in                   | 9 ++++++---
 src/Makefile.global.in         | 1 +
 src/makefiles/Makefile.cygwin  | 1 -
 src/makefiles/Makefile.freebsd | 2 --
 src/makefiles/Makefile.hpux    | 5 -----
 src/makefiles/Makefile.linux   | 2 --
 src/makefiles/Makefile.netbsd  | 2 --
 src/makefiles/Makefile.openbsd | 2 --
 src/makefiles/Makefile.solaris | 6 +-----
 src/makefiles/Makefile.win32   | 1 -
 src/template/aix               | 5 +++++
 src/template/cygwin            | 3 +++
 src/template/darwin            | 3 +++
 src/template/freebsd           | 3 +++
 src/template/hpux              | 7 +++++++
 src/template/linux             | 3 +++
 src/template/netbsd            | 3 +++
 src/template/openbsd           | 4 ++++
 src/template/solaris           | 9 +++++++++
 src/template/win32             | 3 +++
 21 files changed, 55 insertions(+), 26 deletions(-)

diff --git a/configure b/configure
index 0db76c76365..aa53c57510d 100755
--- a/configure
+++ b/configure
@@ -729,6 +729,7 @@ autodepend
 TAS
 GCC
 CPP
+CFLAGS_SL
 BITCODE_CXXFLAGS
 BITCODE_CFLAGS
 CFLAGS_VECTOR
@@ -6368,7 +6369,6 @@ fi
 
 fi
 
-CFLAGS_VECTOR=$CFLAGS_VECTOR
 
 
 # Determine flags used to emit bitcode for JIT inlining. Need to test
@@ -6688,9 +6688,10 @@ CXXFLAGS="$CXXFLAGS $user_CXXFLAGS"
 BITCODE_CFLAGS="$BITCODE_CFLAGS $user_BITCODE_CFLAGS"
 BITCODE_CXXFLAGS="$BITCODE_CXXFLAGS $user_BITCODE_CXXFLAGS"
 
-BITCODE_CFLAGS=$BITCODE_CFLAGS
 
-BITCODE_CXXFLAGS=$BITCODE_CXXFLAGS
+
+
+# The template file must set up CFLAGS_SL; we don't support user override
 
 
 # Check if the compiler still works with the final flag settings
diff --git a/configure.in b/configure.in
index b2a71bec23c..5f7e2d0a9b2 100644
--- a/configure.in
+++ b/configure.in
@@ -536,7 +536,7 @@ elif test "$PORTNAME" = "hpux"; then
   PGAC_PROG_CXX_CFLAGS_OPT([+Olibmerrno])
 fi
 
-AC_SUBST(CFLAGS_VECTOR, $CFLAGS_VECTOR)
+AC_SUBST(CFLAGS_VECTOR)
 
 # Determine flags used to emit bitcode for JIT inlining. Need to test
 # for behaviour changing compiler flags, to keep compatibility with
@@ -596,8 +596,11 @@ CXXFLAGS="$CXXFLAGS $user_CXXFLAGS"
 BITCODE_CFLAGS="$BITCODE_CFLAGS $user_BITCODE_CFLAGS"
 BITCODE_CXXFLAGS="$BITCODE_CXXFLAGS $user_BITCODE_CXXFLAGS"
 
-AC_SUBST(BITCODE_CFLAGS, $BITCODE_CFLAGS)
-AC_SUBST(BITCODE_CXXFLAGS, $BITCODE_CXXFLAGS)
+AC_SUBST(BITCODE_CFLAGS)
+AC_SUBST(BITCODE_CXXFLAGS)
+
+# The template file must set up CFLAGS_SL; we don't support user override
+AC_SUBST(CFLAGS_SL)
 
 # Check if the compiler still works with the final flag settings
 # (note, we're not checking that for CXX, which is optional)
diff --git a/src/Makefile.global.in b/src/Makefile.global.in
index 64ce7557bad..11f47b630f4 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -259,6 +259,7 @@ GCC = @GCC@
 SUN_STUDIO_CC = @SUN_STUDIO_CC@
 CXX = @CXX@
 CFLAGS = @CFLAGS@
+CFLAGS_SL = @CFLAGS_SL@
 CFLAGS_VECTOR = @CFLAGS_VECTOR@
 CFLAGS_SSE42 = @CFLAGS_SSE42@
 CFLAGS_ARMV8_CRC32C = @CFLAGS_ARMV8_CRC32C@
diff --git a/src/makefiles/Makefile.cygwin b/src/makefiles/Makefile.cygwin
index f274d802b1e..81089d6257b 100644
--- a/src/makefiles/Makefile.cygwin
+++ b/src/makefiles/Makefile.cygwin
@@ -12,7 +12,6 @@ LIBS:=$(filter-out -lm -lc, $(LIBS))
 
 AROPT = crs
 DLSUFFIX = .dll
-CFLAGS_SL =
 
 override CPPFLAGS += -DWIN32_STACK_RLIMIT=$(WIN32_STACK_RLIMIT)
 
diff --git a/src/makefiles/Makefile.freebsd b/src/makefiles/Makefile.freebsd
index 5008c96b3f5..8e5bc9c6ec9 100644
--- a/src/makefiles/Makefile.freebsd
+++ b/src/makefiles/Makefile.freebsd
@@ -7,8 +7,6 @@ endif
 
 DLSUFFIX = .so
 
-CFLAGS_SL = -fPIC -DPIC
-
 # extra stuff for $(with_temp_install)
 # we need this to get LD_LIBRARY_PATH searched ahead of the compiled-in
 # rpath, if no DT_RUNPATH is present in the executable. The conditions
diff --git a/src/makefiles/Makefile.hpux b/src/makefiles/Makefile.hpux
index 84a1cc35425..cc9ca10a872 100644
--- a/src/makefiles/Makefile.hpux
+++ b/src/makefiles/Makefile.hpux
@@ -30,11 +30,6 @@ ifeq ($(host_cpu), ia64)
 else
    DLSUFFIX = .sl
 endif
-ifeq ($(GCC), yes)
-   CFLAGS_SL = -fPIC
-else
-   CFLAGS_SL = +Z
-endif
 
 # env var name to use in place of LD_LIBRARY_PATH
 ld_library_path_var = SHLIB_PATH
diff --git a/src/makefiles/Makefile.linux b/src/makefiles/Makefile.linux
index f4f091caef5..c6d0546e4d5 100644
--- a/src/makefiles/Makefile.linux
+++ b/src/makefiles/Makefile.linux
@@ -7,8 +7,6 @@ rpath = -Wl,-rpath,'$(rpathdir)',--enable-new-dtags
 
 DLSUFFIX = .so
 
-CFLAGS_SL = -fPIC
-
 
 # Rule for building a shared library from a single .o file
 %.so: %.o
diff --git a/src/makefiles/Makefile.netbsd b/src/makefiles/Makefile.netbsd
index 43841c15973..c2a3cce4f01 100644
--- a/src/makefiles/Makefile.netbsd
+++ b/src/makefiles/Makefile.netbsd
@@ -9,8 +9,6 @@ endif
 
 DLSUFFIX = .so
 
-CFLAGS_SL = -fPIC -DPIC
-
 
 # Rule for building a shared library from a single .o file
 %.so: %.o
diff --git a/src/makefiles/Makefile.openbsd b/src/makefiles/Makefile.openbsd
index d8fde49d5c8..0c5a7b4eb35 100644
--- a/src/makefiles/Makefile.openbsd
+++ b/src/makefiles/Makefile.openbsd
@@ -7,8 +7,6 @@ endif
 
 DLSUFFIX = .so
 
-CFLAGS_SL = -fPIC -DPIC
-
 
 # Rule for building a shared library from a single .o file
 %.so: %.o
diff --git a/src/makefiles/Makefile.solaris b/src/makefiles/Makefile.solaris
index e459de30cf4..a05c0e0d3d2 100644
--- a/src/makefiles/Makefile.solaris
+++ b/src/makefiles/Makefile.solaris
@@ -10,11 +10,7 @@ rpath = -Wl,-R'$(rpathdir)'
 endif
 
 DLSUFFIX = .so
-ifeq ($(GCC), yes)
-CFLAGS_SL = -fPIC
-else
-CFLAGS_SL = -KPIC
-endif
+
 
 # Rule for building a shared library from a single .o file
 %.so: %.o
diff --git a/src/makefiles/Makefile.win32 b/src/makefiles/Makefile.win32
index 3dea11e5c28..8a7d6fff3e5 100644
--- a/src/makefiles/Makefile.win32
+++ b/src/makefiles/Makefile.win32
@@ -12,7 +12,6 @@ override CPPFLAGS += -DWIN32_STACK_RLIMIT=$(WIN32_STACK_RLIMIT)
 
 AROPT = crs
 DLSUFFIX = .dll
-CFLAGS_SL =
 
 ifneq (,$(findstring backend,$(subdir)))
 ifeq (,$(findstring conversion_procs,$(subdir)))
diff --git a/src/template/aix b/src/template/aix
index 999cd359457..cec240d27b9 100644
--- a/src/template/aix
+++ b/src/template/aix
@@ -1,3 +1,5 @@
+# src/template/aix
+
 # Set default options if using xlc.  This formerly included -qsrcmsg, but that
 # option elicits internal compiler errors from xlc v16.1.0.  Note: configure
 # will add -qnoansialias if the compiler accepts it, even if user specifies a
@@ -17,6 +19,9 @@ if test "$GCC" != yes ; then
   FORCE_DISABLE_RESTRICT=yes
 fi
 
+# Extra CFLAGS for code that will go into a shared library
+CFLAGS_SL=""
+
 # Native memset() is faster, tested on:
 # 	AIX 5.1 and 5.2, XLC 6.0 (IBM's cc)
 # 	AIX 5.3 ML3, gcc 4.0.1
diff --git a/src/template/cygwin b/src/template/cygwin
index b6ea0ded522..79a108145ff 100644
--- a/src/template/cygwin
+++ b/src/template/cygwin
@@ -2,6 +2,9 @@
 
 SRCH_LIB="/usr/local/lib"
 
+# Extra CFLAGS for code that will go into a shared library
+CFLAGS_SL=""
+
 # --allow-multiple-definition is required to link pg_dump because it finds
 # pg_toupper() etc. in both libpq and pgport
 # we'd prefer to use --disable-auto-import to match MSVC linking behavior,
diff --git a/src/template/darwin b/src/template/darwin
index c05adca0bfb..f4d4e9d7cf8 100644
--- a/src/template/darwin
+++ b/src/template/darwin
@@ -16,6 +16,9 @@ if test x"$PG_SYSROOT" != x"" ; then
   fi
 fi
 
+# Extra CFLAGS for code that will go into a shared library
+CFLAGS_SL=""
+
 # Select appropriate semaphore support.  Darwin 6.0 (macOS 10.2) and up
 # support System V semaphores; before that we have to use named POSIX
 # semaphores, which are less good for our purposes because they eat a
diff --git a/src/template/freebsd b/src/template/freebsd
index a82d5a494c9..41fa4a1aba1 100644
--- a/src/template/freebsd
+++ b/src/template/freebsd
@@ -4,3 +4,6 @@
 if test x"$PREFERRED_SEMAPHORES" = x"" ; then
   PREFERRED_SEMAPHORES=UNNAMED_POSIX
 fi
+
+# Extra CFLAGS for code that will go into a shared library
+CFLAGS_SL="-fPIC -DPIC"
diff --git a/src/template/hpux b/src/template/hpux
index 79d3475664e..50fff80c530 100644
--- a/src/template/hpux
+++ b/src/template/hpux
@@ -8,6 +8,13 @@ if test "$GCC" != yes ; then
   CFLAGS="+O2"
 fi
 
+# Extra CFLAGS for code that will go into a shared library
+if test "$GCC" = yes ; then
+  CFLAGS_SL="-fPIC"
+else
+  CFLAGS_SL="+Z"
+fi
+
 # Pick right test-and-set (TAS) code.  We need out-of-line assembler
 # when not using gcc.
 case $host in
diff --git a/src/template/linux b/src/template/linux
index f820bf7280f..085fd5317ff 100644
--- a/src/template/linux
+++ b/src/template/linux
@@ -8,6 +8,9 @@ fi
 # Force _GNU_SOURCE on; plperl is broken with Perl 5.8.0 otherwise
 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
 
+# Extra CFLAGS for code that will go into a shared library
+CFLAGS_SL="-fPIC"
+
 # If --enable-profiling is specified, we need -DLINUX_PROFILE
 PLATFORM_PROFILE_FLAGS="-DLINUX_PROFILE"
 
diff --git a/src/template/netbsd b/src/template/netbsd
index 198697723df..d97f995c748 100644
--- a/src/template/netbsd
+++ b/src/template/netbsd
@@ -1,2 +1,5 @@
 # src/template/netbsd
 # tools/thread/thread_test must be run
+
+# Extra CFLAGS for code that will go into a shared library
+CFLAGS_SL="-fPIC -DPIC"
diff --git a/src/template/openbsd b/src/template/openbsd
index e69de29bb2d..365268c4897 100644
--- a/src/template/openbsd
+++ b/src/template/openbsd
@@ -0,0 +1,4 @@
+# src/template/openbsd
+
+# Extra CFLAGS for code that will go into a shared library
+CFLAGS_SL="-fPIC -DPIC"
diff --git a/src/template/solaris b/src/template/solaris
index e07b9a0a8d6..f88b1cdad37 100644
--- a/src/template/solaris
+++ b/src/template/solaris
@@ -1,3 +1,12 @@
+# src/template/solaris
+
+# Extra CFLAGS for code that will go into a shared library
+if test "$GCC" = yes ; then
+  CFLAGS_SL="-fPIC"
+else
+  CFLAGS_SL="-KPIC"
+fi
+
 if test "$SUN_STUDIO_CC" = yes ; then
   CC="$CC -Xa"			# relaxed ISO C mode
   CFLAGS="-v"			# -v is like gcc -Wall
diff --git a/src/template/win32 b/src/template/win32
index 7da9719acbd..1380d16548c 100644
--- a/src/template/win32
+++ b/src/template/win32
@@ -1,5 +1,8 @@
 # src/template/win32
 
+# Extra CFLAGS for code that will go into a shared library
+CFLAGS_SL=""
+
 # --allow-multiple-definition is required to link pg_dump because it finds
 # pg_toupper() etc. in both libpq and pgport
 # --disable-auto-import is to ensure we get MSVC-like linking behavior
-- 
GitLab