This project builds custom binaries of the LibCURL_jll.jl
project for pymcurl. The build has been modified to include Kerberos_krb5
on Linux/FreeBSD and remove LibSSH2 on all platforms.
The build system is fully automated with incremental build support. Simply run ./build.sh and it will:
- Detect the latest upstream version from
JuliaBinaryWrappers/LibCURL_jll.jl - Check if a rebuild is needed (compares with our latest release)
- Skip if already up-to-date, or proceed with build if new version available
- Setup Yggdrasil repository and apply patches
- Build only platforms that haven't been built yet (incremental builds)
- Post artifacts to GitHub (when using
--postflag)
- Docker: For containerized builds
- GitHub CLI (
gh): Must be installed and authenticated (gh auth login)
./build.shThis will automatically:
- Detect the latest upstream LibCURL version
- Exit immediately if already up-to-date
- Skip platforms that are already built (incremental builds)
- Build only missing platforms sequentially
- Display progress as each platform builds
The build artifacts are created in build/L/LibCURL/LibCURL@8/products.
Incremental Builds: The script automatically detects which platforms have already been built by checking for existing artifacts in the products directory. Only missing platforms will be built, saving time on partial rebuilds.
To rebuild all platforms from scratch (deleting existing artifacts):
./build.sh --forceThis will:
- Delete all existing artifacts for the current version
- Rebuild all 8 platforms sequentially
After a successful build, post the artifacts:
./build.sh --postThis will automatically:
- Update
Project.tomlwith the new version - Generate
Artifacts.toml - Commit and push changes
- Create a GitHub release and upload all artifacts
No manual steps required!
- Upstream:
LibCURL-v8.18.0+0 - Our build:
8.18.0+1(always increments the+Nsuffix by 1)
The build applies these patches to upstream LibCURL:
- Remove LibSSH2: Removes
--with-libssh2from configure flags andLibSSH2_jlldependency - Enable Kerberos: Enables Kerberos support on Linux and FreeBSD platforms
- Add dependency: Adds
Kerberos_krb5_jllto the dependency list - Fix macOS OpenSSL: Fixes
openssl_platformsfilter to include macOS when using OpenSSL
All patches are applied idempotently using content-based matching (not line numbers), making them resilient to upstream changes.
The build targets 8 platforms required for pymcurl:
x86_64-linux-gnux86_64-linux-muslx86_64-w64-mingw32(x86_64-windows)i686-linux-gnuaarch64-linux-gnuaarch64-linux-muslaarch64-apple-darwin(arm64-mac)x86_64-apple-darwin(x86_64-macos)