commit:     1b2b62e093d789f6b1a4609c866581991e287b88
Author:     Jacob Floyd <cognifloyd <AT> gmail <DOT> com>
AuthorDate: Sat Dec 19 00:53:24 2020 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sun Dec 27 09:49:32 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1b2b62e0

sys-devel/clang: fix bootstrap on darwin prefix

Adjust the clang internal header/framework search paths when building on
darwin prefix. We symlink the selected MacOSX.sdk to EPREFIX/MacOSX.sdk
during bootstrap, so that is the correct place to get system headers,
such as those for libc, or for system framework headers, that we do not
replace in prefix.

Bug: https://bugs.gentoo.org/758167
Signed-off-by: Jacob Floyd <cognifloyd <AT> gmail.com>
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 sys-devel/clang/clang-11.0.0.ebuild          | 13 ++++-
 sys-devel/clang/clang-11.0.1.9999.ebuild     | 11 +++-
 sys-devel/clang/clang-11.0.1_rc1.ebuild      | 11 +++-
 sys-devel/clang/clang-11.0.1_rc2.ebuild      | 11 +++-
 sys-devel/clang/clang-12.0.0.9999.ebuild     | 11 +++-
 sys-devel/clang/files/9999/prefix-dirs.patch | 75 ++++++++++++++++++++++++++++
 6 files changed, 126 insertions(+), 6 deletions(-)

diff --git a/sys-devel/clang/clang-11.0.0.ebuild 
b/sys-devel/clang/clang-11.0.0.ebuild
index cf0dde1f160..1d4f4bad16c 100644
--- a/sys-devel/clang/clang-11.0.0.ebuild
+++ b/sys-devel/clang/clang-11.0.0.ebuild
@@ -5,7 +5,7 @@ EAPI=7
 
 PYTHON_COMPAT=( python3_{6..9} )
 inherit cmake llvm llvm.org multilib-minimal pax-utils \
-       python-single-r1 toolchain-funcs
+       prefix python-single-r1 toolchain-funcs
 
 DESCRIPTION="C language family frontend for LLVM"
 HOMEPAGE="https://llvm.org/";
@@ -30,7 +30,7 @@ ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 
 LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA MIT"
 SLOT="$(ver_cut 1)"
-KEYWORDS="amd64 arm arm64 ppc64 ~riscv x86 ~amd64-linux"
+KEYWORDS="amd64 arm arm64 ppc64 ~riscv x86 ~amd64-linux ~x64-macos"
 IUSE="debug default-compiler-rt default-libcxx default-lld
        doc +static-analyzer test xml kernel_FreeBSD ${ALL_LLVM_TARGETS[*]}"
 REQUIRED_USE="${PYTHON_REQUIRED_USE}
@@ -75,6 +75,10 @@ PDEPEND="
 # Therefore: use sys-devel/clang[${MULTILIB_USEDEP}] only if you need
 # multilib clang* libraries (not runtime, not wrappers).
 
+PATCHES=(
+       "${FILESDIR}"/9999/prefix-dirs.patch
+)
+
 pkg_setup() {
        LLVM_MAX_SLOT=${SLOT} llvm_pkg_setup
        python-single-r1_pkg_setup
@@ -88,6 +92,11 @@ src_prepare() {
        llvm.org_src_prepare
 
        mv ../clang-tools-extra tools/extra || die
+
+       # add Gentoo Portage Prefix for Darwin (see prefix-dirs.patch)
+       eprefixify \
+               lib/Frontend/InitHeaderSearch.cpp \
+               lib/Driver/ToolChains/Darwin.cpp || die
 }
 
 check_distribution_components() {

diff --git a/sys-devel/clang/clang-11.0.1.9999.ebuild 
b/sys-devel/clang/clang-11.0.1.9999.ebuild
index 4a3a05b4df8..c5362450b51 100644
--- a/sys-devel/clang/clang-11.0.1.9999.ebuild
+++ b/sys-devel/clang/clang-11.0.1.9999.ebuild
@@ -5,7 +5,7 @@ EAPI=7
 
 PYTHON_COMPAT=( python3_{6..9} )
 inherit cmake llvm llvm.org multilib-minimal pax-utils \
-       python-single-r1 toolchain-funcs
+       prefix python-single-r1 toolchain-funcs
 
 DESCRIPTION="C language family frontend for LLVM"
 HOMEPAGE="https://llvm.org/";
@@ -77,6 +77,10 @@ llvm.org_set_globals
 # Therefore: use sys-devel/clang[${MULTILIB_USEDEP}] only if you need
 # multilib clang* libraries (not runtime, not wrappers).
 
+PATCHES=(
+       "${FILESDIR}"/9999/prefix-dirs.patch
+)
+
 pkg_setup() {
        LLVM_MAX_SLOT=${SLOT} llvm_pkg_setup
        python-single-r1_pkg_setup
@@ -90,6 +94,11 @@ src_prepare() {
        llvm.org_src_prepare
 
        mv ../clang-tools-extra tools/extra || die
+
+       # add Gentoo Portage Prefix for Darwin (see prefix-dirs.patch)
+       eprefixify \
+               lib/Frontend/InitHeaderSearch.cpp \
+               lib/Driver/ToolChains/Darwin.cpp || die
 }
 
 check_distribution_components() {

diff --git a/sys-devel/clang/clang-11.0.1_rc1.ebuild 
b/sys-devel/clang/clang-11.0.1_rc1.ebuild
index 4a3a05b4df8..c5362450b51 100644
--- a/sys-devel/clang/clang-11.0.1_rc1.ebuild
+++ b/sys-devel/clang/clang-11.0.1_rc1.ebuild
@@ -5,7 +5,7 @@ EAPI=7
 
 PYTHON_COMPAT=( python3_{6..9} )
 inherit cmake llvm llvm.org multilib-minimal pax-utils \
-       python-single-r1 toolchain-funcs
+       prefix python-single-r1 toolchain-funcs
 
 DESCRIPTION="C language family frontend for LLVM"
 HOMEPAGE="https://llvm.org/";
@@ -77,6 +77,10 @@ llvm.org_set_globals
 # Therefore: use sys-devel/clang[${MULTILIB_USEDEP}] only if you need
 # multilib clang* libraries (not runtime, not wrappers).
 
+PATCHES=(
+       "${FILESDIR}"/9999/prefix-dirs.patch
+)
+
 pkg_setup() {
        LLVM_MAX_SLOT=${SLOT} llvm_pkg_setup
        python-single-r1_pkg_setup
@@ -90,6 +94,11 @@ src_prepare() {
        llvm.org_src_prepare
 
        mv ../clang-tools-extra tools/extra || die
+
+       # add Gentoo Portage Prefix for Darwin (see prefix-dirs.patch)
+       eprefixify \
+               lib/Frontend/InitHeaderSearch.cpp \
+               lib/Driver/ToolChains/Darwin.cpp || die
 }
 
 check_distribution_components() {

diff --git a/sys-devel/clang/clang-11.0.1_rc2.ebuild 
b/sys-devel/clang/clang-11.0.1_rc2.ebuild
index 4a3a05b4df8..c5362450b51 100644
--- a/sys-devel/clang/clang-11.0.1_rc2.ebuild
+++ b/sys-devel/clang/clang-11.0.1_rc2.ebuild
@@ -5,7 +5,7 @@ EAPI=7
 
 PYTHON_COMPAT=( python3_{6..9} )
 inherit cmake llvm llvm.org multilib-minimal pax-utils \
-       python-single-r1 toolchain-funcs
+       prefix python-single-r1 toolchain-funcs
 
 DESCRIPTION="C language family frontend for LLVM"
 HOMEPAGE="https://llvm.org/";
@@ -77,6 +77,10 @@ llvm.org_set_globals
 # Therefore: use sys-devel/clang[${MULTILIB_USEDEP}] only if you need
 # multilib clang* libraries (not runtime, not wrappers).
 
+PATCHES=(
+       "${FILESDIR}"/9999/prefix-dirs.patch
+)
+
 pkg_setup() {
        LLVM_MAX_SLOT=${SLOT} llvm_pkg_setup
        python-single-r1_pkg_setup
@@ -90,6 +94,11 @@ src_prepare() {
        llvm.org_src_prepare
 
        mv ../clang-tools-extra tools/extra || die
+
+       # add Gentoo Portage Prefix for Darwin (see prefix-dirs.patch)
+       eprefixify \
+               lib/Frontend/InitHeaderSearch.cpp \
+               lib/Driver/ToolChains/Darwin.cpp || die
 }
 
 check_distribution_components() {

diff --git a/sys-devel/clang/clang-12.0.0.9999.ebuild 
b/sys-devel/clang/clang-12.0.0.9999.ebuild
index e5da1c5cedb..8ebb9ceea5e 100644
--- a/sys-devel/clang/clang-12.0.0.9999.ebuild
+++ b/sys-devel/clang/clang-12.0.0.9999.ebuild
@@ -5,7 +5,7 @@ EAPI=7
 
 PYTHON_COMPAT=( python3_{6..9} )
 inherit cmake llvm llvm.org multilib-minimal pax-utils \
-       python-single-r1 toolchain-funcs
+       prefix python-single-r1 toolchain-funcs
 
 DESCRIPTION="C language family frontend for LLVM"
 HOMEPAGE="https://llvm.org/";
@@ -77,6 +77,10 @@ llvm.org_set_globals
 # Therefore: use sys-devel/clang[${MULTILIB_USEDEP}] only if you need
 # multilib clang* libraries (not runtime, not wrappers).
 
+PATCHES=(
+       "${FILESDIR}"/9999/prefix-dirs.patch
+)
+
 pkg_setup() {
        LLVM_MAX_SLOT=${SLOT} llvm_pkg_setup
        python-single-r1_pkg_setup
@@ -88,6 +92,11 @@ src_prepare() {
        BUILD_DIR=${WORKDIR}/x/y/clang
 
        llvm.org_src_prepare
+
+       # add Gentoo Portage Prefix for Darwin (see prefix-dirs.patch)
+       eprefixify \
+               lib/Frontend/InitHeaderSearch.cpp \
+               lib/Driver/ToolChains/Darwin.cpp || die
 }
 
 check_distribution_components() {

diff --git a/sys-devel/clang/files/9999/prefix-dirs.patch 
b/sys-devel/clang/files/9999/prefix-dirs.patch
new file mode 100644
index 00000000000..0f7b5ca31eb
--- /dev/null
+++ b/sys-devel/clang/files/9999/prefix-dirs.patch
@@ -0,0 +1,75 @@
+This mirrors cmake-*-prefix-dirs.patch
+
+It add EPREFIX to search paths for c/cxx headers.
+It also adds EPREFIX/MacOSX.sdk to search paths for c and Frameworks.
+Assumes that c++ lib and headers will be installed in the prefix.
+
+Also, a couple of args are populated by inspecting the SDK,
+so, default to EPREFIX/MacOSX.sdk when the sysroot is not specified.
+(This does NOT set sysroot).
+
+The ebuild adds an extra / at the end of EPREFIX so that it is never
+an empty string. 
+
+--- a/clang/lib/Frontend/InitHeaderSearch.cpp  2020-11-30 12:53:42.000000000 
-0600
++++ b/clang/lib/Frontend/InitHeaderSearch.cpp  2020-11-30 13:57:52.000000000 
-0600
+@@ -445,6 +445,9 @@
+   // All header search logic is handled in the Driver for Darwin.
+   if (triple.isOSDarwin()) {
+     if (HSOpts.UseStandardSystemIncludes) {
++      // Add Gentoo Prefix framework dirs first
++      AddPath("@[email protected]/System/Library/Frameworks", 
System, true);
++      AddPath("@[email protected]/Library/Frameworks", 
System, true);
+       // Add the default framework include paths on Darwin.
+       AddPath("/System/Library/Frameworks", System, true);
+       AddPath("/Library/Frameworks", System, true);
+--- a/clang/lib/Driver/ToolChains/Darwin.cpp   2020-10-07 05:10:48.000000000 
-0500
++++ b/clang/lib/Driver/ToolChains/Darwin.cpp   2020-11-30 12:57:15.000000000 
-0600
+@@ -1737,9 +1737,9 @@
+                                          const ArgList &Args,
+                                          const Driver &TheDriver) {
+   const Arg *A = Args.getLastArg(options::OPT_isysroot);
+-  if (!A)
+-    return None;
+-  StringRef isysroot = A->getValue();
++  //if (!A)
++  //  return None;
++  StringRef isysroot = A ? A->getValue() : 
"@[email protected]";
+   auto SDKInfoOrErr = driver::parseDarwinSDKInfo(VFS, isysroot);
+   if (!SDKInfoOrErr) {
+     llvm::consumeError(SDKInfoOrErr.takeError());
+@@ -1921,13 +1921,14 @@
+     return DriverArgs.getLastArgValue(options::OPT_isysroot);
+   if (!getDriver().SysRoot.empty())
+     return getDriver().SysRoot;
+-  return "/";
++  return "@GENTOO_PORTAGE_EPREFIX@";
+ }
+ 
+ void DarwinClang::AddClangSystemIncludeArgs(const llvm::opt::ArgList 
&DriverArgs,
+                                             llvm::opt::ArgStringList 
&CC1Args) const {
+   const Driver &D = getDriver();
+ 
++  // Sysroot is effectively Gentoo EPREFIX when -isysroot/-sysroot is not 
defined
+   llvm::StringRef Sysroot = GetHeaderSysroot(DriverArgs);
+ 
+   bool NoStdInc = DriverArgs.hasArg(options::OPT_nostdinc);
+@@ -1969,6 +1970,10 @@
+     SmallString<128> P(Sysroot);
+     llvm::sys::path::append(P, "usr", "include");
+     addExternCSystemInclude(DriverArgs, CC1Args, P.str());
++    // And add <sysroot>/MacOSX.sdk/usr/include.
++    SmallString<128> Psdk(Sysroot);
++    llvm::sys::path::append(Psdk, "MacOSX.sdk", "usr", "include");
++    addExternCSystemInclude(DriverArgs, CC1Args, Psdk.str());
+   }
+ }
+ 
+@@ -2017,6 +2022,7 @@
+       DriverArgs.hasArg(options::OPT_nostdincxx))
+     return;
+ 
++  // Sysroot is effectively Gentoo EPREFIX when -isysroot/-sysroot is not 
defined
+   llvm::StringRef Sysroot = GetHeaderSysroot(DriverArgs);
+ 
+   switch (GetCXXStdlibType(DriverArgs)) {

Reply via email to