diff --git a/config/tcl.m4 b/config/tcl.m4 index a9fe7ba5cc1..4010eb42eab 100644 --- a/config/tcl.m4 +++ b/config/tcl.m4 @@ -13,6 +13,10 @@ fi # PGAC_PATH_TCLCONFIGSH([SEARCH-PATH]) # ------------------------------------ +# If the user doesn't specify $TCL_CONFIG_SH directly, search for it in +# the list of directories passed as parameter (from --with-tclconfig). +# If no list is given, try the Tcl shell's $auto_path. + AC_DEFUN([PGAC_PATH_TCLCONFIGSH], [AC_REQUIRE([PGAC_PATH_TCLSH])[]dnl AC_BEFORE([$0], [PGAC_PATH_TKCONFIGSH])[]dnl @@ -24,7 +28,14 @@ if test -z "$TCL_CONFIG_SH"; then set X $pgac_test_dirs; shift if test $[#] -eq 0; then test -z "$TCLSH" && AC_MSG_ERROR([unable to locate tclConfig.sh because no Tcl shell was found]) - set X `echo 'puts $auto_path' | $TCLSH`; shift + pgac_test_dirs=`echo 'puts $auto_path' | $TCLSH` + # On newer macOS, $auto_path frequently doesn't include the place + # where tclConfig.sh actually lives. Append that to the end, so as not + # to break cases where a non-default Tcl installation is being used. + if test -d "$PG_SYSROOT/System/Library/Frameworks/Tcl.framework" ; then + pgac_test_dirs="$pgac_test_dirs $PG_SYSROOT/System/Library/Frameworks/Tcl.framework" + fi + set X $pgac_test_dirs; shift fi for pgac_dir do diff --git a/configure b/configure index 4030e8d9ef0..7d111323960 100755 --- a/configure +++ b/configure @@ -683,6 +683,7 @@ python_majorversion PYTHON perl_embed_ldflags perl_embed_ccflags +perl_includedir perl_useshrplib perl_privlibexp perl_archlibexp @@ -7791,6 +7792,14 @@ perl_useshrplib=`$PERL -MConfig -e 'print $Config{useshrplib}'` test "$PORTNAME" = "win32" && perl_useshrplib=`echo $perl_useshrplib | sed 's,\\\\,/,g'` { $as_echo "$as_me:$LINENO: result: $perl_useshrplib" >&5 $as_echo "$perl_useshrplib" >&6; } + # 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 + if test -d "$PG_SYSROOT$perl_archlibexp" ; then + perl_includedir="$PG_SYSROOT$perl_archlibexp" + fi + fi { $as_echo "$as_me:$LINENO: checking for CFLAGS recommended by Perl" >&5 $as_echo_n "checking for CFLAGS recommended by Perl... " >&6; } @@ -30212,7 +30221,14 @@ if test -z "$TCL_CONFIG_SH"; then test -z "$TCLSH" && { { $as_echo "$as_me:$LINENO: error: unable to locate tclConfig.sh because no Tcl shell was found" >&5 $as_echo "$as_me: error: unable to locate tclConfig.sh because no Tcl shell was found" >&2;} { (exit 1); exit 1; }; } - set X `echo 'puts $auto_path' | $TCLSH`; shift + pgac_test_dirs=`echo 'puts $auto_path' | $TCLSH` + # On newer macOS, $auto_path frequently doesn't include the place + # where tclConfig.sh actually lives. Append that to the end, so as not + # to break cases where a non-default Tcl installation is being used. + if test -d "$PG_SYSROOT/System/Library/Frameworks/Tcl.framework" ; then + pgac_test_dirs="$pgac_test_dirs $PG_SYSROOT/System/Library/Frameworks/Tcl.framework" + fi + set X $pgac_test_dirs; shift fi for pgac_dir do @@ -30393,7 +30409,7 @@ fi # check for if test "$with_perl" = yes; then ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$perl_archlibexp/CORE" + CPPFLAGS="$CPPFLAGS -I$perl_includedir/CORE" { $as_echo "$as_me:$LINENO: checking for perl.h" >&5 $as_echo_n "checking for perl.h... " >&6; } if test "${ac_cv_header_perl_h+set}" = set; then diff --git a/configure.in b/configure.in index bce1b2afe35..1511108d470 100644 --- a/configure.in +++ b/configure.in @@ -880,6 +880,15 @@ if test "$with_perl" = yes; then AC_MSG_ERROR([Perl not found]) fi PGAC_CHECK_PERL_CONFIGS([archlibexp,privlibexp,useshrplib]) + # 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 + if test -d "$PG_SYSROOT$perl_archlibexp" ; then + perl_includedir="$PG_SYSROOT$perl_archlibexp" + fi + fi + AC_SUBST(perl_includedir)dnl PGAC_CHECK_PERL_EMBED_CCFLAGS PGAC_CHECK_PERL_EMBED_LDFLAGS fi @@ -1892,7 +1901,7 @@ fi # check for if test "$with_perl" = yes; then ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$perl_archlibexp/CORE" + CPPFLAGS="$CPPFLAGS -I$perl_includedir/CORE" 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/src/Makefile.global.in b/src/Makefile.global.in index db40212f058..a439b200c5c 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -285,6 +285,7 @@ else endif perl_archlibexp = @perl_archlibexp@ perl_privlibexp = @perl_privlibexp@ +perl_includedir = @perl_includedir@ perl_useshrplib = @perl_useshrplib@ 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 32d49cdaa15..7559d4565d0 100644 --- a/src/pl/plperl/GNUmakefile +++ b/src/pl/plperl/GNUmakefile @@ -26,7 +26,7 @@ endif # 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_archlibexp)/CORE +override CPPFLAGS := -I. -I$(srcdir) $(CPPFLAGS) $(perl_embed_ccflags) -I$(perl_includedir)/CORE rpathdir = $(perl_archlibexp)/CORE diff --git a/src/template/darwin b/src/template/darwin index 542f706b0fa..cff258be26b 100644 --- a/src/template/darwin +++ b/src/template/darwin @@ -1,9 +1,24 @@ # src/template/darwin -# Select appropriate semaphore support. Darwin 6.0 (Mac OS X 10.2) and up -# support System V semaphores; before that we have to use POSIX semaphores, -# which are less good for our purposes because they eat a file descriptor -# per backend per max_connection slot. +# 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 system include files should be sought. +if test x"$PG_SYSROOT" = x"" ; then + PG_SYSROOT=`xcodebuild -version -sdk macosx Path 2>/dev/null` +fi +if test x"$PG_SYSROOT" != x"" ; then + if test -d "$PG_SYSROOT" ; then + CPPFLAGS="$CPPFLAGS -isysroot $PG_SYSROOT" + else + PG_SYSROOT="" + fi +fi + +# 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 +# file descriptor per backend per max_connection slot. case $host_os in darwin[015].*) USE_NAMED_POSIX_SEMAPHORES=1