diff --git a/examples/example_infos.bzl b/examples/example_infos.bzl index 9931517d6..5a6de99b7 100644 --- a/examples/example_infos.bzl +++ b/examples/example_infos.bzl @@ -149,6 +149,7 @@ _macos_single_bazel_version_test_examples = [ "xcmetrics_example", "tca_example", "symlink_example", + "yoga_example", ] _linux_single_bazel_version_test_examples = [] diff --git a/examples/yoga_example/BUILD.bazel b/examples/yoga_example/BUILD.bazel new file mode 100644 index 000000000..2eb696535 --- /dev/null +++ b/examples/yoga_example/BUILD.bazel @@ -0,0 +1,33 @@ +load("@bazel_gazelle//:def.bzl", "gazelle", "gazelle_binary") +load("@cgrindel_bazel_starlib//bzltidy:defs.bzl", "tidy") + +tidy( + name = "tidy", + targets = [ + ":update_build_files", + ], +) + +# MARK: - Gazelle + +# Ignore the Swift build folder +# gazelle:exclude .build + +gazelle_binary( + name = "gazelle_bin", + languages = [ + "@bazel_skylib_gazelle_plugin//bzl", + "@rules_swift_package_manager//gazelle", + ], +) + +gazelle( + name = "update_build_files", + data = [ + "@swift_deps_info//:swift_deps_index", + ], + extra_args = [ + "-swift_dependency_index=$(location @swift_deps_info//:swift_deps_index)", + ], + gazelle = ":gazelle_bin", +) diff --git a/examples/yoga_example/MODULE.bazel b/examples/yoga_example/MODULE.bazel new file mode 100644 index 000000000..f2f8538b6 --- /dev/null +++ b/examples/yoga_example/MODULE.bazel @@ -0,0 +1,59 @@ +bazel_dep( + name = "rules_swift_package_manager", + version = "0.0.0", +) +local_path_override( + module_name = "rules_swift_package_manager", + path = "../..", +) + +bazel_dep(name = "cgrindel_bazel_starlib", version = "0.23.0") +bazel_dep(name = "bazel_skylib", version = "1.7.1") + +# The apple_support bazel_dep must come before the rules_cc. +# https://github.com/bazelbuild/apple_support#incompatible-toolchain-resolution +bazel_dep(name = "apple_support", version = "1.17.1") +bazel_dep( + name = "rules_swift", + version = "2.3.1", + repo_name = "build_bazel_rules_swift", +) +bazel_dep( + name = "rules_apple", + version = "3.16.1", + repo_name = "build_bazel_rules_apple", +) + +bazel_dep( + name = "bazel_skylib_gazelle_plugin", + version = "1.7.1", + dev_dependency = True, +) +bazel_dep( + name = "gazelle", + version = "0.41.0", + dev_dependency = True, + repo_name = "bazel_gazelle", +) + +apple_cc_configure = use_extension( + "@apple_support//crosstool:setup.bzl", + "apple_cc_configure_extension", +) +use_repo(apple_cc_configure, "local_config_apple_cc") + +swift_deps = use_extension( + "@rules_swift_package_manager//:extensions.bzl", + "swift_deps", +) +swift_deps.from_package( + declare_swift_deps_info = True, + resolved = "//:Package.resolved", + swift = "//:Package.swift", +) +use_repo( + swift_deps, + "swift_deps_info", + "swift_package", + "swiftpkg_yoga", +) diff --git a/examples/yoga_example/Package.resolved b/examples/yoga_example/Package.resolved new file mode 100644 index 000000000..cdc1cc0f2 --- /dev/null +++ b/examples/yoga_example/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "yoga", + "kind" : "remoteSourceControl", + "location" : "https://github.com/facebook/yoga", + "state" : { + "revision" : "69b8934429702bd3ab06e8d6f709112a761b474b", + "version" : "3.1.0" + } + } + ], + "version" : 2 +} diff --git a/examples/yoga_example/Package.swift b/examples/yoga_example/Package.swift new file mode 100644 index 000000000..bd4bbbf43 --- /dev/null +++ b/examples/yoga_example/Package.swift @@ -0,0 +1,10 @@ +// swift-tools-version: 6.0 + +import PackageDescription + +let package = Package( + name: "YogaKitExample", + dependencies: [ + .package(url: "https://github.com/facebook/yoga.git", from: "3.1.0"), + ] +) diff --git a/examples/yoga_example/README.md b/examples/yoga_example/README.md new file mode 100644 index 000000000..f1cba21fd --- /dev/null +++ b/examples/yoga_example/README.md @@ -0,0 +1,4 @@ +# Yoga Example + +This example demonstrates support for clang, with a root public headers search paths. For example, the file +`external/swiftpkg_yoga/yoga/module.modulemap` will be duplicated when we have both `sources: ["yoga"],` and `publicHeadersPath: ".",` in `Package.swift`. Removing duplicate from the srcs read is useful in this case. diff --git a/examples/yoga_example/Tests/YogaTests/BUILD.bazel b/examples/yoga_example/Tests/YogaTests/BUILD.bazel new file mode 100644 index 000000000..1a8803aa0 --- /dev/null +++ b/examples/yoga_example/Tests/YogaTests/BUILD.bazel @@ -0,0 +1,12 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_test") + +swift_test( + name = "YogaTests", + srcs = [ + "YogaTests.swift", + ], + module_name = "YogaTests", + deps = [ + "@swiftpkg_yoga//:yoga", + ], +) diff --git a/examples/yoga_example/Tests/YogaTests/YogaTests.swift b/examples/yoga_example/Tests/YogaTests/YogaTests.swift new file mode 100644 index 000000000..36beac7b9 --- /dev/null +++ b/examples/yoga_example/Tests/YogaTests/YogaTests.swift @@ -0,0 +1,9 @@ +@testable import Yoga +import XCTest + +class YogaTests: XCTestCase { + func testSomething() { + let view = UIView() + view.flex.isEnabled = true + } +} diff --git a/examples/yoga_example/WORKSPACE b/examples/yoga_example/WORKSPACE new file mode 100644 index 000000000..d251ab7ba --- /dev/null +++ b/examples/yoga_example/WORKSPACE @@ -0,0 +1 @@ +# Intentionally blank: Using bzlmod diff --git a/examples/yoga_example/WORKSPACE.bzlmod b/examples/yoga_example/WORKSPACE.bzlmod new file mode 100644 index 000000000..8cf89c330 --- /dev/null +++ b/examples/yoga_example/WORKSPACE.bzlmod @@ -0,0 +1,2 @@ +# Intentionally blank +# This exists to force Bazel in bzlmod mode to be strict. diff --git a/examples/yoga_example/do_test b/examples/yoga_example/do_test new file mode 100755 index 000000000..85dd69b96 --- /dev/null +++ b/examples/yoga_example/do_test @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -o errexit -o nounset -o pipefail + +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd)" + +# Use the Bazel binary specified by the integration test. Otherise, fall back +# to bazel. +bazel="${BIT_BAZEL_BINARY:-bazel}" + +# Generate Swift external deps and update build files +"${bazel}" run //:tidy + +# Ensure that it builds and tests pass +"${bazel}" test //... diff --git a/swiftpkg/internal/clang_files.bzl b/swiftpkg/internal/clang_files.bzl index 1fe0790c1..1bbb66afa 100644 --- a/swiftpkg/internal/clang_files.bzl +++ b/swiftpkg/internal/clang_files.bzl @@ -250,7 +250,7 @@ def _collect_files( modulemap = None modulemap_orig_path = None - for orig_path in all_srcs: + for orig_path in depset(all_srcs).to_list(): path = _relativize(orig_path, relative_to) _root, ext = paths.split_extension(path) if lists.contains(_HEADER_EXTS, ext):