Next: 設定ディレクトリ(ソースレジストリ), Previous: 後方互換性のための機能(ソースレジストリ), Up: ASDFがシステムを探す場所を設定する [Contents][Index]
ソースレジストリの設定は、S式によるDSLで行います。以下はその文法です:
;; 設定の1単位は1つのS式であり、S式はキーワード:source-registryから
;; 始まって1つ以上のディレクティブが続きます。
CONFIGURATION := (:source-registry DIRECTIVE ...)
;; ディレクティブは次のいずれかです:
DIRECTIVE :=
;; 継承ディレクティブ:
;; CONFIGURATIONは必ず次の2つのディレクティブのいずれかを含ま
;; なければなりません。
:inherit-configuration |
;; 継承した設定をその位置に挿入するディレクティブで、多くの場合、
;; 最後に指定されます。(34)
:ignore-inherited-configuration |
;; 継承した設定を除外します。どこに指定してもかまいません。
;; 前方互換性のためのディレクティブ(ASDF 2.011.4)以降です。新し
;; い設定機能を使いたいが、その機能をサポートしていない古いASDFか
;; ら新しいASDFをブートストラップして使っているという場合には、こ
;; のディレクティブが必要でしょう。
:ignore-invalid-entries |
;; 1つのディレクトリを探索の対象に加えます。(ただし再帰的探索はしない)
(:directory DIRECTORY-PATHNAME-DESIGNATOR) |
;; 1つのディレクトリ階層を再帰的探索の対象に加えます。
;; 除外するパターンは下述のディレクティブで指定できます。
(:tree DIRECTORY-PATHNAME-DESIGNATOR) |
;; デフォルトの除外パターンを上書きします。
(:exclude EXCLUSION-PATTERN ...) |
;; デフォルトの除外パターンに追加します。
(:also-exclude EXCLUSION-PATTERN ...) |
;; 除外パターンが適用されるスコープはその設定(もしくはファイル)
;; の残りの部分です。
;; 別の設定ファイルの内容をパースして、この位置に挿入します。
(:include REGULAR-FILE-PATHNAME-DESIGNATOR) |
;; デフォルトのレジストリをこの位置に挿入します。(35)
:default-registry
REGULAR-FILE-PATHNAME-DESIGNATOR
:= PATHNAME-DESIGNATOR ; ファイル名として解釈されます
DIRECTORY-PATHNAME-DESIGNATOR
:= PATHNAME-DESIGNATOR ; ディレクトリ名として解釈されます
PATHNAME-DESIGNATOR :=
NIL | ; このエントリをスキップします
ABSOLUTE-COMPONENT-DESIGNATOR ; パス名のDSLを参照(下述)
EXCLUSION-PATTERN := ワイルドカードを含まない文字列です。あるサブディ
レクトリの名前とこの文字列が正確に一致する場合、そのパス名は除外されま
す。例えば"_darcs"は#p"/foo/bar/_darcs/src/bar.asd"にマッチする
でしょう。
パス名は別のDSLで指定されます。このDSLはアウトプットトランスレーションの設定と共通であり、asdf:resolve-locationによって解決されます。この関数はまだドキュメント化されていません。
ABSOLUTE-COMPONENT-DESIGNATOR :=
(ABSOLUTE-COMPONENT-DESIGNATOR RELATIVE-COMPONENT-DESIGNATOR ...) |
STRING |
;; 文字列はネームストリング(絶対パスを推奨、ディレクトリが必要な
;; 箇所ではディレクトリと判断される)です。アウトプットトランスレー
;; ションにおいては、常にディレクトリと判断され、最後に**/*.*.*が
;; 加わります。MCLではMacOS XスタイルのPOSIXネームストリングが使わ
;; れます。(MacOS 9のスタイルが必要であれば、リテラル#p"..."を使
;; いましょう。)
;; なお、この文字列は*central-registry*で使われる文字列とは異なる
;; ことに注意してください。セントラルレジストリはこのDSLを使ってお
;; らず、普通のネームストリングとして処理されます。しかし、
;; asdf:resolve-locationを呼べば、*central-regisrry*で使えるオブジェ
;; クトは得られます:
;; (asdf:resolve-location "/Users/fare/cl/cl-foo/")
PATHNAME |
;; パス名は絶対パスを推奨します。アウトプットトランスレーションに
;; おいては(その後にRELATIVE-COMPONENT-DESIGNATORが続かない限り)
;; **/*.*.*のようなワイルドカードを含めたほうがよいでしょう。
:HOME | ; user-homedir-pathname、つまり~/を指します
:USER-CACHE | ; ユーザーキャッシュの既定の場所を探します(36)
:HERE |
;; 設定ファイルのあるディレクトリを指します。(対話的に呼び出され
;; た場合は*default-pathname-defaults*です。)
:ROOT
;; アウトプットトランスレーションでのみ使われます。入力指示子では
;; すべてのホストとデバイスにマッチし、出力指示子では入力パスのホ
;; ストとデバイス(のルート)を表します。
キーワード:SYSTEM-CACHEはASDF 3.1以降では受け付けません。セキュリティ
上の問題を引き起こすためです。
RELATIVE-COMPONENT-DESIGNATOR :=
(RELATIVE-COMPONENT-DESIGNATOR RELATIVE-COMPONENT-DESIGNATOR ...) |
STRING |
;; parse-unix-namestringで解釈される相対パスです。アウトプットト
;; ランスレーションにおいては、最後のコンポーネントに**/*.*.*が
;; 加わります。
PATHNAME | ; 末尾にある場合を除いて、ディレクトリと判断されます。
:IMPLEMENTATION |
;; implementation-identifierに基づくディレクトリです。
;; 例えばsbcl-1.0.45-linux-x64/など。
:IMPLEMENTATION-TYPE |
;; lisp-implementation-typeに基づくディレクトリです。例えばsbcl/など。
:*/ | ; 直下のすべてのサブディレクトリです。(ASDF 2.011.4以降)
:**/ | ; 再帰的に辿れるすべてのサブディレクトリです。(ASDF 2.011.4以降)
:*.*.* ; すべてのファイルです。(ASDF 2.011.4以降)
キーワード:UID、:USERNAME、:DEFAULT-DIRECTORYは今ではサポートされていません。
単純な例を挙げてみましょう。~/.config/common-lisp/source-registry.confは、ASDFが設定ファイルを探す既定のパスです。このファイルの内容が
(:source-registry (:tree (:home "cl")) :inherit-configuration)
であれば、ソースレジストリに~/cl/が加わり、ASDFがシステム定義ファイルを見つける際には、このディレクトリ以下が再帰的に探索されることになります。
[訳注] 継承した設定(inherited configuration)とは、ソースレジストリの一連の設定において、後で処理される設定を指します。つまり、大ざっぱに言えば、箇条書きの下の処理に相当します。「継承」の語感から逆に考える方もいるかもしれないので、注意しておきます。(append 新しい設定 (次の処理))のように再帰のイメージを持つと間違えにくいかもしれません。:ignore-inherited-configurationの指定があると、ソースレジストリの設定がそこで終わることになります。
[訳注] asdf::default-user-source-registryとasdf::default-system-source-registryによる設定が挿入されます。ソースレジストリの設定のリスト中の6番目と9番目の処理に相当します。
[訳注] asdf:*user-cache*のパス名が使われます。主にアウトプットトランスレーションに関係します。アウトプットトランスレーションを設定するDSLを参照。