#Ubuntu 9.04で試しにapt-get install gaucheとかやってみたら0.8.13が入った。これでもいいのかも知れん
#apt-get install wilikiとかやってみたら0.5.3が入った。だめだこりゃ。
#日本に来て感心することはたくさんあるが、コーヒー屋でテークアウトするとこぼれないように飲み口にシールを貼ってくれる細やかな気遣いもすばらしい。
#Snow Leopard (MacOSX 10.6) 入れてみたんですが、Gaucheがコンパイルできなくなりました。
#gcc -DPACKAGE_NAME=\"gc\" -DPACKAGE_TARNAME=\"gc\" -DPACKAGE_VERSION=\"7.1\" "-DPACKAGE_STRING=\"gc 7.1\"" -DPACKAGE_BUGREPORT=\"Hans.Boehm@hp.com\" -DGC_VERSION_MAJOR=7 -DGC_VERSION_MINOR=1 -DPACKAGE=\"gc\" -DVERSION=\"7.1\" -DGC_DARWIN_THREADS=1 -DTHREAD_LOCAL_ALLOC=1 -DHAS_X86_THREAD_STATE32___EAX=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DNO_EXECUTE_PERMISSION=1 -DALL_INTERIOR_POINTERS=1 -DGC_GCJ_SUPPORT=1 -DJAVA_FINALIZATION=1 -DATOMIC_UNCOLLECTABLE=1 -DDONT_ADD_BYTE_AT_END=1 -DLARGE_CONFIG=1 -I./include -fexceptions -I libatomic_ops/src -g -O2 -c mach_dep.c -fno-common -DPIC -o .libs/mach_dep.o
In file included from mach_dep.c:163:
/usr/include/ucontext.h:42:2: error: #error ucontext routines are deprecated, and require _XOPEN_SOURCE to be defined
make[2]: *** [mach_dep.lo] Error 1
make[1]: *** [all-recursive] Error 1
#BoehmGCまわりでこんなエラーが出るのと、
#gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I./../gc/include -no-cpp-precomp -g -O2 -no-cpp-precomp -fPIC -fno-common -fomit-frame-pointer -c bignum.c
/var/folders/0q/0qXMwlU9FCevFz0g-kxHp++++TI/-Tmp-//ccvdfebZ.s:400:suffix or operands invalid for `mov'
/var/folders/0q/0qXMwlU9FCevFz0g-kxHp++++TI/-Tmp-//ccvdfebZ.s:400:suffix or operands invalid for `mov'
/var/folders/0q/0qXMwlU9FCevFz0g-kxHp++++TI/-Tmp-//ccvdfebZ.s:456:suffix or operands invalid for `mov'
/var/folders/0q/0qXMwlU9FCevFz0g-kxHp++++TI/-Tmp-//ccvdfebZ.s:482:suffix or operands invalid for `mov'
/var/folders/0q/0qXMwlU9FCevFz0g-kxHp++++TI/-Tmp-//ccvdfebZ.s:505:suffix or operands invalid for `mov'
/var/folders/0q/0qXMwlU9FCevFz0g-kxHp++++TI/-Tmp-//ccvdfebZ.s:514:suffix or operands invalid for `mov'
#bignum.cのコンパイルで、上のようなエラーが出ました。
#Snow Leopard というより、gcc が 4.2 になったので、そっちの影響かも。
#ちなみにBoehmGCの方は、エラーメッセージの通りに #define _XOPEN_SOURCE をつければコンパイルはできました。けど、bignum.c はよくわかりません。
#Leopard上でCC=gcc-4.2でビルドしてるんですが、特に問題なくGaucheはビルドできてます
#雪彪はCocoa Emacsのinline-patchが対応したら入れよう(今朝届いたんだけど)
#うーん、Snow Leopard で影響が出るのか。
#Cocoaに大きくシフトして、Carbon以前のAPIはだいぶ廃止されたみたいですからね
#bignumの方は、x86の時だけアセンブラが使われるようになってるんだけどその中がおかしいのかも。
#でも、bignum.c はなんかgccが変なように見える。
#gccのエラーチェックが厳しくなったとかで発覚したとか。
#あ、違うか。gccが吐いたアセンブラの問題?
#src/gauche/arith.hの68行目で#includeしてるarith_i386.hをコメントアウトすればインラインアセンブラは使われなくなります。
#/var の下なので、gccがはいたもののように見えるのですが、ちょっとよく分かりませんね。
#とりあえず、コメントアウトしてみます。
#それでコンパイルしてやっぱり同じエラーが出たらインラインアセンブラの可能性は除外できますね。
#コンパイルは通ったようです。
#arith_i386.h の問題かも。
#make check で、1ヶ所 Bus error になりました。
#gccのレジスタ割付が変わって、movのオペランドが両方ともメモリになっちゃったのかもしれない。
#Testing digest framework ... /bin/sh: line 1: 66822 Bus error GAUCHE_TEST_RECORD_FILE=../../test.record ../../src/gosh -ftest -I. test.scm > test.log
make[2]: *** [check] Error 138
#test.log de
#どこで落ちてるかわかりますか?
#test.log はこんな感じです。
#Testing digest framework ======================================================
<md5>--------------------------------------------------------------------------
testing bindings in #<module rfc.md5> ... ok
test md5-digest-string, expects "d41d8cd98f00b204e9800998ecf8427e" ==>
#md5かあ
#SHA256の新しく入ったコードかと思ったけど違ったか
#gdb で見てみると、CC_MD5_Final で落ちているみたいです。
#Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000001007f60c4
0x00007fff88469142 in CC_MD5_Final ()
#(gdb) bt
#0 0x00007fff88469142 in CC_MD5_Final ()
#1 0x00000001003f2f19 in rfc__md5_25md5_final (SCM_FP=<value temporarily unavailable, due to optimizations>, SCM_ARGCNT=<value temporarily unavailable, due to optimizations>, data_=<value temporarily unavailable, due to optimizations>) at md5.scm:129
#2 0x2275b2ec73fce356 in ?? ()
#関係ないけど、仮想環境(VMware)とかTimeMachineやらがあるおかげで、OSアップデート時のドキドキ感が薄れているかも。
#CC_MD5_Finalって何だ? そんな関数見当たらないような
#/usr/include/CommonCrypto/CommonDigest.h で定義されているみたいです。
#TimeMachineって、OSアップデートした状態から、アップデートする前の状態に戻せるんですか?
#確か戻せたはず。
#すげー
#試してないので、もしかしたら、できないのかもしれませんが。
#Snow Leopard インストール後も、インストール前のファイルにアクセスできるんで、できるはず。
#ext/digestは全部自前でmd5やってるはずなのに、なぜCommonCryptoの関数が呼ばれているのか、が謎
#なんか見落としてるかな
#Snow Leopard の /usr/lib/libSystem.B.dylib が MD5Final を含んでいるので、そっちが呼ばれているみたいです。Leopard の方には MD5Final はありませんでした。
#あー、分かった。元々、/usr/lib/libSystem.B.dylib は CommonCryptoの関数を含んでいたのですが、Leopard 以前の CommonCrypto.h では、MD5(Init|Update|Final)って関数マクロになっていて、このヘッダファイルを読み込まない限り、名前が衝突せず、問題なかったようです。
#だけど、Snow Leopard では MD5Final だけ関数マクロでなく、普通の関数になっているので、CommonCrytpt.h をインクルードしなくても、libSystem.B.dylib をリンクするだけで、そっちが呼ばれてしまう(可能性がある)と。
#Gauche側の md5c.c の中の関数名を変えた方がいいのかも。
#ふーむ。同一dso内の参照を優先してくれたらいいのだけれど、そうじゃないとしたら名前変更で対応するのが一番早道そうですね。
#今日は LLTV の日なんですね。