diff --git a/README.md b/README.md index 8908fc0..771c248 100644 --- a/README.md +++ b/README.md @@ -48,9 +48,17 @@ When linking dynamically against a released version of libgit2, install it via y import "github.com/libgit2/git2go/v27" ``` -### Master branch, or static linking +### Versioned branch, static linking -If using `master` or building a branch statically, we need to build libgit2 first. In order to build it, you need `cmake`, `pkg-config` and a C compiler. You will also need the development packages for OpenSSL (outside of Windows or macOS) and LibSSH2 installed if you want libgit2 to support HTTPS and SSH respectively. Note that even if libgit2 is included in the resulting binary, its dependencies will not be. +Follow the instructions for [Versioned branch, dynamic linking](#versioned-branch-dynamic-linking), but pass the `-tags static,system_libgit2` flag to all `go` commands that build any binaries. For instance: + + go build -tags static,system_libgit2 github.com/my/project/... + go test -tags static,system_libgit2 github.com/my/project/... + go install -tags static,system_libgit2 github.com/my/project/... + +### Master branch, or vendored static linking + +If using `master` or building a branch with the vendored libgit2 statically, we need to build libgit2 first. In order to build it, you need `cmake`, `pkg-config` and a C compiler. You will also need the development packages for OpenSSL (outside of Windows or macOS) and LibSSH2 installed if you want libgit2 to support HTTPS and SSH respectively. Note that even if libgit2 is included in the resulting binary, its dependencies will not be. Run `go get -d github.com/libgit2/git2go` to download the code and go to your `$GOPATH/src/github.com/libgit2/git2go` directory. From there, we need to build the C code and put it into the resulting go binary. @@ -83,7 +91,7 @@ For the stable version, `go test` will work as usual. For the `master` branch, s Alternatively, you can build the library manually first and then run the tests - ./script/build-libgit2-static.sh + make install-static go test -v -tags static ./... License diff --git a/git_static.go b/git_bundled_static.go similarity index 86% rename from git_static.go rename to git_bundled_static.go index 547ae8a..e66f425 100644 --- a/git_static.go +++ b/git_bundled_static.go @@ -1,4 +1,4 @@ -// +build static +// +build static,!system_libgit2 package git @@ -6,11 +6,11 @@ package git #cgo windows CFLAGS: -I${SRCDIR}/static-build/install/include/ #cgo windows LDFLAGS: -L${SRCDIR}/static-build/install/lib/ -lgit2 -lwinhttp #cgo !windows pkg-config: --static ${SRCDIR}/static-build/install/lib/pkgconfig/libgit2.pc +#cgo CFLAGS: -DLIBGIT2_STATIC #include #if LIBGIT2_VER_MAJOR != 0 || LIBGIT2_VER_MINOR != 27 # error "Invalid libgit2 version; this git2go supports libgit2 v0.27" #endif - */ import "C" diff --git a/git_dynamic.go b/git_system_dynamic.go similarity index 87% rename from git_dynamic.go rename to git_system_dynamic.go index 0a977e8..eda95e5 100644 --- a/git_dynamic.go +++ b/git_system_dynamic.go @@ -3,12 +3,12 @@ package git /* -#include #cgo pkg-config: libgit2 +#cgo CFLAGS: -DLIBGIT2_DYNAMIC +#include #if LIBGIT2_VER_MAJOR != 0 || LIBGIT2_VER_MINOR != 27 # error "Invalid libgit2 version; this git2go supports libgit2 v0.27" #endif - */ import "C" diff --git a/git_system_static.go b/git_system_static.go new file mode 100644 index 0000000..cc754b4 --- /dev/null +++ b/git_system_static.go @@ -0,0 +1,14 @@ +// +build static,system_libgit2 + +package git + +/* +#cgo pkg-config: libgit2 --static +#cgo CFLAGS: -DLIBGIT2_STATIC +#include + +#if LIBGIT2_VER_MAJOR != 0 || LIBGIT2_VER_MINOR != 27 +# error "Invalid libgit2 version; this git2go supports libgit2 v0.27" +#endif +*/ +import "C"