GNU GLOBAL による OpenFOAM ソースコードの探索

2018年4月4日

はじめに

GNU GLOBAL を使って OpenFOAM のソースコードを探索する。

使用バージョン

Ubuntu 16.04 LTS、OpenFOAM v1712

インストール

apt-get でインストール。

$ sudo apt-get install global

設定

GNU GLOBAL は、ソースコードのタグを作成し、キーワードの検索を行うことができる。VIM から使うこともでき、ソースコード間の移動を行ったりできる。また、Doxygen のように HTML ドキュメントを作成することもできる。まず、HTML ドキュメントの作成について記述する。

OpenFOAM のソースディレクトリに移動する。

$ foam

ソースコードのタグを作成するには gtags を用いる。その設定ファイルは gtags.conf であり、"/usr/share/doc/global/examples/gtags.conf" にサンプルがある。これをコピーする。

$ sudo cp /usr/share/doc/global/examples/gtags.conf .

ここで、OpenFOAM は /opt にインストールされているものとして sudo を使っている。

OpenFOAM 用に設定を修正する。項目 skip で無視させるものを指定できる。ここに "tutorials/"、"doc" などを追加する。

common:\
        :skip=GPATH,GTAGS,GRTAGS,GSYMS,HTML/,HTML.pub/,html/,tags,TAGS,ID,y.tab.c,y.tab.h,.notfunction,cscope.out,
cscope.po.out,cscope.in.out,.gdbinit,SCCS/,RCS/,CVS/,CVSROOT/,{arch}/,.svn/,.git/,.cvsrc,.cvsignore,.gitignore,.cvspass,.cvswrappers,.deps/,autom4te.cache/,.snprj/,tutorials/,doc/,platforms/,wmake/,bin/,etc/,modules/,test/,Make/,lnInclude/:\
        :langmap=c\:.c.h,yacc\:.y,asm\:.s.S,java\:.java,cpp\:.c++.cc.cpp.cxx.hxx.hpp.C.H,php\:.php.php3.phtml:

gtags を実行。

$ sudo gtags --gtagsconf gtags.conf

GPATH, GRTAGS, GSYMS GTAGS というファイルができる。

HTML ドキュメントを作成するには、htags を用いる。

$ htags -ansx

HTML ディレクトリができる。HTML/index.html をブラウザで開く。

$ firefox HTML/index.html

リンクの下線が邪魔に感じたので、スタイルシートを編集して下線を消した。

HTML/style.css

a               { text-decoration: none; }

VIM での利用

プラグインを用意。

$ mkdir -p ~/.vim/plugin/
$ cp /usr/share/doc/global/examples/gtags.vim.gz ~/.vim/plugin
$ cd ~/.vim/plugin
$ gzip -d gtags.vim.gz

キーバインドを設定。

~/.vimrc

map <C-g> :Gtags 
map <C-h> :Gtags -f %<CR>
map <C-j> :sp<CR>:GtagsCursor<CR>
map <C-n> :cn<CR>
map <C-m> :cp<CR>

OpenFOAM のソースディレクトリを VIM で開く。

$ foam
$ vim .

キーワード上で Ctrl+j でジャンプする (戻るときは Ctrl+o)。Ctrl+n, m で候補を変更できる。Ctrl+h で関数一覧が表示される。Ctrl+g でキーワードを検索できる。

VIM の機能だが、パスの設定をしておけば Ctrl-w f でインクルードファイルに移動できる。パスの設定は以下のように行う。

˜/.zshrc

export OPENFOAM_INCLUDE=`find $WM_PROJECT_DIR -type d  | grep lnInclude | tr '\n' ','`

˜/.vimrc

function! s:add_path(path)
    execute "set path+=".a:path
endfunction

call s:add_path($OPENFOAM_INCLUDE)

参考