最後の章「Apache 2.0.xにおけるモジュールの開発」が書き終わり、ようやく一通り書き終わったわけです。ただしこれから推敲や書き足し/削りがはじまるので、ここからがまた大変なんだろうけど。でもちょっと満足。←危険
Apache 2.0.xのモジュール開発に関してしらべてたら、結局ハンドラの登録方法が違うのと、APR(Apache Portable Runtime)に多くの関数とデータ型が移行したので名前とかが違うって点がキモ。ただし全体的な作法や方針、考え方みたいなものはさほど1.3.xのものとは差異がない。
とはいっても実質問題関数名とか違うので移植するのは大変だと思う。ただ1.3.xになれたひとなら2.0.xでもソコソコツマヅクことなくモジュールを書けるはず。できることが増えたし便利な要素も多いし。
ちょっとハマったのがDSOじゃなくて静的にモジュールを組み込む手順。Apache 1.3.xの頃はconfigureスクリプトに --add-module=/path/to/module でビルドすれば、Apacheのソースツリー配下にコピーしてビルドシステムに統合してくれていたので楽だったんだけど、Apache 2.0.xではそーいう仕組みがない。(少なくとも現在は正しく動いていない)
結局ドーするかっつーとソースツリー配下のmodulesディレクトリに適当な名前のディレクトリを作ってそこに
modules/site_module/mod_mymodule.c
modules/site_module/Makefile.in
modules/site_module/config.m4
をまず設置する。モジュールのコードはapxsで吐いた奴でイイとして、Makefile.inとconfig.m4はそれぞれ自分で書く必要がある。必要があると言っても
% cat modules/site_module/Makefile.in
include $(top_srcdir)/build/special.mk
% cat modules/site_module/config.m4
APACHE_MODPATH_INIT(site_module)
APACHE_MODULE(mymodule, Sample My Module)
APACHE_MODPATH_FINISH
って程度。
で、設置した後は
すればconfigureスクリプトが更新されて--enable-mymoduleオプションが使用できるようになる。で--enable-mymodule=staticなら静的、--enable-mymodule=dynamicなら動的に組み込むようになるって寸法。
apxsでDSOとして組み込むなら相変わらず楽なんだけど、静的に組み込むのがちょっと手間。ってまぁ手間といえるほど手間では無いと思うけど、1.3.xみたいにスカッと入れる方法が無いチックなのがちょっとキモイ。
そのかわりconfig.m4で独自のチェックを実行したり、依存するオブジェクトファイルやライブラリを指定することもできるので、込み入ったモジュールを作るときには便利。
これ以外でスマートにサクっと組み込む手順を知っている方がいたらマジへるぷみーでつ。
_____
Mac OS X 10.1.5に関して追記:
Mac OS X上でconfigureスクリプトはサーチパスからlibtoolではなくglibtoolを検索する。Appleのデベロッパーツールを組み込んだ場合
/usr/bin/libtool
/usr/bin/glibtool
がインストールされるがこれらのバージョンが古い場合、追加したモジュールのスタティックリンクに失敗する。あくまでも検索されるのはglibtoolなので、仮に最新版のlibtoolを
/usr/local/bin/libtool
に置いたとしてもNG。この場合は
# ln -s /usr/local/bin/libtool /usr/local/bin/glibtool
もしくは
# mv /usr/local/bin/libtool /usr/bin/glibtool
しておけば問題は回避できる。あ、PATHが/usr/local/bin:/usr/binな並びならばってことで。
Fink使ってる人は多分困らないと思うんだけど、ぼくはFinkとか使いたくない人なので(汗)