Skip to content

Commit f99a652

Browse files
committed
Merge pull request #149 from aciidb0mb3r/patch-9
Add support for empty source packages
2 parents 989f373 + a31d0e9 commit f99a652

File tree

8 files changed

+44
-13
lines changed

8 files changed

+44
-13
lines changed

Fixtures/InvalidLayouts/NoTargets/Package.swift

Whitespace-only changes.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import PackageDescription
2+
3+
let package = Package(
4+
name: "EmptyWithDependency",
5+
dependencies: [
6+
.Package(url: "../FooLib2", majorVersion: 1),
7+
])

Sources/Transmute/transmute().swift

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,25 @@
1010

1111
import PackageType
1212
import Utility
13+
import func libc.exit
1314

14-
public func transmute(packages: [Package]) throws -> ([Module], [Product]) {
15+
public func transmute(packages: [Package], rootdir: String) throws -> ([Module], [Product]) {
1516

1617
var products: [Product] = []
1718
var map: [Package: [Module]] = [:]
1819

1920
for package in packages {
20-
let modules = try package.modules()
21+
22+
let modules: [Module]
23+
do {
24+
modules = try package.modules()
25+
} catch Package.ModuleError.NoModules(let pkg) where pkg.path == rootdir {
26+
//Ignore and print warning if root package doesn't contain any sources
27+
print("warning: root package '\(pkg)' does not contain any sources")
28+
if packages.count == 1 { exit(0) } //Exit now if there is no more packages
29+
modules = []
30+
}
31+
2132
let testModules = try package.testModules()
2233
products += try package.products(modules, tests: testModules)
2334

Sources/swift-build/main.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ do {
4444
case .Build(let conf):
4545
let dirs = try directories()
4646
let packages = try fetch(dirs.root)
47-
let (modules, products) = try transmute(packages)
47+
let (modules, products) = try transmute(packages, rootdir: dirs.root)
4848
let yaml = try describe(dirs.build, conf, modules, products, Xcc: opts.Xcc, Xld: opts.Xld, Xswiftc: opts.Xswiftc)
4949
try build(YAMLPath: yaml, target: "default")
5050

Tests/Functional/TestInvalidLayouts.swift

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,6 @@ import func POSIX.unlink
1414

1515
class InvalidLayoutsTestCase: XCTestCase {
1616

17-
func testNoTargets() {
18-
fixture(name: "InvalidLayouts/NoTargets") { prefix in
19-
XCTAssertFileExists(prefix, "Package.swift")
20-
XCTAssertBuildFails(prefix)
21-
}
22-
}
23-
2417
func testMultipleRoots() {
2518
fixture(name: "InvalidLayouts/MultipleRoots1") { prefix in
2619
XCTAssertBuildFails(prefix)

Tests/Functional/TestMiscellaneous.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,25 @@ class MiscellaneousTestCase: XCTestCase {
3131
}
3232
}
3333

34+
func testPackageWithNoSources() {
35+
36+
// Tests a package with no source files
37+
38+
fixture(name: "Miscellaneous/Empty") { prefix in
39+
XCTAssertBuilds(prefix)
40+
}
41+
}
42+
43+
func testPackageWithNoSourcesButDependency() {
44+
45+
// Tests a package with no source files but dependency, dependency should build.
46+
47+
fixture(name: "Miscellaneous/ExactDependencies") { prefix in
48+
XCTAssertBuilds(prefix, "EmptyWithDependency")
49+
XCTAssertFileExists(prefix, "EmptyWithDependency/.build/debug/FooLib2.swiftmodule")
50+
}
51+
}
52+
3453
func testManifestExcludes1() {
3554

3655
// Tests exclude syntax where no target customization is specified

Tests/Functional/TestValidLayouts.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ extension DependencyResolutionTestCase {
145145
extension InvalidLayoutsTestCase {
146146
static var allTests : [(String, InvalidLayoutsTestCase -> () throws -> Void)] {
147147
return [
148-
("testNoTargets", testNoTargets),
149148
("testMultipleRoots", testMultipleRoots),
150149
("testInvalidLayout1", testInvalidLayout1),
151150
("testInvalidLayout2", testInvalidLayout2),
@@ -160,6 +159,8 @@ extension MiscellaneousTestCase {
160159
static var allTests : [(String, MiscellaneousTestCase -> () throws -> Void)] {
161160
return [
162161
("testPrintsSelectedDependencyVersion", testPrintsSelectedDependencyVersion),
162+
("testPackageWithNoSources", testPackageWithNoSources),
163+
("testPackageWithNoSourcesButDependency", testPackageWithNoSourcesButDependency),
163164
("testManifestExcludes1", testManifestExcludes1),
164165
("testManifestExcludes2", testManifestExcludes2),
165166
("testManifestExcludes3", testManifestExcludes3),

Tests/Transmute/ModuleTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ extension ModuleTests {
201201
let prefix = Path.join(prefix, "App")
202202
let manifest = try Manifest(path: prefix, baseURL: prefix)
203203
let packages = try get(manifest)
204-
let (modules, _) = try transmute(packages)
204+
let (modules, _) = try transmute(packages, rootdir: prefix)
205205

206206
XCTAssertEqual(modules.count, 3)
207207
XCTAssertEqual(recursiveDependencies(modules).count, 3)
@@ -212,7 +212,7 @@ extension ModuleTests {
212212
let prefix = Path.join(prefix, "App")
213213
let manifest = try Manifest(path: prefix, baseURL: prefix)
214214
let packages = try get(manifest)
215-
let (modules, _) = try transmute(packages)
215+
let (modules, _) = try transmute(packages, rootdir: prefix)
216216

217217
XCTAssertEqual(modules.count, 2)
218218
XCTAssertTrue(modules.first is CModule)

0 commit comments

Comments
 (0)