檜山正幸のキマイラ飼育記 このページをアンテナに追加 RSSフィード Twitter

キマイラ・サイトは http://www.chimaira.org/です。
トラックバック/コメントは日付を気にせずにどうぞ。
連絡は hiyama{at}chimaira{dot}org へ。
蒸し返し歓迎!
このブログの更新は、Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama
ところで、アーカイブってけっこう便利ですよ。

2012-03-26 (月)

SLOCCountが動き出すまで

| 09:39 | SLOCCountが動き出すまでを含むブックマーク

先日、「ソフトウェアのインストールや更新はやっぱりメンドクサイ」という記事を書きましたが、またしてもソフトウェアのインストールで時間を取られてしまいました。Linux用だがWindowsでも使える(とかその逆の)ソフトウェアって、けっこうハマります。

事の発端は、SLOCCount(http://www.dwheeler.com/sloccount/)をWindowsにインストールしてみようと、sloccount-2.26.tar.gz をダウンロード。http://www.dwheeler.com/sloccount/sloccount.html に、Cygwinベースのインストール方法が丁寧に書いてあります。僕はMinGW/MSYSを使ってますが、大差ないだろうと。

早速makeしてみると、flexが足りないようです。いつもの悪い癖で、あんまり考えないでそれらしきアーカイブを探してはとりあえずインストール。GnuWin32の提供しているパッケージの一覧 http://gnuwin32.sourceforge.net/packages.html から http://gnuwin32.sourceforge.net/packages/flex.htm を見つけて Developer files : flex-2.5.4a-1-lib.zip をダウンロードしたんですが、必要なのはflexのlib/* やinclude/* ではなくて、flexコマンドでした。 Binaries : http://gnuwin32.sourceforge.net/downlinks/flex-bin-zip.php のほうから実行可能なflex一式 flex-2.5.4a-1-bin.zip を入手してインストール。

zlibも必要だ、ってんで、http://gnuwin32.sourceforge.net/packages/zlib.htmhttp://gnuwin32.sourceforge.net/downlinks/zlib-lib-zip.php とたどって、zlib-1.2.3-lib.zipを入手。

一回目のmakeが失敗した残骸が原因で、

gcc -Wall pascal_count.c -o pascal_count.exe
c:/Installed/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `WinMain@16'
collect2: ld returned 1 exit status
make: *** [pascal_count.exe] Error 1

なんてエラーが出てしばし悩んでいました。Makefileの書き方を工夫すれば回避できるでしょうが、まー残骸に気付かなかった僕も悪い、と。

ここで、MinGW/MSYSの問題点に触れておくと、パッケージマネージャとか統合されたアーカイブサイトがないんですよね。http://gnuwin32.sourceforge.net/http://sourceforge.net/projects/mingw/ にアーカイブがありますが、同じものが重複しているのか違う品揃えなのかよくわかりません。ダウンロードした後、どうやってインストールするか一律に決まっているわけでもないようです。僕は全部手作業でやりましたが、自由度がある反面、とても面倒で時間がかかります。

MinGW/MSYSでは、gccGNU Autotoolsを使う最小限のビルド環境をMinGWが提供し、それ以上のツールやソフトウェアはMSYSが受け持つ建前です。が、境界線は曖昧です。flexMinGW側に入れた(/mingw/bin/flex.exe)のですが、後述のPerlはMSYS用だったのでMSYS側(/bin/perl.exe)に入れました。ライブラリファイルも .a、.lib、.dllがあり、配置する場所に気を付けないとうまく見つけられなかったりします。ああーメンドクサイ。

さて、sloccountのコンパイルはできたのですが、make -n install してみると、たくさんの実行ファイルを /usr/local/bin/ にコピーするようです。

install \
 ada_count \
 asm_count \
 awk_count \
 break_filelist \
 cobol_count \
 compute_all \
 compute_sloc_lang \
 count_extensions \
 count_unknown_ext \
 csh_count \
 exp_count \
 fortran_count \
 f90_count \
 generic_count \
 get_sloc \
 get_sloc_details \
 haskell_count \
 lex_count \
 lisp_count \
 make_filelists \
 makefile_count \
 modula3_count \
 objc_count \
 perl_count \
 print_sum \
 python_count \
 ruby_count \
 sed_count \
 sh_count \
 show_filecount \
 sloccount \
 sql_count \
 tcl_count \
 c_count.exe \
 java_count.exe \
 lexcount1.exe \
 pascal_count.exe \
 php_count.exe \
 jsp_count.exe \
 ml_count.exe \
 /usr/local/bin

install -d /usr/local/share/man/man1
install sloccount.1.gz /usr/local/share/man/man1
install -d /usr/local/share/doc/sloccount-2.26-1
install sloccount.html README TODO ChangeLog /usr/local/share/doc/sloccount-2.26-1

MinGW/MSYSだと、/usr/local/ は(デフォルトでは)使わないのですよね。/usr/local/bin/ とか作ればいいのですが、ナントカbin/ になんでも詰め込むのはイヤなので、sloccountコマンド群は /usr/local/sloccount/ に入れることにしました。

sloccountには、Perlスクリプトもあるのですが、それらは #!/bin/perl で始まっています。/bin/perl はありません。Windows用のActivePerlがあるので、シンボリックリンクを張ってみました。ところが、MinGW/MSYSでは、ln -s としても豪快に丸ごとコピーするのです。それでも動けばいいのですが、やっぱりうまく動きませんわ。

http://sourceforge.net/projects/mingw/files/MSYS/Extension/perl/ から perl-5.8.8-1-msys-1.0.17-bin.tar.lzma をダウンロード。拡張子 .lzma がなんだかワカリマセン。tar tvf perl-5.8.8-1-msys-1.0.17-bin.tar.lzma --lzma とか、お尻に--lzmaオプションを付けると扱えるようです。フム。

MSYSの /usr/ 以下にPerlをインストールして、/bin/perl が使えると思ったら、cryptのDLLがないとか言ってるし。http://sourceforge.net/projects/mingw/files/MSYS/Extension/crypt/ から libcrypt-1.1_1-3-msys-1.0.13-dll-0.tar.lzma をダウンロードしてインストール。/bin/perl が起動できる。フー。

これでやっとsloccountが動くようになりました。sloccountは、ソースコードのサイズから掛け算と割り算して、人月だの値段だのを出してくれるという、役に立つんだかジョークなんだか分かんないツールですが、Catyソースコードを測ってみましょう。

$ sloccount .
Creating filelist for caty
Creating filelist for lib
Creating filelist for test
Categorizing files.
Finding a working MD5 command....
Found a working MD5 command.
Computing results.


SLOC    Directory       SLOC-by-Language (Sorted)
28923   caty            python=28923
5964    lib             python=5964
2351    test            python=2351


Totals grouped by language (dominant language first):
python:       37238 (100.00%)




Total Physical Source Lines of Code (SLOC)                = 37,238
Development Effort Estimate, Person-Years (Person-Months) = 8.92 (107.09)
 (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months)                         = 1.23 (14.77)
 (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule)  = 7.25
Total Estimated Cost to Develop                           = $ 1,205,528
 (average salary = $56,286/year, overhead = 2.40).
SLOCCount, Copyright (C) 2001-2004 David A. Wheeler
SLOCCount is Open Source Software/Free Software, licensed under the GNU GPL.
SLOCCount comes with ABSOLUTELY NO WARRANTY, and you are welcome to
redistribute it under certain conditions as specified by the GNU GPL license;
see the documentation for details.
Please credit this data as "generated using David A. Wheeler's 'SLOCCount'."

$

開発費 $ 1,205,528、だいたい1億円と評価。ふーん。