Skip to content

Latest commit

 

History

History
61 lines (45 loc) · 1.95 KB

patch_swift_package.md

File metadata and controls

61 lines (45 loc) · 1.95 KB

How to Patch a Swift Package

If you come across a Swift package that you want to use but it does not build properly in Bazel, all hope is not lost. You can patch the Swift package. This document will expalin how to do it.

Fix the Issue and Generate a Patch File

First, you will need to figure out why the build is failing and fix it. Once you have the fix, create a patch file using your favorite tool. For instance, if you are using git, you can create a patch file by running the following:

# Assuming that your fix is in commit 33c0229, you can run the following to
# generate a patch file.
$ git format-patch -1 33c0229

Copy the Patch File to Your Repository

Next, create a directory in your workspace and copy the patch file to that directory. For example, if you are applying a patch for the swift-cmark package, you could do the following:

# Create a directory
$ mkdir -p third-party/swift-cmark

# Copy the patch file
$ cp /path/to/0001-fix.patch third-party/swift-cmark

# Create a BUILD file that exports the patch file
$ echo 'exports_files(["0001-Do-not-exclude-files-that-are-needed-for-compilation.patch"])' \
    > third-party/swift-cmark/BUILD

NOTE: Even if you use BUILD.bazel as your preferred build file name, be sure to name this build file BUILD. In Bazel 6.2.1 testing under rules_bazel_integration_test, Bazel would not recognize the package if the file was named BUILD.bazel.

Update your MODULE.bazel to Apply the Patch

Finally, configure rules_swift_package_manager to apply the patch to the package. The name should be the identity for the Swift package (i.e., the name in the package's manifest).

swift_deps.configure_package(
    name = "swift-cmark",
    patch_args = ["-p1"],
    patches = [
        "//third-party/swift-cmark:0001-Do-not-exclude-files-that-are-needed-for-compilation.patch",
    ],
)

Test the Patch

Now, it is time to test your patch.

# Build/Test
$ bazel test //...