ソースビューア

最近巨大なソースファイルを見なくてはいけない状況が続いています。といっても、本当に見なきゃ行けないのはそのうちの一部なんだけど、データ構造などはある程度抑えなくてはならないので、結局ソースのあっちこっちを行ったり来たりしなくてはならない。

そんなこんなで、何とか見やすくする方法はないものかと検索してみた。結果、開発がアクティブなものとして下記があるようだ.

  1. GNU Global
  2. Open Grok
  3. XLR
  4. milkode

職場で他の方が管理している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