apacheのマクロを展開して読みやすくしてみる

Apacheのソースを読んだことがある人なら覚えがあると思いますが、
マクロが展開されて関数が出来上がるようなパターンのものが結構あります。

これのせいで慣れないうちは、関数がない?とか言いながら、分からなくてハマったりします。
マクロを解析してもいいですし、読み慣れたらある程度どうなるか予想できますが、
どちらにしても時間はかかるので、マクロ展開してしまえということで展開の方法を書いておきます。

ここでは、例として、unixd.cのマクロ展開したソースを吐き出してみます。

1. とりあえず普通にビルドしてみます。 
 $ ./configure --prefix=/usr/local/apache2.2.6 --enable-so  --enable-mods-shared=all

  # makeのログを残すためにteeを使います。自分の好みでログ残すようにしてます。
  $ make 2>&1 | tee make.log

2. マクロ展開してみますというかプリプロセス処理通すだけですが。
 #展開したいソースファイルのある場所に移動します。 
 $ cd ./os/unix

  # 再makeのためにオブジェクトファイルを消しておきます。
  $ rm unixd.o

  # 再makeしてみます。ログを『make.log』という名前で作っておきます。
 $ make unixd.o 2>&1 | tee make.log

 # makeのログを編集します。
  $ vim make.log
  
  # gccのオプションを 『-c』 から 『-E』 に変更して結果をunixd.Eに出力します。
  gcc ****** -c unixd.c
  ======> 
  gcc ****** -E unixd.c > unixd.E

  gccのオプションの『-c』は、コンパイルまで行われてしまうので、
 その手前のプリプロセス処理までで止めるためにオプションを『-E』に変更します。
  
  # 編集したコマンドを実行します。
 $ chmod +x make.log
  $ ./make.log

  # マクロ展開されたソースはインデントの関係で読みにくいので、整形します。

 # indentをインストールします。
  $ sudo apt-get install indent

  # indentでCソースを整形してみます。うまくいくかはやってみて確認してください。
  $ cat unixd.E | indent > unixd.E.indent
  
 できあがった unixd.E.indentを見ると、プリプロセス処理終了後なので、
 マクロ展開されたソースが手に入ります。