/usr/local/libexec/fml/loader (wrapper)。 これは Bootstrap() を実行します。 distribute などは、皆この loader へのシンボリックリンクです。 /usr/local/libexec/fml/ 以下を参照してください。
/usr/local/etc/fml/main.cf を読み込み、 fml のバージョンを知ります。 また、main.cf の値から @INC (Perl のライブラリサーチパス)を再設定し、 読み込むべきライブラリのバージョン依存性を解決します。 default_config.cf.{ja,en} はバージョン依存ですので、 設定ファイルを読み込む前に、 この段階でバージョンを評価しなければいけないことに注意してください。
@ARGV (実行されたプログラムの引数 )を評価し、 どのMLの config.cf (設定ファイル)群を読み込むのかを判断します。
次に FML::Process::Switch (バージョン依存)クラスをロードします。
Bootstrap2() および ProcessSwitch() を実行し、 配送用、コマンドメール用などの各プロセスへ制御を移します。 この時点で、すでに $0 から、 どのプロセスへ成りかわればいいのかは分かっています。
(ポリモーフィズムの例) モジュールをダイナミックバインディングし、 該当するプロセスオブジェクトを生成、 そして、プロセスをスタートさせます。 FML::Process::Flow の中に、 どのように fml8 プロセスを実行するかが 定義されています。おおまかには
$process = new FML::Process::なにか; $process->prepare($args); $process->verify_request($args); $process->run($args); $process->finish($args);のような実行順です。 各プロセスは、それぞれについて適当なメソッドを FML::Process:: 以下のクラスで用意する必要があります。
author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.
For questions about FML, e-mail <fml-bugs@fml.org>.