Skip to content

Commit 9d56b9a

Browse files
committed
Make get() return root package and external dependency packages
1 parent ba20201 commit 9d56b9a

File tree

4 files changed

+25
-20
lines changed

4 files changed

+25
-20
lines changed

Sources/Get/get().swift

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,22 @@ import Utility
1717
- Throws: Error.InvalidDependencyGraph
1818
- Returns: The modules that this manifest requires building
1919
*/
20-
public func get(manifest: Manifest, manifestParser: (path: String, url: String) throws -> Manifest) throws -> [Package] {
20+
public func get(manifest: Manifest, manifestParser: (path: String, url: String) throws -> Manifest) throws -> (rootPackage: Package, externalPackages:[Package]) {
2121
let dir = Path.join(manifest.path.parentDirectory, "Packages")
2222
let box = PackagesDirectory(prefix: dir, manifestParser: manifestParser)
2323

2424
//TODO don't lose the dependency information during the Fetcher process!
25-
26-
let pkgs = try box.recursivelyFetch(manifest.dependencies) + [Package(manifest: manifest, url: manifest.path.parentDirectory)]
25+
26+
let rootPackage = Package(manifest: manifest, url: manifest.path.parentDirectory)
27+
let extPackages = try box.recursivelyFetch(manifest.dependencies)
28+
29+
let pkgs = extPackages + [rootPackage]
30+
2731
for pkg in pkgs {
2832
pkg.dependencies = pkg.manifest.package.dependencies.map{ dep in pkgs.pick{ dep.url == $0.url }! }
2933
}
30-
return pkgs
34+
35+
return (rootPackage, extPackages)
3136
}
3237

3338
//TODO normalize urls eg http://github.com -> https://github.com

Sources/Transmute/transmute().swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,19 @@ import PackageType
1212
import Utility
1313
import func libc.exit
1414

15-
public func transmute(packages: [Package], rootdir: String) throws -> (modules: [Module], externalModules: [Module], products: [Product]) {
15+
public func transmute(rootPackage: Package, externalPackages: [Package]) throws -> (modules: [Module], externalModules: [Module], products: [Product]) {
1616

1717
var products: [Product] = []
1818
var map: [Package: [Module]] = [:]
19+
20+
let packages = externalPackages + [rootPackage]
1921

2022
for package in packages {
2123

2224
let modules: [Module]
2325
do {
2426
modules = try package.modules()
25-
} catch Package.ModuleError.NoModules(let pkg) where pkg.path == rootdir {
27+
} catch Package.ModuleError.NoModules(let pkg) where pkg === rootPackage {
2628
//Ignore and print warning if root package doesn't contain any sources
2729
print("warning: root package '\(pkg)' does not contain any sources")
2830
if packages.count == 1 { exit(0) } //Exit now if there is no more packages
@@ -66,10 +68,8 @@ public func transmute(packages: [Package], rootdir: String) throws -> (modules:
6668
// ensure modules depend on the modules of any dependent packages
6769
fillModuleGraph(packages, modulesForPackage: { map[$0]! })
6870

69-
let depPackages = packages.filter{ $0.path != rootdir }
70-
7171
let modules = recursiveDependencies(packages.flatMap{ map[$0] ?? [] })
72-
let extModules = recursiveDependencies(depPackages.flatMap{ map[$0] ?? [] })
72+
let externalModules = recursiveDependencies(externalPackages.flatMap{ map[$0] ?? [] })
7373

74-
return (modules, extModules, products)
74+
return (modules, externalModules, products)
7575
}

Sources/swift-build/main.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,16 @@ do {
5858
return try Manifest(path: path, baseURL: baseURL, swiftc: Toolchain.swiftc, libdir: libdir)
5959
}
6060

61-
func fetch(root: String) throws -> [Package] {
61+
func fetch(root: String) throws -> (rootPackage: Package, externalPackages:[Package]) {
6262
let manifest = try parseManifest(path: root, baseURL: root)
6363
return try get(manifest, manifestParser: parseManifest)
6464
}
6565

6666
switch mode {
6767
case .Build(let conf):
6868
let dirs = try directories()
69-
let packages = try fetch(dirs.root)
70-
let (modules, externalModules, products) = try transmute(packages, rootdir: dirs.root)
69+
let (rootPackage, externalPackages) = try fetch(dirs.root)
70+
let (modules, externalModules, products) = try transmute(rootPackage, externalPackages: externalPackages)
7171
let yaml = try describe(dirs.build, conf, modules, products, Xcc: opts.Xcc, Xld: opts.Xld, Xswiftc: opts.Xswiftc)
7272
try build(YAMLPath: yaml, target: "default")
7373

@@ -92,15 +92,15 @@ do {
9292

9393
case .GenerateXcodeproj(let outpath):
9494
let dirs = try directories()
95-
let packages = try fetch(dirs.root)
96-
let (modules, externalModules, products) = try transmute(packages, rootdir: dirs.root)
95+
let (rootPackage, externalPackages) = try fetch(dirs.root)
96+
let (modules, externalModules, products) = try transmute(rootPackage, externalPackages: externalPackages)
9797

9898
let swiftModules = modules.flatMap{ $0 as? SwiftModule }
9999
let externalSwiftModules = externalModules.flatMap{ $0 as? SwiftModule }
100100

101101
let projectName: String
102102
let dstdir: String
103-
let packageName = packages.last!.name //FIXME coincidental dependency on order
103+
let packageName = rootPackage.name
104104

105105
switch outpath {
106106
case let outpath? where outpath.hasSuffix(".xcodeproj"):

Tests/Transmute/ModuleTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ extension ModuleTests {
200200
fixture(name: "Miscellaneous/PackageType") { prefix in
201201
let prefix = Path.join(prefix, "App")
202202
let manifest = try Manifest(path: prefix)
203-
let packages = try get(manifest, manifestParser: { try Manifest(path: $0, baseURL: $1) })
204-
let (modules, _, _) = try transmute(packages, rootdir: prefix)
203+
let (rootPackage, externalPackages) = try get(manifest, manifestParser: { try Manifest(path: $0, baseURL: $1) })
204+
let (modules, _, _) = try transmute(rootPackage, externalPackages: externalPackages)
205205

206206
XCTAssertEqual(modules.count, 3)
207207
XCTAssertEqual(recursiveDependencies(modules).count, 3)
@@ -211,8 +211,8 @@ extension ModuleTests {
211211
fixture(name: "ModuleMaps/Direct") { prefix in
212212
let prefix = Path.join(prefix, "App")
213213
let manifest = try Manifest(path: prefix)
214-
let packages = try get(manifest, manifestParser: { try Manifest(path: $0, baseURL: $1) })
215-
let (modules, _, _) = try transmute(packages, rootdir: prefix)
214+
let (rootPackage, externalPackages) = try get(manifest, manifestParser: { try Manifest(path: $0, baseURL: $1) })
215+
let (modules, _, _) = try transmute(rootPackage, externalPackages: externalPackages)
216216

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

0 commit comments

Comments
 (0)