Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Documentation/PackageDescription.md
Original file line number Diff line number Diff line change
Expand Up @@ -624,7 +624,7 @@ static func testTarget(
/// Creates a system library target.
///
/// Use system library targets to adapt a library installed on the system to work with Swift packages.
/// Such libraries are generally installed by system package managers (such as Homebrew and apt-get)
/// Such libraries are generally installed by system package managers (such as Homebrew, MacPorts and apt-get)
/// and exposed to Swift packages by providing a `modulemap` file along with other metadata such as the library's `pkgConfig` name.
///
/// - Parameters:
Expand Down
2 changes: 1 addition & 1 deletion Documentation/Usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ print(options)
```

To `import Clibgit`, the package manager requires that the libgit2 library has
been installed by a system packager (eg. `apt`, `brew`, `yum`, `nuget`, etc.). The
been installed by a system packager (eg. `apt`, `brew`, `port`, `yum`, `nuget`, etc.). The
following files from the libgit2 system-package are of interest:

/usr/local/lib/libgit2.dylib # .so on Linux
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@

- ``apt(_:)``
- ``brew(_:)``
- ``macPorts(_:)``
- ``nuget(_:)``
- ``yum(_:)``
14 changes: 14 additions & 0 deletions Sources/PackageDescription/PackageDescription.swift
Original file line number Diff line number Diff line change
Expand Up @@ -479,6 +479,9 @@ public enum SystemPackageProvider {

/// Packages installable by the HomeBrew package manager.
case brewItem([String])
/// Packages installable by the MacPorts package manager.
@available(_PackageDescription, introduced: 999.0)
case macPortsItem([String])
/// Packages installable by the apt-get package manager.
case aptItem([String])
/// Packages installable by the Yellowdog Updated, Modified (YUM) package manager.
Expand All @@ -497,6 +500,17 @@ public enum SystemPackageProvider {
public static func brew(_ packages: [String]) -> SystemPackageProvider {
return .brewItem(packages)
}

/// Creates a system package provider with a list of installable packages
/// for people who use the MacPorts package manager on macOS.
///
/// - Parameter packages: The list of package names.
///
/// - Returns: A package provider.
@available(_PackageDescription, introduced: 999.0)
public static func macPorts(_ packages: [String]) -> SystemPackageProvider {
return .macPortsItem(packages)
}

/// Creates a system package provider with a list of installable packages
/// for users of the apt-get package manager on Ubuntu Linux.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ enum Serialization {

enum SystemPackageProvider: Codable {
case brew([String])
case macPorts([String])
case apt([String])
case yum([String])
case nuget([String])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,7 @@ extension Serialization.SystemPackageProvider {
init(_ provider: PackageDescription.SystemPackageProvider) {
switch provider {
case .brewItem(let values): self = .brew(values)
case .macPortsItem(let values): self = .macPorts(values)
case .aptItem(let values): self = .apt(values)
case .yumItem(let values): self = .yum(values)
case .nugetItem(let values): self = .nuget(values)
Expand Down
2 changes: 1 addition & 1 deletion Sources/PackageDescription/Target.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1023,7 +1023,7 @@ public final class Target {
///
/// Use system library targets to adapt a library installed on the system to
/// work with Swift packages. Such libraries are generally installed by
/// system package managers (such as Homebrew and apt-get) and exposed to
/// system package managers (such as Homebrew, MacPorts and apt-get) and exposed to
/// Swift packages by providing a `modulemap` file along with other metadata
/// such as the library's `pkgConfig` name.
///
Expand Down
2 changes: 2 additions & 0 deletions Sources/PackageLoading/ManifestJSONParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,8 @@ extension SystemPackageProviderDescription {
switch provider {
case .brew(let values):
self = .brew(values)
case .macPorts(let values):
self = .macPorts(values)
case .apt(let values):
self = .apt(values)
case .yum(let values):
Expand Down
8 changes: 8 additions & 0 deletions Sources/PackageLoading/Target+PkgConfig.swift
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ extension SystemPackageProviderDescription {
switch self {
case .brew(let packages):
return " brew install \(packages.joined(separator: " "))\n"
case .macPorts(let packages):
return " port install \(packages.joined(separator: " "))\n"
case .apt(let packages):
return " apt-get install \(packages.joined(separator: " "))\n"
case .yum(let packages):
Expand All @@ -165,6 +167,10 @@ extension SystemPackageProviderDescription {
if case .darwin = platform {
return true
}
case .macPorts:
if case .darwin = platform {
return true
}
case .apt:
if case .linux(.debian) = platform {
return true
Expand Down Expand Up @@ -209,6 +215,8 @@ extension SystemPackageProviderDescription {
}
}
return try packages.map({ try AbsolutePath(validating: brewPrefix).appending(components: "opt", $0, "lib", "pkgconfig") })
case .macPorts:
return [try AbsolutePath(validating: "/opt/local/lib/pkgconfig")]
case .apt:
return []
case .yum:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,15 @@
/// Represents system package providers.
public enum SystemPackageProviderDescription: Hashable, Codable, Sendable {
case brew([String])
case macPorts([String])
case apt([String])
case yum([String])
case nuget([String])
}

extension SystemPackageProviderDescription {
private enum CodingKeys: String, CodingKey {
case brew, apt, yum, nuget
case brew, macPorts, apt, yum, nuget
}

public func encode(to encoder: Encoder) throws {
Expand All @@ -29,6 +30,9 @@ extension SystemPackageProviderDescription {
case let .brew(a1):
var unkeyedContainer = container.nestedUnkeyedContainer(forKey: .brew)
try unkeyedContainer.encode(a1)
case let .macPorts(a1):
var unkeyedContainer = container.nestedUnkeyedContainer(forKey: .macPorts)
try unkeyedContainer.encode(a1)
case let .apt(a1):
var unkeyedContainer = container.nestedUnkeyedContainer(forKey: .apt)
try unkeyedContainer.encode(a1)
Expand All @@ -51,6 +55,10 @@ extension SystemPackageProviderDescription {
var unkeyedValues = try values.nestedUnkeyedContainer(forKey: key)
let a1 = try unkeyedValues.decode([String].self)
self = .brew(a1)
case .macPorts:
var unkeyedValues = try values.nestedUnkeyedContainer(forKey: key)
let a1 = try unkeyedValues.decode([String].self)
self = .macPorts(a1)
case .apt:
var unkeyedValues = try values.nestedUnkeyedContainer(forKey: key)
let a1 = try unkeyedValues.decode([String].self)
Expand Down
3 changes: 3 additions & 0 deletions Sources/PackageModel/ManifestSourceGeneration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,9 @@ fileprivate extension SourceCodeFragment {
case .brew(let names):
let params = [SourceCodeFragment(strings: names)]
self.init(enum: "brew", subnodes: params)
case .macPorts(let names):
let params = [SourceCodeFragment(strings: names)]
self.init(enum: "macPorts", subnodes: params)
case .apt(let names):
let params = [SourceCodeFragment(strings: names)]
self.init(enum: "apt", subnodes: params)
Expand Down
1 change: 1 addition & 0 deletions Tests/BuildTests/BuildPlanTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3633,6 +3633,7 @@ final class BuildPlanTests: XCTestCase {
pkgConfig: "BTarget",
providers: [
.brew(["BTarget"]),
.macPorts(["BTarget"]),
.apt(["BTarget"]),
.yum(["BTarget"]),
]
Expand Down
3 changes: 3 additions & 0 deletions Tests/PackageLoadingTests/PkgConfigTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ class PkgConfigTests: XCTestCase {
pkgConfig: "Foo",
providers: [
.brew(["libFoo"]),
.macPorts(["libFoo"]),
.apt(["libFoo-dev"]),
.yum(["libFoo-devel"]),
.nuget(["Foo"]),
Expand All @@ -65,6 +66,8 @@ class PkgConfigTests: XCTestCase {
switch result.provider {
case .brew(let names)?:
XCTAssertEqual(names, ["libFoo"])
case .macPorts(let names)?:
XCTAssertEqual(names, ["libFoo"])
case .apt(let names)?:
XCTAssertEqual(names, ["libFoo-dev"])
case .yum(let names)?:
Expand Down