Skip to content

Commit 0d6c64c

Browse files
committed
Add Dependencies in project group
1 parent e22800c commit 0d6c64c

File tree

6 files changed

+44
-24
lines changed

6 files changed

+44
-24
lines changed

Sources/Get/get().swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ public func get(manifest: Manifest, manifestParser: (path: String, url: String)
2121
let dir = Path.join(manifest.path.parentDirectory, "Packages")
2222
let box = PackagesDirectory(prefix: dir, manifestParser: manifestParser)
2323

24-
//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)]
24+
let pkgs = try box.recursivelyFetch(manifest.dependencies) + [Package(manifest: manifest, url: manifest.path.parentDirectory, isSourcePackage: true)]
2725
for pkg in pkgs {
2826
pkg.dependencies = pkg.manifest.package.dependencies.map{ dep in pkgs.pick{ dep.url == $0.url }! }
2927
}

Sources/PackageType/Module.swift

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,16 @@ public class Module {
2222
*/
2323
public let name: String
2424
public var dependencies: [Module] /// in build order
25+
public var isExternalDependency: Bool
2526

26-
public init(name: String) {
27+
public init(name: String, isExternalDependency: Bool) {
2728
self.name = name
2829
self.dependencies = []
30+
self.isExternalDependency = isExternalDependency
31+
}
32+
33+
convenience public init(name: String) {
34+
self.init(name: name, isExternalDependency: false)
2935
}
3036

3137
public var recursiveDependencies: [Module] {
@@ -48,9 +54,9 @@ public func ==(lhs: Module, rhs: Module) -> Bool {
4854
public class SwiftModule: Module {
4955
public let sources: Sources
5056

51-
public init(name: String, sources: Sources) {
57+
public init(name: String, sources: Sources, isExternalDependency: Bool) {
5258
self.sources = sources
53-
super.init(name: name)
59+
super.init(name: name, isExternalDependency: isExternalDependency)
5460
}
5561

5662
public enum ModuleType {
@@ -68,16 +74,16 @@ public class SwiftModule: Module {
6874
public class CModule: Module {
6975
public let path: String
7076

71-
public init(name: String, path: String) {
77+
public init(name: String, path: String, isExternalDependency: Bool) {
7278
self.path = path
73-
super.init(name: name)
79+
super.init(name: name, isExternalDependency: isExternalDependency)
7480
}
7581
}
7682

7783
public class TestModule: SwiftModule {
7884

7985
public init(basename: String, sources: Sources) {
80-
super.init(name: "\(basename).testsuite", sources: sources)
86+
super.init(name: "\(basename).testsuite", sources: sources, isExternalDependency: false)
8187
}
8288

8389
public var basename: String {

Sources/PackageType/Package.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,20 @@ public class Package {
1414
public let url: String
1515
public let path: String
1616
public let name: String
17+
public let isSourcePackage: Bool
1718
public var dependencies: [Package] = []
1819
public let manifest: Manifest
1920

20-
public init(manifest: Manifest, url: String) {
21+
convenience public init(manifest: Manifest, url: String) {
22+
self.init(manifest: manifest, url: url, isSourcePackage: false)
23+
}
24+
25+
public init(manifest: Manifest, url: String, isSourcePackage: Bool) {
2126
self.manifest = manifest
2227
self.url = url
2328
self.path = manifest.path.parentDirectory
2429
self.name = manifest.package.name ?? Package.nameForURL(url)
30+
self.isSourcePackage = isSourcePackage
2531
}
2632

2733
public enum Error: ErrorProtocol {

Sources/Transmute/Package+modules.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ extension Package {
1616
func modules() throws -> [Module] {
1717

1818
guard !Path.join(path, "module.modulemap").isFile else {
19-
return [CModule(name: name, path: path)]
19+
return [CModule(name: name, path: path, isExternalDependency: !isSourcePackage)]
2020
}
2121

2222
let srcroot = try sourceRoot()
@@ -38,7 +38,7 @@ extension Package {
3838
let modules: [Module]
3939
if maybeModules.isEmpty {
4040
do {
41-
modules = [SwiftModule(name: self.name, sources: try sourcify(srcroot))]
41+
modules = [SwiftModule(name: self.name, sources: try sourcify(srcroot), isExternalDependency: !isSourcePackage)]
4242
} catch Module.Error.NoSources {
4343
throw ModuleError.NoModules(self)
4444
}
@@ -50,7 +50,7 @@ extension Package {
5050
} else {
5151
name = sources.root.basename
5252
}
53-
return SwiftModule(name: name, sources: sources)
53+
return SwiftModule(name: name, sources: sources, isExternalDependency: !isSourcePackage)
5454
}
5555
}
5656

Sources/Xcodeproj/Module+PBXProj.swift

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,17 @@ import struct Utility.Toolchain
2727
import struct Utility.Path
2828
import PackageType
2929

30-
let rootObjectReference = "__RootObject_"
31-
let rootBuildConfigurationListReference = "___RootConfs_"
32-
let rootBuildConfigurationReference = "_______Debug_"
33-
let rootGroupReference = "___RootGroup_"
34-
let productsGroupReference = "____Products_"
35-
let sourcesGroupReference = "_____Sources_"
36-
let testsGroupReference = "_______Tests_"
37-
let linkPhaseFileRefPrefix = "_LinkFileRef_"
38-
let sourceGroupFileRefPrefix = "__PBXFileRef_"
39-
let compilePhaseFileRefPrefix = "__src_cc_ref_"
30+
let rootObjectReference = "____RootObject_"
31+
let rootBuildConfigurationListReference = "_____RootConfs_"
32+
let rootBuildConfigurationReference = "_________Debug_"
33+
let rootGroupReference = "_____RootGroup_"
34+
let productsGroupReference = "______Products_"
35+
let sourcesGroupReference = "_______Sources_"
36+
let dependenciesGroupReference = "__Dependencies_"
37+
let testsGroupReference = "_________Tests_"
38+
let linkPhaseFileRefPrefix = "___LinkFileRef_"
39+
let sourceGroupFileRefPrefix = "____PBXFileRef_"
40+
let compilePhaseFileRefPrefix = "____src_cc_ref_"
4041

4142
extension Module {
4243
var dependencyReference: String { return "__Dependency_\(c99name)" }

Sources/Xcodeproj/pbxproj().swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import Utility
1818
public func pbxproj(package package: Package, modules: [SwiftModule], products _: [Product], printer print: (String) -> Void) {
1919

2020
let srcroot = package.path
21+
let depModules = modules.filter{ $0.isExternalDependency }
2122
let nontests = modules.filter{ !($0 is TestModule) }
2223
let tests = modules.filter{ $0 is TestModule }
2324

@@ -49,7 +50,7 @@ public func pbxproj(package package: Package, modules: [SwiftModule], products _
4950
////// root group
5051
print(" \(rootGroupReference) = {")
5152
print(" isa = PBXGroup;")
52-
print(" children = (\(sourcesGroupReference), \(testsGroupReference), \(productsGroupReference));")
53+
print(" children = (\(sourcesGroupReference), \(dependenciesGroupReference), \(testsGroupReference), \(productsGroupReference));")
5354
print(" sourceTree = '<group>';")
5455
print(" };")
5556

@@ -149,6 +150,14 @@ public func pbxproj(package package: Package, modules: [SwiftModule], products _
149150
print(" sourceTree = '<group>';")
150151
print(" };")
151152

153+
////// “Dependencies” group
154+
print(" \(dependenciesGroupReference) = {")
155+
print(" isa = PBXGroup;")
156+
print(" children = (" + depModules.map{ $0.groupReference }.joined(separator: ", ") + ");")
157+
print(" name = Dependencies;")
158+
print(" sourceTree = '<group>';")
159+
print(" };")
160+
152161
////// “Tests” group
153162
print(" \(testsGroupReference) = {")
154163
print(" isa = PBXGroup;")

0 commit comments

Comments
 (0)