Package@swift-5.8.swift 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. // swift-tools-version:5.8
  2. //===----------------------------------------------------------------------===//
  3. //
  4. // This source file is part of the Swift Argument Parser open source project
  5. //
  6. // Copyright (c) 2020 Apple Inc. and the Swift project authors
  7. // Licensed under Apache License v2.0 with Runtime Library Exception
  8. //
  9. // See https://swift.org/LICENSE.txt for license information
  10. //
  11. //===----------------------------------------------------------------------===//
  12. import PackageDescription
  13. var package = Package(
  14. name: "swift-argument-parser",
  15. products: [
  16. .library(
  17. name: "ArgumentParser",
  18. targets: ["ArgumentParser"]),
  19. .plugin(
  20. name: "GenerateDoccReference",
  21. targets: ["GenerateDoccReference"]),
  22. .plugin(
  23. name: "GenerateManual",
  24. targets: ["GenerateManual"]),
  25. ],
  26. dependencies: [],
  27. targets: [
  28. // Core Library
  29. .target(
  30. name: "ArgumentParser",
  31. dependencies: ["ArgumentParserToolInfo"],
  32. exclude: ["CMakeLists.txt"],
  33. swiftSettings: [.enableExperimentalFeature("StrictConcurrency")]),
  34. .target(
  35. name: "ArgumentParserTestHelpers",
  36. dependencies: ["ArgumentParser", "ArgumentParserToolInfo"],
  37. exclude: ["CMakeLists.txt"]),
  38. .target(
  39. name: "ArgumentParserToolInfo",
  40. exclude: ["CMakeLists.txt"]),
  41. // Plugins
  42. .plugin(
  43. name: "GenerateDoccReference",
  44. capability: .command(
  45. intent: .custom(
  46. verb: "generate-docc-reference",
  47. description:
  48. "Generate a documentation reference for a specified target."),
  49. permissions: [
  50. .writeToPackageDirectory(
  51. reason: "This command generates documentation.")
  52. ]),
  53. dependencies: ["generate-docc-reference"]),
  54. .plugin(
  55. name: "GenerateManual",
  56. capability: .command(
  57. intent: .custom(
  58. verb: "generate-manual",
  59. description: "Generate a manual entry for a specified target.")),
  60. dependencies: ["generate-manual"]),
  61. // Examples
  62. .executableTarget(
  63. name: "roll",
  64. dependencies: ["ArgumentParser"],
  65. path: "Examples/roll"),
  66. .executableTarget(
  67. name: "math",
  68. dependencies: ["ArgumentParser"],
  69. path: "Examples/math"),
  70. .executableTarget(
  71. name: "repeat",
  72. dependencies: ["ArgumentParser"],
  73. path: "Examples/repeat"),
  74. .executableTarget(
  75. name: "color",
  76. dependencies: ["ArgumentParser"],
  77. path: "Examples/color"),
  78. // Tools
  79. .executableTarget(
  80. name: "generate-docc-reference",
  81. dependencies: ["ArgumentParser", "ArgumentParserToolInfo"],
  82. path: "Tools/generate-docc-reference"),
  83. .executableTarget(
  84. name: "generate-manual",
  85. dependencies: ["ArgumentParser", "ArgumentParserToolInfo"],
  86. path: "Tools/generate-manual"),
  87. // Tests
  88. .testTarget(
  89. name: "ArgumentParserEndToEndTests",
  90. dependencies: ["ArgumentParser", "ArgumentParserTestHelpers"],
  91. exclude: ["CMakeLists.txt"]),
  92. .testTarget(
  93. name: "ArgumentParserExampleTests",
  94. dependencies: ["ArgumentParserTestHelpers"],
  95. exclude: ["Snapshots"],
  96. resources: [.copy("CountLinesTest.txt")]),
  97. .testTarget(
  98. name: "ArgumentParserGenerateDoccReferenceTests",
  99. dependencies: ["ArgumentParserTestHelpers"],
  100. exclude: ["Snapshots"]),
  101. .testTarget(
  102. name: "ArgumentParserGenerateManualTests",
  103. dependencies: ["ArgumentParserTestHelpers"],
  104. exclude: ["Snapshots"]),
  105. .testTarget(
  106. name: "ArgumentParserPackageManagerTests",
  107. dependencies: ["ArgumentParser", "ArgumentParserTestHelpers"],
  108. exclude: ["CMakeLists.txt"]),
  109. .testTarget(
  110. name: "ArgumentParserToolInfoTests",
  111. dependencies: ["ArgumentParserToolInfo"],
  112. exclude: ["Examples"]),
  113. .testTarget(
  114. name: "ArgumentParserUnitTests",
  115. dependencies: ["ArgumentParser", "ArgumentParserTestHelpers"],
  116. exclude: ["CMakeLists.txt", "Snapshots"]),
  117. ]
  118. )
  119. #if os(macOS)
  120. package.targets.append(contentsOf: [
  121. // Examples
  122. .executableTarget(
  123. name: "count-lines",
  124. dependencies: ["ArgumentParser"],
  125. path: "Examples/count-lines"),
  126. // Tools
  127. .executableTarget(
  128. name: "changelog-authors",
  129. dependencies: ["ArgumentParser"],
  130. path: "Tools/changelog-authors"),
  131. ])
  132. #endif
  133. for target in package.targets {
  134. switch target.type {
  135. case .regular, .test, .executable:
  136. var settings = target.swiftSettings ?? []
  137. // https://github.com/swiftlang/swift-evolution/blob/main/proposals/0444-member-import-visibility.md
  138. settings.append(.enableUpcomingFeature("MemberImportVisibility"))
  139. target.swiftSettings = settings
  140. default:
  141. break // not applicable
  142. }
  143. }