Skip to content

Commit 717c01b

Browse files
committed
Do not require JAVA_HOME at build time
1 parent 0c7b613 commit 717c01b

1 file changed

Lines changed: 0 additions & 155 deletions

File tree

Package.swift

Lines changed: 0 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -5,126 +5,6 @@ import CompilerPluginSupport
55
import Foundation
66
import PackageDescription
77

8-
// Note: the JAVA_HOME environment variable must be set to point to where
9-
// Java is installed, e.g.,
10-
// Library/Java/JavaVirtualMachines/openjdk-21.jdk/Contents/Home.
11-
func findJavaHome() -> String {
12-
if let home = ProcessInfo.processInfo.environment["JAVA_HOME"] {
13-
return home
14-
}
15-
16-
// This is a workaround for envs (some IDEs) which have trouble with
17-
// picking up env variables during the build process
18-
let path = "\(FileManager.default.homeDirectoryForCurrentUser.path()).java_home"
19-
if let home = try? String(contentsOfFile: path, encoding: .utf8) {
20-
if let lastChar = home.last, lastChar.isNewline {
21-
return String(home.dropLast())
22-
}
23-
return home
24-
}
25-
26-
if let home = getJavaHomeFromLibexecJavaHome(), !home.isEmpty {
27-
return home
28-
}
29-
30-
if let home = getJavaHomeFromSDKMAN() {
31-
return home
32-
}
33-
34-
if let home = getJavaHomeFromPath() {
35-
return home
36-
}
37-
38-
if ProcessInfo.processInfo.environment["SPI_PROCESSING"] == "1"
39-
&& ProcessInfo.processInfo.environment["SPI_BUILD"] == nil
40-
{
41-
return ""
42-
}
43-
fatalError("Please set the JAVA_HOME environment variable to point to where Java is installed.")
44-
}
45-
46-
func getJavaHomeFromLibexecJavaHome() -> String? {
47-
let task = Process()
48-
task.executableURL = URL(fileURLWithPath: "/usr/libexec/java_home")
49-
50-
guard FileManager.default.fileExists(atPath: task.executableURL!.path) else {
51-
return nil
52-
}
53-
54-
let pipe = Pipe()
55-
task.standardOutput = pipe
56-
task.standardError = pipe
57-
58-
do {
59-
try task.run()
60-
task.waitUntilExit()
61-
62-
let data = pipe.fileHandleForReading.readDataToEndOfFile()
63-
let output = String(data: data, encoding: .utf8)?.trimmingCharacters(in: .whitespacesAndNewlines)
64-
65-
if task.terminationStatus == 0 {
66-
return output
67-
} else {
68-
return nil
69-
}
70-
} catch {
71-
return nil
72-
}
73-
}
74-
75-
func getJavaHomeFromSDKMAN() -> String? {
76-
let home = FileManager.default.homeDirectoryForCurrentUser
77-
.appendingPathComponent(".sdkman/candidates/java/current")
78-
79-
let javaBin = home.appendingPathComponent("bin/java").path
80-
if FileManager.default.isExecutableFile(atPath: javaBin) {
81-
return home.path
82-
}
83-
return nil
84-
}
85-
86-
func getJavaHomeFromPath() -> String? {
87-
let task = Process()
88-
task.executableURL = URL(fileURLWithPath: "/usr/bin/which")
89-
task.arguments = ["java"]
90-
91-
let pipe = Pipe()
92-
task.standardOutput = pipe
93-
94-
do {
95-
try task.run()
96-
task.waitUntilExit()
97-
guard task.terminationStatus == 0 else { return nil }
98-
99-
let data = pipe.fileHandleForReading.readDataToEndOfFile()
100-
guard
101-
let javaPath = String(data: data, encoding: .utf8)?
102-
.trimmingCharacters(in: .whitespacesAndNewlines),
103-
!javaPath.isEmpty
104-
else { return nil }
105-
106-
let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath()
107-
return
108-
resolved
109-
.deletingLastPathComponent()
110-
.deletingLastPathComponent()
111-
.path
112-
} catch {
113-
return nil
114-
}
115-
}
116-
117-
let javaHome = findJavaHome()
118-
119-
let javaIncludePath = "\(javaHome)/include"
120-
#if os(Linux)
121-
let javaPlatformIncludePath = "\(javaIncludePath)/linux"
122-
#elseif os(macOS)
123-
let javaPlatformIncludePath = "\(javaIncludePath)/darwin"
124-
#elseif os(Windows)
125-
let javaPlatformIncludePath = "\(javaIncludePath)/win32"
126-
#endif
127-
1288
let swiftJavaJNICoreDep: Package.Dependency
1299
if let localPath = ProcessInfo.processInfo.environment["SWIFT_JAVA_JNI_CORE_PATH"] {
13010
print("Using upstream 'swift-java-jni-core' from override path SWIFT_JAVA_JNI_CORE_PATH = \(localPath)")
@@ -280,27 +160,8 @@ let package = Package(
280160
swiftSettings: [
281161
.swiftLanguageMode(.v5),
282162
.enableUpcomingFeature("ImplicitOpenExistentials"),
283-
.unsafeFlags(
284-
["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"],
285-
.when(platforms: [.macOS, .linux, .windows])
286-
),
287163
.unsafeFlags(["-Xfrontend", "-sil-verify-none"], .when(configuration: .release)), // Workaround for https://github.com/swiftlang/swift/issues/84899
288164
],
289-
linkerSettings: [
290-
.unsafeFlags(
291-
[
292-
"-L\(javaHome)/lib/server",
293-
"-Xlinker", "-rpath",
294-
"-Xlinker", "\(javaHome)/lib/server",
295-
],
296-
.when(platforms: [.linux, .macOS])
297-
),
298-
.unsafeFlags(
299-
["-L\(javaHome)/lib"],
300-
.when(platforms: [.windows])
301-
),
302-
.linkedLibrary("jvm", .when(platforms: [.linux, .macOS, .windows])),
303-
]
304165
),
305166
.target(
306167
name: "JavaUtil",
@@ -309,7 +170,6 @@ let package = Package(
309170
exclude: ["swift-java.config"],
310171
swiftSettings: [
311172
.swiftLanguageMode(.v5),
312-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
313173
]
314174
),
315175
.target(
@@ -319,7 +179,6 @@ let package = Package(
319179
exclude: ["swift-java.config"],
320180
swiftSettings: [
321181
.swiftLanguageMode(.v5),
322-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
323182
]
324183
),
325184
.target(
@@ -329,7 +188,6 @@ let package = Package(
329188
exclude: ["swift-java.config"],
330189
swiftSettings: [
331190
.swiftLanguageMode(.v5),
332-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
333191
]
334192
),
335193
.target(
@@ -339,7 +197,6 @@ let package = Package(
339197
exclude: ["swift-java.config"],
340198
swiftSettings: [
341199
.swiftLanguageMode(.v5),
342-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
343200
]
344201
),
345202
.target(
@@ -349,7 +206,6 @@ let package = Package(
349206
exclude: ["swift-java.config"],
350207
swiftSettings: [
351208
.swiftLanguageMode(.v5),
352-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
353209
]
354210
),
355211
.target(
@@ -359,7 +215,6 @@ let package = Package(
359215
exclude: ["swift-java.config"],
360216
swiftSettings: [
361217
.swiftLanguageMode(.v5),
362-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
363218
]
364219
),
365220

@@ -381,7 +236,6 @@ let package = Package(
381236
dependencies: [],
382237
swiftSettings: [
383238
.swiftLanguageMode(.v5),
384-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
385239
]
386240
),
387241
.target(
@@ -392,15 +246,13 @@ let package = Package(
392246
exclude: ["swift-java.config"],
393247
swiftSettings: [
394248
.swiftLanguageMode(.v5),
395-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
396249
]
397250
),
398251

399252
.target(
400253
name: "SwiftRuntimeFunctions",
401254
swiftSettings: [
402255
.swiftLanguageMode(.v5),
403-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
404256
]
405257
),
406258

@@ -430,7 +282,6 @@ let package = Package(
430282
],
431283
swiftSettings: [
432284
.swiftLanguageMode(.v5),
433-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
434285
.enableUpcomingFeature("BareSlashRegexLiterals"),
435286
]
436287
),
@@ -453,7 +304,6 @@ let package = Package(
453304
],
454305
swiftSettings: [
455306
.swiftLanguageMode(.v5),
456-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
457307
.enableUpcomingFeature("BareSlashRegexLiterals"),
458308
.define(
459309
"SYSTEM_PACKAGE_DARWIN",
@@ -478,7 +328,6 @@ let package = Package(
478328
],
479329
swiftSettings: [
480330
.swiftLanguageMode(.v5),
481-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
482331
]
483332
),
484333

@@ -498,7 +347,6 @@ let package = Package(
498347
],
499348
swiftSettings: [
500349
.swiftLanguageMode(.v5),
501-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
502350
]
503351
),
504352

@@ -520,7 +368,6 @@ let package = Package(
520368
],
521369
swiftSettings: [
522370
.swiftLanguageMode(.v5),
523-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
524371
]
525372
),
526373

@@ -529,7 +376,6 @@ let package = Package(
529376
dependencies: ["SwiftJavaConfigurationShared"],
530377
swiftSettings: [
531378
.swiftLanguageMode(.v5),
532-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
533379
]
534380
),
535381

@@ -540,7 +386,6 @@ let package = Package(
540386
],
541387
swiftSettings: [
542388
.swiftLanguageMode(.v5),
543-
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows])),
544389
]
545390
),
546391
]

0 commit comments

Comments
 (0)