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を見ると、プリプロセス処理終了後なので、
マクロ展開されたソースが手に入ります。