Package

ReferenceTOPKeywords

コマンド名

package - パッケージのロードとバージョン制御機能。

構文

package forget ?package package ...?
package ifneeded package version ?script?
package names
package present ?-exact? package ?version?
package provide package ?version?
package require ?-exact? package ?version?
package unknown ?command?
package vcompare version1 version2
package versions package
package vsatisfies version1 version2

解説

本コマンドは、現在のインタプリタによって利用可能なパッケージとそれらをインタプリタへロードする方法に関する簡単なデータベースを維持します。 それは各パッケージの複数のバージョンをサポートし、アプリケーションが何を必要としているかに基づいて、パッケージのロードされるべき正しいバージョンを用意します。 このコマンドは、バージョンの衝突を検出して報告します。一般的に、package requirepackage provideコマンドだけが普通のTclのスクリプトから呼び出されます。 その他のコマンドは主にパッケージデータベースを維持するシステムスクリプトによって使われます。

packageコマンドの振る舞いはその最初の引数で決まます。以下の形式がサポートされます。

package forget ?package package ...?
インタプリタから指定されたパッケージに関するすべての情報(package ifneededpackage provideにより提供されたものを含む)を削除します。

package ifneeded package version ?script
このコマンドは通常、パッケージデータベースを構築するシステム設定スクリプトの中にだけ使われます。これはどうしても必要な場合、 特定のパッケージの特定のバージョンが利用可能であること、そしてscriptを実行することによってインタプリタに追加できることを示します。 スクリプトは、後続のpackage requireコマンドで使用するためにデータベースに保存されます。 一般的に、scriptはまず、パッケージ内のコマンドのために自動ロードを設定(あるいはloadそして/あるいは sourceを直接呼び出します)します。そしてパッケージが存在することを示すためにpackage provideを呼び出します。 1つのパッケージに対していくつかの異なるバージョンの情報がデータベー スに存在することは可能です。もしpackageversionの情報がデータベースに含まれていると、scriptは既にあるものを上書きします。 もしscript引数が省略されると現在のpackageパッケージのversionバージョンのスクリプトが返されます。 このpackageversionに対してpackage ifneededコマンドが呼び出された履歴がなければ、空文字列が戻されます。

package names
インタプリタ内の利用可能なすべてのパッケージ(バージョンがpackage provideを通 じてロードされているもの、及びpackage ifneededスクリプトが存在するもの)の名前リストが返されます。 リスト内の要素の順番は不定です。

package present ?-exact? package ?version ?
本コマンドは、パッケージがまだロードされなくてもパッケージをロードする努力をしないことを除けば、package requireに相当します。

package provide package ?version ?
このコマンドはpackageパッケージのバージョンversionがインタプリタに存在することを示すために呼び出されます。 普通、ifneededスクリプトの一部として一度、そしてパッケージ自身によって最終的にロードされる時に再び呼び出されます。 以前のpackage provideコマンドによりpackageの異なるバー ジョンが既に提供されているとエラーが発生します。version引数が省略されるとコマンドは現在提供されているバージョン番号を返し、またはインタプリタでpackageに対するpackage provideコマンドが呼び出されていなければ空文字列を返します。

package require ?-exact? package ?version ?
このコマンドは一般的に特定のパッケージの特定のバージョンを使いたいTclのコードによって呼び出されます。引数はどのパッケージが求められているかを示し、このコマンドはインタプリタに適合するバージョンのパッケージがロードされているかを確かめます。 このコマンドが成功するとロードされているバージョン番号を返します。 そうでないとエラーを発生させます。 -exactスイッチとversion引数の両方が指定されると、与えられたバージョンのみが受け入れられます。 -exactが省略されてversionが指定されると、versionと同じメジャーなバージョン番号を持つならばversionより新しいバージョ ンも認められます。 -exactversionの両方が省略されると、いかなるバージョンも認められます。 packageの1つのバージョンが既に(package provideによって)提供されている場合、そのバージョン番号は-exactversionで与えられた基準を満たせば、コマンドは直ちに制御を戻します。 そうでなければ、パッケージの許容できるバージョ ンが利用可能かを探すために、以前のpackage ifneeded コマンドによって提供された情報のデータベースを検索します。もっとも適合するバージョン番号のスクリプトが見つかれば、それが呼び出されます。 つまりパッケージのためのpackage provideの呼び出しを含むロードに必要なあらゆる処理を行います。もし、package ifneededデータベースがパッケージの適合するバージョンを含まないが、インタプリタでpackage unknownコマンドが指定されていれば、そのコマンドが呼び出されます。 package unknownコマンドが完了した時点で、Tclはパッケージが提供されているか、あるいはpackage ifneededスクリプトが存在するかを再び確認します。パッケージの適合するバージョンを提供するためのこれらのすべてのステップが失敗する場合、このコマンドはエラーを返します。

package unknown ?command?
本コマンドは、package ifneededデータベースの中でパッケージに適合するバージョンが見つからないときに、package requireの中で呼び出すための"最後の手段"コマンドを提供します。 command引数が指定されれば、それはコマン ドの最初の部分を示します。package requireの中で呼び出されるときに、Tclは要求されているパッケージ名とバー ジョンを与える2つの追加引数を与えます。例えば、commandfoo barで、後でpackage require test 2.4というコマンドが呼び出されたとすると、Tclはパッケー ジをロードするためにfoo bar test 2.4というコマンドを実行するでしょう。package requireコマンドにバージョン番号が指定されなければ、呼び出されるコマンドのversion引数は空文字列になります。package unknownコマンドが command 引数なしで呼び出されれば、現在のpackage unknownスクリプトか、存在しなければ空文字列が返されます。 もしcommand引数に空文字列が指定されれば、現在のpackage unknownスクリプトは存在するならば削除されます。

package vcompare version1 version2
version1version2で与えられる2つのバージョン番号を比較します。 version1version2より前のバージョンならば-1を、等しいならば0、そしてversion1version2より新しいならば1を返します。

package versions package
package ifneededコマンドにより情報が提供されているpackageのすべてのバージョン番号のリストを返します。

package vsatisfies version1 version2
version2のために書かれたスクリプトが変更なしで version1 で作動できれば(即ち、2つが同じメジャーなバージョン番号を持ち、version1version2と等しいか、より大きい場合)1を返し、そうでなければ0を返します。

バージョン番号

バージョン番号は2や1.162や3.1.13.1のようなドットで区切られた1つ以上の十進数からなります。最初の数字はメジャーバージョ ン番号と呼ばれます。より大きな数はパッケージの後のバージョンに対応し、最も左端の数字はより大きな重要性を持っています。例えば、 バージョン2.1は1.3より後で、バージョン3.4.6は3.3.5より新しい。欠けているフィールドは0に相当します。バージョン1.3は 1.3.0や1.3.0.0と同じで、1.3.1や1.3.0.2より前です。後のバー ジョン番号は同じメジャーバージョン番号を持っている限り、前のバージョンとの上位互換性を持つことを期待されます。例えば、あるパッケージのバージョン2.3用に書かれたTclスクリプトはバージョ ン2.3.2や2.4や2.5.1の下で変更なしで動作するはずです。 メージャーバージョン番号の変更は互換性の変更を示します。 あるパッケージのバージョン2.1で使うために書かれたコードはバー ジョ ン1.7.3や3.1で変更なしに動作することは保証されません。

パッケージインデックス

Tclにパッケージを使うためのお勧めの方法は、スクリプトにてコマンドpackage require及びpackage provideを呼び出し、そして、プロシージャpkg_mkIndexを使用して、パッケージインデックスファイルを作成することです。いったんこれをしておけば、パッケージはコマンドpackage requireに答えて自動的にロードされます。詳細情報はpkg_mkIndexのドキュメンテーションを参照してください。

参照

msgcatpackagenspkgMkIndex

キーワード

packageversion


Copyright © 1996 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.