diff --git a/configure b/configure index 5e686b2a21f..43ae8c869d4 100755 --- a/configure +++ b/configure @@ -668,7 +668,7 @@ python_majorversion PYTHON perl_embed_ldflags perl_embed_ccflags -perl_includedir +perl_includespec perl_useshrplib perl_privlibexp perl_archlibexp @@ -9775,11 +9775,12 @@ documentation for details. Use --without-perl to disable building PL/Perl." "$LINENO" 5 fi # On most platforms, archlibexp is also where the Perl include files live ... - perl_includedir="$perl_archlibexp" - # ... but on some macOS versions, we must look under $PG_SYSROOT instead - if test x"$PG_SYSROOT" != x"" ; then + perl_includespec="-I$perl_archlibexp/CORE" + # ... but on newer macOS versions, we must use -iwithsysroot to look + # under $PG_SYSROOT + if test \! -f "$perl_archlibexp/CORE/perl.h" ; then if test -f "$PG_SYSROOT$perl_archlibexp/CORE/perl.h" ; then - perl_includedir="$PG_SYSROOT$perl_archlibexp" + perl_includespec="-iwithsysroot $perl_archlibexp/CORE" fi fi @@ -18114,11 +18115,6 @@ eval TCL_SHARED_BUILD=\"$TCL_SHARED_BUILD\" as_fn_error $? "cannot build PL/Tcl because Tcl is not a shared library Use --without-tcl to disable building PL/Tcl." "$LINENO" 5 fi - # Some macOS versions report an include spec that uses -iwithsysroot. - # We don't really want to use -isysroot, so translate that if we can. - if test x"$PG_SYSROOT" != x"" ; then - TCL_INCLUDE_SPEC="`echo "$TCL_INCLUDE_SPEC" | sed "s|-iwithsysroot */|-I $PG_SYSROOT/|"`" - fi # now that we have TCL_INCLUDE_SPEC, we can check for ac_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS" @@ -18136,7 +18132,7 @@ fi # check for if test "$with_perl" = yes; then ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$perl_includedir/CORE" + CPPFLAGS="$CPPFLAGS $perl_includespec" ac_fn_c_check_header_compile "$LINENO" "perl.h" "ac_cv_header_perl_h" "#include " if test "x$ac_cv_header_perl_h" = xyes; then : diff --git a/configure.in b/configure.in index d8487aae275..519ecd5e1e8 100644 --- a/configure.in +++ b/configure.in @@ -1045,14 +1045,15 @@ documentation for details. Use --without-perl to disable building PL/Perl.]) fi # On most platforms, archlibexp is also where the Perl include files live ... - perl_includedir="$perl_archlibexp" - # ... but on some macOS versions, we must look under $PG_SYSROOT instead - if test x"$PG_SYSROOT" != x"" ; then + perl_includespec="-I$perl_archlibexp/CORE" + # ... but on newer macOS versions, we must use -iwithsysroot to look + # under $PG_SYSROOT + if test \! -f "$perl_archlibexp/CORE/perl.h" ; then if test -f "$PG_SYSROOT$perl_archlibexp/CORE/perl.h" ; then - perl_includedir="$PG_SYSROOT$perl_archlibexp" + perl_includespec="-iwithsysroot $perl_archlibexp/CORE" fi fi - AC_SUBST(perl_includedir)dnl + AC_SUBST(perl_includespec)dnl PGAC_CHECK_PERL_EMBED_CCFLAGS PGAC_CHECK_PERL_EMBED_LDFLAGS fi @@ -2211,11 +2212,6 @@ if test "$with_tcl" = yes; then AC_MSG_ERROR([cannot build PL/Tcl because Tcl is not a shared library Use --without-tcl to disable building PL/Tcl.]) fi - # Some macOS versions report an include spec that uses -iwithsysroot. - # We don't really want to use -isysroot, so translate that if we can. - if test x"$PG_SYSROOT" != x"" ; then - TCL_INCLUDE_SPEC="`echo "$TCL_INCLUDE_SPEC" | sed "s|-iwithsysroot */|-I $PG_SYSROOT/|"`" - fi # now that we have TCL_INCLUDE_SPEC, we can check for ac_save_CPPFLAGS=$CPPFLAGS CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS" @@ -2226,7 +2222,7 @@ fi # check for if test "$with_perl" = yes; then ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$perl_includedir/CORE" + CPPFLAGS="$CPPFLAGS $perl_includespec" AC_CHECK_HEADER(perl.h, [], [AC_MSG_ERROR([header file is required for Perl])], [#include ]) # While we're at it, check that we can link to libperl. diff --git a/contrib/hstore_plperl/Makefile b/contrib/hstore_plperl/Makefile index d0a3916542c..5076e21e0ee 100644 --- a/contrib/hstore_plperl/Makefile +++ b/contrib/hstore_plperl/Makefile @@ -35,8 +35,5 @@ rpathdir = $(perl_archlibexp)/CORE SHLIB_LINK += $(perl_embed_ldflags) endif -# As with plperl we need to make sure that the CORE directory is included -# last, probably because it sometimes contains some header files with names -# that clash with some of ours, or with some that we include, notably on -# Windows. -override CPPFLAGS := $(CPPFLAGS) $(perl_embed_ccflags) -I$(perl_includedir)/CORE +# As with plperl we need to include the perl_includespec directory last. +override CPPFLAGS := $(CPPFLAGS) $(perl_embed_ccflags) $(perl_includespec) diff --git a/contrib/jsonb_plperl/Makefile b/contrib/jsonb_plperl/Makefile index 019fc822c78..b43c8ed97bd 100644 --- a/contrib/jsonb_plperl/Makefile +++ b/contrib/jsonb_plperl/Makefile @@ -35,8 +35,5 @@ rpathdir = $(perl_archlibexp)/CORE SHLIB_LINK += $(perl_embed_ldflags) endif -# As with plperl we need to make sure that the CORE directory is included -# last, probably because it sometimes contains some header files with names -# that clash with some of ours, or with some that we include, notably on -# Windows. -override CPPFLAGS := $(CPPFLAGS) $(perl_embed_ccflags) -I$(perl_includedir)/CORE +# As with plperl we need to include the perl_includespec directory last. +override CPPFLAGS := $(CPPFLAGS) $(perl_embed_ccflags) $(perl_includespec) diff --git a/src/Makefile.global.in b/src/Makefile.global.in index 3924c09a5a5..bdf394bb38c 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -331,7 +331,7 @@ else endif perl_archlibexp = @perl_archlibexp@ perl_privlibexp = @perl_privlibexp@ -perl_includedir = @perl_includedir@ +perl_includespec = @perl_includespec@ perl_embed_ccflags = @perl_embed_ccflags@ perl_embed_ldflags = @perl_embed_ldflags@ diff --git a/src/pl/plperl/GNUmakefile b/src/pl/plperl/GNUmakefile index baf09b43e75..9b1c5141014 100644 --- a/src/pl/plperl/GNUmakefile +++ b/src/pl/plperl/GNUmakefile @@ -12,12 +12,13 @@ override CPPFLAGS += -DPLPERL_HAVE_UID_GID override CPPFLAGS += -Wno-comment endif -# Note: we need to make sure that the CORE directory is included last, +# Note: we need to include the perl_includespec directory last, # probably because it sometimes contains some header files with names # that clash with some of ours, or with some that we include, notably on # Windows. -override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) $(perl_embed_ccflags) -I$(perl_includedir)/CORE +override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) $(perl_embed_ccflags) $(perl_includespec) +# this is often, but not always, the same directory named by perl_includespec rpathdir = $(perl_archlibexp)/CORE PGFILEDESC = "PL/Perl - procedural language" diff --git a/src/template/darwin b/src/template/darwin index 70227335669..159d8bb1275 100644 --- a/src/template/darwin +++ b/src/template/darwin @@ -3,9 +3,8 @@ # Note: Darwin is the original code name for macOS, also known as OS X. # We still use "darwin" as the port name, partly because config.guess does. -# Select where some include files should be sought. -# We may eventually be forced to use "-isysroot" with this value, -# but for now, it only affects Perl and Tcl include files. +# Some configure tests require explicit knowledge of where the Xcode "sysroot" +# is. We try to avoid having this leak into configure's results, though. if test x"$PG_SYSROOT" = x"" ; then PG_SYSROOT=`xcodebuild -version -sdk macosx Path 2>/dev/null` fi