<compatible>

<compatible> -- <compatible> で、バージョンの制限を緩和する

<recommended> 依存バージョンおよび <compatible> を使用する

<compatible> タグは、バージョンタグ <recommended> を含む <package> の依存性とともに使用するように設計されています。 例えば pear.example.com/Bar バージョン 1.3.0 の例を考えてみます。

<package>
 <name>Foo</name>
 <channel>pear.example.com</channel>
 <min>1.0.0</min>
 <recommended>1.5.2</recommended>
</package>

上の依存性を日本語に翻訳すると、次のようになります。 "パッケージ pear.example.com/Foo を使用します。しかし、バージョン 1.0.0 か、それより新しいもののみです。もし pear.example.com/Foo が インストールされていなければ、バージョン 1.5.2 をインストールします。 もしバージョン 1.5.2 以外の pear.example.com/Foo がインストールされていれば、 --force を指定されていない限りインストールは失敗します。 あるいは pear.example.com/Foo は私と互換性があります。"

最後の文 "……あるいは pear.example.com/Foo は私と互換性があります。" は、<compatible> タグによって制御されます。パッケージ Foo バージョン 1.5.3 の package.xml に以下のような <compatible> タグが 含まれていた場合、

<compatible>
 <name>Bar</name>
 <channel>pear.example.com</channel>
 <min>1.2.0</min>
 <max>1.3.0</max>
 <exclude>1.2.9</exclude>
</compatible>

インストーラは「pear.example.com/Foo バージョン 1.5.3 は pear.example.com/Bar バージョン 1.2.0 から 1.3.0 までと互換性がある。 ただし 1.2.9 とは互換性がない」と解釈します。

非常に重要な注意点は、<compatible> に記述するのは テスト済みの 既存の バージョンのみにしておくと いうことです。将来 pear.example.com/Bar の新しいバージョンが出た際には、 単純に <recommended> タグを更新して対応します。

<compatible> には 3 つのバージョン管理タグを含めることが可能です。 <min> および <max> は必須で、テスト済みの互換性がある バージョンの範囲を定義します。 また <exclude> は、範囲内で例外とするバージョンを指定します。 上の例では、1.3.0 および 1.2.0 がそれぞれ指定可能な最大バージョン および最小バージョンとなります。package.xml 内で指定できる <compatible> タグの数には制限がありません。

参考

<package> の依存性