@@ -16,6 +16,7 @@ public struct DiscoveredClangToolSpecInfo: DiscoveredCommandLineToolSpecInfo {
16
16
public let toolPath : Path
17
17
public let clangVersion : Version ?
18
18
public let llvmVersion : Version ?
19
+ public let isAppleClang : Bool
19
20
20
21
public var toolVersion : Version ? { return self . clangVersion }
21
22
@@ -79,7 +80,7 @@ public func discoveredClangToolInfo(
79
80
) async throws -> DiscoveredClangToolSpecInfo {
80
81
// Check that we call a clang variant, 'clang', 'clang++' etc. Note that a test sets `CC` to `/usr/bin/yes` so avoid calling that here.
81
82
guard toolPath. basename. starts ( with: " clang " ) else {
82
- return DiscoveredClangToolSpecInfo ( toolPath: toolPath, clangVersion: nil , llvmVersion: nil , clangCachingBlocklist: nil , toolFeatures: . none)
83
+ return DiscoveredClangToolSpecInfo ( toolPath: toolPath, clangVersion: nil , llvmVersion: nil , isAppleClang : false , clangCachingBlocklist: nil , toolFeatures: . none)
83
84
}
84
85
85
86
// Construct the command line to invoke.
@@ -102,6 +103,7 @@ public func discoveredClangToolInfo(
102
103
103
104
var clangVersion : Version ? = nil
104
105
var llvmVersion : Version ? = nil
106
+ var isAppleClang = false
105
107
106
108
for line in outputString. components ( separatedBy: " \n " ) {
107
109
if line. hasPrefix ( " #define " ) {
@@ -123,6 +125,10 @@ public func discoveredClangToolInfo(
123
125
llvmVersion = try ? Version ( String ( match. llvm) )
124
126
}
125
127
}
128
+
129
+ if macroName == " __apple_build_version__ " {
130
+ isAppleClang = true
131
+ }
126
132
}
127
133
}
128
134
@@ -157,6 +163,7 @@ public func discoveredClangToolInfo(
157
163
toolPath: toolPath,
158
164
clangVersion: clangVersion,
159
165
llvmVersion: llvmVersion,
166
+ isAppleClang: isAppleClang,
160
167
clangCachingBlocklist: getBlocklist ( type: ClangCachingBlockListInfo . self, toolchainFilename: " clang-caching.json " , delegate: delegate) ,
161
168
toolFeatures: getFeatures ( at: toolPath)
162
169
)
0 commit comments