Re: PG vs macOS Mojave - Mailing list pgsql-hackers

From Tom Lane
Subject Re: PG vs macOS Mojave
Date
Msg-id 26791.1539718804@sss.pgh.pa.us
Whole thread Raw
In response to Re: PG vs macOS Mojave  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
I wrote:
> If we go this route, then the configure-time sysroot path will get
> embedded into $perl_includedir and $TCL_INCLUDE_SPEC, but noplace
> else.  I don't know how far that would improve your concern about
> extensions, but it should help a little.
> I'm still a bit dubious about the safety of building extensions
> with different SDKs than the server, but if it worked for you
> before then there's no reason for us to break it further than
> we have to.

Concretely, I'm planning to push the attached as soon as I finish
back-patching it.

            regards, tom lane

diff --git a/configure b/configure
index b7250d7..5e686b2 100755
*** a/configure
--- b/configure
*************** PL/Perl." "$LINENO" 5
*** 9778,9784 ****
    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
--- 9778,9784 ----
    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 -f "$PG_SYSROOT$perl_archlibexp/CORE/perl.h" ; then
        perl_includedir="$PG_SYSROOT$perl_archlibexp"
      fi
    fi
*************** eval TCL_SHARED_BUILD=\"$TCL_SHARED_BUIL
*** 18114,18119 ****
--- 18114,18124 ----
        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 de5f777..d8487aa 100644
*** a/configure.in
--- b/configure.in
*************** PL/Perl.])
*** 1048,1054 ****
    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
--- 1048,1054 ----
    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 -f "$PG_SYSROOT$perl_archlibexp/CORE/perl.h" ; then
        perl_includedir="$PG_SYSROOT$perl_archlibexp"
      fi
    fi
*************** if test "$with_tcl" = yes; then
*** 2211,2216 ****
--- 2211,2221 ----
        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 cff258b..7022733 100644
*** a/src/template/darwin
--- b/src/template/darwin
***************
*** 3,16 ****
  # 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
--- 3,17 ----
  # 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 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
      PG_SYSROOT=""
    fi
  fi

pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: Large writable variables
Next
From: Robert Haas
Date:
Subject: Re: [RFC] Removing "magic" oids