mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
Yet further rethinking of build changes for macOS Mojave.
The solution arrived at in commit e74dd00f5 presumes that the compiler has a suitable default -isysroot setting ... but further experience shows that in many combinations of macOS version, XCode version, Xcode command line tools version, and phase of the moon, Apple's compiler will *not* supply a default -isysroot value. We could potentially go back to the approach used in commit 68fc227dd, but I don't have a lot of faith in the reliability or life expectancy of that either. Let's just revert to the approach already shipped in 11.0, namely specifying an -isysroot switch globally. As a partial response to the concerns raised by Jakob Egger, adjust the contents of Makefile.global to look like CPPFLAGS = -isysroot $(PG_SYSROOT) ... PG_SYSROOT = /path/to/sysroot This allows overriding the sysroot path at build time in a relatively painless way. Add documentation to installation.sgml about how to use the PG_SYSROOT option. I also took the opportunity to document how to work around macOS's "System Integrity Protection" feature. As before, back-patch to all supported versions. Discussion: https://postgr.es/m/20840.1537850987@sss.pgh.pa.us
This commit is contained in:
parent
d403ed2acd
commit
94ea1cf731
10
configure
vendored
10
configure
vendored
@ -627,6 +627,7 @@ ac_includes_default="\
|
|||||||
|
|
||||||
ac_subst_vars='LTLIBOBJS
|
ac_subst_vars='LTLIBOBJS
|
||||||
vpath_build
|
vpath_build
|
||||||
|
PG_SYSROOT
|
||||||
PG_VERSION_NUM
|
PG_VERSION_NUM
|
||||||
PROVE
|
PROVE
|
||||||
OSX
|
OSX
|
||||||
@ -15908,6 +15909,15 @@ _ACEOF
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# If we are inserting PG_SYSROOT into CPPFLAGS, do so symbolically not
|
||||||
|
# literally, so that it's possible to override it at build time using
|
||||||
|
# a command like "make ... PG_SYSROOT=path". This has to be done after
|
||||||
|
# we've finished all configure checks that depend on CPPFLAGS.
|
||||||
|
if test x"$PG_SYSROOT" != x; then
|
||||||
|
CPPFLAGS=`echo "$CPPFLAGS" | sed -e "s| $PG_SYSROOT | \\\$(PG_SYSROOT) |"`
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Begin output steps
|
# Begin output steps
|
||||||
|
|
||||||
|
@ -2181,6 +2181,15 @@ $AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"]
|
|||||||
AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number])
|
AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number])
|
||||||
AC_SUBST(PG_VERSION_NUM)
|
AC_SUBST(PG_VERSION_NUM)
|
||||||
|
|
||||||
|
# If we are inserting PG_SYSROOT into CPPFLAGS, do so symbolically not
|
||||||
|
# literally, so that it's possible to override it at build time using
|
||||||
|
# a command like "make ... PG_SYSROOT=path". This has to be done after
|
||||||
|
# we've finished all configure checks that depend on CPPFLAGS.
|
||||||
|
if test x"$PG_SYSROOT" != x; then
|
||||||
|
CPPFLAGS=`echo "$CPPFLAGS" | sed -e "s| $PG_SYSROOT | \\\$(PG_SYSROOT) |"`
|
||||||
|
fi
|
||||||
|
AC_SUBST(PG_SYSROOT)
|
||||||
|
|
||||||
|
|
||||||
# Begin output steps
|
# Begin output steps
|
||||||
|
|
||||||
|
@ -2570,6 +2570,57 @@ PHSS_30849 s700_800 u2comp/be/plugin library Patch
|
|||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="installation-notes-macos">
|
||||||
|
<title>macOS</title>
|
||||||
|
|
||||||
|
<indexterm zone="installation-notes-macos">
|
||||||
|
<primary>macOS</primary>
|
||||||
|
<secondary>installation on</secondary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
On recent <productname>macOS</productname> releases, it's necessary to
|
||||||
|
embed the <quote>sysroot</quote> path in the include switches used to
|
||||||
|
find some system header files. This results in the outputs of
|
||||||
|
the <application>configure</application> script varying depending on
|
||||||
|
which SDK version was used during <application>configure</application>.
|
||||||
|
That shouldn't pose any problem in simple scenarios, but if you are
|
||||||
|
trying to do something like building an extension on a different machine
|
||||||
|
than the server code was built on, you may need to force use of a
|
||||||
|
different sysroot path. To do that, set <varname>PG_SYSROOT</varname>,
|
||||||
|
for example
|
||||||
|
<programlisting>
|
||||||
|
make PG_SYSROOT=<replaceable>/desired/path</replaceable> all
|
||||||
|
</programlisting>
|
||||||
|
To find out the appropriate path on your machine, run
|
||||||
|
<programlisting>
|
||||||
|
xcodebuild -version -sdk macosx Path
|
||||||
|
</programlisting>
|
||||||
|
Note that building an extension using a different sysroot version than
|
||||||
|
was used to build the core server is not really recommended; in the
|
||||||
|
worst case it could result in hard-to-debug ABI inconsistencies.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You can also select a non-default sysroot path when configuring, by
|
||||||
|
specifying <varname>PG_SYSROOT</varname>
|
||||||
|
to <application>configure</application>:
|
||||||
|
<programlisting>
|
||||||
|
./configure ... PG_SYSROOT=<replaceable>/desired/path</replaceable>
|
||||||
|
</programlisting>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<productname>macOS</productname>'s <quote>System Integrity
|
||||||
|
Protection</quote> (SIP) feature breaks <literal>make check</literal>,
|
||||||
|
because it prevents passing the needed setting
|
||||||
|
of <literal>DYLD_LIBRARY_PATH</literal> down to the executables being
|
||||||
|
tested. You can work around that by doing <literal>make
|
||||||
|
install</literal> before <literal>make check</literal>.
|
||||||
|
Most Postgres developers just turn off SIP, though.
|
||||||
|
</para>
|
||||||
|
</sect2>
|
||||||
|
|
||||||
<sect2 id="installation-notes-mingw">
|
<sect2 id="installation-notes-mingw">
|
||||||
<title>MinGW/Native Windows</title>
|
<title>MinGW/Native Windows</title>
|
||||||
|
|
||||||
|
@ -225,6 +225,7 @@ PTHREAD_LIBS = @PTHREAD_LIBS@
|
|||||||
|
|
||||||
CPP = @CPP@
|
CPP = @CPP@
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
PG_SYSROOT = @PG_SYSROOT@
|
||||||
|
|
||||||
ifdef PGXS
|
ifdef PGXS
|
||||||
override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)
|
override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)
|
||||||
|
@ -3,14 +3,15 @@
|
|||||||
# Note: Darwin is the original code name for macOS, also known as OS X.
|
# 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.
|
# We still use "darwin" as the port name, partly because config.guess does.
|
||||||
|
|
||||||
# Some configure tests require explicit knowledge of where the Xcode "sysroot"
|
# Select where system include files should be sought.
|
||||||
# is. We try to avoid having this leak into configure's results, though.
|
|
||||||
if test x"$PG_SYSROOT" = x"" ; then
|
if test x"$PG_SYSROOT" = x"" ; then
|
||||||
PG_SYSROOT=`xcodebuild -version -sdk macosx Path 2>/dev/null`
|
PG_SYSROOT=`xcodebuild -version -sdk macosx Path 2>/dev/null`
|
||||||
fi
|
fi
|
||||||
# Old xcodebuild versions may produce garbage, so validate the result.
|
# Old xcodebuild versions may produce garbage, so validate the result.
|
||||||
if test x"$PG_SYSROOT" != x"" ; then
|
if test x"$PG_SYSROOT" != x"" ; then
|
||||||
if test \! -d "$PG_SYSROOT" ; then
|
if test -d "$PG_SYSROOT" ; then
|
||||||
|
CPPFLAGS="-isysroot $PG_SYSROOT $CPPFLAGS"
|
||||||
|
else
|
||||||
PG_SYSROOT=""
|
PG_SYSROOT=""
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user