fu7mu4’s diary

はてなダイアリーから移転しました。

checkinstall で Cppcheck の deb パッケージを作成してみた

Ubuntu 16.04 LTS はCppcheckが少し古い。そこで Cppcheckをソースコードからdebパッケージを作ってインストールしてみた。

TL;DR

cppcheck はconfigureスクリプトを使ってMakefileを生成するわけではないので make を実行するときは変数を直接指定する必要がある。

準備

Cppcheckを checkinstall でいれる。ここは HAVE_RULES=yesを設定するため、libpcre3もインストールする。

sudo apt install libpcre3 checkinstall

Cppcheck は https://github.com/danmar/cppcheck/releases の Source code (tar.gz) からダウンロードする

ビルドする

ubuntu のパッケージとの衝突を避けて、PREFIXを/usr/localにして、インストール先を変更する。またCFGDIRでCppcheckのコンフィグファイルの場所を決定する。この変数が指定してあれば、make install時にcfgファイルをコピーしてくれる。

tar -zxvf cppcheck-1.83.tar.gz
cd cppcheck-1.83
make PREFIX=/usr/local/ CFGDIR=/usr/local/share/cppcheck/cfg HAVE_RULES=yes

doc-pakディレクトリに欲しいファイルをコピー

checkinstallはインストール時にdoc-pakフォルダの内容をマニュアルとして保存する。
そのため欲しいファイルをこのフォルダにコピーしておく。

rm -rf doc-pak ; mkdir doc-pak
cp -r AUTHOR COPYING addons man rules tools triage samples doc-pak

checkinstall にコマンドを与えてパッケージ化とビルド

checkinstall コマンドでインストールすると同時に deb パッケージを作成する。
そのままchcekinstall のパッケージ情報入力画面になる。

ここでPREFIX、CFGDIR、HAVE_RULESを指定してインストールするのが肝である。
通常のconfigureスクリプトMakefileを生成する場合、Makefileにこれらの情報を収集する。しかし、cppcheckはMakefileをconfigureで生成しないため、毎回指定しなければならないのである。

sudo checkinstall make install PREFIX=/usr/local/ CFGDIR=/usr/local/share/cppcheck/cfg HAVE_RULES=yes

あとは checkinstall で質問に応えていけば、インストールしdebパッケージが作成できる。