最近巨大なソースファイルを見なくてはいけない状況が続いています。といっても、本当に見なきゃ行けないのはそのうちの一部なんだけど、データ構造などはある程度抑えなくてはならないので、結局ソースのあっちこっちを行ったり来たりしなくてはならない。
そんなこんなで、何とか見やすくする方法はないものかと検索してみた。結果、開発がアクティブなものとして下記があるようだ.
職場で他の方が管理しているOpen Grokは使ったことが有るので、あえてGNU Globalを使ってみることにしました。
決め手は、vimやEmacs, 秀丸エディターでタグシステムが使えることに興味を持ちました。
インストール
先ずは本題の「GNU Global」のインストール
> wget ftp://ftp.gnu.org/pub/gnu/global/global-6.2.8.tar.gz # 版数は適宜確認して下さいください > ./configure && make && make install # ./configure にてエラーがでる場合、"ncurses-devel.x86_64"をインストール "configure: error: curses library is required but not found."
次いで、html表示する場合に追加で呼び出し関係を出力することができるので、それに使用する「cflow」をインストール
> wget ftp://ftp.gnu.org/gnu/cflow/cflow-1.4.tar.gz #版数は適宜確認してください > tar xzvf cflow-1.4.tar.gz > ./configure && make && make install
使い方
GNU Global は色々な使い方があるが、取りあえずはhttp(web)で次々タグ引きしながらソールが読めるようにする。
ここでは GNU global 6.2.8 を例にします(インストールに使用したものを使用)
> cd glibc-2.17 # ソースのあるフォルダへ移動 > gtags -v # タグファイル"GPATH", "GRTAGS", "GTAGS"が作成される > cflow --tree --format=posix `global -P` > cflow.out # call flow(関数呼び出しフロー)作成 > cflow --tree --format=posix --revers `global -P` >cflow-r.out # callee flow(関数呼び出し元フロー)作成 > htags -Fgsanf --cflow=cflow.out --callee-tree=cflow-r.out --tabs 4 -t "GNU Global 6.2.8" > cp G* HTML > vi HTML/cgi-bin/global.cgi(参照するtagファイル位置の調整) 132 if (-f "../GTAGSROOT" && open(GTAGSROOT, "../GTAGSROOT")) { ⇒ if (-f "./GTAGSROOT" && open(GTAGSROOT, "./GTAGSROOT")) { 133 $gtagsroot = <GTAGSROOT>; 134 chop($gtagsroot); 135 close(GTAGSROOT); 136 } else { 137 $gtagsroot = "../.."; ⇒ $gtagsroot = "./.."; 138 } > for i in `find HTML -type f -and -name "*.html"`; do nkf -sLw --overwrite $i; done # 文字コード(日本語コメントを含む場合)を適宜変更(web公開はUTF-8で良いので特に上記は必要なし) Window 環境に持って行き、ローカル参照する場合は上記でS-JIS変換しておくと良い
後はHTMLフォルダをweb公開フォルダへ移動すればOK。ちなみにできあがったhtml(web)閲覧システムはこんな感じです。
glibc-2.17 も作成しましたが、cflowによるcall, callee flow作成が上手く行かない…。取りあえず、call, callee flow 無しで作成したのがこちらです。
参考リンク
http://www.machu.jp/diary/20090307.html#p01
http://skillnote-one.blogspot.jp/2012/11/cflowglobal-tag-system.html
http://dharry.hatenablog.com/entry/20120508/1336413218