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を参照。