diff --git a/configure b/configure
index 5aac313212..f4d443debd 100755
--- a/configure
+++ b/configure
@@ -9552,7 +9552,7 @@ PL/Perl." "$LINENO" 5
   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
+    if test -f "$PG_SYSROOT$perl_archlibexp/CORE/perl.h" ; then
       perl_includedir="$PG_SYSROOT$perl_archlibexp"
     fi
   fi
@@ -18135,6 +18135,11 @@ 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 <tcl.h>
     ac_save_CPPFLAGS=$CPPFLAGS
     CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS"
diff --git a/configure.in b/configure.in
index a7fade6fb3..7b2dc8107e 100644
--- a/configure.in
+++ b/configure.in
@@ -1037,7 +1037,7 @@ PL/Perl.])
   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
+    if test -f "$PG_SYSROOT$perl_archlibexp/CORE/perl.h" ; then
       perl_includedir="$PG_SYSROOT$perl_archlibexp"
     fi
   fi
@@ -2213,6 +2213,11 @@ 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 <tcl.h>
     ac_save_CPPFLAGS=$CPPFLAGS
     CPPFLAGS="$TCL_INCLUDE_SPEC $CPPFLAGS"
diff --git a/src/template/darwin b/src/template/darwin
index cff258be26..7022733566 100644
--- a/src/template/darwin
+++ b/src/template/darwin
@@ -3,14 +3,15 @@
 # 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.
+# 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.
 if test x"$PG_SYSROOT" = x"" ; then
   PG_SYSROOT=`xcodebuild -version -sdk macosx Path 2>/dev/null`
 fi
+# Old xcodebuild versions may produce garbage, so validate the result.
 if test x"$PG_SYSROOT" != x"" ; then
-  if test -d "$PG_SYSROOT" ; then
-    CPPFLAGS="$CPPFLAGS -isysroot $PG_SYSROOT"
-  else
+  if test \! -d "$PG_SYSROOT" ; then
     PG_SYSROOT=""
   fi
 fi