|
6 | 6 |
|
7 | 7 | See http://swift.org/LICENSE.txt for license information
|
8 | 8 | See http://swift.org/CONTRIBUTORS.txt for Swift project authors
|
9 |
| -*/ |
| 9 | + */ |
10 | 10 |
|
11 | 11 | import protocol Build.Toolchain
|
12 | 12 | import struct Utility.Path
|
13 | 13 | import enum Multitool.Error
|
14 | 14 | import POSIX
|
15 | 15 |
|
| 16 | +#if os(OSX) |
| 17 | + private let whichClangArgs = ["xcrun", "--find", "clang"] |
| 18 | +#else |
| 19 | + private let whichClangArgs = ["which", "clang"] |
| 20 | +#endif |
| 21 | + |
16 | 22 | struct UserToolchain: Toolchain {
|
17 | 23 | let SWIFT_EXEC: String
|
18 | 24 | let clang: String
|
19 | 25 | let sysroot: String?
|
20 | 26 |
|
21 | 27 | #if os(OSX)
|
22 |
| - /** |
23 |
| - On OS X we do not support running in situations where xcrun fails. |
24 |
| - */ |
25 |
| - init() throws { |
26 |
| - SWIFT_EXEC = try getenv("SWIFT_EXEC") ?? POSIX.popen(["xcrun", "--find", "swiftc"]).chomp() |
27 |
| - clang = try getenv("CC") ?? POSIX.popen(["xcrun", "--find", "clang"]).chomp() |
28 |
| - sysroot = try getenv("SYSROOT") ?? POSIX.popen(["xcrun", "--sdk", "macosx", "--show-sdk-path"]).chomp() |
29 |
| - |
30 |
| - guard !SWIFT_EXEC.isEmpty && !clang.isEmpty && !sysroot!.isEmpty else { |
31 |
| - throw Multitool.Error.InvalidToolchain |
32 |
| - } |
33 |
| - } |
34 |
| - |
35 | 28 | var platformArgs: [String] {
|
36 | 29 | return ["-target", "x86_64-apple-macosx10.10", "-sdk", sysroot!]
|
37 | 30 | }
|
38 |
| - |
39 | 31 | #else
|
| 32 | + let platformArgs: [String] = [] |
| 33 | +#endif |
40 | 34 |
|
41 | 35 | init() throws {
|
42 | 36 | do {
|
43 | 37 | SWIFT_EXEC = getenv("SWIFT_EXEC")
|
44 |
| - // see if user has put something earlier in the path |
45 |
| - ?? (try? POSIX.popen(["which", "swiftc"]))?.chomp().abspath() |
46 | 38 | // use the swiftc installed alongside ourselves
|
47 | 39 | ?? Path.join(Process.arguments[0], "../swiftc").abspath()
|
48 |
| - clang = try getenv("CC") ?? popen(["which", "clang"]).chomp().abspath() |
49 |
| - sysroot = nil |
| 40 | + |
| 41 | + clang = try getenv("CC") ?? POSIX.popen(whichClangArgs).chomp() |
| 42 | + |
| 43 | + #if os(OSX) |
| 44 | + sysroot = try getenv("SYSROOT") ?? POSIX.popen(["xcrun", "--sdk", "macosx", "--show-sdk-path"]).chomp() |
| 45 | + #else |
| 46 | + sysroot = nil |
| 47 | + #endif |
| 48 | + |
| 49 | + guard !SWIFT_EXEC.isEmpty && !clang.isEmpty && (sysroot == nil || !sysroot!.isEmpty) else { |
| 50 | + throw Multitool.Error.InvalidToolchain |
| 51 | + } |
50 | 52 | } catch POSIX.Error.ExitStatus {
|
51 | 53 | throw Multitool.Error.InvalidToolchain
|
52 | 54 | }
|
53 |
| - guard !SWIFT_EXEC.isEmpty && !clang.isEmpty else { |
54 |
| - throw Multitool.Error.InvalidToolchain |
55 |
| - } |
56 |
| - |
57 | 55 | }
|
58 |
| - |
59 |
| - let platformArgs: [String] = [] |
60 |
| -#endif |
61 | 56 | }
|
0 commit comments