LISPのコードを書きたくてCLISPをMacに入れようとしたら盛大に詰まったのでその話を。
結論:うまくいかなかったらcleanしてやり直そう
正直長いので結論を先に書きます。
以下のサイトで書かれているように、一度cleanしてから実行したところ、MacPortsでCLISPをインストールすることができました。
lisp threads united of 2 channel. - MacOSXへのインストール
確かに自分のMacはclispを入れるまではscalaぐらいしか入れてなかったので、 ずいぶん関連プログラムがインストールされてからclispのインストールが始まっていましたし、 まずはcleanすべきだったかと思います。途中でMacフリーズしてましたし・・・
MacPortsでのインストール
ちなみに起動までのコマンドリストは以下のようになります。
sudo port install clisp sudo port clean clisp sudo port install clisp clisp
clispの停止
まさかclispのREPLを止めることができないとは思いもしませんでした。
基本は(quit)でREPLを停止することができるのですが、Breakに入ってしまうと(quit)では終了しません。 Ctrl+Dをネストした分入力するとREPLから抜けることができます。
- 停止コマンド
- (quit)
- Ctrl + D
詰まらなければ簡単に導入できるので、LISPを始める際の参考になれば幸いです。
では盛大に折った無駄骨を拾っていこうと思います。
MacPortsでclispのインストールに失敗する
一応実行環境は以下になります。
port install clispを実行してしばらく待つと関連プログラムがインストールされ、(clispのインストール中にフリーズし、再起動後に再開し、)clispのインストールの段でエラーが発生しました。
---> Configuring clisp Error: org.macports.configure for port clisp returned: configure failure: command execution failed Please see the log file for port clisp for details: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_clisp/clisp/main.log To report a bug, follow the instructions in the guide: http://guide.macports.org/#project.tickets Error: Processing of port clisp failed
言われた通りにmain.logを見る
main.log見るように言われたのでその通りにログを見ます。vimかlessで開いて、Gで末尾まで移動すると以下の用なメッセージが出ていました。
:info:configure configure: error: in `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_clisp/clisp/work/clisp-2.49/src': :info:configure configure: error: C compiler cannot create executables :info:configure See `config.log' for more details. :info:configure Command failed: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_releas e_tarballs_ports_lang_clisp/clisp/work/clisp-2.49" && ./configure --prefix=/opt/local --with-libreadline-prefix=/opt/local --with-libsigsegv-prefix=/opt/local --with-libiconv-prefix=/opt/local :info:configure Exit code: 77 :error:configure org.macports.configure for port clisp returned: configure failure: command execution failed:debug:configure Error code: NONE :debug:configure Backtrace: configure failure: command execution failed while executing "$procedure $targetname" :info:configure Warning: targets not executed for clisp: org.macports.activate org.macports.configure org.macports.build org.macports.destroot org.macports.install :notice:configure Please see the log file for port clisp for details: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_clisp/clisp/main.log
とりあえず言われたコマンドを叩く
configureでうまくいってないみたいなことを言われているので、ログにある通りの確認コマンドを打ってみます。
cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_clisp/clisp/work/clisp-2.49" && ./configure --prefix=/opt/local --with-libreadline-prefix=/opt/local --with-libsigsegv-prefix=/opt/local --with-libiconv-prefix=/opt/local
結果
./configure: line 508: conftest.x: Permission denied
は?
どういうことなの?とconfigureの中身を見る
configureファイルは、先ほどのコマンドにあるclisp-2.49ディレクトリにあるので、vimで開いて見てみます。
ちなみに508Gで該当箇所に飛びます。
# checking how to copy files echo "blabla" > conftest.x ←ここが問題の箇所
え、ただ書き込みできないだけ?
一度vimを閉じて、パーミッション確認
$ ll total 184 drwxr-xr-x 18 macports admin 612 4 19 08:09 . drwxr-xr-x 8 macports admin 272 4 19 07:08 .. -rw-r--r-- 1 macports admin 3293 1 10 2008 ANNOUNCE -rw-r--r-- 1 macports admin 3960 7 7 2010 COPYRIGHT -rw-r--r-- 1 macports admin 18159 1 10 2008 GNU-GPL -rw-r--r-- 1 macports admin 3098 10 18 2007 INSTALL -rw-r--r-- 1 macports admin 23080 7 8 2010 Makefile.devel -rw-r--r-- 1 macports admin 1395 7 14 2008 SUMMARY -rw-r--r-- 1 macports admin 3864 5 8 2008 clisp.spec -rwxr-xr-x 1 macports admin 27324 12 14 2009 configure drwxr-xr-x 59 macports admin 2006 7 8 2010 doc drwxr-xr-x 11 macports admin 374 4 29 2010 emacs drwxr-xr-x 25 macports admin 850 7 8 2010 modules drwxr-xr-x 344 macports admin 11696 4 19 07:59 src drwxr-xr-x 72 macports admin 2448 7 6 2010 tests drwxr-xr-x 8 macports admin 272 6 22 2010 unix drwxr-xr-x 19 macports admin 646 7 8 2010 utils drwxr-xr-x 9 macports admin 306 7 8 2010 win32msvc $ ll ../ total 24 drwxr-xr-x 8 macports admin 272 4 19 07:08 . drwxr-xr-x 3 macports admin 102 4 19 07:00 .. -rw-r--r-- 1 macports admin 5256 4 19 07:59 .CC_PRINT_OPTIONS drwxr-xr-x 2 macports admin 68 4 19 07:00 .home -rw-r--r-- 1 macports admin 233 4 19 07:08 .macports.clisp.state drwxr-xr-x 2 macports admin 68 4 19 07:59 .tmp drwxr-xr-x 18 macports admin 612 4 19 08:09 clisp-2.49 drwxr-xr-x 2 macports admin 68 4 19 07:08 home
グループに権限ないのが原因?
drwxr-xr-x 18 macports admin 612 4 19 08:09 clisp-2.49
どうもディレクトリの書き込みがmacportsユーザのみなのがダメみたいです。
疑問:実行はmacportsユーザで行われているのではないのか?
MacPortsの2系からコンパイルは一般ユーザのmacportsで行われるよー、という記事がsourceforgeにはありましたが、 公式のDocumentsを検索しても特にそんな内容はなく、macportsユーザでコンパイルされているかはちょっと不明。
- http://sourceforge.jp/magazine/11/07/26/052209
一応バージョンを確認したりしてました。
$ port version Version: 2.2.1
そこでいくつか対策を考えてみるわけですが・・・
対策1
Q.macportsユーザになれないか?
A.パスワードわかんなかった(´・ω・`)
対策2
Q.macportsユーザをadminにしたらどうか?
A.なんかそれはせっかく一般ユーザになってるのに微妙かなー
対策3
Q.clisp-2.49の書き込み権限をadminグループに持たせる。
A.まあこれかな
というわけで権限を付与します。
$ sudo chmod g+w ../clisp-2.49/ drwxrwxr-x 18 macports admin 612 4 19 08:09 clisp-2.49
そしてもう一度port install clispを実行して・・・
まだエラるですけど!?
内容は変わってもまたエラーになります。
エラーを見てみると
configure: line 2529: config.log: Permission denied configure: line 2539: config.log: Permission denied
またか・・・ lineが2529とかなってるのでsrcディレクトリ配下のconfigureでこけてそうですがもうそこはどうでもいいのでconfig.logの権限を変えます。
$ ll config.log -rw-r--r-- 1 macports admin 16770 4 19 09:03 config.log $ sudo chmod g+w config.log Password: $ ll config.log -rw-rw-r-- 1 macports admin 16770 4 19 09:03 config.log
・・・結果
まだまだ出ます。。もう面倒なので全部変えます。
$ sudo chmod -R g+w clisp-2.49/
それでもまだエラーになるので、いったんディレクトリごと消してみたりしました。
$ rm -rf /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_lang_clisp/
2度目のトライ
いったん全部消して、やり直したところ、権限変更したところで出力されるエラーの内容が変わりました。
Configure findings: FFI: no (user requested: default) readline: yes (user requested: default) libsigsegv: yes ./makemake --prefix=/opt/local --with-libreadline-prefix=/opt/local --with-libsigsegv-prefix=/opt/local --with-libiconv-prefix=/opt/local > Makefile cp -p cfgunix.lisp config.lisp chmod +w config.lisp echo '(setq *clhs-root-default* "http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/")' >> config.lisp To continue building CLISP, the following commands are recommended (cf. unix/INSTALL step 4 ff): cd src vi config.lisp # The default stack size on your platform is insufficient # and must be increased to at least 16384. You must do either # 'ulimit -s 16384' (for Bourne shell derivatives, e.g., bash and zsh) # or 'limit stacksize 16384' (for C shell derivarives, e.g., tcsh) make make check
お?これはいけるんじゃないかとテンションが上がりました。srcディレクトリでmakeを叩いてみます。
memo:⌘+Tで新規タブが開いた
gccでこける
test -r libgnu_cl.a || ln -s gllib/libgnu.a libgnu_cl.a gcc -g -O2 -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type -Wmissing-declarations -O -DUNIX_BINARY_DISTRIB -DENABLE_UNICODE -DDYNAMIC_MODULES -I. spvw.o spvwtabf.o spvwtabs.o spvwtabo.o eval.o control.o encoding.o pathname.o stream.o socket.o io.o funarg.o array.o hashtabl.o list.o package.o record.o weak.o sequence.o charstrg.o debug.o error.o misc.o time.o predtype.o symbol.o lisparit.o i18n.o unixaux.o built.o modules.o -L/opt/local/lib -lintl -Wl,-framework -Wl,CoreFoundation -L/opt/local/lib -lreadline -lncurses -L/opt/local/lib -liconv -L/opt/local/lib -lsigsegv -R/opt/local/lib libgnu_cl.a -o lisp.run clang: error: unknown argument: '-R/opt/local/lib' [-Wunused-command-line-argument-hard-error-in-future] clang: note: this will be a hard error (cannot be downgraded to a warning) in the future make: *** [lisp.run] Error 1
まだだ、まだいかんよ・・・
軽く調べてみたところ、Rオプションがgccにはないみたいで、Solaris独自?なのかなとか。
-Lで共有ライブラリにもリンクはれてるっぽいので-Rは消して実行してみました。
ついに!?
でき・・・た?ように見え、なくもないですが、make checkをするとまだエラーを吐いていました。 内容は(プログラムが違いますが)以下のサイトで質問されているようなものでした。
とはいえ、src配下にできたfooやrun.lispを実行するとREPLは起動するようにはなりました。
諦めたらそこで・・・
その後、XCodeのコマンドライン拡張とかも入れてみたのですがそれでもダメで、 正直もうfooにパス通して諦めようかと思っていたのですが、 もう少し調べたことでcleanで解決することができた、というのが顛末になります。
結局検証したことは無駄骨でしたが、clispがインストールできて良かったです。