mkmm のソース ファイル拡張子の処理

このセクションは、Windows プラットフォームの拡張モジュールの開発者を主な対象としています。
casp1032jp
このセクションは、Windows プラットフォームの拡張モジュールの開発者を主な対象としています。
UNIX および Windows のファイル システムで異なるファイル命名規則がいくつかあります。最も顕著な違いは、実行可能ファイルやバッチ ファイルなど、Windows プラットフォーム上の特定の種類のファイルには特定のファイル名の拡張子(.bat、.com、.cmd、.exe、.ksh など)が必要ですが、これは通常、UNIX システムには当てはまらないということです。
このような違いがあると、UNIX ベースのプラットフォームと Windows プラットフォームの両方に同梱されるマルチプラットフォームの拡張モジュールのインデックス ファイルを使用する際に不便に感じる場合があります。たとえば、UNIX ベースでは mytool と呼ばれるコンパイルされた実行可能ファイルは、Windows では mytool.exe と呼ばれます。そのため、このような実行可能ファイルを同梱するために準備される拡張モジュールのインデックス ファイルでは、次のように、2 つの別の file: エントリ(つまり、UNIX プラットフォームと Windows プラットフォームに対してそれぞれ 1 つずつ)が必要になるのは明らかです。
file: SS exe ? mytool ? ? plat!=intel file: SS exe ? mytool.exe ? ? plat=intel
ただし、インデックス ファイルで多くの重複したエントリが必要になる可能性があるため、この解決策では不十分です。代替の解決策として、${EXE} 環境変数を使用し、UNIX では NULL 文字に、Windows では「.exe」に設定する方法があります。たとえば、次のような 1 つのインデックス ファイル エントリがあるとします。
file: SS exe ? mytool${EXE} ? ? plat=intel
このエントリは、Linux および Windows の各プラットフォーム用のファイルを同梱するのに十分です。ただし、多くのファイルが含まれている場合、拡張子が必要なファイルを正確に判断するのはまだ面倒なことです。
拡張モジュール開発者のこの負担を軽減するために、mkmm ツールでは、file: および head: エントリの処理時に標準のファイル名拡張子を自動的に確認します。
たとえば、mkmm を使用して、VCD に拡張モジュールを追加するとします。さらに、拡張モジュールのインデックス ファイルに以下のエントリが含まれているとします。
file: SS exe ? mytool ? ?
mkmm では、このエントリを処理する際に、さまざまな標準の拡張子を持つ、ソース ファイル mytool を検索します。拡張子のデフォルト リストは次のとおりです。
  • 拡張子なし
  • .exe
  • .cmd
  • .bat
したがって、mkmm ではまず、ソース ファイル mytool を検索してから、mytool.exe、mytool.cmd の順に検索し、最後に mytool.bat を検索します。Linux プラットフォームの場合、mkmm は、mytool を見つけて同梱しますが、mytool が存在しない Windows プラットフォームの場合、mytool.exe を見つけて同梱します。そのため、この 1 つの file: エントリは、UNIX または Windows を変更しなくても機能します。
まれに、file: または head: エントリの処理時に mkmm で使用される拡張子リストを変更する必要がある場合があります。その場合は、exts=<
extlist
> オプションを使用します。ここで、<
extlist
> は確認する拡張子のカンマ区切りリストです。たとえば、以下のコマンドがあるとします。
mkmm exts=,.exe,.com DCNET.i
このコマンドは、mkmm に対して、インデックス ファイル DCNET.i での file: および head: エントリの処理時に、まず、拡張子のないもの(最初のカンマの前の <
extlist
> には何もないため)を確認してから .exe 拡張子を確認し、最後に .com 拡張子を確認するように指示します。
mkmm は、ソース ファイルを見つけられずに拡張子リストの最後に到達すると、拡張子のないソース ファイル名を使用します。これは、mkmm がソース ファイルを見つけられないため、処理に失敗することを意味します。