静的コード解析 inferを使う
JavaとCなどに対応した静的コード解析 infer の source code build手法について
brew install infer
ができませんので、ソースコードからbuildしたいわけですが、 ./build-infer.sh java
はできても ./build-infer.sh clang
でエラーになったので、 Install Infer from source without opam
を試していたが、いろいろとエラーになったので、その対策のメモ
Build成功した方法
なお、下のsectionにある各種try & error & 対策も参照のこと
brew install autoconf automake cmake opam pkg-config sqlite gmp mpfr java
export C_INCLUDE_PATH=/opt/homebrew/include
export LIBRARY_PATH=/opt/homebrew/lib
source ~/.zprofile
cd ~/work
git clone https://github.com/facebook/infer.git
cd infer
./facebook-clang-plugins/clang/src/prepare_clang_src.sh
./autogen.sh
./configure
make
// ここでなぜかinfer.exeのbuildでerrorになるが、ここまでbuildしてから以下を実行すればbuildできるようになった!
./build-infer.sh clang java
sudo make install
OCaml atdgenでエラー (mlgmpidlのinstall エラー (gmprとmprf))
下が ./configure
の実行中に
checking for OCaml findlib package atdgen... not found
configure: error: missing OCaml dependency: ocamlfind
If you are using opam, please run
opam update
opam install --deps-only infer .
が出た場合は、
opam install mlgmpidl
eval $(opam env)
なお、mlgmpidlのinstallは、 mpfr.h
と gmp.h
がinclude解決できず、エラーとなっていて、本当は、GMP_PREFIX
とMPFR_PREFIX
を設定してbuildせよとのことだが、GMP_PREFIX
は効いたが、MPFR_PREFIX
は効果が無く、 C_INCLUDE_PATH
やLIBRARY_PATH
で解決した(上の~/.zprofile
とsource ~/.zprofile
参照
ちなみに、GMP_PREFIX
とMPFR_PREFIX
を設定してbuildは以下である。
brew install gmp mpfr
ln -s /opt/homebrew/Cellar/mpfr/4.2.1 /usr/local/mpfr
ln -s /opt/homebrew/Cellar/gmp/6.3.0 /usr/local/gmp
env GMP_PREFIX=/usr/local/gmp MPFR_PREFIX=/usr/local/mpfr opam install mlgmpidl
Make中にclang_pluginの問題の修正
以下をpull request中
https://github.com/facebook/infer/pull/1804
.PHONY: clang_plugin
clang_plugin: clang_setup
$(QUIET)$(call silent_on_success,Building clang plugin,\
$(MAKE) -C $(FCP_DIR)/libtooling all \
CC="$(CC)" CXX="$(CXX)" \
CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" \
CPP="$(CPP)" LDFLAGS="$(LDFLAGS)" LIBS="$(LIBS)" \
LOCAL_CLANG="$(CLANG_PREFIX)/bin/clang" \
CLANG_PREFIX="$(CLANG_PREFIX)" \
CLANG_INCLUDES="$(CLANG_INCLUDES)" \
SDKPATH="$(XCODE_ISYSROOT)" \
)
$(QUIET)$(call silent_on_success,Building clang plugin OCaml interface,\
$(MAKE) -C $(FCP_DIR)/clang-ocaml build/clang_ast_proj.ml build/clang_ast_proj.mli \
CC="$(CC)" CXX="$(CXX)" \
CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" \
CPP="$(CPP)" LDFLAGS="$(LDFLAGS)" LIBS="$(LIBS)" \
LOCAL_CLANG="$(CLANG_PREFIX)/bin/clang" \
CLANG_PREFIX="$(CLANG_PREFIX)" \
CLANG_INCLUDES="$(CLANG_INCLUDES)" \
SDKPATH="$(XCODE_ISYSROOT)" \
)