パッケージをオートロードするためにインデックスを作成します。...?解説Pkg_mkIndexは標準Tclライブラリの1部であるユーティリティ・プロシージャです。これはインデックスファイルを作成するために使われます。requireコマンドが実行されたときにパッケージが自動的にロードできます。pkg_mkIndexを利用するには、次のステップに従います。[1]パッケージを作成します。トファイルかバイナリファイルからなります。バイナリファイルは、1つの引数だけを持つloadコマンドでのローディングに適していなければなりません。test.soでこのファイルをロードすることが可能でなければなりません。コマンドを含んでいなければなりません。Tcl_PkgProvideを呼び出さなければなりません。[2]pkg_mkIndexを呼び出してインデックスを作成します。引数はdir内のスクリプトまたはバイナリファイルを示します。globスタイルです。pkgIndex.tclをdirに作成します。Tcl_PkgProvide呼び出しが、ファイルに存在することがなぜ必要かの理由です)。-loadオプションを使うか、またはpkg_mkIndexがファイルを処理する順番を調整しなければなりません。以下の複雑なケースを参照します。[3]tcl_pkgPath変数で与えられるディレクトリの1つのサブディレクトリとして、パッケージをインストールします。$tcl_pkgPathが1つ以上のディレクトリを含む場合、通常マシン依存のパッケージ(バイナリの共有ライブラリを含む)は1番目のディレクトリ下にインストールすべきです。マシン独立のパッケージ(それらはTclスクリプトだけを含む)は2番目のディレクトリ下にインストールすべきです。ファイルと、パッケージのスクリプトまたはバイナリファイルを含みます。requireコマンドは自動的に見つけます。パッケージを他の場所にインストールすると、パッケージを含むディレクトリがauto_pathグロバール変数か、auto_path内のディレクトリの直下のサブディレクトリにあることを保証しなければなりません。Auto_pathはディレクトリのリストを含みます。検索機能をもつauto-loaderとパッケージローダーの両方で検索されます。ディフォルトでは$tcl_pkgPathを含みます。アプリケーションでauto_pathにディレクトリを明示的に追加することができます。TCLLIBPATH環境変数にディレクトリを追加することができます。この環境変数が存在すればTclはアプリケーションのスタートアップ時にこの環境変数でauto_pathを初期化します。requireを呼び出すことになります。2.1はバージョン2.1を利用可能にします。require呼び出しに基づき、与えられたインタプリタに実際にロードされるのは1つだけです。バージョンが異なるパッケージが違うインタプリタにロードできます。オプション選択可能なオプションは以下です。requireでパッケージの直接ローディングを実行します。このオプションはデフォルトです。requireでパッケージをロードする代わりに、生成されたインデックスは、パッケージに提供されたコマンドの1つが使用されるまで、パッケージをロードすることをできるだけ遅延します。インデックスを生成するのに使われるサブインタープリタへマッチします。パターンマッチはストリングマッチのルールを使います。以下の複雑なケースを参照します。-verboseインデックスする過程に出力を生成します。デフォルトで標準エラー出力(stderr)に書き出します。ダッシュで始まる場合、フラグの終了を意味します。パッケージとオートローダパッケージ管理機能はauto-loaderの一部と重なります。要求に応じてファイルがロードされるよう手配するという部分です。パッケージ管理はより高いレベルのメカニズムで、ロード過程の最後のステップでauto-loaderを使用します。auto_mkindexを使うより良い方法です。requireコマンドに基づき、異なるバージョンを使用する異なるアプリケーションとともに、パッケージの複数のバージョンがインデックスファイルの中で利用可能にできます。バージョンの概念がなく、このため各パッケージの単一のバージョンしか扱えません。pkg_mkIndexとauto_mkindexの両方で、あるパッケージをインデックスすることは良い考えとはいえません。使用されるまで呼び出すことができません。インデックスされたパッケージはバージョン管理がないので直ちに使用できます。オートローダに依存します。unknownスクリプトが呼び出されます。ifneededコマンドを含みます。provideコマンドを呼び出すパッケージが利用可能であることを公表するために、パッケージのファイルをロードするためのオートローダ情報をセットアップします。ケージのバージョンのファイルは、最初に1つのコマンドが呼び出されるまでは実際にはロードされなません。requireの呼び出しの後でもパッケージのコマンドをインタプリタで見つけることはできません。そのコマンドを呼び出すことはでき、その時点でオートロードされます。requireで直ちにロードされることを選択します。これはパッケージインデックスを生成するときのデフォルトモードです。引数を指定することによってオーバライドされることができます。複雑なケーススクリプトとバイナリファイル間の依存関係、及びスクリプトとバイナリファイルに分割されたパッケージなど、ほとんどの複合ケースがよく扱われるようになりました。ファイルがpkg_mkIndexによって処理される順番を調整しなければならないケースもあります。これらの問題は以下で詳細に説明します。各スクリプトまたはファイルが1つのパッケージを含み、そしてパッケージがただ1つのファイルに含まれる場合は容易です。いくらかのglobパターンを使って、全てのファイルはどのような順番でインデックスされるかを指定します。一般的にスクリプトが他のパッケージに依存しても問題ありません。コマンドを含んでも、スクリプトを処理するために使われるインタープリタによってそれを消します。従って、これも問題を引き起こしません。unknownコマンドによって扱われます。スクリプトがグローバルなコードにおいて他のパッケージの変数への変数引用をするとエラーとなります。よくないコーディングスタイルです。バイナリファイルが他のパッケージに依存することは、扱いにくいものです。Tcl_PkgRequireAPIのようなC‐レベルAPIをもみ消すことが出来ないからです。Tcl_PkgRequireのコールによって示されるとします。これをサポートするためにTkをロードされたインタープリタにおいてpkg_mkIndexを実行しなければなりません。pkgPatオプションによって達成できます。loadedによりリストされたpkgPatにマッチする全部のパッケージをファイル処理インタープリタにロードします。これはほとんどのケースでバイナリファイルに呼び出されたTcl_PkgRequireコールを満たします。2つのバイナリファイルがインデックスされるとき、1つがもう一方に依存すれば、最後に依存を持つものを指定する必要があります。このように依存なしのものはロードされインデックスされます。2番目のファイルが処理されるときそれが提供するパッケージは利用可能です。-loadフラグを利用することによってインデックスを作成するために使われる一時的なインタープリタに最初のパッケージをロードする必要があるかもしれません。ロードされないパッケージパターンを指定することは問題ないです。スクリプトとバイナリファイルの両方に分割されたパッケージの場合、-loadフラグを回避すべきです。インデックスを計算する前にパッケージをロードすると、それが同じパッケージの一部を提供する他のファイルを遮断してしまうからです。-loadを使わなければならないなら、最初にスクリプトを指定しなければなりません。ないとバイナリファイルからロードされたパッケージはスクリプトに定義されたパッケージを遮断する恐れがあります。