[/usr/local/libexec/fml/loader (wrapper)の実行]
この段階では、まだ fml8 Perl モジュール群に制御が移っていません。 このプログラムは、loader 内の関数 Bootstrap() を実行します。
distribute など libexec/ 以下にあるプログラム群は、 どれも、この loader へのシンボリックリンクです。 /usr/local/libexec/fml/ 以下を参照してください。
[loader 内 Bootstrap() 関数の実行]
/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() を実行し、 FML::Process::Flow 経由で、 配送用、コマンドメール用などの各プロセスへ制御を移していきます。
この時点で、 どのモジュール(例: FML::Process::Distribute) をロードするのかは分かっています。 FML::Process::Distribute オブジェクトなどは、 FML::Process::Flow の関数を呼び出す際に引数として渡されています。
FML::Process::Flow 経由で、 各モジュール(例: FML::Process::Distribute) のメソッドを呼び出します。
FML::Process::Flow の中には、 どのように fml8 プロセスを実行するかが規格化/定義されています。 おおむね、どのプロセスも
$process = new FML::Process::なになに; $process->prepare($args); $process->verify_request($args); $process->run($args); $process->finish($args);を実行していきます。 のため、各プロセスは、 それぞれについて適当なメソッドを 「FML::Process::なになに」 以下のクラスに用意する必要があります。 ダミーでもいいので、全メソッドの定義が必要です。
Copyright (C) 1993-2025 Ken'ichi Fukamachi mail:< fukachan at fml.org >