エクステンション・マニフェストファイル

Fabric Engine のエクステンションには必ずエクステンション・マニフェストファイルを含めます。このファイルは、ファイル名 ExtensionName.fpm.json の形式にします。エクステンション名を,定義に通り, マニフェストファイルのファイル名の一部とします。

ファイル名が示すように、エクステンション・マニフェストファイルはJSON形式です。JSONフォーマットについては http://json.org/ を参照してください。マニフェストファイルの内容は、2つのメンバを持った JSONオブジェクトです。それぞれ libscode です。どちらの値も、文字列配列あるいはただの文字列です。ただの文字列の場合、要素イチの文字列配列と同じ扱いになります。 libs メンバは必須ではありません。抜かして記述した場合、空リストとして扱われます。対して code メンバは必須です。

次はマニフェストファイルの例 ExtensionName.fpm.json です:

{
  "version": "1.0.0",
  "libs": ["OneLib", "SecondLib"],
  "code": ["OneSourceFile.kl", "AnotherSourceFile.kl", "ThirdSourceFile.kl"],
  "dfgPresets": {
    "dir": "DFG",
    "presetPath": "MyCompany.Exts.MyExtension"
    }
}

version :エクステンション・バージョニングの指定(任意)

version メンバでエクステンションのバージョンを指定します。<メジャー, マイナー, リビジョンナンバー> 形式です。

KLから特定のバージョンを指定してエクステンションを読み込む方法については バージョン情報と共に require を使用する を参照してください。

注釈

この事項についてデモンストレートする Fabric Engine に付属のユニットテストが Test/Core/Python/ext-versions.py にあります。

override :エクステンション・バージョニングの上書き(任意)

override メンバエクステンションの上書き(オーバライド)キーを指定します。このキーは実行時に複数のバージョンの中からどのバージョンを使用するかの優先順位を決定するために使用します。このメンバを使用するかどうかは任意です。詳細については、 バージョン情報と共に require を使用する を参照してください。

注釈

この事項についてデモンストレートする Fabric Engine に付属のユニットテストが Test/Core/Python/ext-versions-override.py にあります。

dfgPresets :Canvasプリセットの指定(任意)

dfgPresets メンバは、エクステンションに付属する Canvasプリセットのディレクトリ,名前空間を指定するために用います。ディレクトリはマニフェストファイルからの相対パスで記述します。結果、presetPath下に Canvasプリセットの検索が絶対パスとして追加されます。このpresetPath とは Canvas内での名前空間として扱われ、上記の例では、プリセットが MyCompany.Exts.MyExtension の配下に表示されます。

libs :コンパイル済みライブラリの指定

libs メンバでは、共有ライブラリ(例 DLL)のリストを指定します。共有ライブラリとはエクステンションに必要な機能を提供するコンパイルされたコードを含むものです。エクステンションが読み込まれると、この共有ライブラリも与えられた順序で読み込まれます。

Fabric Engine core は共有ライブラリを読み込む際には、複数の名前で試行します。具体的にはライブラリ名 LibName の文字列配列を与えた場合、試行するファイル名:

  1. LibName-Windows-ARCH.DLL (Windows), libLibName-Linux-ARCH.so (Linux), libLibName-Darwin-ARCH.dylib (Mac OS X); ARCH はシステムアーキテクチャ, x86x86_64 のどちらか
  2. LibName.DLL (Windows), libLibName.so (Linux), libLibName.dylib (Mac OS X)
  3. LibName 単体で、接頭接尾語なし

どのケースでも、Fabric Engine core はエクステンション・マニフェストファイル ExtensionName.fpm.json に記載された共有ライブラリディレクトリから読み込もうとします。

code :KLソースコードの指定

code メンバでは、エクステンションに無くてはならないKLソースコードファイルのリストを指定します。これらソースコードは、KL文 require ExtensionName; を他の KLソースファイルから使用した際に、読み込まれます。

KLソースファイルは、エクステンション・マニフェストファイル ExtensionName.fpm.json を含むディレクトリから直接読み込まれます。読み込み(コンパイル)順は、 code に指定する配列の順です。したがって、ソースファイルが他のソースに依存している場合、読み込み順が極めて重要になります。依存する側を後ろにします。例えば、あるソースファイルにある型を定義したとし、ほかの2番めソースでその型をどこか他の型や関数定義内で使うとした場合、その2番目のファイルは1番目のファイルの後におきます。