結論
go get -u github.com/mitchellh/go-z3
したあと,
$GOPATH/src/github.com/mitchellh/go-z3/Makefile
を以下のように変更して make
をします.
libz3.a: vender/z3
cd vendor/z3 && python scripts/mk_make.py --staticlib
cd vendor/z3/build && ${MAKE}
cp vendor/z3/build/libz3.a .
libz3.a: vender/z3
cd vendor/z3 && CXX=clang++ CC=clang python scripts/mk_make.py --staticlib
cd vendor/z3/build && ${MAKE}
cp vendor/z3/build/libz3.a .
経緯
macOSだと,go-z3
パッケージのインストールに失敗します.
go-z3
のREADMEでも「単純に go get
するだけだと動かないぜ,自分でz3を make
してくれよな!」みたいなことが書いてあって, git clone
したあとに make
を叩くだけでいいと書いてあるんですが,それだと(おそらく)あらゆるプラットフォームでビルドがコケます.
この原因は,本家z3のバージョンアップに伴って Z3_get_error_msg_ex
が Z3_get_error_msg
に改名されたり,cgoの仕様でCのBoolが見えなかったり,とかそのあたりです.
go get
すると@mattnさんが修正したあとのコードが降ってくるっぽくて,Windowsだとビルドが通るっぽいです.しかし,macOSだと通りません.
この原因は,z3をビルドするときにgccを使っていることっぽいです(なんで?).ビルド時に CC=clang CXX=clang++
を設定するとビルドが通ります.
その他
Makefile
の中でmacOSのときに CC
と CXX
を設定するやつを書くとOSSコミットチャンスな気がするんですが, go-z3
のリポジトリはissueもずーっと放置されているので微妙です. go get
で降ってくるコードがgithubのものと別物なのが不思議なんですが,どういうことなの?