MacPortsでClojureとか入れてみた。

 なんとなくClojureでも入れてみっかって事でやってみましたよ。どうでもいいけど、clojureとかcatalystとか同じ名前のヤツがいくつかあって紛らわしいよねー。少しは気を使って欲しいよねー。

 とりあえずPortsにあるのかチェーック。


risa:local tac$ port search clojure
clojure @1.2.0 (lang, java)
    The Clojure programming language

clojure-contrib @1.2.0 (lang, java)
    The Clojure programming language - Contrib

clojure-contrib-devel @git-20100220 (lang, java)
    The Clojure programming language (development) - Contrib

clojure-devel @1.1.0-rc2 (lang, java)
    The Clojure programming language (development version)

leiningen @1.3.1 (devel, java)
    A build tool for Clojure designed to not set your hair on fire.

Found 5 ports.


 そらあります、そらありますわ。なかったらおかしい。てことで、次はオプション的なヤツをチェック。


risa:local tac$ port variants clojure
clojure has the variants:
   rlwrap: Use rlwrap support for tab completion, parenthesis matching


 rlwrapってのがあるみたいですね。先にバラしちゃいますけど、これ有効にしたら補完の他に↑でhisotryが辿れたりとか、^hとかも利くようになったのでMustだと思いますよ。


sudo port install clojure +rlwrap

 これで問題なく入ってー、cljとかコマンド叩くとREPLというなのコンソール的なのが上がってきますよ。

 気分を良くしたので、次にこれもMustと噂のclojure-contribをインストールします。こちらは特にオプションの類いも見つからなかったので普通にport install clojure-contribしてください。
 問題なくインストールが完了したみたいなので試してみると、


risa:bin tac$ clj
Clojure 1.2.0
user=> (require 'clojure.contrib.str-utils)
java.io.FileNotFoundException: Could not locate clojure/contrib/str_utils__init.class or clojure/contrib/str_utils.clj on classpath:  (NO_SOURCE_FILE:0)
user=> 


 なんだってー! が、しかし、いくら何でもこのくらいのエラーメッセージはわかりますよ。classpathって書いてあるじゃん。ぷぷぷ
 と、~/.profile辺りに


export CLASSPATH=/opt/local/share/java/clojure/lib/clojure-contrib.jar


 を追記してやってみますが変わらず。んー

 軽く調べてみましたら、どうやらPortsでインストールされる/opt/local/share/java/clojure/bin/cljという起動スクリプト(/opt/local/bin/cljからシンボリックリンクが張られています)がCLASSPATHを参照していないらしいです。そのかわりに.clojureというファイルにパスを記述していると、それを組み込んでくれるらしいです。
 ところが、その.clojureファイルってのがカレントディレクトリにないとだめらしく、例えばホームディレクトリに.clojureファイルを作成したとして、他のディレクトリへ移ってcljを実行しても有効にならないのですよね。それはそれで使い方もあろうが面倒くせー。

 まぁ、こんな本質ではないところであまり道草していても良くないので、アップデートの度に面倒くさいだろうと覚悟しつつ起動スクリプトを編集してホームディレクトリの.clojureファイルを読むようにし、そして更に気が変わってCLASSPATHを参照するように変更して使っていたら、普通に既にCLASSPATHを読むようにするpatchがあったって言うね……。

 #22889 (clojure-contrib with erring CLASSPATH) – MacPorts

 そらあります、そらありますわ。なかったらおかしい。