Next: , Previous: , Up: ASDFがシステムを探す場所を設定する   [Contents][Index]


8.1 ソースレジストリの設定

ASDFがシステム定義ファイルを探す場所は、ソースレジストリ(source registry)に指定されています。

[訳者補足]

ソースレジストリ(や次章で解説するアウトプットトランスレーション)の設定を記述したファイルは、システム設定ファイル(system configuration file)または単に設定ファイル(configuration file)と呼ばれます。ファイル形式は.confです。システム定義ファイル(.asdファイル)と混同しないようにしましょう。さらに、設定ディレクトリ(configuration directory)という概念もあります。設定ディレクトリは設定ファイルを含むディレクトリですが、設定ディレクトリ中の設定ファイルはその文法が微妙に異なるので注意が必要です。詳しくはソースレジストリを設定するDSL設定ディレクトリ(ソースレジストリ)を参照してください。

また、以下の記述は、OSや処理系、環境変数によって異なる複雑なロジックを漏れなく解説したものではありませんが、これを補完するのは訳者の手に余ります。正確な挙動を把握する必要がある場合はsource-registry.lispuiop/configuration.lispを参照してください。

ソースレジストリは次のように設定されます。おおむね、上から順に処理されていくと考えてかまいません。

[訳者補足終わり]

  1. ソースレジストリには、ハードコーディングされた設定が加わることがあります。これは主に処理系(特にSBCL)自身が提供するシステムの場所を追加する処理で、処理系のバージョンによってパスが変わるのにも対応しています。
  2. アプリケーションは、ソースレジストリのAPIを使って明示的に設定を初期化することが許されており、その場合はその設定が優先されることになります。設定はコマンドラインからも行えますし、スクリプトファイルからも、あるいは独自のシステム設定ファイルからも行うことができます。(→ ソースレジストリのAPI
  3. 環境変数CL_SOURCE_REGISTRYが存在する場合は、ソースレジストリがこの変数によって設定されます。
  4. 環境変数XDG_CONFIG_DIRSとユーザー設定ファイル$XDG_CONFIG_DIRS/common-lisp/source-registry.confが存在する場合は、ソースレジストリがこのファイルによって設定されます。XDG_CONFIG_DIRSのデフォルトの値は~/.config/です。
  5. 環境変数XDG_CONFIG_DIRSとユーザー設定ディレクトリ$XDG_CONFIG_DIRS/common-lisp/source-registry.conf.d/が存在する場合は、ソースレジストリがこのディレクトリ内の設定ファイルによって設定されます。
  6. ソースレジストリには、既定のディレクトリである~/common-lisp/(ASDF 3.1.2以降のみ)、~/.sbcl/systems/(SBCLのみ)、$XDG_DATA_HOME/common-lisp/systems/(ただし、再帰的探索はしない)、$XDG_DATA_HOME/common-lisp/source/が加わります。XDG_DATA_HOMEのデフォルトの値は~/.local/share/です。Windowsで環境変数XDG_DATA_HOMEが存在しない場合は、代わりにLocal AppDataまたはAppDataが使われます。
  7. 設定ファイル/etc/common-lisp/source-registry.confが存在する場合、ソースレジストリがこのファイルによって設定されます。Unixのみの処理です。
  8. 設定ディレクトリ/etc/common-lisp/source-registry.conf.d/が存在する場合、ソースレジストリがこのディレクトリ内の設定ファイルによって設定されます。Unixのみの処理です。
  9. $XDG_DATA_DIRS/common-lisp/systems/$XDG_DATA_DIRS/common-lisp/source/がソースレジストリに加わります。ただし、前者には再帰的探索がされないので、.asdファイルへのリンクを置く目的で使います。UnixではXDG_DATA_DIRSのデフォルトは/usr/local/share/usr/shareです。WindowsでXDG_DATA_DIRSが存在しない場合、代わりにAppDataCommon AppDataが使われるでしょう。
  10. ソースレジストリは、処理系提供の拡張モジュールに対応する処理系依存のディレクトリを含むことがあります。33

これらの設定は、S式による簡単なDSLで記述します。(→ ソースレジストリを設定するDSL) 加えて、環境変数で設定する場合は、よりシェルに向いた文法も用意されています。(→ シェル向けの設定の構文(ソースレジストリ)

また、上に挙げた各設定は、必ずしもすべてが「結合」して使われるわけではありません。各設定が、継承する設定を明示的にあるいは暗黙にインクルードしない限り、以降の設定は無視されることになります。

さらに、処理系依存のディレクトリが、設定ファイルで指定されたディレクトリ群の先頭に自動的に加わることがあり、これは設定ファイルで継承をどのように設定しても変えられません。(訳注: 上記リストの1番目の処理のこと)


Footnotes

(33)

[訳注] このリストの3番目以降の処理は、asdf:*default-source-registries*中の7つの関数に順に対応しています。リストの最後の項目の意図は判然としませんが、処理系などが独自にこの変数を編集していると、処理が加わったり(あるいは減ったり)するでしょう。Mezzanoなどにその例があります。