summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalGenerator.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-03-28 21:28:44 (GMT)
committerBrad King <brad.king@kitware.com>2023-03-29 19:19:47 (GMT)
commit689616785f76acd844fd448c51c5b2a0711aafa2 (patch)
tree203ed92c0b1ccd1d050404db790801192ca6b012 /Source/cmGlobalGenerator.cxx
parentf4b8176447699ba82c2bf7baf2d609d0d6e3259b (diff)
downloadCMake-689616785f76acd844fd448c51c5b2a0711aafa2.zip
CMake-689616785f76acd844fd448c51c5b2a0711aafa2.tar.gz
CMake-689616785f76acd844fd448c51c5b2a0711aafa2.tar.bz2
macOS: Do not pass Apple-specific flags to llvm-strip
Since commit cf82300a63 (BinUtils: Clarify search logic and make it more consistent, 2021-05-27, v3.21.0-rc1~119^2~2) we prefer `llvm-strip` over `strip` when using Clang. However, since commit 20291e8e72 (install: Fix stripping on macOS, 2019-01-30, v3.14.0-rc1~31^2) on macOS we add flags `-u -r`, needed by Apple's `strip` for executables, but that `llvm-strip` does not need or support. Improve the condition to add Apple-specific flags only when the selected `strip` tool is Apple's. Note that Apple dylibs must be stripped with `-x` with either Apple's `strip` or `llvm-strip`. Fixes: #24601
Diffstat (limited to 'Source/cmGlobalGenerator.cxx')
-rw-r--r--Source/cmGlobalGenerator.cxx29
1 files changed, 29 insertions, 0 deletions
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 0e9f78e..08022b3 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -3542,3 +3542,32 @@ cmInstallRuntimeDependencySet* cmGlobalGenerator::GetNamedRuntimeDependencySet(
}
return it->second;
}
+
+cmGlobalGenerator::StripCommandStyle cmGlobalGenerator::GetStripCommandStyle(
+ std::string const& strip)
+{
+#ifdef __APPLE__
+ auto i = this->StripCommandStyleMap.find(strip);
+ if (i == this->StripCommandStyleMap.end()) {
+ StripCommandStyle style = StripCommandStyle::Default;
+
+ // Try running strip tool with Apple-specific options.
+ std::vector<std::string> cmd{ strip, "-u", "-r" };
+ std::string out;
+ std::string err;
+ int ret;
+ if (cmSystemTools::RunSingleCommand(cmd, &out, &err, &ret, nullptr,
+ cmSystemTools::OUTPUT_NONE) &&
+ // Check for Apple-specific output.
+ ret != 0 && cmHasLiteralPrefix(err, "fatal error: /") &&
+ err.find("/usr/bin/strip: no files specified") != std::string::npos) {
+ style = StripCommandStyle::Apple;
+ }
+ i = this->StripCommandStyleMap.emplace(strip, style).first;
+ }
+ return i->second;
+#else
+ static_cast<void>(strip);
+ return StripCommandStyle::Default;
+#endif
+}