Skip to content

Commit bc7819d

Browse files
authored
Merge branch 'main' into main
2 parents 291e547 + f241b47 commit bc7819d

File tree

168 files changed

+7123
-7595
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

168 files changed

+7123
-7595
lines changed

.github/workflows/pull_request.yml

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,16 +153,18 @@ jobs:
153153
uses: ./.github/actions/prepare_env
154154
- name: Swift Build
155155
run: swift build --build-tests --disable-sandbox --disable-experimental-prebuilts # FIXME: until prebuilt swift-syntax isn't broken on 6.2 anymore: https://github.com/swiftlang/swift-java/issues/418
156-
- name: Swift Test
157-
run: swift test --disable-experimental-prebuilts # FIXME: until prebuilt swift-syntax isn't broken on 6.2 anymore: https://github.com/swiftlang/swift-java/issues/418
156+
- name: Swift Test (XCTest)
157+
run: swift test --disable-experimental-swift-testing --disable-experimental-prebuilts # FIXME: until prebuilt swift-syntax isn't broken on 6.2 anymore: https://github.com/swiftlang/swift-java/issues/418
158+
- name: Swift Test (swift-testing)
159+
run: swift test --disable-xctest --disable-experimental-prebuilts # FIXME: until prebuilt swift-syntax isn't broken on 6.2 anymore: https://github.com/swiftlang/swift-java/issues/418
158160

159161
test-swift-macos:
160162
name: Test (Swift) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}})
161163
runs-on: [self-hosted, macos, sequoia, ARM64]
162164
strategy:
163165
fail-fast: false
164166
matrix:
165-
swift_version: ['6.2']
167+
swift_version: ['6.2.3']
166168
os_version: ['macos']
167169
jdk_vendor: ['corretto']
168170
env:
@@ -171,10 +173,16 @@ jobs:
171173
- uses: actions/checkout@v4
172174
- name: Prepare CI Environment
173175
uses: ./.github/actions/prepare_env
176+
- name: Install Swiftly
177+
run: ./.github/scripts/install_swiftly.sh
178+
env:
179+
SWIFT_VERSION: "${{ matrix.swift_version }}"
174180
- name: Swift Build
175181
run: "swift build --build-tests --disable-sandbox"
176-
- name: Swift Test
177-
run: "swift test"
182+
- name: Swift Test (swift-testing)
183+
run: swift test --disable-xctest
184+
- name: Swift Test (XCTest)
185+
run: swift test --disable-experimental-swift-testing
178186

179187
build-swift-android:
180188
name: Sample SwiftJavaExtractJNISampleApp (Android) (${{ matrix.os_version }} swift:${{ matrix.swift_version }} jdk:${{matrix.jdk_vendor}} android:${{matrix.sdk_triple}})

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
.sdkmanrc
33

44
.DS_Store
5+
.metals
56
.build
67
.idea
78
.vscode

Benchmarks/Package.swift

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
// swift-tools-version: 6.0
22

33
import PackageDescription
4-
5-
import class Foundation.FileManager
6-
import class Foundation.ProcessInfo
4+
import Foundation
75

86
// Note: the JAVA_HOME environment variable must be set to point to where
97
// Java is installed, e.g.,
@@ -24,8 +22,56 @@ func findJavaHome() -> String {
2422
return home
2523
}
2624

25+
if let home = getJavaHomeFromSDKMAN() {
26+
return home
27+
}
28+
29+
if let home = getJavaHomeFromPath() {
30+
return home
31+
}
32+
2733
fatalError("Please set the JAVA_HOME environment variable to point to where Java is installed.")
2834
}
35+
36+
func getJavaHomeFromSDKMAN() -> String? {
37+
let home = FileManager.default.homeDirectoryForCurrentUser
38+
.appendingPathComponent(".sdkman/candidates/java/current")
39+
40+
let javaBin = home.appendingPathComponent("bin/java").path
41+
if FileManager.default.isExecutableFile(atPath: javaBin) {
42+
return home.path
43+
}
44+
return nil
45+
}
46+
47+
func getJavaHomeFromPath() -> String? {
48+
let task = Process()
49+
task.executableURL = URL(fileURLWithPath: "/usr/bin/which")
50+
task.arguments = ["java"]
51+
52+
let pipe = Pipe()
53+
task.standardOutput = pipe
54+
55+
do {
56+
try task.run()
57+
task.waitUntilExit()
58+
guard task.terminationStatus == 0 else { return nil }
59+
60+
let data = pipe.fileHandleForReading.readDataToEndOfFile()
61+
guard let javaPath = String(data: data, encoding: .utf8)?
62+
.trimmingCharacters(in: .whitespacesAndNewlines),
63+
!javaPath.isEmpty
64+
else { return nil }
65+
66+
let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath()
67+
return resolved
68+
.deletingLastPathComponent()
69+
.deletingLastPathComponent()
70+
.path
71+
} catch {
72+
return nil
73+
}
74+
}
2975
let javaHome = findJavaHome()
3076

3177
let javaIncludePath = "\(javaHome)/include"

Package.swift

Lines changed: 56 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ func findJavaHome() -> String {
3434
return home
3535
}
3636

37+
if let home = getJavaHomeFromSDKMAN() {
38+
return home
39+
}
40+
41+
if let home = getJavaHomeFromPath() {
42+
return home
43+
}
44+
3745

3846
if ProcessInfo.processInfo.environment["SPI_PROCESSING"] == "1" && ProcessInfo.processInfo.environment["SPI_BUILD"] == nil {
3947
// Just ignore that we're missing a JAVA_HOME when building in Swift Package Index during general processing where no Java is needed. However, do _not_ suppress the error during SPI's compatibility build stage where Java is required.
@@ -80,6 +88,46 @@ func getJavaHomeFromLibexecJavaHome() -> String? {
8088
}
8189
}
8290

91+
func getJavaHomeFromSDKMAN() -> String? {
92+
let home = FileManager.default.homeDirectoryForCurrentUser
93+
.appendingPathComponent(".sdkman/candidates/java/current")
94+
95+
let javaBin = home.appendingPathComponent("bin/java").path
96+
if FileManager.default.isExecutableFile(atPath: javaBin) {
97+
return home.path
98+
}
99+
return nil
100+
}
101+
102+
func getJavaHomeFromPath() -> String? {
103+
let task = Process()
104+
task.executableURL = URL(fileURLWithPath: "/usr/bin/which")
105+
task.arguments = ["java"]
106+
107+
let pipe = Pipe()
108+
task.standardOutput = pipe
109+
110+
do {
111+
try task.run()
112+
task.waitUntilExit()
113+
guard task.terminationStatus == 0 else { return nil }
114+
115+
let data = pipe.fileHandleForReading.readDataToEndOfFile()
116+
guard let javaPath = String(data: data, encoding: .utf8)?
117+
.trimmingCharacters(in: .whitespacesAndNewlines),
118+
!javaPath.isEmpty
119+
else { return nil }
120+
121+
let resolved = URL(fileURLWithPath: javaPath).resolvingSymlinksInPath()
122+
return resolved
123+
.deletingLastPathComponent()
124+
.deletingLastPathComponent()
125+
.path
126+
} catch {
127+
return nil
128+
}
129+
}
130+
83131
let javaHome = findJavaHome()
84132

85133
let javaIncludePath = "\(javaHome)/include"
@@ -100,6 +148,7 @@ let package = Package(
100148
// ==== SwiftJava (i.e. calling Java directly Swift utilities)
101149
.library(
102150
name: "SwiftJava",
151+
type: .dynamic,
103152
targets: ["SwiftJava"]
104153
),
105154

@@ -210,10 +259,7 @@ let package = Package(
210259
.package(url: "https://github.com/apple/swift-system", from: "1.4.0"),
211260
.package(url: "https://github.com/apple/swift-log", from: "1.2.0"),
212261
.package(url: "https://github.com/apple/swift-collections", .upToNextMinor(from: "1.3.0")), // primarily for ordered collections
213-
214-
// // FIXME: swift-subprocess stopped supporting 6.0 when it moved into a package;
215-
// // we'll need to drop 6.0 as well, but currently blocked on doing so by swiftpm plugin pending design questions
216-
// .package(url: "https://github.com/swiftlang/swift-subprocess.git", revision: "de15b67f7871c8a039ef7f4813eb39a8878f61a6"),
262+
.package(url: "https://github.com/swiftlang/swift-subprocess.git", from: "0.2.1", traits: ["SubprocessFoundation"]),
217263

218264
// Benchmarking
219265
.package(url: "https://github.com/ordo-one/package-benchmark", .upToNextMajor(from: "1.4.0")),
@@ -386,6 +432,9 @@ let package = Package(
386432
swiftSettings: [
387433
.swiftLanguageMode(.v5),
388434
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"], .when(platforms: [.macOS, .linux, .windows]))
435+
],
436+
linkerSettings: [
437+
.linkedLibrary("log", .when(platforms: [.android]))
389438
]
390439
),
391440

@@ -412,8 +461,7 @@ let package = Package(
412461
"JavaTypes",
413462
"SwiftJavaShared",
414463
"SwiftJavaConfigurationShared",
415-
// .product(name: "Subprocess", package: "swift-subprocess")
416-
"_Subprocess",
464+
.product(name: "Subprocess", package: "swift-subprocess")
417465
],
418466
swiftSettings: [
419467
.swiftLanguageMode(.v5),
@@ -457,6 +505,7 @@ let package = Package(
457505
.product(name: "SwiftSyntax", package: "swift-syntax"),
458506
.product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
459507
.product(name: "ArgumentParser", package: "swift-argument-parser"),
508+
.product(name: "OrderedCollections", package: "swift-collections"),
460509
"JavaTypes",
461510
"SwiftJavaShared",
462511
"SwiftJavaConfigurationShared",
@@ -537,28 +586,6 @@ let package = Package(
537586
.swiftLanguageMode(.v5),
538587
.unsafeFlags(["-I\(javaIncludePath)", "-I\(javaPlatformIncludePath)"])
539588
]
540-
),
541-
542-
// Experimental Foundation Subprocess Copy
543-
.target(
544-
name: "_SubprocessCShims",
545-
swiftSettings: [
546-
.swiftLanguageMode(.v5)
547-
]
548-
),
549-
.target(
550-
name: "_Subprocess",
551-
dependencies: [
552-
"_SubprocessCShims",
553-
.product(name: "SystemPackage", package: "swift-system"),
554-
],
555-
swiftSettings: [
556-
.swiftLanguageMode(.v5),
557-
.define(
558-
"SYSTEM_PACKAGE_DARWIN",
559-
.when(platforms: [.macOS, .macCatalyst, .iOS, .watchOS, .tvOS, .visionOS])),
560-
.define("SYSTEM_PACKAGE"),
561-
]
562-
),
589+
)
563590
]
564591
)

0 commit comments

Comments
 (0)