커먼리습 설정하기, ASDF 시스템 코드를 받기

Posted on Dec 6, 2019

1. ASDF을 최신 버젼으로 설정한다

(이부분에서 많이 고생했는데) SBCL와 다르게 CLISP, ECL 은 최신 버젼의 ASDF을 내장한걸 패키징해놓지 않았다.

대부분은 문제가 없이 동작하지만, 내가 작성한 커먼리습 시스템에서 실행파일을 빌드할 때 문제가 많았다.

  1. ASDF 의 최신 버젼을 git clone 해서 적당한 디렉토리에 받는다.
  2. make을 내려받은 ASDF 디렉토리에서 실행한다.
    • 실행하면 build/asdf.lisp 파일으로 한 파일으로 뭉쳐서 로딩하게 편안한 파일을 생성해준다.
  3. 내 커먼리습 구현체의 시작설정파일 맨 앞에 다음처럼 추가한다.
    • (load "~/local/asdf/build/asdf")
      • 여기서 나는 $HOME/local/asdf/ 에 ASDF을 받았다고 가정.
      • 그리고 asdf.lisp 파일이더라도, 마지막에 .lisp 확장자는 생략했다.
    • ECL은 $HOME/.eclrc
    • CLISP은 $HOME/.clisprc.lisp
  4. 그리고 중요한데, 그 다음에 Quicklisp 초기화 내용이 오도록 한다.
    • Quicklisp을 초기화하기 전에 ASDF 최신 버젼이 로딩되어 있는게 더 나을테니까.
    • 어차피 위의 (1~3)의 순서대로 ASDF 먼저 설정한 다음에 Quicklisp설치한 다음에 ql:add-to-init-file 실행하면 이런 순서로 추가해준다.

…별거 아닌데, 이거 때문에 빌드한 결과 실행파일이 이상해서 좀 고생했다.

참고: https://github.com/ageldama/cl-state-machine/blob/master/build-tamagochi-exec-ecl.sh

2. ASDF 로딩하는 디렉토리를 알거나, 설정한다

예전에도 언급한 내용이다.

  1. ASDF 매뉴얼에서 나오는 항목들을 잘 읽어본다:
    1. 내 마음에 드는 위치에서 로딩하도록 설정하거나, 기본값으로 어디에서 로딩하는지 이해한다.

3. 처음 받은 ASDF시스템은 Quicklisp으로 로딩한다

조금 이상하다고 생각하는 부분.

처음으로 asdf 시스템인 프로젝트를 체크아웃 받아서 로딩하거나 테스트를 실행할 때,

(asdf:load-system :foobar)와 같이 로딩하려 하지말고,

(ql:quickload :foobar)와 같이 Quicklisp을 이용해서 로딩해라. 어차피 Quicklisp이 ASDF이랑 연결되어 있어서 로딩하고, 또 해당 시스템이 참조하는 Quicklisp 의존성들도 이렇게 해야지 제대로 로딩.

그리고 테스트 시스템도 마찬가지로 (ql:quickload :foobar-tests)와 같이 로딩한 다음에야 (asdf:test-system :foobar) 혹은 (asdf:test-system :foobar-tests)으로 실행해라.1

https://github.com/ageldama/cl-state-machine/ 작업하며 많은 팁들이 쌓인거 같다. ASDF와 테스트suites 연결하기, ASDF으로 실행파일 만들기 같은 것들에 대한 노하우도 많이 쌓았다.

이런 저런 노하우들을 정리해서 블로깅을 조금씩 해나가야지.



  1. foobar 의 defsystem 선언에 :in-order-to ((test-op (test-op "foobar-tests")))으로 테스트 시스템과 연결되어 있다면, (asdf:test-system :foobar)해도 자동으로 foobar-tests의 테스트들을 실행하겠지. ↩︎