Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 401202b

Browse files
committed
Yet further rethinking of build changes for macOS Mojave.
The solution arrived at in commit e74dd00 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 68fc227, 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
1 parent f35187b commit 401202b

File tree

5 files changed

+75
-3
lines changed

5 files changed

+75
-3
lines changed

configure

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,7 @@ ac_includes_default="\
627627

628628
ac_subst_vars='LTLIBOBJS
629629
vpath_build
630+
PG_SYSROOT
630631
PG_VERSION_NUM
631632
PROVE
632633
OSX
@@ -16153,6 +16154,15 @@ _ACEOF
1615316154

1615416155

1615516156

16157+
# If we are inserting PG_SYSROOT into CPPFLAGS, do so symbolically not
16158+
# literally, so that it's possible to override it at build time using
16159+
# a command like "make ... PG_SYSROOT=path". This has to be done after
16160+
# we've finished all configure checks that depend on CPPFLAGS.
16161+
if test x"$PG_SYSROOT" != x; then
16162+
CPPFLAGS=`echo "$CPPFLAGS" | sed -e "s| $PG_SYSROOT | \\\$(PG_SYSROOT) |"`
16163+
fi
16164+
16165+
1615616166

1615716167
# Begin output steps
1615816168

configure.in

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2202,6 +2202,15 @@ $AWK '{printf "%d%02d%02d", $1, $2, (NF >= 3) ? $3 : 0}'`"]
22022202
AC_DEFINE_UNQUOTED(PG_VERSION_NUM, $PG_VERSION_NUM, [PostgreSQL version as a number])
22032203
AC_SUBST(PG_VERSION_NUM)
22042204

2205+
# If we are inserting PG_SYSROOT into CPPFLAGS, do so symbolically not
2206+
# literally, so that it's possible to override it at build time using
2207+
# a command like "make ... PG_SYSROOT=path". This has to be done after
2208+
# we've finished all configure checks that depend on CPPFLAGS.
2209+
if test x"$PG_SYSROOT" != x; then
2210+
CPPFLAGS=`echo "$CPPFLAGS" | sed -e "s| $PG_SYSROOT | \\\$(PG_SYSROOT) |"`
2211+
fi
2212+
AC_SUBST(PG_SYSROOT)
2213+
22052214

22062215
# Begin output steps
22072216

doc/src/sgml/installation.sgml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2596,6 +2596,57 @@ PHSS_30849 s700_800 u2comp/be/plugin library Patch
25962596
</para>
25972597
</sect2>
25982598

2599+
<sect2 id="installation-notes-macos">
2600+
<title>macOS</title>
2601+
2602+
<indexterm zone="installation-notes-macos">
2603+
<primary>macOS</primary>
2604+
<secondary>installation on</secondary>
2605+
</indexterm>
2606+
2607+
<para>
2608+
On recent <productname>macOS</productname> releases, it's necessary to
2609+
embed the <quote>sysroot</quote> path in the include switches used to
2610+
find some system header files. This results in the outputs of
2611+
the <application>configure</application> script varying depending on
2612+
which SDK version was used during <application>configure</application>.
2613+
That shouldn't pose any problem in simple scenarios, but if you are
2614+
trying to do something like building an extension on a different machine
2615+
than the server code was built on, you may need to force use of a
2616+
different sysroot path. To do that, set <varname>PG_SYSROOT</varname>,
2617+
for example
2618+
<programlisting>
2619+
make PG_SYSROOT=<replaceable>/desired/path</replaceable> all
2620+
</programlisting>
2621+
To find out the appropriate path on your machine, run
2622+
<programlisting>
2623+
xcodebuild -version -sdk macosx Path
2624+
</programlisting>
2625+
Note that building an extension using a different sysroot version than
2626+
was used to build the core server is not really recommended; in the
2627+
worst case it could result in hard-to-debug ABI inconsistencies.
2628+
</para>
2629+
2630+
<para>
2631+
You can also select a non-default sysroot path when configuring, by
2632+
specifying <varname>PG_SYSROOT</varname>
2633+
to <application>configure</application>:
2634+
<programlisting>
2635+
./configure ... PG_SYSROOT=<replaceable>/desired/path</replaceable>
2636+
</programlisting>
2637+
</para>
2638+
2639+
<para>
2640+
<productname>macOS</productname>'s <quote>System Integrity
2641+
Protection</quote> (SIP) feature breaks <literal>make check</literal>,
2642+
because it prevents passing the needed setting
2643+
of <literal>DYLD_LIBRARY_PATH</literal> down to the executables being
2644+
tested. You can work around that by doing <literal>make
2645+
install</literal> before <literal>make check</literal>.
2646+
Most Postgres developers just turn off SIP, though.
2647+
</para>
2648+
</sect2>
2649+
25992650
<sect2 id="installation-notes-mingw">
26002651
<title>MinGW/Native Windows</title>
26012652

src/Makefile.global.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ PTHREAD_LIBS = @PTHREAD_LIBS@
226226

227227
CPP = @CPP@
228228
CPPFLAGS = @CPPFLAGS@
229+
PG_SYSROOT = @PG_SYSROOT@
229230

230231
ifdef PGXS
231232
override CPPFLAGS := -I$(includedir_server) -I$(includedir_internal) $(CPPFLAGS)

src/template/darwin

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
# Note: Darwin is the original code name for macOS, also known as OS X.
44
# We still use "darwin" as the port name, partly because config.guess does.
55

6-
# Some configure tests require explicit knowledge of where the Xcode "sysroot"
7-
# is. We try to avoid having this leak into configure's results, though.
6+
# Select where system include files should be sought.
87
if test x"$PG_SYSROOT" = x"" ; then
98
PG_SYSROOT=`xcodebuild -version -sdk macosx Path 2>/dev/null`
109
fi
1110
# Old xcodebuild versions may produce garbage, so validate the result.
1211
if test x"$PG_SYSROOT" != x"" ; then
13-
if test \! -d "$PG_SYSROOT" ; then
12+
if test -d "$PG_SYSROOT" ; then
13+
CPPFLAGS="-isysroot $PG_SYSROOT $CPPFLAGS"
14+
else
1415
PG_SYSROOT=""
1516
fi
1617
fi

0 commit comments

Comments
 (0)