8099


Aというsystemがあったとして、 このsystem中のfoo.lispが壊れていて、(load-system :a)とするとビルドができないとします。

この場合、A systemのfoo.lispを直接書き換えてしまえば修正は可能ですが、
Quicklisp等のパッケージマネージャーを利用していて、パッケージマネージャーから供給されるソースは一切変更したくなくないもの、とします。

このような場合、ASDFで処理されるソースコンポーネントを差し替えるにはどのような方法がベストでしょうか。

ちなみに、ASDFの中身を眺めてみましたが、うまい場所のフックが見付からず、asdf:performに対象のソースファイルのコンポーネントが来たら代替のものに差し替える(代替のコンポーネントは別のsystemとして定義しておく)方法位しか思い付きませんでした。

[code]

    (defmethod asdf:perform :around (op (compo (Eql 壊れたソースコンポーネント)))
      (asdf:perform operation 修正したソースコンポーネント))
    
[/code]

なにか正式な作法があれば是非知りたいです。


CC BY-SA 3.0
2015-01-02T12:13:44.673
2949
2015-03-19T05:10:25.743
2015-01-02T12:24:59.927
3510
3510
question
common-lisp
ASDFで元のシステムのソースは変更せずに壊れたソースコードを修正済のものに差し替えたい


パッチの処理を追加できるフックの場所を探してみましたが、やはりasdf:performメソッド位しかないようです。  
とりあえず、このメソッドに処理を追加すれば目的の動作はできるようなので、一旦クローズとします。


CC BY-SA 3.0
2015-03-19T05:10:25.743
8099
2015-03-19T05:10:25.743
3510
2949
answer