From 7c4c1100e0d65dab0cc8d205457078d8ec2de228 Mon Sep 17 00:00:00 2001 From: Pablo Andres Fuente Date: Fri, 4 Oct 2024 10:19:06 -0300 Subject: [PATCH] Improving detection of ccache on Mac Before this commit, ccache where only used on Mac when `OSXCROSS_ROOT` was defined. Now, it could be used even when that envirnment variable is not defined. --- methods.py | 8 ++++++-- platform/macos/detect.py | 19 ++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/methods.py b/methods.py index 6db6b9580c5..1092564147b 100644 --- a/methods.py +++ b/methods.py @@ -657,12 +657,14 @@ def detect_darwin_sdk_path(platform, env): def is_apple_clang(env): + import shlex + if env["platform"] not in ["macos", "ios"]: return False if not using_clang(env): return False try: - version = subprocess.check_output([env.subst(env["CXX"]), "--version"]).strip().decode("utf-8") + version = subprocess.check_output(shlex.split(env.subst(env["CXX"])) + ["--version"]).strip().decode("utf-8") except (subprocess.CalledProcessError, OSError): print_warning("Couldn't parse CXX environment variable to infer compiler version.") return False @@ -677,6 +679,8 @@ def get_compiler_version(env): - metadata1, metadata2: Extra information - date: Date of the build """ + import shlex + ret = { "major": -1, "minor": -1, @@ -727,7 +731,7 @@ def get_compiler_version(env): # Clang used to return hardcoded 4.2.1: # https://reviews.llvm.org/D56803 try: version = subprocess.check_output( - [env.subst(env["CXX"]), "--version"], shell=(os.name == "nt"), encoding="utf-8" + shlex.split(env.subst(env["CXX"])) + ["--version"], shell=(os.name == "nt"), encoding="utf-8" ).strip() except (subprocess.CalledProcessError, OSError): print_warning("Couldn't parse CXX environment variable to infer compiler version.") diff --git a/platform/macos/detect.py b/platform/macos/detect.py index 3575e93c688..b7471989a17 100644 --- a/platform/macos/detect.py +++ b/platform/macos/detect.py @@ -108,6 +108,10 @@ def configure(env: "SConsEnvironment"): env.Append(CCFLAGS=["-fobjc-arc"]) + ccache_path = os.environ.get("CCACHE", "") + if ccache_path != "": + ccache_path = ccache_path + " " + if "osxcross" not in env: # regular native build if env["macports_clang"] != "no": mpprefix = os.environ.get("MACPORTS_PREFIX", "/opt/local") @@ -118,8 +122,8 @@ def configure(env: "SConsEnvironment"): env["RANLIB"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-ranlib" env["AS"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-as" else: - env["CC"] = "clang" - env["CXX"] = "clang++" + env["CC"] = ccache_path + "clang" + env["CXX"] = ccache_path + "clang++" detect_darwin_sdk_path("macos", env) env.Append(CCFLAGS=["-isysroot", "$MACOS_SDK_PATH"]) @@ -132,15 +136,8 @@ def configure(env: "SConsEnvironment"): else: basecmd = root + "/target/bin/x86_64-apple-" + env["osxcross_sdk"] + "-" - ccache_path = os.environ.get("CCACHE") - if ccache_path is None: - env["CC"] = basecmd + "cc" - env["CXX"] = basecmd + "c++" - else: - # there aren't any ccache wrappers available for macOS cross-compile, - # to enable caching we need to prepend the path to the ccache binary - env["CC"] = ccache_path + " " + basecmd + "cc" - env["CXX"] = ccache_path + " " + basecmd + "c++" + env["CC"] = ccache_path + basecmd + "cc" + env["CXX"] = ccache_path + basecmd + "c++" env["AR"] = basecmd + "ar" env["RANLIB"] = basecmd + "ranlib" env["AS"] = basecmd + "as"