BLOGTIMES
2019/02/22

WSL に CX-Checker を一撃でセットアップする

  wsl  c  checker 
このエントリーをはてなブックマークに追加

Java でコーディングスタイルをチェックするツールとしては Checkstyle などがありますが、C 言語用に CX-Checker | ルールのカスタマイズが可能なC言語コーディングチェッカ というツールを見つけました。C 言語を専用の XML 形式に変換し、それをスキャンするという方法で動作するツールです。

最近はあまりメンテナンスが行われていないというのと、大学で作成された研究用のプロダクトなので、インストールCLI 版の利用方法ページはあるものの、正直「使ってもらう気がないのか?」というような内容です。仕方がないので、Windows 10 の WSL 上の Ubuntu 18.10 向けに一撃でセットアップできる方法を作ってみました。

とりあえず、以下の2つのコマンドを WSL で貼り付ければ CX-Checker が依存している Sapid のインストールと、CX-Checker のサンプルの生成が行われます。

# Sapid のセットアップ wget -O - 'https://gist.githubusercontent.com/hsur/def9441a32a0a11d68daf57d255b343d/raw/a7763d2ef963a5cdb87a433cfd95ce7c8d8de8b7/Setup%2520Sapid%2520(%2520for%2520WSL%2520Ubuntu%252018.04)' | sudo bash - # CX-Checker のセットアップ wget -O - 'https://gist.githubusercontent.com/hsur/19ad681df53efaf0a8c9658c5e349222/raw/ec337d805fe0528de79f868bb0b82bfaf894bfa7/CX-Checker%2520Example%2520(%2520for%2520WSL%2520Ubuntu%252018.04)' | bash -

セットアップ後に、サンプルの実行をしてみると以下のような感じになります。
一番下の部分が、CX-Checker による goto 文に対する警告の出力結果です。

$ source /usr/local/Sapid/lib/SetUp.sh $ make gcc -O2 main.c -o myprog $ ./myprog bar $ make cxc sdb4 -O2 main.c -o myprog Sapid: mkPmodel: File name "main.i". Sapid: mkPmodel: Writing P-model database. Sapid: mkPmodel: spdMkdirHier(): "SDB/PSDB/8388609": Making directory. Sapid: sdbin4: spdMkdirHier(): "SDB/ISDB/8388609": Making directory. Sapid: sdblink5: Optimizing. Sapid: sdblink5: Making relative offset. Sapid: sdblink5: Optimize declaration. Sapid: fixSDB: Fix bug-0059. Sapid: psdblink: Program name "myprog". spdMkCXModel -t -sdbD SDB Sapid: mkCXSub: spdMkdirHier(): "SDB/SPEC": Making directory. Error: spdMkCXTypeInfos: unknown_declarator_sort: ident_id: 33554562 declarator_id:25165969 Warning: spdMkCXTypeInfos: outputEnum: identifier: SPD_NON_ID type_id: 83886098 Warning: spdMkCXTypeInfos: outputArray: identifier: SPD_NON_ID type_id: 83886105 Error: spdMkCXTypeInfos: unknown_declarator_sort: ident_id: 33554557 declarator_id:25165965 Warning: spdMkCXTypeInfos: outputStruct: identifier: SPD_NON_ID type_id: 83886097 Warning: spdMkCXTypeInfos: outputArray: identifier: SPD_NON_ID type_id: 83886093 Error: spdMkCXTypeInfos: unknown_declarator_sort: ident_id: 33554565 declarator_id:25165971 Warning: spdMkCXTypeInfos: outputStruct: identifier: SPD_NON_ID type_id: 83886100 Error: spdMkCXTypeInfos: unknown_declarator_sort: ident_id: 33554552 declarator_id:25165961 Warning: spdMkCXTypeInfos: unknown_type_sort:83886096 10 Warning: spdMkCXTypeInfos: outputArray: identifier: SPD_NON_ID type_id: 83886103 Warning: spdMkCXTypeInfos: outputArray: identifier: SPD_NON_ID type_id: 83886225 java org.sapid.checker.main.Main main.c default.xml File:main.c, Id: null, Level: 5, Line: 4 4, Column: 2 6, Offset: 35, Length: 4, Message: misra-56

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10784
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン