Fortranのプログラムのモジュールの依存関係を可視化したかったので、doxygenを使おうかと思いたった。しかしdoxygenをうまく使えなかったので、そのかわりにFordを使うことにした。結論からいうととても役に立つプログラムであることがわかった。とくにネットワークのグラフがわかりやすい。余談だがFordは有名な自動車製造業者なので検索性が低いのが曲者である。
導入
だいたいこの記事を読めばわかる。この記事と自分の環境が異なるところがあるので、実際にやった内容をメモする。
使っている環境はWSL2上のUbuntu 22.04で、Pythonはvenv+pyenvである。venvに入ってからインストールは下記のとおり。
$ pip install ford
グラフを描くにはgraphvizのインストールが必要。
$ sudo apt install graphviz
実行
実行するには設定ファイルが必要である。たとえば名前をsettings.mdとして下記のように設定する。
src_dir: ./src
output_dir: ./api-doc
include: ./include
project: sample_project
summary: something funny
author: salamann
license: by-nc
preprocess: False
graph: true
fixed_length_limit: False
参考記事に足しているのは3行。
- preprocess: これがないとエラーになったので追加
- graph: graphvizで依存関係のグラフを描くために追加
- fixed_length_limit: f77の場合、72列を通常超えてはいけないが、実際に超えている場合にこれを指定しないとエラーとなる。
- include: インクルードファイルが入っている別フォルダがある場合に足す
たとえば下記で実行できる。
$ python -m ford ./settings.md
注意事項
実行してみると、コードによっては実行が途中で止まってしまったり、ドキュメントが生成されなかったりする。たとえばひっかかった点は次のとおり。
Subroutineの名前にスペースが含まれている
Subroutine名にスペースが含まれているとドキュメントが生成されない。ifortのコンパイルはなぜか通るが本来のルールからは外れてそうなので直したほうが素直。
文字コードがSJIS
SJISで書かれていると通らなかった。これは日本語がコード内に含まれている場合かもしれない。その場合は、次のコードで変換できる。
$ iconv hoge.f -f sjis -t utf8
空のファイルをIncludeしている
コメントだけのファイルをIncludeしていると通らなかった。コメントだけのファイルをなぜIncludeしないといけないのかは謎だが、Includeしなければ通る。
コメントの種類
行内にコメントを書きたい場合、!*
と書いてあると通らない。これは!
にすれば通る。
タブ
行頭のスペース6個の替わりにタブを使うと通らない。スペース6個に変える。
コメント