Previous: コンポーネントの組み込みのサブクラス, Up: コンポーネント [Contents][Index]
新しいコンポーネント型を作るには、既存のコンポーネントのサブクラスを作り、新しいクラスに特定化されたメソッドを定義します。
例を見てみましょう。あなたのシステムは処理系依存の機能をいくつか備えています。あなたは、それらのソースファイルを1つの(サポートする)Lisp処理系ごとに1つのサブディレクトリに隔離したいと考えました。まずはcl-source-file
のサブクラスを定義しましょう。
(defclass unportable-cl-source-file (cl-source-file) () (:documentation "処理系依存のLispソースファイル"))
サブディレクトリの名前は、asdf:implementation-type
(バージョン2.014.14以降でエクスポートされています)の返り値を使うことにします。あとは、unportable-cl-source-file
のパス名を推論する仕組みを加えるだけです。
(defmethod component-pathname ((component unportable-cl-source-file)) (merge-pathnames* (parse-unix-namestring (format nil "~(~A~)/" (asdf:implementation-type))) (call-next-method)))
これで完了です。新しいコンポーネント型は、defsystem
フォーム中で次のように使われます:
(defsystem :foo :components ((:file "packages") ... (:unportable-cl-source-file "threads" :depends-on ("packages" ...)) ... ))