fu7mu4’s diary

はてなダイアリーから移転しました。

プロジェクトの作成までのまとめ

Mac OSX (64lbit)での common lisp の プロジェクトの作成までのまとめを作成してみた。あちこち間違っていると思うので、指摘してください。

Emacs のインストール

Gnu Emacs 上の slime で開発するので、Emacs をインストールする。
macport でも homebrew でも どちらでもよいがとりあえず最新安定版を使用する。

Common Lisp のインストール

Common Lisp実装は複数あったが、 Macsbclはあまりよくないという話があったので、 clozure cl をインストールすることにする。
roswell でインストールするとあとあと便利らしいが、まだよくわかっていないのでパスする。

macport を使うと ccl 1.10が簡単にインストールできるようになったのでこちらを使用している。
これ以前は、ソースからインストールしていた。

ついでに hyperspec もダウンロードしておく。

macportでインストール
sudo port install ccl lisp-hyperspec

ccl64 からで実行する。

subversion配布のソースからインストール

clozure clのダウンロードページ に行ってsubversionリポジトリのパスを確認する。

mkdir -p /usr/local/ccl
cd /usr/local/ccl
svn co svn co http://svn.clozure.com/publicsvn/openmcl/release/1.10/darwinx86/ccl
cd script
cp ccl64 ~/bin

hyperspec については、
http://www.lispworks.com/documentation/common-lisp.html の downloaded のリンクから ダウンロードできる。

quicklispのインストール

quicklisp のダウンロード
mkdir -p ~/work/quicklisp
cd ~/work/quicklisp
wget http://beta.quicklisp.org/quicklisp.lisp
ccl64
quicklisp のインストール
(load "~/work/quicklisp/quicklisp/lisp")
(quicklisp-quickstart:install)
(ql:add-to-init-file) 

slime のインストール

(ql:system-apropos "slime")            ;slime を検索
(ql:quickload :quicklisp-slime-helper) ;たぶんこんな名前間違っていたらゴメン
(quit)

こんな表示がでるので、

To use, add this to your ~/.emacs:

(load (expand-file-name "~/quicklisp/slime-helper.el"))
;; Replace "sbcl" with the path to your implementation
(setq inferior-lisp-program "sbcl")

init.elなどにこのようなものを書いておく。HyperSpec をダウンロードした場合、そのパスを変更すること。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; slime 
;; SLIME is the Superior Lisp Interaction Mode for Emacs.

(load (expand-file-name "~/quicklisp/slime-helper.el"))
;; Replace "sbcl" with the path to your implementation
(setq inferior-lisp-program "/opt/local/bin/ccl64") ; your Lisp system


(setq slime-net-coding-system 'utf-8-unix) ; 日本語の使用

;(slime-autodoc-mode)

(setq w3m-command "/opt/local/bin/w3m")

;; HyperSpecを読み込む.  macport で hyperspecをインストールしなかった場合、このパスを適宜変更すること
(setq common-lisp-hyperspec-root
      (concat "file://" (expand-file-name "/opt/local/share/doc/lisp/HyperSpec-7-0/HyperSpec/"))
      common-lisp-hyperspec-symbol-table
      (expand-file-name "/opt/local/share/doc/lisp/HyperSpec-7-0/HyperSpec/Data/Map_Sym.txt"))

;; HyperSpecをw3mで見る
(defadvice common-lisp-hyperspec
  (around hyperspec-lookup-w3m () activate)
  (let* ((window-configuration (current-window-configuration))
         (browse-url-browser-function
          `(lambda (url new-window)
             (w3m-browse-url url nil)
             (let ((hs-map (copy-keymap w3m-mode-map)))
               (define-key hs-map (kbd "q")
                 (lambda ()
                   (interactive)
                   (kill-buffer nil)
                   (set-window-configuration ,window-configuration)))
               (use-local-map hs-map)))))
    ad-do-it))

;;;; 以下は skk-user用
(defun my-slime-space (n)
  (interactive "p")
  (if skk-henkan-mode
      (skk-insert)
    (slime-space n)))
;
(add-hook 'slime-mode-hook
	  (lambda ()
	    (progn
	      (define-key slime-mode-map " " 'my-slime-space))))

これで Emacs を起動して、M-x slime で slime が起動することを確認する。

asdf でのパスの設定


quicklisp のプロジェクトの検索では、よく ~/quicklisp/local-projects に野良の lispのライブラリをダウンロードしていたが
話がややこしくなる。折角なので検索パスを追加する。

clozure cl の初期設定ファイルで検索パスを設定できるとは思うがよくわからないので、asdf を利用する。
clozure cl は asdf を自動的にロードしているらしいので、そのまま設定ファイルを作成すればいいはず。

mkdir -p ~/.config/common-lisp/source-registry.conf.d
cd ~/.config/common-lisp/source-registry.conf.d

ここに以下のようなファイルを作成する。ファイルの拡張子は .confであればよい。

(:tree (:home "lisp" ))

tree は指定フォルダ以下全てのフォルダを検索パスに追加することを意味している。
ここでは ~/lisp 以下のフォルダ全てを追加した。

すぐに設定を反映させるなら、以下を実行します。

(asdf:clear-source-registry)

参考

cl-project でのプロジェクトの作成

先の追加したパスにプロジェクトを作成すると、そのまま quicklisp で読み込むことができて便利。

;;;; cl-project のインストール
(ql:quickload :cl-project)

;;;; プロジェクトのスケルトン生成 #"~/lisp/" 以下など asdfの検索パスに含まれる場所に作成すること。 
(cl-project:make-project "~/lisp/diff-mon/"  :depends-on '(:cl-ppcre :csv-parser) )

writing /Users/fu7mu4/lisp/diff-mon/.gitignore
writing /Users/fu7mu4/lisp/diff-mon/README.markdown
writing /Users/fu7mu4/lisp/diff-mon/README.org
writing /Users/fu7mu4/lisp/diff-mon/diff-mon-test.asd
writing /Users/fu7mu4/lisp/diff-mon/diff-mon.asd
writing /Users/fu7mu4/lisp/diff-mon/src/diff-mon.lisp
writing /Users/fu7mu4/lisp/diff-mon/t/diff-mon.lisp
;->#P"/Users/fu7mu4/lisp/diff-mon/diff-mon-test.asd"

;;;; プロジェクトのロード
 (ql:quickload :diff-mon)
To load "diff-mon":
  Load 1 ASDF system:
    diff-mon
; Loading "diff-mon"
[package diff-mon]
;->(:DIFF-MON)