Move darwin sysroot determination into separate file

The sysroot determination is fairly complex and will soon also be needed when
building with meson. Instead of duplicating the logic, move it to a dedicated
shell script invoked both by configure and meson.

Reviewed-by: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Discussion: https://postgr.es/m/2180a97c-c026-1b6c-cec8-d6e499f97017@enterprisedb.com
This commit is contained in:
Andres Freund 2022-09-01 16:54:19 -07:00
parent 2f2b18bd3f
commit 05519126a0
2 changed files with 47 additions and 35 deletions

View File

@ -3,41 +3,12 @@
# 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 user didn't say.
if test x"$PG_SYSROOT" = x"" ; then
# This is far more complicated than it ought to be. We first ask
# "xcrun --show-sdk-path", which seems to match the default -isysroot
# setting of Apple's compilers.
PG_SYSROOT=`xcrun --show-sdk-path 2>/dev/null`
# That may fail, or produce a result that is not version-specific (i.e.,
# just ".../SDKs/MacOSX.sdk"). Using a version-specific sysroot seems
# desirable, so if the path is a non-version-specific symlink, expand it.
if test -L "$PG_SYSROOT"; then
if expr x"$PG_SYSROOT" : '.*[0-9]\.[0-9][^/]*$' >/dev/null ; then : okay
else
PG_SYSROOT=`expr "$PG_SYSROOT" : '\(.*\)/'`/`readlink "$PG_SYSROOT"`
fi
fi
# If there are still not digits in the directory name, try
# "xcrun --sdk macosx --show-sdk-path"; and if that still doesn't work,
# fall back to asking xcodebuild, which is often a good deal slower.
if expr x"$PG_SYSROOT" : '.*[0-9]\.[0-9][^/]*$' >/dev/null ; then : okay
else
PG_SYSROOT=`xcrun --sdk macosx --show-sdk-path 2>/dev/null`
if expr x"$PG_SYSROOT" : '.*[0-9]\.[0-9][^/]*$' >/dev/null ; then : okay
else
PG_SYSROOT=`xcodebuild -version -sdk macosx Path 2>/dev/null`
fi
fi
fi
# Validate the result: if it doesn't point at a directory, ignore it.
if test x"$PG_SYSROOT" != x"" ; then
if test -d "$PG_SYSROOT" ; then
CPPFLAGS="-isysroot $PG_SYSROOT $CPPFLAGS"
LDFLAGS="-isysroot $PG_SYSROOT $LDFLAGS"
else
PG_SYSROOT=""
fi
# Select where system include files should be sought
PG_SYSROOT=`${srcdir}/src/tools/darwin_sysroot $PG_SYSROOT`
if test -d "$PG_SYSROOT" ; then
CPPFLAGS="-isysroot $PG_SYSROOT $CPPFLAGS"
LDFLAGS="-isysroot $PG_SYSROOT $LDFLAGS"
fi
# Extra CFLAGS for code that will go into a shared library

41
src/tools/darwin_sysroot Executable file
View File

@ -0,0 +1,41 @@
#!/bin/sh
#
# Select where system include files should be sought. If the user specified a
# sysroot, validate it.
#
# A separate script so it can be shared between autoconf and meson.
PG_SYSROOT=$1
if test x"$PG_SYSROOT" = x"" ; then
# This is far more complicated than it ought to be. We first ask
# "xcrun --show-sdk-path", which seems to match the default -isysroot
# setting of Apple's compilers.
PG_SYSROOT=`xcrun --show-sdk-path 2>/dev/null`
# That may fail, or produce a result that is not version-specific (i.e.,
# just ".../SDKs/MacOSX.sdk"). Using a version-specific sysroot seems
# desirable, so if the path is a non-version-specific symlink, expand it.
if test -L "$PG_SYSROOT"; then
if expr x"$PG_SYSROOT" : '.*[0-9]\.[0-9][^/]*$' >/dev/null ; then : okay
else
PG_SYSROOT=`expr "$PG_SYSROOT" : '\(.*\)/'`/`readlink "$PG_SYSROOT"`
fi
fi
# If there are still not digits in the directory name, try
# "xcrun --sdk macosx --show-sdk-path"; and if that still doesn't work,
# fall back to asking xcodebuild, which is often a good deal slower.
if expr x"$PG_SYSROOT" : '.*[0-9]\.[0-9][^/]*$' >/dev/null ; then : okay
else
PG_SYSROOT=`xcrun --sdk macosx --show-sdk-path 2>/dev/null`
if expr x"$PG_SYSROOT" : '.*[0-9]\.[0-9][^/]*$' >/dev/null ; then : okay
else
PG_SYSROOT=`xcodebuild -version -sdk macosx Path 2>/dev/null`
fi
fi
fi
# Validate the result: if it doesn't point at a directory, ignore it.
if test x"$PG_SYSROOT" != x"" ; then
if test -d "$PG_SYSROOT" ; then
echo $PG_SYSROOT
fi
fi