diff options
author | Teddy Wing | 2020-09-20 02:20:32 +0200 |
---|---|---|
committer | Teddy Wing | 2020-09-20 02:20:32 +0200 |
commit | c6d4fbc68e863b070a3f33db7c87d581569d1db5 (patch) | |
tree | 68629ee5280cb7b365f45cffd30345f98b225dfd /Cargo.toml | |
parent | 2ae21ec6fe7897af6946aa7b149916c15d2c216c (diff) | |
download | git-suggestion-c6d4fbc68e863b070a3f33db7c87d581569d1db5.tar.bz2 |
Build a static binary
I recently tried installing the program via Homebrew on a machine that
didn't have 'libgit2' installed. The Homebrew formula installs pre-built
binaries. Running the binaries gave me an error saying that the
'libgit2' dynamic library couldn't be found.
Change the build configuration to build a "static" binary. It still
links to system dylibs, but I've removed all links to Homebrew dylibs.
These were:
* libgit2
* openssl
Removed the 'openssl' link by adding the 'vendored-openssl' feature to
the 'git2' dependency.
In order to remove the 'libgit2' link, I had to do some more finagling.
Accomplished this by setting an empty `PKG_CONFIG_LIBDIR` when building.
While 'git2' doesn't have a Cargo feature to disable dynamic linking, we
can force static linking by preventing `pkg-config` from finding the
Homebrew-installed 'libgit2'. The 'libgit2-sys' crate's build script
first checks for the library using `pkg-config`, and builds it
statically if it doesn't exist:
https://github.com/rust-lang/git2-rs/blob/43d583fd8b50fad0cfe0bbc334059ce965b6f3fc/libgit2-sys/build.rs#L15-L17
With these changes, the above packages will now be statically linked
with the program's binaries.
Upgrade 'git2' to the latest version (0.13.11) since we're changing its
build configuration.
Before:
$ otool -L target/release/git-sug*
target/release/git-sugapply:
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 57740.60.18)
/usr/local/opt/libgit2/lib/libgit2.1.0.dylib (compatibility version 1.0.0, current version 1.0.1)
/usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/usr/local/opt/openssl@1.1/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
target/release/git-sugapply.d: is not an object file
target/release/git-sugdiff:
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 57740.60.18)
/usr/local/opt/libgit2/lib/libgit2.1.0.dylib (compatibility version 1.0.0, current version 1.0.1)
/usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/usr/local/opt/openssl@1.1/lib/libcrypto.1.1.dylib (compatibility version 1.1.0, current version 1.1.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
target/release/git-sugdiff.d: is not an object file
After:
$ otool -L target/release/git-sug*
target/release/git-sugapply:
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 57740.60.18)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.8.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
target/release/git-sugapply.d: is not an object file
target/release/git-sugdiff:
/System/Library/Frameworks/Security.framework/Versions/A/Security (compatibility version 1.0.0, current version 57740.60.18)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.8.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.8)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
target/release/git-sugdiff.d: is not an object file
Diffstat (limited to 'Cargo.toml')
-rw-r--r-- | Cargo.toml | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -6,7 +6,7 @@ edition = "2018" [dependencies] exitcode = "1.1.2" getopts = "0.2.21" -git2 = "0.13.8" +git2 = { version = "0.13.11", features = ["vendored-openssl"] } regex = "1.3.9" thiserror = "1.0.20" url = "2.1.1" |