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


8.5 ソースレジストリを設定するDSL

ソースレジストリの設定は、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がシステム定義ファイルを見つける際には、このディレクトリ以下が再帰的に探索されることになります。


Footnotes

(34)

[訳注] 継承した設定(inherited configuration)とは、ソースレジストリの一連の設定において、で処理される設定を指します。つまり、大ざっぱに言えば、箇条書きの下の処理に相当します。「継承」の語感から逆に考える方もいるかもしれないので、注意しておきます。(append 新しい設定 (次の処理))のように再帰のイメージを持つと間違えにくいかもしれません。:ignore-inherited-configurationの指定があると、ソースレジストリの設定がそこで終わることになります。

(35)

[訳注] asdf::default-user-source-registryasdf::default-system-source-registryによる設定が挿入されます。ソースレジストリの設定のリスト中の6番目と9番目の処理に相当します。

(36)

[訳注] asdf:*user-cache*のパス名が使われます。主にアウトプットトランスレーションに関係します。アウトプットトランスレーションを設定するDSLを参照。