著作一覧 |
ジェネリック衣料品。
10.6のupdate3を当てたらRjbが動かなくなったというバグ報告をもらった。
これまで、rjbはjvmのdylib(WindowsのdllとかUnixのsoに相当)を直接ロードしていたのだが、10.6 update3 適用後になくなってしまったからだ。
報告者(Jeff)は、わざわざAppleのサポートフォーラムで訊いてくれて、結果として、dylibを直接呼ぶのではなく、/System/Library/Frameworks/JavaVM.framework/JavaVM"を呼ぶのが正しいということがわかった。
JavaVM なんだその名前は??? と半信半疑となったが、nmしてみると文句なくそれはdylibだった。(JVMにはClient版とServer版があるわけだが、何を残して何をどうしたかというところを見るといろいろ想像もつくのだがそれは置いておく)
そこまでは良い。当然、修正する。
そして再現のために、10.6 update3を当ててみる。Javaの修正が入る。ここまでも良い。
ところが、どうやってもextconf(configureのRuby版のようなもの)が失敗するようになってしまった。
ログを見るとjni.hが無いと出ている。ええーなんだって?
で、ls /System/Library/Frameworks/JavaVM.framework/Headers/jni.hとか見るとリンクはある。リンク先のCurrentJDK/Headers/jni.hもある。
が、実体がきれいさっぱり消えてなくなっている。
実体は、/System/Library/Framework/JavaVM.framework/Version/Currentがリンクしている同じディレクトリのAがリンクしている同じディレクトリの1.6.0がリンクしている同じディレクトリのCurrentJDKがリンクしている(うんざりしてくるね)/System/Library/Java/JavaVirtualMachines/1.6.0/jdkなのだが、ここのHeadersがきれいに消されてしまっているのであった。
10.6 update3とはそういうものなのだった。Javaは利用できるが(そのままでは)開発はできない、そういうことだ。
Apple版のJDKはdeprecatedだとか、そういった話は聞いていたがヘッダファイルを根こそぎ削除するとは思いもよらなかった。
しょうがないので、Mac Dev Centerに行くと、どこにもJavaの文字が無い(さすがに検索すると出てくる)。
というわけで、Xcodeの入れ直しかと思ったが、とりあえずTime MachineからHeadersを引っ張り出してrjbはmakeした。
いや、本当にAppleは独裁的だよなぁ(が、Rjbを利用してフィードバックくれる人はみんなマカーなので取りあえずはサポートするわけだが)。
追記:xcode3.2.4をインストールすると/Developer/SDKs/MacOS10.6.sdk/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Headersに展開される。diffとるとjni.hは同じだから良しとするが、Gemのその場makeは無理だな。
追記の追記:と一瞬考えたが、gemをその場makeする人はxcode入れてるはずだから問題ないか。後でjni.hのパスをそっちに変えることをメモ(今すぐやるのはちょっと待つ)。
さらなる追記:Java for Mac OS X 10.6 Update 3 and 10.5 Update 8 Release Notesってのをやっと見つけたよ。
パスが上のレベルで変わっているのだ。その時に、Headersはupdate3ではコピーしないということなのだろう。
The location of the Java SE 6 runtime home has changed to /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home.
というか、シンボリックリンクがすごくて、何が何やら。とりあえず、まっとうなたどり方がやっとわかった(が、Gemの性格上、古いパスも見る必要があるから、そこはextconfで吸収するしかない)
ジェズイットを見習え |