Re: configure fails for perl check on CentOS8

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: configure fails for perl check on CentOS8
Дата
Msg-id 2990.1571614599@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: configure fails for perl check on CentOS8  (Andrew Dunstan <andrew.dunstan@2ndquadrant.com>)
Ответы Re: configure fails for perl check on CentOS8  (Andrew Dunstan <andrew.dunstan@2ndquadrant.com>)
Список pgsql-hackers
Andrew Dunstan <andrew.dunstan@2ndquadrant.com> writes:
> On 10/20/19 1:23 PM, Tom Lane wrote:
>> The right way to fix it, likely, is to add CFLAGS_SL while performing this
>> particular autoconf test, as that would replicate the switches used for
>> plperl (and it turns out that adding -fPIC does solve this problem).
>> But the configure script doesn't currently know about CFLAGS_SL, so we'd
>> have to do some refactoring to approach it that way.  Moving that logic
>> from the platform-specific Makefiles into configure doesn't seem
>> unreasonable, but it would make the patch bigger.

> Sounds like a plan. I agree it's annoying to have to do something large
> for something so trivial.

Turns out it's not really that bad.  We just have to transfer the
responsibility for setting CFLAGS_SL from the platform Makefiles
to the platform template files.  (As a bonus, it'd be possible to
allow users to override CFLAGS_SL during configure, as they can
do for CFLAGS.  But I didn't mess with that here.)

I checked that this fixes the Fedora build problem, but I've not
really tested it on any other platform.  Still, there's not that
much to go wrong, one would think.

            regards, tom lane

diff --git a/configure b/configure
index 02a905b..1d664a4 100755
--- a/configure
+++ b/configure
@@ -728,6 +728,7 @@ autodepend
 TAS
 GCC
 CPP
+CFLAGS_SL
 BITCODE_CXXFLAGS
 BITCODE_CFLAGS
 CFLAGS_VECTOR
@@ -6579,7 +6580,6 @@ fi

 fi

-CFLAGS_VECTOR=$CFLAGS_VECTOR


 # Determine flags used to emit bitcode for JIT inlining. Need to test
@@ -6899,9 +6899,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 88d3a59..50f4b26 100644
--- a/configure.in
+++ b/configure.in
@@ -547,7 +547,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
@@ -607,8 +607,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 2d21068..05b6638 100644
--- a/src/Makefile.global.in
+++ b/src/Makefile.global.in
@@ -258,6 +258,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 f274d80..81089d6 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 c462e2f..75db21b 100644
--- a/src/makefiles/Makefile.freebsd
+++ b/src/makefiles/Makefile.freebsd
@@ -5,8 +5,6 @@ rpath = -Wl,-R'$(rpathdir)'

 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 c871fb0..7e18770 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 ac58fe4..645f73a 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 15695fb..6f9cb1d 100644
--- a/src/makefiles/Makefile.netbsd
+++ b/src/makefiles/Makefile.netbsd
@@ -5,8 +5,6 @@ rpath = -Wl,-R'$(rpathdir)'

 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 15695fb..6f9cb1d 100644
--- a/src/makefiles/Makefile.openbsd
+++ b/src/makefiles/Makefile.openbsd
@@ -5,8 +5,6 @@ rpath = -Wl,-R'$(rpathdir)'

 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 a7f5652..62a6c01 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 3dea11e..8a7d6ff 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 999cd35..cec240d 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 b6ea0de..79a1081 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 c05adca..f4d4e9d 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 a82d5a4..41fa4a1 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 79d3475..50fff80 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 e392908..ec3302c 100644
--- a/src/template/linux
+++ b/src/template/linux
@@ -9,6 +9,9 @@ fi
 # This is also required for ppoll(2), and perhaps other things
 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 1986977..d97f995 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 e69de29..365268c 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 e07b9a0..f88b1cd 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 7da9719..1380d16 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
diff --git a/configure b/configure
index 1d664a4..6b1c779 100755
--- a/configure
+++ b/configure
@@ -18490,6 +18490,10 @@ fi
   # On most platforms, if perl.h is there then libperl.so will be too, but at
   # this writing Debian packages them separately.  There is no known reason to
   # waste cycles on separate probes for the Tcl or Python libraries, though.
+  # On some Red Hat platforms, the link attempt can fail if we don't use
+  # CFLAGS_SL while building the test program.
+  ac_save_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS $CFLAGS_SL"
   pgac_save_LIBS=$LIBS
   LIBS="$perl_embed_ldflags"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libperl" >&5
@@ -18519,6 +18523,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   LIBS=$pgac_save_LIBS
+  CFLAGS=$ac_save_CFLAGS
   CPPFLAGS=$ac_save_CPPFLAGS
 fi

diff --git a/configure.in b/configure.in
index 50f4b26..2b9025c 100644
--- a/configure.in
+++ b/configure.in
@@ -2253,6 +2253,10 @@ if test "$with_perl" = yes; then
   # On most platforms, if perl.h is there then libperl.so will be too, but at
   # this writing Debian packages them separately.  There is no known reason to
   # waste cycles on separate probes for the Tcl or Python libraries, though.
+  # On some Red Hat platforms, the link attempt can fail if we don't use
+  # CFLAGS_SL while building the test program.
+  ac_save_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS $CFLAGS_SL"
   pgac_save_LIBS=$LIBS
   LIBS="$perl_embed_ldflags"
   AC_MSG_CHECKING([for libperl])
@@ -2264,6 +2268,7 @@ if test "$with_perl" = yes; then
     [AC_MSG_RESULT(no)
      AC_MSG_ERROR([libperl library is required for Perl])])
   LIBS=$pgac_save_LIBS
+  CFLAGS=$ac_save_CFLAGS
   CPPFLAGS=$ac_save_CPPFLAGS
 fi


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Thomas Munro
Дата:
Сообщение: Re: Tweaking DSM and DSA limits
Следующее
От: Masahiko Sawada
Дата:
Сообщение: Re: [HACKERS] Block level parallel vacuum