1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaとCなどに対応した静的コード解析 infer on mac

Last updated at Posted at 2023-12-25

静的コード解析 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
~/.zprofile
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.hgmp.hがinclude解決できず、エラーとなっていて、本当は、GMP_PREFIXMPFR_PREFIXを設定してbuildせよとのことだが、GMP_PREFIXは効いたが、MPFR_PREFIXは効果が無く、 C_INCLUDE_PATHLIBRARY_PATH で解決した(上の~/.zprofilesource ~/.zprofile参照

ちなみに、GMP_PREFIXMPFR_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)" \
	)
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?