libexec/loader (wrapper) Bootstrap() を実行する。 libexec/distribute などは、皆この loader へのシンボリックリンクです。 /usr/local/libexec/fml/ を参照して下さい。
/usr/local/etc/fml/main.cf を読み込む。 読み込むと fml のバージョンが分かる。 main.cf の値から @INC を再設定しバージョン依存性を解決します。 default_config.cf はバージョン依存であるので、 ここでまずバージョンを評価しなければいけないことに注意してください。
@ARGV を評価し、 どのMLの config.cf 群をロードすればいいのかを準備します。
次に FML::Process::Switch (バージョン依存)クラスを ロードします。
Bootstrap2() および ProcessSwitch() を実行し、 配送用、コマンドメール用の各プロセスへ 制御を移します(分岐する)。 この時は $0 から自分の名前を知り、 どのプロセスへ分岐すればいいのかを判断しています。
(ポリモーフィズムの例) モジュールをダイナミックバインディングし、 該当するプロセスオブジェクトを生成する。 そして、プロセスをスタートさせます。 FML::Process::Flow の中に、 どのように fml プロセスを実行するかが 定義されています。大雑把には
$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>.