in Sources/PackageLoading/PackageBuilder.swift [914:988]
func buildSettings(for target: TargetDescription?, targetRoot: AbsolutePath) throws -> BuildSettings.AssignmentTable {
var table = BuildSettings.AssignmentTable()
guard let target = target else { return table }
// Process each setting.
for setting in target.settings {
let decl: BuildSettings.Declaration
// Compute appropriate declaration for the setting.
switch setting.name {
case .headerSearchPath:
switch setting.tool {
case .c, .cxx:
decl = .HEADER_SEARCH_PATHS
case .swift, .linker:
throw InternalError("unexpected tool for setting type \(setting)")
}
// Ensure that the search path is contained within the package.
let subpath = try RelativePath(validating: setting.value[0])
guard targetRoot.appending(subpath).isDescendantOfOrEqual(to: packagePath) else {
throw ModuleError.invalidHeaderSearchPath(subpath.pathString)
}
case .define:
switch setting.tool {
case .c, .cxx:
decl = .GCC_PREPROCESSOR_DEFINITIONS
case .swift:
decl = .SWIFT_ACTIVE_COMPILATION_CONDITIONS
case .linker:
throw InternalError("unexpected tool for setting type \(setting)")
}
case .linkedLibrary:
switch setting.tool {
case .c, .cxx, .swift:
throw InternalError("unexpected tool for setting type \(setting)")
case .linker:
decl = .LINK_LIBRARIES
}
case .linkedFramework:
switch setting.tool {
case .c, .cxx, .swift:
throw InternalError("unexpected tool for setting type \(setting)")
case .linker:
decl = .LINK_FRAMEWORKS
}
case .unsafeFlags:
switch setting.tool {
case .c:
decl = .OTHER_CFLAGS
case .cxx:
decl = .OTHER_CPLUSPLUSFLAGS
case .swift:
decl = .OTHER_SWIFT_FLAGS
case .linker:
decl = .OTHER_LDFLAGS
}
}
// Create an assignment for this setting.
var assignment = BuildSettings.Assignment()
assignment.value = setting.value
assignment.conditions = buildConditions(from: setting.condition)
// Finally, add the assignment to the assignment table.
table.add(assignment, for: decl)
}
return table
}