[an error occurred while processing this directive]
[APACHE DOCUMENTATION]

Apache HTTP Server Version 1.3

ソースの再構築

1.3 の時点で Apache ソースディレクトリは再構築されています。この再構築はディレクトリ構造を単純化するようにデザインされ、モジュールの追加と、モジュール authors にコンパイル時のオプションを指定する方法を与えるか、バイナリモジュールを配布するのを簡単にします。

変更の概要

ソースディレクトリの変更は: その他にも、以下の拡張が行われています:

モジュールの追加

モジュールは src/Configuration でリファレンスを追加することによって Apache に加えられます。1.3 より前の Apache のバージョンでは、コンフィギュレーションに加えられた行はこのように見えます:
  Module    status_module    mod_status.o
1.3 から先では、AddModule 行が代わりに使われ、普通はこのように見えます:
  AddModule    modules/standard/mod_status.o
AddModule に対する引数は、src やモジュールファイルのソース、オブジェクトファイルに相対するパスです。

普通モジュールを追加するときは、モジュール author の命令に従うべきです。しかしながら、単一のソースファイルとしてモジュールが生じると、mod_foo.c を示し、それから以下のように、推奨されたApache にモジュールを追加する方法を示します:

モジュール authors の新機能

Apache の以前のリリースでは、新しいモジュールが src ディレクトリに追加され、もしモジュールが追加のコンピレーションのオプションを要求すると(ライブラリのように)、それは Configuration に追加されます。 ユーザはまた、Configuration のモジュール行に追加するためのモジュールの構造名を教えなければなりません。

Apache 1.3 以降から、モジュール authors はこれらの新しい特徴を利用することができます:

ここからは、Apache 1.3 とそれ以降でモジュールをどのように実装するのか、モジュールのエンドユーザに何を教えるのかを紹介します。

簡単なソース配布の構築

単一のファイルとして配布された、単純な add-on モジュールを考えてください。例えば、mod_demo.c と呼ばれるものです。このモジュールのアーカイブは、ディレクトリ名にふさわしい二つのファイルで構成されるべきです。例えば: (もちろん、end-user の説明、README等もアーカイブで供給されます) エンドユーザは Apache ソースツリーの src/modules ディレクトリにあるこのアーカイブを解凍するように言われます。これは新しいディレクトリである src/modules/mod_demo を作ります。それから、Configuration ファイルに以下の行を追加する必要があります:
  AddModule  modules/mod_demo/mod_demo.o
それから普通に Configuremake を実行します。

mod_demo/Makefile.tmpl はモジュールソースの依存を含むべきです。例えば、いくつかの標準 Apache モジュール API 機能のインターフェースとなる、単純なモジュールは、このようになるかもしれません:

  mod_demo.o: mod_demo.c $(INCDIR)/httpd.h $(INCDIR)/http_protocol.h
もしユーザが Configure を実行すると、Apache はこのモジュールを構築するために、完全な makefile を作ります。もしこのモジュールもライブラリのように、与えられるいくつかの追加の構築時のオプションを要求するなら、次のセクションを見てください。

もしモジュールもヘッダファイルに付属すると、これらはアーカイブに追加されます。もしモジュールが様々なソースファイルから構成されていると、与えられた makefile を使っているライブラリファイルに構築されます。この場合、mod_demo/Makefile として makefile を配布し、mod_demo/Makefile.tmpl を含まないでください。もし ConfigureMakefile.tmpl を見ると、なんらかの存在する Makefile を上書きするのを安全だと見なします。

Makefile.tmpl から makefile が自動的に作られるモジュールディレクトリの例については、Apache src/modules/standard を見てください(このディレクトリも、単一のディレクトリで様々なモジュールをどのように配布しているのかを示していることに注意してください)。 カスタムの makefile (それぞれにライブラリとオブジェクトファイルを構築するための)を使って構築されたモジュールの例としては src/modules/proxysrc/modules/example を見てください

コンパイル時の情報を追加する

Apache ソースファイル(あるいは以下のモジュール定義ファイル)は、追加のライブラリのようなコンパイル時のオプションを追加するための Configure によって使われる情報を含んでいます。例えば、もし上の例の mod_demo が DBM ライブラリに対してリンクされた Apache を要求すると、以下のテキストは mod_demo.c のソースに挿入されます:
/*
 * Module definition information - the part between the -START and -END
 * lines below is used by Configure. This could be stored in a separate
 * instead.
 *
 * MODULE-DEFINITION-START
 * Name: demo_module
 * ConfigStart
    LIBS="$LIBS $DBM_LIB"
    if [ "X$DBM_LIB" != "X" ]; then
        echo " + using $DBM_LIB for mod_demo"
    fi
 * ConfigEnd
 * MODULE-DEFINITION-END
 */
これは、コンパイラからそれを隠すための C 言語のコメントの内側に含まれることに注意してください。 MODULE-DEFINITION-STARTMODULE-DEFINITION-END を含んでいる行間は Configure に使われます。Name: 行はモジュールの構造名を与えます。もしファイル名を基にして推測する Configure がなければ、これはこの場合には実際必要ありません(すなわち、与えられた "mod_demo" で、 "mod_" の先導を外し、構造名を得るために "_module" をアペンドします。これは、Apache で配布された全てのモジュールと協力します)。

Configure によって実行されるような、ConfigStartConfigEnd の間にある行はコンパイル時のオプションとライブラリを追加するために使われます。この場合には、($DBM_LIBから) DBM ライブラリを標準のコンピレーションライブラリ($LIB) に追加して、メッセージを表示します。

内蔵されたモジュールの定義の例については、デフォルト配布の mod_auth_dbm.c を見てください。

バイナリ配布についてのモジュール定義情報

もしモジュールがソースよりもむしろバイナリとして(オブジェクトかライブラリ)配布されると、ソースファイルにモジュール定義情報を追加することを不可能にします。この場合には、.module の拡張子で、オブジェクトやライブラリファイルのような、同じベース名を持つ分割ファイルに置かれます。例えば、もし配布されたモジュールのオブジェクトファイルが mod_demo.o なら、モジュール定義ファイルは mod_demo.module を呼ばれるべきです。上にあるように、同じ情報を含んでいますが、 MODULE-DEFINITION-START 等で範囲を制限されたり、内部の C コメントである必要はありません。例えば:
Name: demo_module
ConfigStart
 LIBS="$LIBS $DBM_LIB"
 if [ "X$DBM_LIB" != "X" ]; then
     echo " + using $DBM_LIB for mod_demo"
 fi
ConfigEnd
個々のモジュール定義ファイルの例についてはデフォルト配布の mod_auth_db.module を見てください。

Apache HTTP Server Version 1.3

検索文字
Index The English original manual is here.
このページの情報に関わる、ご質問、お問い合わせは、 japache@infoscience.co.jpまで。

JAPACHE ホームページ