From 488aea4878489075d9f7d4a17de376ca0de38a5f Mon Sep 17 00:00:00 2001 From: John Flanagan <91548783+jflan-dd@users.noreply.github.com> Date: Mon, 22 Apr 2024 16:53:05 -0500 Subject: [PATCH] fix: follow symlinks when searching for xcframework directories (#983) One of the packages we depend on puts its XCFramework behind a symlink for some reason. Without this change rspm doesn't follow the symlink to find the contents of the actual framework. mimic behavior of [_list_files_under](https://github.com/cgrindel/rules_swift_package_manager/blob/85a704df7fb25d861ba8e54a584c08e07a7de748/swiftpkg/internal/repository_files.bzl#L44-L45) --- .bazelrc | 4 +- .github/workflows/ci.yml | 2 + examples/example_infos.bzl | 1 + examples/symlink_example/.bazelrc | 8 + examples/symlink_example/BUILD.bazel | 37 +++++ examples/symlink_example/MODULE.bazel | 54 +++++++ examples/symlink_example/Package.swift | 10 ++ examples/symlink_example/README.md | 4 + .../Sources/ImportFramework/BUILD.bazel | 9 ++ .../Sources/ImportFramework/Import.swift | 3 + .../Tests/ImportFrameworkTests/BUILD.bazel | 17 +++ .../ImportFrameworkTests.swift | 8 + examples/symlink_example/WORKSPACE | 1 + examples/symlink_example/WORKSPACE.bzlmod | 2 + examples/symlink_example/do_test | 16 ++ .../symlink_example/swift_deps_index.json | 34 +++++ .../EmptyFramework.xcframework | 1 + .../EmptyFramework.xcframework/Info.plist | 59 ++++++++ .../EmptyFramework.framework/EmptyFramework | Bin 0 -> 51744 bytes .../Headers/EmptyFramework.h | 18 +++ .../EmptyFramework.framework/Info.plist | Bin 0 -> 755 bytes .../Modules/module.modulemap | 6 + .../_CodeSignature/CodeResources | 124 +++++++++++++++ .../EmptyFramework.framework/EmptyFramework | Bin 0 -> 100576 bytes .../Headers/EmptyFramework.h | 18 +++ .../EmptyFramework.framework/Info.plist | Bin 0 -> 735 bytes .../Modules/module.modulemap | 6 + .../_CodeSignature/CodeResources | 124 +++++++++++++++ .../EmptyFramework.framework/EmptyFramework | Bin 0 -> 100768 bytes .../Headers/EmptyFramework.h | 18 +++ .../Modules/module.modulemap | 6 + .../Resources/Info.plist | 46 ++++++ .../Versions/A/EmptyFramework | Bin 0 -> 100768 bytes .../Versions/A/Headers/EmptyFramework.h | 18 +++ .../Versions/A/Modules/module.modulemap | 6 + .../Versions/A/Resources/Info.plist | 46 ++++++ .../Versions/A/_CodeSignature/CodeResources | 142 ++++++++++++++++++ .../Versions/Current/EmptyFramework | Bin 0 -> 100768 bytes .../Versions/Current/Headers/EmptyFramework.h | 18 +++ .../Versions/Current/Modules/module.modulemap | 6 + .../Versions/Current/Resources/Info.plist | 46 ++++++ .../Current/_CodeSignature/CodeResources | 142 ++++++++++++++++++ .../third_party/empty_framework/Package.swift | 13 ++ swiftpkg/internal/repository_files.bzl | 4 +- 44 files changed, 1074 insertions(+), 3 deletions(-) create mode 100644 examples/symlink_example/.bazelrc create mode 100644 examples/symlink_example/BUILD.bazel create mode 100644 examples/symlink_example/MODULE.bazel create mode 100644 examples/symlink_example/Package.swift create mode 100644 examples/symlink_example/README.md create mode 100644 examples/symlink_example/Sources/ImportFramework/BUILD.bazel create mode 100644 examples/symlink_example/Sources/ImportFramework/Import.swift create mode 100644 examples/symlink_example/Tests/ImportFrameworkTests/BUILD.bazel create mode 100644 examples/symlink_example/Tests/ImportFrameworkTests/ImportFrameworkTests.swift create mode 100644 examples/symlink_example/WORKSPACE create mode 100644 examples/symlink_example/WORKSPACE.bzlmod create mode 100755 examples/symlink_example/do_test create mode 100644 examples/symlink_example/swift_deps_index.json create mode 120000 examples/symlink_example/third_party/empty_framework/EmptyFramework.xcframework create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/Info.plist create mode 100755 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/EmptyFramework create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Headers/EmptyFramework.h create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Info.plist create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Modules/module.modulemap create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/_CodeSignature/CodeResources create mode 100755 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64_x86_64-simulator/EmptyFramework.framework/EmptyFramework create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64_x86_64-simulator/EmptyFramework.framework/Headers/EmptyFramework.h create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64_x86_64-simulator/EmptyFramework.framework/Info.plist create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64_x86_64-simulator/EmptyFramework.framework/Modules/module.modulemap create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64_x86_64-simulator/EmptyFramework.framework/_CodeSignature/CodeResources create mode 100755 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/EmptyFramework create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Headers/EmptyFramework.h create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Modules/module.modulemap create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Resources/Info.plist create mode 100755 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/EmptyFramework create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Headers/EmptyFramework.h create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Modules/module.modulemap create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Resources/Info.plist create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/_CodeSignature/CodeResources create mode 100755 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/EmptyFramework create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Headers/EmptyFramework.h create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Modules/module.modulemap create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Resources/Info.plist create mode 100644 examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/_CodeSignature/CodeResources create mode 100644 examples/symlink_example/third_party/empty_framework/Package.swift diff --git a/.bazelrc b/.bazelrc index 4331f29ca..6a4e3408a 100644 --- a/.bazelrc +++ b/.bazelrc @@ -1,7 +1,7 @@ # To update these lines, execute # `bazel run @rules_bazel_integration_test//tools:update_deleted_packages` -build --deleted_packages=bzlmod/workspace,bzlmod/workspace/Sources/MyExecutable,bzlmod/workspace/Sources/MyLibrary,bzlmod/workspace/Sources/System,bzlmod/workspace/Tests/MyLibraryTests,examples/firebase_example,examples/firebase_example/abtesting,examples/firebase_example/abtesting/SharedApp,examples/firebase_example/analytics/AnalyticsExample,examples/firebase_example/appdistribution,examples/firebase_example/appdistribution/AppDistributionExample,examples/firebase_example/appdistribution/AppDistributionTests,examples/firebase_example/crashlytics,examples/grpc_example,examples/grpc_example/aaa_test,examples/grpc_example/protos,examples/grpc_example/protos/echo_service,examples/grpc_example/protos/echo_service/requests,examples/grpc_example/protos/echo_service/responses,examples/grpc_example/sources,examples/grpc_example/sources/client,examples/grpc_example/sources/server,examples/grpc_example/sources/test,examples/grpc_package_example,examples/grpc_package_example/aaa_test,examples/grpc_package_example/protos,examples/grpc_package_example/protos/echo_service,examples/grpc_package_example/sources,examples/grpc_package_example/sources/client,examples/grpc_package_example/sources/server,examples/grpc_package_example/sources/test,examples/http_archive_ext_deps,examples/http_archive_ext_deps/Sources/MyDequeModule,examples/http_archive_ext_deps/Sources/PrintStuff,examples/http_archive_ext_deps/Tests/MyDequeModuleTests,examples/http_archive_ext_deps/third_party,examples/interesting_deps,examples/ios_sim,examples/ios_sim/Sources/Foo,examples/ios_sim/Tests/FooTests,examples/ios_sim/third-party/swift-cmark,examples/lottie_ios_example,examples/lottie_ios_example/LottieExample,examples/lottie_ios_example/LottieExampleUITest,examples/messagekit_example,examples/messagekit_example/Sources,examples/messagekit_example/UITests,examples/nimble_example,examples/nimble_example/Sources/NimbleExample,examples/objc_code,examples/phone_number_kit,examples/phone_number_kit/Tests/PhoneNumberKitTests,examples/pkg_manifest_minimal,examples/pkg_manifest_minimal/Sources/MyExecutable,examples/pkg_manifest_minimal/Sources/MyLibrary,examples/pkg_manifest_minimal/Tests/MyLibraryTests,examples/pkg_manifest_minimal/third_party,examples/resources_example,examples/resources_example/Sources/MyApp,examples/resources_example/Tests/MyAppTests,examples/resources_example/Tests/MyAppUITests,examples/resources_example/third_party,examples/shake_ios_example,examples/shake_ios_example/ShakeIOSExample,examples/shake_ios_example/ShakeIOSExampleUITests,examples/snapkit_example,examples/soto_example,examples/soto_example/Tests/SotoTests,examples/stripe_example,examples/stripe_example/PaymentSheet/PaymentSheetExample,examples/stripe_example/PaymentSheet/PaymentSheetUITest,examples/tca_example,examples/tca_example/Sources,examples/tca_example/Tests,examples/vapor_example,examples/vapor_example/Sources/App,examples/vapor_example/Sources/Run,examples/vapor_example/Tests/AppTests,examples/vapor_example/swift,examples/xcmetrics_example -query --deleted_packages=bzlmod/workspace,bzlmod/workspace/Sources/MyExecutable,bzlmod/workspace/Sources/MyLibrary,bzlmod/workspace/Sources/System,bzlmod/workspace/Tests/MyLibraryTests,examples/firebase_example,examples/firebase_example/abtesting,examples/firebase_example/abtesting/SharedApp,examples/firebase_example/analytics/AnalyticsExample,examples/firebase_example/appdistribution,examples/firebase_example/appdistribution/AppDistributionExample,examples/firebase_example/appdistribution/AppDistributionTests,examples/firebase_example/crashlytics,examples/grpc_example,examples/grpc_example/aaa_test,examples/grpc_example/protos,examples/grpc_example/protos/echo_service,examples/grpc_example/protos/echo_service/requests,examples/grpc_example/protos/echo_service/responses,examples/grpc_example/sources,examples/grpc_example/sources/client,examples/grpc_example/sources/server,examples/grpc_example/sources/test,examples/grpc_package_example,examples/grpc_package_example/aaa_test,examples/grpc_package_example/protos,examples/grpc_package_example/protos/echo_service,examples/grpc_package_example/sources,examples/grpc_package_example/sources/client,examples/grpc_package_example/sources/server,examples/grpc_package_example/sources/test,examples/http_archive_ext_deps,examples/http_archive_ext_deps/Sources/MyDequeModule,examples/http_archive_ext_deps/Sources/PrintStuff,examples/http_archive_ext_deps/Tests/MyDequeModuleTests,examples/http_archive_ext_deps/third_party,examples/interesting_deps,examples/ios_sim,examples/ios_sim/Sources/Foo,examples/ios_sim/Tests/FooTests,examples/ios_sim/third-party/swift-cmark,examples/lottie_ios_example,examples/lottie_ios_example/LottieExample,examples/lottie_ios_example/LottieExampleUITest,examples/messagekit_example,examples/messagekit_example/Sources,examples/messagekit_example/UITests,examples/nimble_example,examples/nimble_example/Sources/NimbleExample,examples/objc_code,examples/phone_number_kit,examples/phone_number_kit/Tests/PhoneNumberKitTests,examples/pkg_manifest_minimal,examples/pkg_manifest_minimal/Sources/MyExecutable,examples/pkg_manifest_minimal/Sources/MyLibrary,examples/pkg_manifest_minimal/Tests/MyLibraryTests,examples/pkg_manifest_minimal/third_party,examples/resources_example,examples/resources_example/Sources/MyApp,examples/resources_example/Tests/MyAppTests,examples/resources_example/Tests/MyAppUITests,examples/resources_example/third_party,examples/shake_ios_example,examples/shake_ios_example/ShakeIOSExample,examples/shake_ios_example/ShakeIOSExampleUITests,examples/snapkit_example,examples/soto_example,examples/soto_example/Tests/SotoTests,examples/stripe_example,examples/stripe_example/PaymentSheet/PaymentSheetExample,examples/stripe_example/PaymentSheet/PaymentSheetUITest,examples/tca_example,examples/tca_example/Sources,examples/tca_example/Tests,examples/vapor_example,examples/vapor_example/Sources/App,examples/vapor_example/Sources/Run,examples/vapor_example/Tests/AppTests,examples/vapor_example/swift,examples/xcmetrics_example +build --deleted_packages=bzlmod/workspace,bzlmod/workspace/Sources/MyExecutable,bzlmod/workspace/Sources/MyLibrary,bzlmod/workspace/Sources/System,bzlmod/workspace/Tests/MyLibraryTests,examples/firebase_example,examples/firebase_example/abtesting,examples/firebase_example/abtesting/SharedApp,examples/firebase_example/analytics/AnalyticsExample,examples/firebase_example/appdistribution,examples/firebase_example/appdistribution/AppDistributionExample,examples/firebase_example/appdistribution/AppDistributionTests,examples/firebase_example/crashlytics,examples/grpc_example,examples/grpc_example/aaa_test,examples/grpc_example/protos,examples/grpc_example/protos/echo_service,examples/grpc_example/protos/echo_service/requests,examples/grpc_example/protos/echo_service/responses,examples/grpc_example/sources,examples/grpc_example/sources/client,examples/grpc_example/sources/server,examples/grpc_example/sources/test,examples/grpc_package_example,examples/grpc_package_example/aaa_test,examples/grpc_package_example/protos,examples/grpc_package_example/protos/echo_service,examples/grpc_package_example/sources,examples/grpc_package_example/sources/client,examples/grpc_package_example/sources/server,examples/grpc_package_example/sources/test,examples/http_archive_ext_deps,examples/http_archive_ext_deps/Sources/MyDequeModule,examples/http_archive_ext_deps/Sources/PrintStuff,examples/http_archive_ext_deps/Tests/MyDequeModuleTests,examples/http_archive_ext_deps/third_party,examples/interesting_deps,examples/ios_sim,examples/ios_sim/Sources/Foo,examples/ios_sim/Tests/FooTests,examples/ios_sim/third-party/swift-cmark,examples/lottie_ios_example,examples/lottie_ios_example/LottieExample,examples/lottie_ios_example/LottieExampleUITest,examples/messagekit_example,examples/messagekit_example/Sources,examples/messagekit_example/UITests,examples/nimble_example,examples/nimble_example/Sources/NimbleExample,examples/objc_code,examples/phone_number_kit,examples/phone_number_kit/Tests/PhoneNumberKitTests,examples/pkg_manifest_minimal,examples/pkg_manifest_minimal/Sources/MyExecutable,examples/pkg_manifest_minimal/Sources/MyLibrary,examples/pkg_manifest_minimal/Tests/MyLibraryTests,examples/pkg_manifest_minimal/third_party,examples/resources_example,examples/resources_example/Sources/MyApp,examples/resources_example/Tests/MyAppTests,examples/resources_example/Tests/MyAppUITests,examples/resources_example/third_party,examples/shake_ios_example,examples/shake_ios_example/ShakeIOSExample,examples/shake_ios_example/ShakeIOSExampleUITests,examples/snapkit_example,examples/soto_example,examples/soto_example/Tests/SotoTests,examples/stripe_example,examples/stripe_example/PaymentSheet/PaymentSheetExample,examples/stripe_example/PaymentSheet/PaymentSheetUITest,examples/symlink_example,examples/symlink_example/Sources/ImportFramework,examples/symlink_example/Tests/ImportFrameworkTests,examples/tca_example,examples/tca_example/Sources,examples/tca_example/Tests,examples/vapor_example,examples/vapor_example/Sources/App,examples/vapor_example/Sources/Run,examples/vapor_example/Tests/AppTests,examples/vapor_example/swift,examples/xcmetrics_example +query --deleted_packages=bzlmod/workspace,bzlmod/workspace/Sources/MyExecutable,bzlmod/workspace/Sources/MyLibrary,bzlmod/workspace/Sources/System,bzlmod/workspace/Tests/MyLibraryTests,examples/firebase_example,examples/firebase_example/abtesting,examples/firebase_example/abtesting/SharedApp,examples/firebase_example/analytics/AnalyticsExample,examples/firebase_example/appdistribution,examples/firebase_example/appdistribution/AppDistributionExample,examples/firebase_example/appdistribution/AppDistributionTests,examples/firebase_example/crashlytics,examples/grpc_example,examples/grpc_example/aaa_test,examples/grpc_example/protos,examples/grpc_example/protos/echo_service,examples/grpc_example/protos/echo_service/requests,examples/grpc_example/protos/echo_service/responses,examples/grpc_example/sources,examples/grpc_example/sources/client,examples/grpc_example/sources/server,examples/grpc_example/sources/test,examples/grpc_package_example,examples/grpc_package_example/aaa_test,examples/grpc_package_example/protos,examples/grpc_package_example/protos/echo_service,examples/grpc_package_example/sources,examples/grpc_package_example/sources/client,examples/grpc_package_example/sources/server,examples/grpc_package_example/sources/test,examples/http_archive_ext_deps,examples/http_archive_ext_deps/Sources/MyDequeModule,examples/http_archive_ext_deps/Sources/PrintStuff,examples/http_archive_ext_deps/Tests/MyDequeModuleTests,examples/http_archive_ext_deps/third_party,examples/interesting_deps,examples/ios_sim,examples/ios_sim/Sources/Foo,examples/ios_sim/Tests/FooTests,examples/ios_sim/third-party/swift-cmark,examples/lottie_ios_example,examples/lottie_ios_example/LottieExample,examples/lottie_ios_example/LottieExampleUITest,examples/messagekit_example,examples/messagekit_example/Sources,examples/messagekit_example/UITests,examples/nimble_example,examples/nimble_example/Sources/NimbleExample,examples/objc_code,examples/phone_number_kit,examples/phone_number_kit/Tests/PhoneNumberKitTests,examples/pkg_manifest_minimal,examples/pkg_manifest_minimal/Sources/MyExecutable,examples/pkg_manifest_minimal/Sources/MyLibrary,examples/pkg_manifest_minimal/Tests/MyLibraryTests,examples/pkg_manifest_minimal/third_party,examples/resources_example,examples/resources_example/Sources/MyApp,examples/resources_example/Tests/MyAppTests,examples/resources_example/Tests/MyAppUITests,examples/resources_example/third_party,examples/shake_ios_example,examples/shake_ios_example/ShakeIOSExample,examples/shake_ios_example/ShakeIOSExampleUITests,examples/snapkit_example,examples/soto_example,examples/soto_example/Tests/SotoTests,examples/stripe_example,examples/stripe_example/PaymentSheet/PaymentSheetExample,examples/stripe_example/PaymentSheet/PaymentSheetUITest,examples/symlink_example,examples/symlink_example/Sources/ImportFramework,examples/symlink_example/Tests/ImportFrameworkTests,examples/tca_example,examples/tca_example/Sources,examples/tca_example/Tests,examples/vapor_example,examples/vapor_example/Sources/App,examples/vapor_example/Sources/Run,examples/vapor_example/Tests/AppTests,examples/vapor_example/swift,examples/xcmetrics_example # Import Shared settings import %workspace%/shared.bazelrc diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9624ad383..8a57d30ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,6 +75,8 @@ jobs: runner: macos-13 - test: '@@//examples:stripe_example_test_bazel_.bazelversion' runner: macos-13 + - test: '@@//examples:symlink_example_test_bazel_.bazelversion' + runner: macos-13 - test: '@@//examples:tca_example_test_bazel_.bazelversion' runner: macos-13 - test: '@@//examples:vapor_example_legacy_test_bazel_.bazelversion' diff --git a/examples/example_infos.bzl b/examples/example_infos.bzl index dfedba5dc..58d23c67e 100644 --- a/examples/example_infos.bzl +++ b/examples/example_infos.bzl @@ -154,6 +154,7 @@ _macos_single_bazel_version_test_examples = [ "stripe_example", "xcmetrics_example", "tca_example", + "symlink_example", ] _linux_single_bazel_version_test_examples = [] diff --git a/examples/symlink_example/.bazelrc b/examples/symlink_example/.bazelrc new file mode 100644 index 000000000..e9769fc7b --- /dev/null +++ b/examples/symlink_example/.bazelrc @@ -0,0 +1,8 @@ +# Import Shared settings +import %workspace%/../../shared.bazelrc + +# Import CI settings. +import %workspace%/../../ci.bazelrc + +# Try to import a local.rc file; typically, written by CI +try-import %workspace%/../../local.bazelrc diff --git a/examples/symlink_example/BUILD.bazel b/examples/symlink_example/BUILD.bazel new file mode 100644 index 000000000..d922d26bd --- /dev/null +++ b/examples/symlink_example/BUILD.bazel @@ -0,0 +1,37 @@ +load("@bazel_gazelle//:def.bzl", "gazelle", "gazelle_binary") +load("@cgrindel_bazel_starlib//bzltidy:defs.bzl", "tidy") +load("@rules_swift_package_manager//swiftpkg:defs.bzl", "swift_update_packages") + +tidy( + name = "tidy", + targets = [ + ":swift_update_pkgs", + ":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", + gazelle = ":gazelle_bin", +) + +swift_update_packages( + name = "swift_update_pkgs", + gazelle = ":gazelle_bin", + generate_swift_deps_for_workspace = False, + package_manifest = "Package.swift", + update_bzlmod_stanzas = True, +) diff --git a/examples/symlink_example/MODULE.bazel b/examples/symlink_example/MODULE.bazel new file mode 100644 index 000000000..6448b9b83 --- /dev/null +++ b/examples/symlink_example/MODULE.bazel @@ -0,0 +1,54 @@ +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.20.2") +bazel_dep(name = "bazel_skylib", version = "1.5.0") +bazel_dep(name = "apple_support", version = "1.15.1") +bazel_dep( + name = "rules_swift", + version = "1.17.0", + repo_name = "build_bazel_rules_swift", +) +bazel_dep( + name = "rules_apple", + version = "3.4.0", + repo_name = "build_bazel_rules_apple", +) + +bazel_dep( + name = "bazel_skylib_gazelle_plugin", + version = "1.5.0", + dev_dependency = True, +) +bazel_dep( + name = "gazelle", + version = "0.36.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 START +swift_deps = use_extension( + "@rules_swift_package_manager//:extensions.bzl", + "swift_deps", +) +swift_deps.from_file( + deps_index = "//:swift_deps_index.json", +) +use_repo( + swift_deps, + "swiftpkg_empty_framework", +) +# swift_deps END diff --git a/examples/symlink_example/Package.swift b/examples/symlink_example/Package.swift new file mode 100644 index 000000000..da92484fa --- /dev/null +++ b/examples/symlink_example/Package.swift @@ -0,0 +1,10 @@ +// swift-tools-version: 5.7 + +import PackageDescription + +let package = Package( + name: "symlink_example", + dependencies: [ + .package(path: "third_party/empty_framework"), + ] +) diff --git a/examples/symlink_example/README.md b/examples/symlink_example/README.md new file mode 100644 index 000000000..4f5877801 --- /dev/null +++ b/examples/symlink_example/README.md @@ -0,0 +1,4 @@ +# Symlink to XCFramework + +This example demonstrates using an external package that contains an XCFramework that is +dependended on through a symlink. diff --git a/examples/symlink_example/Sources/ImportFramework/BUILD.bazel b/examples/symlink_example/Sources/ImportFramework/BUILD.bazel new file mode 100644 index 000000000..99203452e --- /dev/null +++ b/examples/symlink_example/Sources/ImportFramework/BUILD.bazel @@ -0,0 +1,9 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "ImportFramework", + srcs = ["Import.swift"], + module_name = "ImportFramework", + visibility = ["//visibility:public"], + deps = ["@swiftpkg_empty_framework//:EmptyFramework"], +) diff --git a/examples/symlink_example/Sources/ImportFramework/Import.swift b/examples/symlink_example/Sources/ImportFramework/Import.swift new file mode 100644 index 000000000..919d3cdd7 --- /dev/null +++ b/examples/symlink_example/Sources/ImportFramework/Import.swift @@ -0,0 +1,3 @@ +import EmptyFramework + +func getFrameworkVersion() -> Double { EmptyFrameworkVersionNumber } diff --git a/examples/symlink_example/Tests/ImportFrameworkTests/BUILD.bazel b/examples/symlink_example/Tests/ImportFrameworkTests/BUILD.bazel new file mode 100644 index 000000000..204638c56 --- /dev/null +++ b/examples/symlink_example/Tests/ImportFrameworkTests/BUILD.bazel @@ -0,0 +1,17 @@ +load("@build_bazel_rules_apple//apple:ios.bzl", "ios_unit_test") +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "ImportFrameworkTestsLib", + testonly = True, + srcs = ["ImportFrameworkTests.swift"], + module_name = "ImportFrameworkTests", + tags = ["manual"], + deps = ["//Sources/ImportFramework"], +) + +ios_unit_test( + name = "ImportFrameworkTests", + minimum_os_version = "15.0", + deps = [":ImportFrameworkTestsLib"], +) diff --git a/examples/symlink_example/Tests/ImportFrameworkTests/ImportFrameworkTests.swift b/examples/symlink_example/Tests/ImportFrameworkTests/ImportFrameworkTests.swift new file mode 100644 index 000000000..71ff49af9 --- /dev/null +++ b/examples/symlink_example/Tests/ImportFrameworkTests/ImportFrameworkTests.swift @@ -0,0 +1,8 @@ +import XCTest +@testable import ImportFramework + +final class ImportFrameworkTests: XCTestCase { + func testVersionNumber() throws { + XCTAssertEqual(getFrameworkVersion(), 1.0) + } +} diff --git a/examples/symlink_example/WORKSPACE b/examples/symlink_example/WORKSPACE new file mode 100644 index 000000000..d251ab7ba --- /dev/null +++ b/examples/symlink_example/WORKSPACE @@ -0,0 +1 @@ +# Intentionally blank: Using bzlmod diff --git a/examples/symlink_example/WORKSPACE.bzlmod b/examples/symlink_example/WORKSPACE.bzlmod new file mode 100644 index 000000000..8cf89c330 --- /dev/null +++ b/examples/symlink_example/WORKSPACE.bzlmod @@ -0,0 +1,2 @@ +# Intentionally blank +# This exists to force Bazel in bzlmod mode to be strict. diff --git a/examples/symlink_example/do_test b/examples/symlink_example/do_test new file mode 100755 index 000000000..204191a89 --- /dev/null +++ b/examples/symlink_example/do_test @@ -0,0 +1,16 @@ +#!/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 +"${bazel}" run //:swift_update_pkgs + +# Ensure that it builds and tests pass +"${bazel}" test //... diff --git a/examples/symlink_example/swift_deps_index.json b/examples/symlink_example/swift_deps_index.json new file mode 100644 index 000000000..9f3ccad5b --- /dev/null +++ b/examples/symlink_example/swift_deps_index.json @@ -0,0 +1,34 @@ +{ + "direct_dep_identities": [ + "empty_framework" + ], + "modules": [ + { + "name": "EmptyFramework", + "c99name": "EmptyFramework", + "src_type": "binary", + "label": "@swiftpkg_empty_framework//:EmptyFramework.rspm", + "package_identity": "empty_framework", + "product_memberships": [ + "EmptyFramework" + ] + } + ], + "products": [ + { + "identity": "empty_framework", + "name": "EmptyFramework", + "type": "library", + "label": "@swiftpkg_empty_framework//:EmptyFramework" + } + ], + "packages": [ + { + "name": "swiftpkg_empty_framework", + "identity": "empty_framework", + "local": { + "path": "third_party/empty_framework" + } + } + ] +} \ No newline at end of file diff --git a/examples/symlink_example/third_party/empty_framework/EmptyFramework.xcframework b/examples/symlink_example/third_party/empty_framework/EmptyFramework.xcframework new file mode 120000 index 000000000..48d9b2b63 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/EmptyFramework.xcframework @@ -0,0 +1 @@ +Framework/EmptyFramework.xcframework \ No newline at end of file diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/Info.plist b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/Info.plist new file mode 100644 index 000000000..e81d49e4b --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/Info.plist @@ -0,0 +1,59 @@ + + + + + AvailableLibraries + + + BinaryPath + EmptyFramework.framework/EmptyFramework + LibraryIdentifier + ios-arm64 + LibraryPath + EmptyFramework.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + + + BinaryPath + EmptyFramework.framework/Versions/A/EmptyFramework + LibraryIdentifier + macos-arm64_x86_64 + LibraryPath + EmptyFramework.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + macos + + + BinaryPath + EmptyFramework.framework/EmptyFramework + LibraryIdentifier + ios-arm64_x86_64-simulator + LibraryPath + EmptyFramework.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/EmptyFramework b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/EmptyFramework new file mode 100755 index 0000000000000000000000000000000000000000..d37196f42667670042539130579f144c2be9b339 GIT binary patch literal 51744 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 literal 0 HcmV?d00001 diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Headers/EmptyFramework.h b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Headers/EmptyFramework.h new file mode 100644 index 000000000..1fc8b0732 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Headers/EmptyFramework.h @@ -0,0 +1,18 @@ +// +// EmptyFramework.h +// EmptyFramework +// +// Created by John Flanagan on 3/27/24. +// + +#import + +//! Project version number for EmptyFramework. +FOUNDATION_EXPORT double EmptyFrameworkVersionNumber; + +//! Project version string for EmptyFramework. +FOUNDATION_EXPORT const unsigned char EmptyFrameworkVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Info.plist b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..c5d243e9664eabce2603475ebf8d7143d88d19ea GIT binary patch literal 755 zcmY*WOLEgd5Yl;TKv0aPHLUGiOuh&R>|n zn9iVu#q6b}%ged^O76<)+O_qK&8>~=H*Rj-x~rk=UO<^q!}^d~WM7#e4dsjFy}&XU zk;xHZwqp{@Z;%1CEe$OuT<_p_KM1aW%A-C@WUqmZ|QCe(a79i0g$} zCt;spGwhH}U>)ltJRs`W39BnfRT{rwm~{^jMs;1)S_l!?klmm z+pL6}q&g{Mld`dfR-2UuISi;vj44sX4(?G#eM-Co>3&HPcN)a%mQ2SVm)-EHSGGIS zP)@f^{$-zGi~pZec6mW9*IHFYsZE{8WqYdlfR{Q6ihwE>B%vi1iUmRFeY$-I0R)e?o7gpXceoT+;Hun! zd&_;`zHnc;AKV|12J2uOJOq!y3orr!cn98tkKi--2EK!z;5YaS=U@uX!!%rmdH4v* dum&4Yg9c>KhKJCD0XI1iOe1$Mj&Xo*{sF|*=h6TG literal 0 HcmV?d00001 diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Modules/module.modulemap b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Modules/module.modulemap new file mode 100644 index 000000000..86a63983c --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module EmptyFramework { + umbrella header "EmptyFramework.h" + export * + + module * { export * } +} diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/_CodeSignature/CodeResources b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/_CodeSignature/CodeResources new file mode 100644 index 000000000..0b8bfd654 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64/EmptyFramework.framework/_CodeSignature/CodeResources @@ -0,0 +1,124 @@ + + + + + files + + Headers/EmptyFramework.h + + 8KcTm9VLO04UKk27BoCXjUBoXcw= + + Info.plist + + 8QTtoMFvMJKC1aWZMpblz0f6SrA= + + Modules/module.modulemap + + eCTVrvp3JCa9icnpx4FzUblr6ok= + + + files2 + + Headers/EmptyFramework.h + + hash2 + + sUQLLK3Kg4nccQguqVYFMmazB/ESCJmOJrskcvN/UL8= + + + Modules/module.modulemap + + hash2 + + +gw9s82nnQaO2oHse3x5lKuWZh9CS9RBDTAFedzc8VE= + + + + rules + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64_x86_64-simulator/EmptyFramework.framework/EmptyFramework b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64_x86_64-simulator/EmptyFramework.framework/EmptyFramework new file mode 100755 index 0000000000000000000000000000000000000000..67794c10fb3cb85f013de9ec9a4db4127aee6afd GIT binary patch literal 100576 zcmeI*drVYU9>DQ41Bk`Z)>LVWQpdG1QtP07q%3Ler2@Vv5F~a|qmuzIf-o~MGo%9= znVLXs+N7@-ZB2uX8!V} -Ojy0SJ~-A$7Q+s1@H%rx1)V;^gF18j=>JD1CAiXmw> z*<|xQ;Wy{}?m73|IiHz-f5YEK&;3a$<#Z^OE`5qphIEG#^0Gj#xujQ02IJTCh=u?H z2q1s}0tg_000IagfB*srAbw+~e>JiGM(Gl1F88fS!qyDM}(`RW;Kt`soYY6#wo8e!r(fh5G(C;f|C^c9596OIou3NT* zo=+I^Vt>Xmq9K3)0tg_000IagfB*srAbE|I6)sYW@GrPqO!&dD4EEQX|(~{c@si z+14sem;OEpd7|U+*g+j{$r_zEDW~-d0s6=T5?%>?kJPCf3AfWKL6>y4W=t%o4h1}W zYa0AP&vYtv(VOym=hxX^q&(eS;p%diw<&d?}`tP)Mo75^~iViYY%1poaegM zbKCn{kDe`AxIQy`&w-^28gpxpIG0>p{pWuj>{&c~VaL1O%PL=a_4?_yQ)j%PkG`$x zPrW)YQ12}Brrq4%yT7%4@cav#o`2xvZ1WlIa~3~d-qw^z?^@(}v+wc`9esu7m2(F_ zKk(R2<3@33Yg6WrpWgXW-*c(IEYDe1ayq~Dy@DejA6vPo^KfimeeVtd*WWQ+(=Q*; zJU!O6_%s9%KmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0;re<|?E$n{bAKkWKnu&X%|cj$rq*ZcOdk-A6HZzO!a$|7&2o=j@S%z2tz*5S0L zeZHs}i%zah-mm|O$vHhr&Q+?4PhH{jRfmF+$qjF{pJCsm_mgAYvgvbflJNOTHkWQK zD%?DNR>Qs}ZufSc(2J#MI1A6pl$tNSp1OPD`q&C1+~|+i<`xASqbSx3y(ZE~=8 zeD}k%Cw^c2$9Vc1H~(@e^+CDjmPnUS&V^R!lUl}((UkjTY`uRyFHOE<);aWE`n@>T z=gHT@p>mre;oOG0DjnNeB2hEodD64HMKW0=ZK)h_mGt_4!;G2L%~5|SCD$!mLeD1*d9goZ8PO0x009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_KdSp|$$D{{&!$~IOMJe5DaxZLfQ>syL8R3=?tvo2#|*PpDad$;6k?a)(G z>)Ca!_KeNpoBp`%W;jw83MyT!Emhz{ZSvCJCdJ;R&4DU2tnS?w4c7(ts1?(9OO^C? zdB~7m|G(VMr`G?^{3LtdnJ4XsDK&D<)h{RNmTkw&|L>ErJkfD@?4XXfWR1?7lvBSO zt2})`das1ON9xp#gxhJApi4SiGbR>PhXS6xH4XltXF8R-=uLUO^Xu#{Ql9RvaCN!M zaswHwTh2cdalKvjycb0k6Ztm~h-`YNS{)J7?KX7uk z`Hc2Ciytp + +//! Project version number for EmptyFramework. +FOUNDATION_EXPORT double EmptyFrameworkVersionNumber; + +//! Project version string for EmptyFramework. +FOUNDATION_EXPORT const unsigned char EmptyFrameworkVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64_x86_64-simulator/EmptyFramework.framework/Info.plist b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/ios-arm64_x86_64-simulator/EmptyFramework.framework/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..bdc751fd7b08bc6e71f220673583efff16d5ce9d GIT binary patch literal 735 zcmZ9I&2G~`5XX0xuL6Z^n?gUJr35HcLYAEpI3RJTok*by4Yk`)RK;?fO|oRywrr;m zcmZxa04F$dK}a0A@di8qNL)A|#3R5uwUxqNX6FB&-|Wt|0?wjXRlkuLz(XU^ux)O3F4-1*tL`PqdF7nd$AUoI?Pxq7XzVw3#(fbn+CaeK_8o93vp$-G`! zA9!s}4Z2Uc9|-EjTeQo3&nDBESAIs_LF}|RJtS7!vXylh4Q;ZRbymHOZ!kBOyb}(0 zXc)}H?ew*&4G5tPLV;&O& zv1z7obGs^klDV|v2*!sy#kF!#yR}8VW?2OBuoB8yPyMiOlR4KH%99RvJmp`@ysfBK zrPkOmHAQ{1D0g7>p6^jpUL?2n!-twp3JL850jG-0M$1MD=leo&<;1R{+3I#t(@Vt! z4-!1ea7(+RNICzXoT!#oDyj{wq?c5+_4fJ=0tBN8w1%pPqUY!pdXGM#FX%T+!V;{) zUAPZTU=YCzcnPoJ9ejX~@EN|sclZH6;TQbDfLHKMd=Kk*7dLSSGu%g`gW({e)ikC7 Fi@!i< + + + + files + + Headers/EmptyFramework.h + + 8KcTm9VLO04UKk27BoCXjUBoXcw= + + Info.plist + + rrDibOYF8x4vPvkDAbftDZI/lqE= + + Modules/module.modulemap + + eCTVrvp3JCa9icnpx4FzUblr6ok= + + + files2 + + Headers/EmptyFramework.h + + hash2 + + sUQLLK3Kg4nccQguqVYFMmazB/ESCJmOJrskcvN/UL8= + + + Modules/module.modulemap + + hash2 + + +gw9s82nnQaO2oHse3x5lKuWZh9CS9RBDTAFedzc8VE= + + + + rules + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/EmptyFramework b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/EmptyFramework new file mode 100755 index 0000000000000000000000000000000000000000..c5d27ead27b024c5c5c8a888a86e44bb55f02946 GIT binary patch literal 100768 zcmeI52UJtby7>1_0!S!9KoAfKO+g{q0i=l_q_jm|8?(rYt5`oX1=L=e%bTQx3kvF zZs@5!i6968MGzGb5)p(6g4}ZOr3up1L5LtA(wBzEpo0V;0Z0H6fCL}`NB|Om1Rw!O z01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om1Rw!O01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om z1Rw!O01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om1Rw!O01|)%Ac6nC1g?DQ=m8u5QLynJ zQ3hTM_dr-Gk0FQwke>q2W`}x3go4QTj`>}JLRJFFxF;yG*=#94O{x$;@O^uAlfLEQ zvF~Msgk%jY!De%XNs@03{#AQSMJ2pF(!d73i{s;*0z8}T#|rTE@?`amm8mG0r3e*r zIjdL3k4BImkD$ob0AU31!~4^FOEASEjx?6;l_-*?dy6@V{8XVhffmyjqlfdwk~lCT zy8Cx!6zw`7NEZIv;KwsKgTP)PI|CVfi0Oj3XxxXSOQifn+GH9p9Y~-Ma3jDFtw4y^XY$kd+!QG%TEJ(^ z>Gp$_3@#@Sa(I04pUU9vjRGFOt~4fs3<06FLe2s*?u>!Q^V^u?`*fCoLI<-G$X#DX%oyZ|BepAgUr%0wvYfPLxAHY!2B z%HRjR*RPw`dsdKu$bLioEKo|`uv2056y5b=9w~m&Km2*w|JSp4~}l! zmUm}=%om&aFU7aTQD;VV`DNA79=(RyzB3lIAG zCEYV3-On;L4&9;_wSRAB<-rKyxo0tTq?=7m35381rLPMPFUVMW=S1F=T$_r&%O@{Y z9yTE;Gr3J=hc0bX&4rgaHJvcBk6xC#tzL;8@`0aJgIO1M% zv2>K~<~3>a6AsS=?D5;}0`Pc<|3Qe5xmZ9$z37CGwM`uGDy8Y!VIsnK*MfNlczlDCTh_u{6*d z)ymh-*)bq8!p@duZ;lglc*gH7Q z(ATgBB1n?E8CVL#6PqlrsXo59=5(Q0z)Owe^#kUMslj}Kyh91~uliSvL`|LGW8Xg# z^?@T9I95!Cnhm4@a1v!G1p(<~f(%8GTkmqacSfo$JMXuWW*feuIn8)G_UxxAooXJx z*e>~OG26@NNqeND_N-7|nIPKs@VSzPi*E04D6i~(LfA1P{&0HB+{VghlT?O2Sn{)v zaZI7h)~APA9j@0NXhmfduFh|$yQ5yW`0Assl{YH#FVssO?(=Sn-n44xiYTXrv1>0C zv~`z$N<02&ewD5MZ!>$cBF$6uk80O<7(H>g++$W<#@hcR?3bb?Titfnp3PaK_Zazg zGx6%hL#}%BZz#>$)b6uSquMrKGtQrR)z@!4sjR^CKqbv16uVr%Jg0b_@BMg?_efl}5(e*e0RlSv8i3p_A-dc*#$}tOZfdrJV#KilE!FJF)B+m^S!%jCD}-D`^O( z3<7YsVkUT+IcYeim!&)QYMf8;Jk_4J2?aFfjt@TmnM3Aap2|bUDx*qDDkw^F#vCz+ zJ{d!EtYW27kt>}pV?|Z2 zSTLX_UYZ7yFk`&DCP|N^tJ+gHY(-ZUkGx9z*eENmddZ85gP10sO~FS(0y9Jz(^4KV z1xW-jB?iwBa8IDfUcS!L_ifp!o&=xCC)q!_P@hNd`f_%~uM(Y>veK)&DFp?M9q1K- z6?5kKFbnsO-B;?X&7ZZtcqMGeGEO~phQqR)TSaMbvE1AIDC45Nm4+s5%XFsX)91|u{#8346n9U_;LL)n`O?j)bo)r~o zaQ?UArn-7TW}0cIdi!|6dYNx7vYo7Xw^=x%-1;;Ji+KR>(jd``#Y8Kc;zltla+Tz`UJHrb<9a$V%zSxb-G{Ji#&tedtJVQcPe|#Fv8Q}6F&y2 zHfOr;T-Vjq5VO%DVd&Lu#~&MwIc>70EJJ;}Pu|SydQSF@XDI%cb>o_TH4wj>t=W>v zE`4oDtPLyjpRMtVH_m*R@32VYL&YE7Z!EhKR9hbrG`DETVd{s*N*k(BbYv2W<=1#z zp=_G)W-QCf@Iue!>SLO>=Zv_~IHB5g?^}u{vP$iMsUA(*;-+yoT5r#`j(`y&p?xjze7-#YnLQu^{5kJ6YP=x}T6#ICfj2^UmeEOc3%7eZ}zK6Bug4T0o@ zuVcF-E0k0h=rhBIj+8dnN$eN|P(X@5$JDJD~D0V?c-!X^reeDe91Wov`GnNJcf5;xe%_Ikm!EnJ%BYOr=aCYN>=qwkp8CZ5H!w?&;OjcbrDtGm38y* zZB3oJ?xsbtp7VJ8=cFCS+kr1KY2mpEZ*D)en8Q{px@gd} zf>lhs)Y8OFY}<9y#*%!%St(?i%W$^4PSxn$p~EQoA4|fkDytuF%t15mwwm0mdbfA` zYOjNTG_W&Io!yf=dU^MafV}-3n+w(}>p$9{i!NA~cWJljsKXbV*K1w&6+9esKqM** z3P=n#;BO$;5XZMJbvv8anEr07Z}iHKkK7A{-kaET+HWtc_iLvPH7dHD9C$u5EZ(kl z#-soTe&}e0Y9u&gGJ*r9-meM?*kDWQhenI2PcZ>YiibsGwtX^2$T96Rhk$C33{Y#S zsXXyqdm1>e3}f^cM{_LyrQy|E33C8H=g2tHq&i0KYlKJ~u&Bkxw0@qIu|KhjbbY^h(TNq;M;;3q zyeO()HseWy)XOdrey!7N~t)%wueP! zR;jgh4l51Te7pUY$+$z)&YeEB!(qdNil-+=yvlFiz3Xi0vm$4Mo6(1=Y|kCt^t9=b z(zKCVZ63MW8Z~yrS9W&$p9rrY^1GCP#`b7Co}PX_NoB#S!UUuFH)lai|Y(&4Hs>Gnk7Xb&%*^V*JfdRBW{aY@HVMe0T z+C@9a@!QWnwmfYyYbrs7c=kHI>mS92CN00d`K>_4#oQDXxI9$?gAP>1w?7R28?|Mq z^|$&cLxvgx<4VtMQd**bI2FnJt~}jz8kj>7JpU)F3}rNGKJwL8p5Km{H9X3Td!W1`0~( zL1Li@Xti`d(3mZ#K;ubyW}uti)(2ep&^_fIc$ z^g3s5mpfPmc^z$U4_gmmuN~yNfn_- zKiGa=acsZG49l>i$rn*pxBmrY`=ltMWlS{fAzE3H5VOYgiB$J)>!p%1@2Fj*)yPi< zccy->Z2!1uh>>ITHki#jNZa+ws&%V zYIixLa_oykN_kA2|xmn03-kjKmw2eBmfCO0+0YC z00}?>kN_kA2|xmn03-kjKmw2eBmfCO0+0YC00}?>kN_kA2|xmn03-kjKmw2eBmfCO z0+0YC00}?>kN_kA2|xmn03-kjKmw2eBmfCO0+0YC00}?>kN_kA2|xmn03-kjKmw2e zBmfCO0+0YC00}?>kN_kA2|xmn03-kjKmw2eBmfCO0+0YC00}?>kN_kA2|xmWPvFX@ zjvnx~b@^M&@fWRY;U2t&eW^T#AO=8w3Ot(~>JNzygWq3YUwx*c5-#H}m;Wn=k8=v}Y_=aO zz}L%@)i+kAqDGb?RLJG5UKs}`ho{Ka0AU31!~4^FOEASEjx?6;l_-*?dy6@V{8XVh zffmyjqlfptq)kG1|E`RpT?Yio!haiti6G7(uvf^=Kn5Q8=|dE_=C3`-B}xqXOT{0^CsqO?h0-9PJ^F0eSN4 z2O;i23Hdniw(x5~Cpd%K1x4s75;0v67mfRnbP0GpE^RW6mkuOQ2)Geoh*luP>ofUj zd~S*qe?2c-PPZSdWNTj5}lC@%%O>xF_)& z1Ug6n5`Y9C0Z0H6fCL}`NB|Om1Rw!O01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om1Rw!O z01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om1Rw!O01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om z1pa~m)5_dBC^*n3*xlcC@aA$V6{Jt~@(BGd-IhV_Z|e{Fu6rtwF@?vo2JUCa_h$dl zq3prkDK@Yp_~vY|)Ba;7_^QhUo4W&25~KNIWMqg`9G5f~F(2F-35XQX$w$The^Z6r zw|^fm{o|e#?fy7Z(HVk#x~E=;Aj51xGkx3tEkGRfh?e&bln@Kb;PL{5fM1Q=wSw;m z;PEsF>=E*O)xDXO2P1^%p2gIWZZ*m1(>{Y` zDXYr!G*A^nc@~yMKv4z-(@<88%9(=li6jE5gbXYMYL&}0J1`k(8YUyUloJUkfuOaZ zDvoSfS*+q3l<8cR1bG-q`rn7 zhS@P(7|slP2d5eO8uma0Npd#>OJR6oljSwl$M@EpE))xRsd2o1z{Z`U!!&fw? z8E?m){WPUh&Epr_C7&&3dl@}xk95?Y70N3UMB5%dSJH6N?fnhqmEBJWJ4VDGPH&mp zSov&{%FqW(e)chrDRkNT^f0T#_1XiisEoqZ`3-e<)aw>seblw`Mn(RGddb6m-c8Y) zR_$C7<+Lz%?WKaY?$S?b#~;nFveo}>W=~e6d5Zo~?fMR*Ck~f;%&N;+`=5mUQnX~N z+s@jvIcxMDBfoAYUcGq8Rd4Eh#u71fl3fcg`6-ySAj-M4lR!ifbX#^Omi+?L z20xFn4vKyy4Z)N_0Pa@I1Wz+34afAdbjMze^C_OE+VeJ{fX3YM!N)&y$Q;a5dB|90 zR7pt%MM=(>Bj(U2V`z?5tW+v;rPGC6iHOF*=Mp|o5+6*d+LU*=&It8S7{#`WyMu5c~Nl?)5NnW z_((`#hA3lN$^)h#i2$a=;28q$2^87O*LnKBEj!hd;4}Fo`zIIb^XOe)&aU`XqSI1V zdUZFYprEk>y&|w;&O9Gx;r_AvN`1BYv(^`{gbi87si)3xSeA3EC=D)_dz&9+T(q~+ z(4=jd&Xj!mebzqZY1SQ&mZ}GGTJ7}mQm=Y8%oY|5n^oS1-s+GwoDwA1_!h^9_!2u6B_nz6fT7oTRMuW3i+~JEk=* z@d+?a8J%>Z>)Nb0nWqG5s*VqNk54%fbq!jc#~1J3b+_mJh9PtFI>#Q}tpl>U8M1iy#u#@R6( zFndQ_i;TnUFc*dRZ_#9br!pR|+@)%=^6p5VpmwE>Iq6Gm+a0$~_X~TGXOMfZ%UAGD zWsey~cshLI#~{__O!uAZx|$kdHd-VMy}IrAW1}&rP1clUsBibln|WQ&$-eOn#s9Ky zT+^=x;&-z(TQb?DuPuqSVMYG4HD2+?nGf?F7HNE__`~~+Wmke~>m!2Z77aN}{m@ux zLlugSOhU2z8jmZKO%vXXWmy?s=(${dO!M}f5jPqqRJ-ndOVLDDsU0xYqe)xbH10<0 z?b(*R$|oeOzKZUC=;P-{qD#MT^YdC{;+GJ#);;%(G+Iq-vHLRn<=F?Yh!-VlGZzQfbBtYq;rlt_cG9iQ^=3`BbpZNn_(ARBr#$$EQZ8Q#ncLR1rrk1u=;vC6OK8cF=0TxVfzz|gea(Nsvk1FMh6G4R}9u=HG#f!riQwdcVLrszJZ3cBD z5`wyTXP{(%|M=1?5_7oHIBn>wFhV4>@1~|)ea&)Q?`NA<(~)1=`X;sX^}K7T zSYW-$(#1=S)=%(pdcCWZS!i?pzzXeKC*Mj+UtZ%;8q)(EZf%{|mG(8^g3619E{pR* zsLjr24*aqqkeu*!YBxdQSNx%DHUVy9uM_QkUDu zf6$O!x!1mp-W3u*lUK*JPyOJkViVqehhnOEr&eMRSbf_uvwm6F?TYos>?VJ{)skGc zXiIR7(TUZQEwsm+rx+jc-#CYR!8c1kX!r7#JCD1ss;W5cPf0PwWJ)bSg`H5?L_v{H zKL4_8ZE$y!glu;;#cv=o+$Q=D*(11_+Zqobd5Xb8gta|e@wL{$G@n5KPJlbSmD+oMIFT}M{emNqALd_2Z2> zXvW=ElbcoV_HJM8b?}b{cIK(GdvZrF@4gX`x4&a^!Fpx=M;mm}1?%!I?KT~C_+s;V zt;@cGhhq+iM1?^CiNOZ^4dfc)_|~OvXY(4<-);4cUitBndx6k<6Pr%^?S=Jz?bM-0 zMYod!&qs#E+qKS^6yU%Q9j#D}1ZPY}aKP02RUrWzY)SplXc6@(CSXbNuxQM-PsRv2 zrhVoRPz{m+YArRDC!T9h1Lu`tjQ-+ij^)2Jym~8P4&dh;*{52E0bwZceRff=YW@1X zx>WzasV<%R*nkCM?2i|SZ%UWX>3i6rV|q9rOWcrD$H;w+5Qzg8wb+=}&$BZ2CsvWJ z?>8?xvEus3VDk{rr_bgKzesl4YvhD)aOCxrgCHNPz zH@)=C;4Y7!t}~xw_`zGU(ARi*%JJ7&(H{Yb!Iu3^U8$dc=2p#%{KtbD$ML22Wgp#? z?B7%=73bIXu&B%`wYJV-rNNqSx8E`ucWBzV)2DVgY&;;D9;XF~&JC zfYzsf%Ox?)NYt89`z{54Al}%z_O2(N^Sg3qN#$(aV+WG|x#H+O+D&C|%uP{&%TpyV z=s;C``@`VBQCo&uf2)r&WT+u9uJqg{r6mfe^Lme#oM6VFVP;f*5?9Crf5c5N3k&tO zbvBzck?dyb8R!uj8RSI;){aC<4GNp=$MT?>+0yCm_#+;j?iuPy4f11!gi=8pbh=l7 z8P!aokOmuNprC{vBo>N*R!jE-joE?9^B~i{wI>Zvl{>?WW$^@Id{n6r*7n|i&*<{QT^V`46;YGs^uA@oAK-#+k+soe@K~O_Euw^ z?|H}f)QKM+KkqqT=}qT-wLe^$?X}M2p!1@z%3;LwQ`MG_Zf#7zc7O7|d7~npJ|=0s zshYlK!`+`Ogp=3)I(FqemU8*r|$V`-PuJwN+GxMEGtJZT458j zbaDDg>)%Hm9m|!yJ0!WA5G{5#tQ#M*;zpqM!pNW8YUcf;K|5)4eFe3lVaqA;qQaB8 zmx4OQZP)Gju@-sanpvCEUUo*FUdR`^+;84Ay7xaU_zej_0+0YC00}?>kN_kA2|xmn z03-kjKmw2eBmfCO0+0YC00}?>kN_kA2|xmn03-kjKmw2eBmfCO0+0YC00}?>kN_kA Z2|xmn03-kjKmw2eBmfCO0{?FW{tH6*L2v*7 literal 0 HcmV?d00001 diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Headers/EmptyFramework.h b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Headers/EmptyFramework.h new file mode 100644 index 000000000..1fc8b0732 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Headers/EmptyFramework.h @@ -0,0 +1,18 @@ +// +// EmptyFramework.h +// EmptyFramework +// +// Created by John Flanagan on 3/27/24. +// + +#import + +//! Project version number for EmptyFramework. +FOUNDATION_EXPORT double EmptyFrameworkVersionNumber; + +//! Project version string for EmptyFramework. +FOUNDATION_EXPORT const unsigned char EmptyFrameworkVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Modules/module.modulemap b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Modules/module.modulemap new file mode 100644 index 000000000..86a63983c --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module EmptyFramework { + umbrella header "EmptyFramework.h" + export * + + module * { export * } +} diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Resources/Info.plist b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Resources/Info.plist new file mode 100644 index 000000000..96895b0a4 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Resources/Info.plist @@ -0,0 +1,46 @@ + + + + + BuildMachineOSBuild + 23E224 + CFBundleDevelopmentRegion + en + CFBundleExecutable + EmptyFramework + CFBundleIdentifier + com.jflan.EmptyFramework + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + EmptyFramework + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + + DTPlatformName + macosx + DTPlatformVersion + 14.2 + DTSDKBuild + 23C53 + DTSDKName + macosx14.2 + DTXcode + 1520 + DTXcodeBuild + 15C500b + LSMinimumSystemVersion + 12.0 + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/EmptyFramework b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/EmptyFramework new file mode 100755 index 0000000000000000000000000000000000000000..c5d27ead27b024c5c5c8a888a86e44bb55f02946 GIT binary patch literal 100768 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 Z2|xmn03-kjKmw2eBmfCO0{?FW{tH6*L2v*7 literal 0 HcmV?d00001 diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Headers/EmptyFramework.h b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Headers/EmptyFramework.h new file mode 100644 index 000000000..1fc8b0732 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Headers/EmptyFramework.h @@ -0,0 +1,18 @@ +// +// EmptyFramework.h +// EmptyFramework +// +// Created by John Flanagan on 3/27/24. +// + +#import + +//! Project version number for EmptyFramework. +FOUNDATION_EXPORT double EmptyFrameworkVersionNumber; + +//! Project version string for EmptyFramework. +FOUNDATION_EXPORT const unsigned char EmptyFrameworkVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Modules/module.modulemap b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Modules/module.modulemap new file mode 100644 index 000000000..86a63983c --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module EmptyFramework { + umbrella header "EmptyFramework.h" + export * + + module * { export * } +} diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Resources/Info.plist b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Resources/Info.plist new file mode 100644 index 000000000..96895b0a4 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,46 @@ + + + + + BuildMachineOSBuild + 23E224 + CFBundleDevelopmentRegion + en + CFBundleExecutable + EmptyFramework + CFBundleIdentifier + com.jflan.EmptyFramework + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + EmptyFramework + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + + DTPlatformName + macosx + DTPlatformVersion + 14.2 + DTSDKBuild + 23C53 + DTSDKName + macosx14.2 + DTXcode + 1520 + DTXcodeBuild + 15C500b + LSMinimumSystemVersion + 12.0 + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/_CodeSignature/CodeResources b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/_CodeSignature/CodeResources new file mode 100644 index 000000000..78381a75b --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/A/_CodeSignature/CodeResources @@ -0,0 +1,142 @@ + + + + + files + + Resources/Info.plist + + pNjfJnp0z4e0wHbY1rXiPVRZ5BE= + + + files2 + + Headers/EmptyFramework.h + + hash2 + + sUQLLK3Kg4nccQguqVYFMmazB/ESCJmOJrskcvN/UL8= + + + Modules/module.modulemap + + hash2 + + +gw9s82nnQaO2oHse3x5lKuWZh9CS9RBDTAFedzc8VE= + + + Resources/Info.plist + + hash2 + + nKOL2rBm/Sx77nLZcmDEJvxNmz7l8p+XpBmsEJn93zQ= + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/EmptyFramework b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/EmptyFramework new file mode 100755 index 0000000000000000000000000000000000000000..c5d27ead27b024c5c5c8a888a86e44bb55f02946 GIT binary patch literal 100768 zcmeI52UJtby7>1_0!S!9KoAfKO+g{q0i=l_q_jm|8?(rYt5`oX1=L=e%bTQx3kvF zZs@5!i6968MGzGb5)p(6g4}ZOr3up1L5LtA(wBzEpo0V;0Z0H6fCL}`NB|Om1Rw!O z01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om1Rw!O01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om z1Rw!O01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om1Rw!O01|)%Ac6nC1g?DQ=m8u5QLynJ zQ3hTM_dr-Gk0FQwke>q2W`}x3go4QTj`>}JLRJFFxF;yG*=#94O{x$;@O^uAlfLEQ zvF~Msgk%jY!De%XNs@03{#AQSMJ2pF(!d73i{s;*0z8}T#|rTE@?`amm8mG0r3e*r zIjdL3k4BImkD$ob0AU31!~4^FOEASEjx?6;l_-*?dy6@V{8XVhffmyjqlfdwk~lCT zy8Cx!6zw`7NEZIv;KwsKgTP)PI|CVfi0Oj3XxxXSOQifn+GH9p9Y~-Ma3jDFtw4y^XY$kd+!QG%TEJ(^ z>Gp$_3@#@Sa(I04pUU9vjRGFOt~4fs3<06FLe2s*?u>!Q^V^u?`*fCoLI<-G$X#DX%oyZ|BepAgUr%0wvYfPLxAHY!2B z%HRjR*RPw`dsdKu$bLioEKo|`uv2056y5b=9w~m&Km2*w|JSp4~}l! zmUm}=%om&aFU7aTQD;VV`DNA79=(RyzB3lIAG zCEYV3-On;L4&9;_wSRAB<-rKyxo0tTq?=7m35381rLPMPFUVMW=S1F=T$_r&%O@{Y z9yTE;Gr3J=hc0bX&4rgaHJvcBk6xC#tzL;8@`0aJgIO1M% zv2>K~<~3>a6AsS=?D5;}0`Pc<|3Qe5xmZ9$z37CGwM`uGDy8Y!VIsnK*MfNlczlDCTh_u{6*d z)ymh-*)bq8!p@duZ;lglc*gH7Q z(ATgBB1n?E8CVL#6PqlrsXo59=5(Q0z)Owe^#kUMslj}Kyh91~uliSvL`|LGW8Xg# z^?@T9I95!Cnhm4@a1v!G1p(<~f(%8GTkmqacSfo$JMXuWW*feuIn8)G_UxxAooXJx z*e>~OG26@NNqeND_N-7|nIPKs@VSzPi*E04D6i~(LfA1P{&0HB+{VghlT?O2Sn{)v zaZI7h)~APA9j@0NXhmfduFh|$yQ5yW`0Assl{YH#FVssO?(=Sn-n44xiYTXrv1>0C zv~`z$N<02&ewD5MZ!>$cBF$6uk80O<7(H>g++$W<#@hcR?3bb?Titfnp3PaK_Zazg zGx6%hL#}%BZz#>$)b6uSquMrKGtQrR)z@!4sjR^CKqbv16uVr%Jg0b_@BMg?_efl}5(e*e0RlSv8i3p_A-dc*#$}tOZfdrJV#KilE!FJF)B+m^S!%jCD}-D`^O( z3<7YsVkUT+IcYeim!&)QYMf8;Jk_4J2?aFfjt@TmnM3Aap2|bUDx*qDDkw^F#vCz+ zJ{d!EtYW27kt>}pV?|Z2 zSTLX_UYZ7yFk`&DCP|N^tJ+gHY(-ZUkGx9z*eENmddZ85gP10sO~FS(0y9Jz(^4KV z1xW-jB?iwBa8IDfUcS!L_ifp!o&=xCC)q!_P@hNd`f_%~uM(Y>veK)&DFp?M9q1K- z6?5kKFbnsO-B;?X&7ZZtcqMGeGEO~phQqR)TSaMbvE1AIDC45Nm4+s5%XFsX)91|u{#8346n9U_;LL)n`O?j)bo)r~o zaQ?UArn-7TW}0cIdi!|6dYNx7vYo7Xw^=x%-1;;Ji+KR>(jd``#Y8Kc;zltla+Tz`UJHrb<9a$V%zSxb-G{Ji#&tedtJVQcPe|#Fv8Q}6F&y2 zHfOr;T-Vjq5VO%DVd&Lu#~&MwIc>70EJJ;}Pu|SydQSF@XDI%cb>o_TH4wj>t=W>v zE`4oDtPLyjpRMtVH_m*R@32VYL&YE7Z!EhKR9hbrG`DETVd{s*N*k(BbYv2W<=1#z zp=_G)W-QCf@Iue!>SLO>=Zv_~IHB5g?^}u{vP$iMsUA(*;-+yoT5r#`j(`y&p?xjze7-#YnLQu^{5kJ6YP=x}T6#ICfj2^UmeEOc3%7eZ}zK6Bug4T0o@ zuVcF-E0k0h=rhBIj+8dnN$eN|P(X@5$JDJD~D0V?c-!X^reeDe91Wov`GnNJcf5;xe%_Ikm!EnJ%BYOr=aCYN>=qwkp8CZ5H!w?&;OjcbrDtGm38y* zZB3oJ?xsbtp7VJ8=cFCS+kr1KY2mpEZ*D)en8Q{px@gd} zf>lhs)Y8OFY}<9y#*%!%St(?i%W$^4PSxn$p~EQoA4|fkDytuF%t15mwwm0mdbfA` zYOjNTG_W&Io!yf=dU^MafV}-3n+w(}>p$9{i!NA~cWJljsKXbV*K1w&6+9esKqM** z3P=n#;BO$;5XZMJbvv8anEr07Z}iHKkK7A{-kaET+HWtc_iLvPH7dHD9C$u5EZ(kl z#-soTe&}e0Y9u&gGJ*r9-meM?*kDWQhenI2PcZ>YiibsGwtX^2$T96Rhk$C33{Y#S zsXXyqdm1>e3}f^cM{_LyrQy|E33C8H=g2tHq&i0KYlKJ~u&Bkxw0@qIu|KhjbbY^h(TNq;M;;3q zyeO()HseWy)XOdrey!7N~t)%wueP! zR;jgh4l51Te7pUY$+$z)&YeEB!(qdNil-+=yvlFiz3Xi0vm$4Mo6(1=Y|kCt^t9=b z(zKCVZ63MW8Z~yrS9W&$p9rrY^1GCP#`b7Co}PX_NoB#S!UUuFH)lai|Y(&4Hs>Gnk7Xb&%*^V*JfdRBW{aY@HVMe0T z+C@9a@!QWnwmfYyYbrs7c=kHI>mS92CN00d`K>_4#oQDXxI9$?gAP>1w?7R28?|Mq z^|$&cLxvgx<4VtMQd**bI2FnJt~}jz8kj>7JpU)F3}rNGKJwL8p5Km{H9X3Td!W1`0~( zL1Li@Xti`d(3mZ#K;ubyW}uti)(2ep&^_fIc$ z^g3s5mpfPmc^z$U4_gmmuN~yNfn_- zKiGa=acsZG49l>i$rn*pxBmrY`=ltMWlS{fAzE3H5VOYgiB$J)>!p%1@2Fj*)yPi< zccy->Z2!1uh>>ITHki#jNZa+ws&%V zYIixLa_oykN_kA2|xmn03-kjKmw2eBmfCO0+0YC z00}?>kN_kA2|xmn03-kjKmw2eBmfCO0+0YC00}?>kN_kA2|xmn03-kjKmw2eBmfCO z0+0YC00}?>kN_kA2|xmn03-kjKmw2eBmfCO0+0YC00}?>kN_kA2|xmn03-kjKmw2e zBmfCO0+0YC00}?>kN_kA2|xmn03-kjKmw2eBmfCO0+0YC00}?>kN_kA2|xmWPvFX@ zjvnx~b@^M&@fWRY;U2t&eW^T#AO=8w3Ot(~>JNzygWq3YUwx*c5-#H}m;Wn=k8=v}Y_=aO zz}L%@)i+kAqDGb?RLJG5UKs}`ho{Ka0AU31!~4^FOEASEjx?6;l_-*?dy6@V{8XVh zffmyjqlfptq)kG1|E`RpT?Yio!haiti6G7(uvf^=Kn5Q8=|dE_=C3`-B}xqXOT{0^CsqO?h0-9PJ^F0eSN4 z2O;i23Hdniw(x5~Cpd%K1x4s75;0v67mfRnbP0GpE^RW6mkuOQ2)Geoh*luP>ofUj zd~S*qe?2c-PPZSdWNTj5}lC@%%O>xF_)& z1Ug6n5`Y9C0Z0H6fCL}`NB|Om1Rw!O01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om1Rw!O z01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om1Rw!O01|)%AOT1K5`Y9C0Z0H6fCL}`NB|Om z1pa~m)5_dBC^*n3*xlcC@aA$V6{Jt~@(BGd-IhV_Z|e{Fu6rtwF@?vo2JUCa_h$dl zq3prkDK@Yp_~vY|)Ba;7_^QhUo4W&25~KNIWMqg`9G5f~F(2F-35XQX$w$The^Z6r zw|^fm{o|e#?fy7Z(HVk#x~E=;Aj51xGkx3tEkGRfh?e&bln@Kb;PL{5fM1Q=wSw;m z;PEsF>=E*O)xDXO2P1^%p2gIWZZ*m1(>{Y` zDXYr!G*A^nc@~yMKv4z-(@<88%9(=li6jE5gbXYMYL&}0J1`k(8YUyUloJUkfuOaZ zDvoSfS*+q3l<8cR1bG-q`rn7 zhS@P(7|slP2d5eO8uma0Npd#>OJR6oljSwl$M@EpE))xRsd2o1z{Z`U!!&fw? z8E?m){WPUh&Epr_C7&&3dl@}xk95?Y70N3UMB5%dSJH6N?fnhqmEBJWJ4VDGPH&mp zSov&{%FqW(e)chrDRkNT^f0T#_1XiisEoqZ`3-e<)aw>seblw`Mn(RGddb6m-c8Y) zR_$C7<+Lz%?WKaY?$S?b#~;nFveo}>W=~e6d5Zo~?fMR*Ck~f;%&N;+`=5mUQnX~N z+s@jvIcxMDBfoAYUcGq8Rd4Eh#u71fl3fcg`6-ySAj-M4lR!ifbX#^Omi+?L z20xFn4vKyy4Z)N_0Pa@I1Wz+34afAdbjMze^C_OE+VeJ{fX3YM!N)&y$Q;a5dB|90 zR7pt%MM=(>Bj(U2V`z?5tW+v;rPGC6iHOF*=Mp|o5+6*d+LU*=&It8S7{#`WyMu5c~Nl?)5NnW z_((`#hA3lN$^)h#i2$a=;28q$2^87O*LnKBEj!hd;4}Fo`zIIb^XOe)&aU`XqSI1V zdUZFYprEk>y&|w;&O9Gx;r_AvN`1BYv(^`{gbi87si)3xSeA3EC=D)_dz&9+T(q~+ z(4=jd&Xj!mebzqZY1SQ&mZ}GGTJ7}mQm=Y8%oY|5n^oS1-s+GwoDwA1_!h^9_!2u6B_nz6fT7oTRMuW3i+~JEk=* z@d+?a8J%>Z>)Nb0nWqG5s*VqNk54%fbq!jc#~1J3b+_mJh9PtFI>#Q}tpl>U8M1iy#u#@R6( zFndQ_i;TnUFc*dRZ_#9br!pR|+@)%=^6p5VpmwE>Iq6Gm+a0$~_X~TGXOMfZ%UAGD zWsey~cshLI#~{__O!uAZx|$kdHd-VMy}IrAW1}&rP1clUsBibln|WQ&$-eOn#s9Ky zT+^=x;&-z(TQb?DuPuqSVMYG4HD2+?nGf?F7HNE__`~~+Wmke~>m!2Z77aN}{m@ux zLlugSOhU2z8jmZKO%vXXWmy?s=(${dO!M}f5jPqqRJ-ndOVLDDsU0xYqe)xbH10<0 z?b(*R$|oeOzKZUC=;P-{qD#MT^YdC{;+GJ#);;%(G+Iq-vHLRn<=F?Yh!-VlGZzQfbBtYq;rlt_cG9iQ^=3`BbpZNn_(ARBr#$$EQZ8Q#ncLR1rrk1u=;vC6OK8cF=0TxVfzz|gea(Nsvk1FMh6G4R}9u=HG#f!riQwdcVLrszJZ3cBD z5`wyTXP{(%|M=1?5_7oHIBn>wFhV4>@1~|)ea&)Q?`NA<(~)1=`X;sX^}K7T zSYW-$(#1=S)=%(pdcCWZS!i?pzzXeKC*Mj+UtZ%;8q)(EZf%{|mG(8^g3619E{pR* zsLjr24*aqqkeu*!YBxdQSNx%DHUVy9uM_QkUDu zf6$O!x!1mp-W3u*lUK*JPyOJkViVqehhnOEr&eMRSbf_uvwm6F?TYos>?VJ{)skGc zXiIR7(TUZQEwsm+rx+jc-#CYR!8c1kX!r7#JCD1ss;W5cPf0PwWJ)bSg`H5?L_v{H zKL4_8ZE$y!glu;;#cv=o+$Q=D*(11_+Zqobd5Xb8gta|e@wL{$G@n5KPJlbSmD+oMIFT}M{emNqALd_2Z2> zXvW=ElbcoV_HJM8b?}b{cIK(GdvZrF@4gX`x4&a^!Fpx=M;mm}1?%!I?KT~C_+s;V zt;@cGhhq+iM1?^CiNOZ^4dfc)_|~OvXY(4<-);4cUitBndx6k<6Pr%^?S=Jz?bM-0 zMYod!&qs#E+qKS^6yU%Q9j#D}1ZPY}aKP02RUrWzY)SplXc6@(CSXbNuxQM-PsRv2 zrhVoRPz{m+YArRDC!T9h1Lu`tjQ-+ij^)2Jym~8P4&dh;*{52E0bwZceRff=YW@1X zx>WzasV<%R*nkCM?2i|SZ%UWX>3i6rV|q9rOWcrD$H;w+5Qzg8wb+=}&$BZ2CsvWJ z?>8?xvEus3VDk{rr_bgKzesl4YvhD)aOCxrgCHNPz zH@)=C;4Y7!t}~xw_`zGU(ARi*%JJ7&(H{Yb!Iu3^U8$dc=2p#%{KtbD$ML22Wgp#? z?B7%=73bIXu&B%`wYJV-rNNqSx8E`ucWBzV)2DVgY&;;D9;XF~&JC zfYzsf%Ox?)NYt89`z{54Al}%z_O2(N^Sg3qN#$(aV+WG|x#H+O+D&C|%uP{&%TpyV z=s;C``@`VBQCo&uf2)r&WT+u9uJqg{r6mfe^Lme#oM6VFVP;f*5?9Crf5c5N3k&tO zbvBzck?dyb8R!uj8RSI;){aC<4GNp=$MT?>+0yCm_#+;j?iuPy4f11!gi=8pbh=l7 z8P!aokOmuNprC{vBo>N*R!jE-joE?9^B~i{wI>Zvl{>?WW$^@Id{n6r*7n|i&*<{QT^V`46;YGs^uA@oAK-#+k+soe@K~O_Euw^ z?|H}f)QKM+KkqqT=}qT-wLe^$?X}M2p!1@z%3;LwQ`MG_Zf#7zc7O7|d7~npJ|=0s zshYlK!`+`Ogp=3)I(FqemU8*r|$V`-PuJwN+GxMEGtJZT458j zbaDDg>)%Hm9m|!yJ0!WA5G{5#tQ#M*;zpqM!pNW8YUcf;K|5)4eFe3lVaqA;qQaB8 zmx4OQZP)Gju@-sanpvCEUUo*FUdR`^+;84Ay7xaU_zej_0+0YC00}?>kN_kA2|xmn z03-kjKmw2eBmfCO0+0YC00}?>kN_kA2|xmn03-kjKmw2eBmfCO0+0YC00}?>kN_kA Z2|xmn03-kjKmw2eBmfCO0{?FW{tH6*L2v*7 literal 0 HcmV?d00001 diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Headers/EmptyFramework.h b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Headers/EmptyFramework.h new file mode 100644 index 000000000..1fc8b0732 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Headers/EmptyFramework.h @@ -0,0 +1,18 @@ +// +// EmptyFramework.h +// EmptyFramework +// +// Created by John Flanagan on 3/27/24. +// + +#import + +//! Project version number for EmptyFramework. +FOUNDATION_EXPORT double EmptyFrameworkVersionNumber; + +//! Project version string for EmptyFramework. +FOUNDATION_EXPORT const unsigned char EmptyFrameworkVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Modules/module.modulemap b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Modules/module.modulemap new file mode 100644 index 000000000..86a63983c --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module EmptyFramework { + umbrella header "EmptyFramework.h" + export * + + module * { export * } +} diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Resources/Info.plist b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Resources/Info.plist new file mode 100644 index 000000000..96895b0a4 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/Resources/Info.plist @@ -0,0 +1,46 @@ + + + + + BuildMachineOSBuild + 23E224 + CFBundleDevelopmentRegion + en + CFBundleExecutable + EmptyFramework + CFBundleIdentifier + com.jflan.EmptyFramework + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + EmptyFramework + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + + DTPlatformName + macosx + DTPlatformVersion + 14.2 + DTSDKBuild + 23C53 + DTSDKName + macosx14.2 + DTXcode + 1520 + DTXcodeBuild + 15C500b + LSMinimumSystemVersion + 12.0 + + diff --git a/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/_CodeSignature/CodeResources b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/_CodeSignature/CodeResources new file mode 100644 index 000000000..78381a75b --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Framework/EmptyFramework.xcframework/macos-arm64_x86_64/EmptyFramework.framework/Versions/Current/_CodeSignature/CodeResources @@ -0,0 +1,142 @@ + + + + + files + + Resources/Info.plist + + pNjfJnp0z4e0wHbY1rXiPVRZ5BE= + + + files2 + + Headers/EmptyFramework.h + + hash2 + + sUQLLK3Kg4nccQguqVYFMmazB/ESCJmOJrskcvN/UL8= + + + Modules/module.modulemap + + hash2 + + +gw9s82nnQaO2oHse3x5lKuWZh9CS9RBDTAFedzc8VE= + + + Resources/Info.plist + + hash2 + + nKOL2rBm/Sx77nLZcmDEJvxNmz7l8p+XpBmsEJn93zQ= + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/examples/symlink_example/third_party/empty_framework/Package.swift b/examples/symlink_example/third_party/empty_framework/Package.swift new file mode 100644 index 000000000..7736347e2 --- /dev/null +++ b/examples/symlink_example/third_party/empty_framework/Package.swift @@ -0,0 +1,13 @@ +// swift-tools-version: 5.7 + +import PackageDescription + +let package = Package( + name: "EmptyFramework", + products: [ + .library(name: "EmptyFramework", targets: ["EmptyFramework"]) + ], + targets: [ + .binaryTarget(name: "EmptyFramework", path: "EmptyFramework.xcframework") + ] +) diff --git a/swiftpkg/internal/repository_files.bzl b/swiftpkg/internal/repository_files.bzl index 430f8f956..fc19c12d9 100644 --- a/swiftpkg/internal/repository_files.bzl +++ b/swiftpkg/internal/repository_files.bzl @@ -84,7 +84,9 @@ def _list_directories_under( Returns: A `list` of path `string` values. """ - find_args = ["find", path] + + # Follow symlinks and report on the actual directories. + find_args = ["find", "-H", "-L", path] # For GNU find, it is important for the global options (e.g. -maxdepth) to be # specified BEFORE other options like -type. Also, GNU find does not support -depth .