Next: ASDFがオブジェクトファイルを保持する場所を設定する, Previous: ASDFがシステムを見つけられるように設定する, Up: ASDFを設定する [Contents][Index]
初心者はこのセクションを飛ばしてかまいません。初心者はasdf:*central-registry*
を使わないでください。また、初心者にasdf:*central-registry*
を使うよう教えないでください。
古いASDFでは、システムを探す場所を設定するのに、asdf:*central-registry*
にディレクトリのパス名をpush
する、という方法が使われていました。
この変数を設定するのは、ASDF 3以降をロードした後、ASDFの機能を使う前でなければなりません。このロードと設定は、初期設定スクリプトの一部として実行されなければなりません。典型的には、自分のプロジェクトをビルドするスクリプトか、処理系の初期設定スクリプト(例: SBCLの~/.sbclrc)がこれにあたります。
また、あなたがASDF 2以前を使っていて、ASDF 3以降を後からロードするという場合は、ASDF 1または2がロードされた後にASDF 3の場所をasdf:*central-registry*
で設定し、その上でASDF 3を(asdf:operate 'asdf:load-op "asdf")
などでロードし、ロード後に再びasdf:*central-registry*
を設定する、という流れになります。というのも、ASDF 2からASDF 3へアップグレードする時にasdf:*central-registry*
は保持されないからです。もっとも、前セクションの方法で設定されたソースレジストリはアップグレードの影響を受けないので、おそらくそちらを使ったほうが良いでしょう。(ただし、ASDF 2でasdf:initialize-source-registry
を引数付きで実行した場合は別で、この場合はASDF 3で再び実行する必要があります。)しかし我々は、あなたがASDF 2以前を使っている場合は、処理系をアップグレードするなり、ASDFを最近のバージョンに置き換えるなりすることを強く推奨します。(→ 処理系付属のASDFを置き換える)
asdf:*central-registry*
は、ASDF 2または3ではデフォルトで空であり、ASDF 1との互換性のために残されています。この変数を使った設定は、上記のソースレジストリの設定に優先します。7
例として、/home/me/src/foo/foo.asdがASDFに見つかるようにしてみます。お使いの処理系の初期設定ファイルに、次のようなフォームを加えてください:
(require "asdf") (push "/home/me/src/foo/" asdf:*central-registry*)
末尾のスラッシュが必要なことに注意してください。システムを探すとき、ASDFはasdf:*central-registry*
のそれぞれの要素をパス名に変換します。正確に言うと、それぞれの要素はeval
されます。つまり、S式をasdf:*central-registry*
にpush
することも可能です。文字列やパス名は自己評価オブジェクトなのでeval
は何もしませんが、S式を使うと、シェル変数やユーザーに応じた値を返すなど、コンテキストに依存した設定をすることができます。なお、nil
に評価された場合、その要素はスキップされます。
このように、asdf:*central-registry*
は「システムディレクトリ指示子」のリストであると言えます。システムディレクトリ指示子(system directory desinator)はシステムを探すときに実行されるフォームであり、ディレクトリ(あるいはnil
)を返さなくてはなりません。ここでいう「ディレクトリ」とは「空でないディレクトリコンポーネントを持つパス名の指示子」8のことです。
パス名の末尾のスラッシュは、ファイルではなくディレクトリを指していることを示すのに必要です。このスラッシュがないと、(古い)ASDFは/home/me/src/foo/
ではなく/home/me/src/
を探してしまうおそれがあります。現在のバージョンでは、単にエラーを通知し、asdf:*central-registry*
からこのエントリを取り除くリスタートが起動するでしょう。
多くの場合、.asdファイルは大量にありますから、それらの存在するディレクトリを1つ1つasdf:*central-registry*
にpush
するよりは、各.asdファイルのシンボリックリンクを1つの共通ディレクトリに置き、そのディレクトリだけをpush
するという方法が使われていました。ASDFはシステムへのシンボリックリンクを適切に解釈することができます。9
例えば#p"/home/me/cl/systems/"
が*central-registry*
に含まれているとき、次のようにセットアップすればfooシステムを使えるようになります。
$ cd /home/me/cl/systems/ $ ln -s ~/src/foo/foo.asd .
なお、このセクションの設定方法は古いやり方であり、新しいユーザーには推奨されません。古くからのユーザーや、ASDFのパスをプログラムによって簡単にコントロールしたいユーザーのために残されています。