Skip to content

Commit 3ca0917

Browse files
Update init template to follow the 'package init' changes
1 parent bc8025c commit 3ca0917

File tree

3 files changed

+36
-16
lines changed

3 files changed

+36
-16
lines changed

Sources/CartonKit/Model/Template.swift

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ extension Template {
9292
) throws {
9393
try fileSystem.writeFileContents(project.path.appending(component: "Package.swift")) {
9494
var content = """
95-
// swift-tools-version:5.6
95+
// swift-tools-version:5.8
9696
import PackageDescription
9797
let package = Package(
9898
name: "\(project.name)",\n
@@ -110,12 +110,18 @@ extension Template {
110110
targets: [
111111
.executableTarget(
112112
name: "\(project.name)",
113+
dependencies: [
114+
"\(project.name)Library",
115+
\(targetDepencencies.map(\.description).joined(separator: ",\n"))
116+
]),
117+
.target(
118+
name: "\(project.name)Library",
113119
dependencies: [
114120
\(targetDepencencies.map(\.description).joined(separator: ",\n"))
115121
]),
116122
.testTarget(
117123
name: "\(project.name)Tests",
118-
dependencies: ["\(project.name)"]),
124+
dependencies: ["\(project.name)Library"]),
119125
]
120126
)
121127
"""
@@ -135,8 +141,15 @@ extension Templates {
135141
project: Project,
136142
_ terminal: InteractiveWriter
137143
) async throws {
144+
// FIXME: We now create an intermediate library target to work around
145+
// an issue that prevents us from testing executable targets on Wasm.
146+
// See https://github.com/swiftwasm/swift/issues/5375
138147
try fileSystem.changeCurrentWorkingDirectory(to: project.path)
139-
try await createPackage(type: .executable, fileSystem: fileSystem, project: project, terminal)
148+
try await createPackage(
149+
type: .library, fileSystem: fileSystem,
150+
project: Project(name: project.name + "Library", path: project.path, inPlace: true),
151+
terminal
152+
)
140153
try createManifest(
141154
fileSystem: fileSystem,
142155
project: project,
@@ -151,6 +164,17 @@ extension Templates {
151164
],
152165
terminal
153166
)
167+
let sources = project.path.appending(component: "Sources")
168+
let executableTarget = sources.appending(component: project.name)
169+
// Create the executable target
170+
try fileSystem.createDirectory(executableTarget)
171+
try fileSystem.writeFileContents(executableTarget.appending(component: "main.swift")) {
172+
"""
173+
import \(project.name)Library
174+
print("Hello, world!")
175+
"""
176+
.write(to: $0)
177+
}
154178
}
155179
}
156180
}
@@ -166,7 +190,7 @@ extension Templates {
166190
) async throws {
167191
try fileSystem.changeCurrentWorkingDirectory(to: project.path)
168192
try await createPackage(
169-
type: .executable,
193+
type: .library,
170194
fileSystem: fileSystem,
171195
project: project,
172196
terminal)

Sources/SwiftToolchain/Toolchain.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -390,13 +390,11 @@ public final class Toolchain {
390390
}
391391

392392
public func runPackageInit(name: String, type: PackageType, inPlace: Bool) async throws {
393-
var initArgs = [
393+
let initArgs = [
394394
swiftPath.pathString, "package", "init",
395395
"--type", type.rawValue,
396+
"--name", name
396397
]
397-
if !inPlace {
398-
initArgs.append(contentsOf: ["--name", name])
399-
}
400398
try await TSCBasic.Process.run(initArgs, terminal)
401399
}
402400

Tests/CartonCommandTests/InitCommandTests.swift

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,24 @@ final class InitCommandTests: XCTestCase {
3232

3333
// Confirm that the files are actually in the folder
3434
XCTAssertTrue(packageDirectory.ls().contains("Package.swift"), "Package.swift does not exist")
35-
XCTAssertTrue(packageDirectory.ls().contains("README.md"), "README.md does not exist")
3635
XCTAssertTrue(packageDirectory.ls().contains(".gitignore"), ".gitignore does not exist")
3736
XCTAssertTrue(packageDirectory.ls().contains("Sources"), "Sources does not exist")
3837
XCTAssertTrue(
3938
packageDirectory.ls().contains("Sources/\(package)"),
4039
"Sources/\(package) does not exist"
4140
)
4241
XCTAssertTrue(
43-
packageDirectory.ls().contains("Sources/\(package)/\(package).swift"),
44-
"Sources/\(package)/\(package).swift does not exist"
42+
packageDirectory.ls().contains("Sources/\(package)/main.swift"),
43+
"Sources/\(package)/main.swift does not exist"
4544
)
4645
XCTAssertTrue(packageDirectory.ls().contains("Tests"), "Tests does not exist")
4746
XCTAssertTrue(
48-
packageDirectory.ls().contains("Tests/\(package)Tests"),
49-
"Tests/\(package)Tests does not exist"
47+
packageDirectory.ls().contains("Tests/\(package)LibraryTests"),
48+
"Tests/\(package)LibraryTests does not exist"
5049
)
5150
XCTAssertTrue(
52-
packageDirectory.ls().contains("Tests/\(package)Tests/\(package)Tests.swift"),
53-
"Tests/\(package)Tests/\(package)Tests.swift does not exist"
51+
packageDirectory.ls().contains("Tests/\(package)LibraryTests/\(package)LibraryTests.swift"),
52+
"Tests/\(package)LibraryTests/\(package)LibraryTests.swift does not exist"
5453
)
5554
}
5655
}
@@ -67,7 +66,6 @@ final class InitCommandTests: XCTestCase {
6766

6867
// Confirm that the files are actually in the folder
6968
XCTAssertTrue(packageDirectory.ls().contains("Package.swift"), "Package.swift does not exist")
70-
XCTAssertTrue(packageDirectory.ls().contains("README.md"), "README.md does not exist")
7169
XCTAssertTrue(packageDirectory.ls().contains(".gitignore"), ".gitignore does not exist")
7270
XCTAssertTrue(packageDirectory.ls().contains("Sources"), "Sources does not exist")
7371
XCTAssertTrue(

0 commit comments

Comments
 (0)