Gaucheのgit先端をコンパイルしてみた、無駄にclangで
先日thread-sleep!のバグを見つけて、報告したとたんshiroさんが一瞬で修正しててマジ感動したので次のリリースが待ちきれずgitの開発版をビルドしてみた。
あと無駄にclang使ってみてる。特に意味はない。
マニュアル読まない子なので一晩悪戦苦闘してたんだが、まとめるとほんと一瞬。
まず、Gaucheの最新リリース版がインストールされてないとダメっぽいのでちゃんとインストールする。これのせいでけっこうハマった。
% git clone git://gauche.git.sourceforge.net/gitroot/gauche/Gauche % cd Gauche
MacとかBSDでもないのにclangでビルドしたいとかよくわかんない人だけ、configure.acを編集。
diff --git a/configure.ac b/configure.ac index be6e7d6..1fe7f5d 100644 --- a/configure.ac +++ b/configure.ac @@ -314,7 +314,7 @@ case $host in CFLAGS="$CFLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D__EXTENSIONS__" ;; esac -AC_PROG_CC +AC_PROG_CC(clang gcc cc) AC_PROG_CC_STDC AC_C_CONST AC_PROG_MAKE_SET @@ -325,7 +325,7 @@ AC_CHECK_PROGS(MAKEINFO, makeinfo) AC_CHECK_PROGS(GZIP_PROGRAM, gzip) dnl for cross build -AC_CHECK_PROGS(BUILD_CC, ${build}-gcc ${build_alias}-gcc gcc cc) +AC_CHECK_PROGS(BUILD_CC, clang ${build}-gcc ${build_alias}-gcc gcc cc) dnl Safe default CFLAGS (usually -g -O2 if you're using gcc, empty otherwise). dnl If the user overrides CFLAGS during configure, which is recorded.
さらに、先日自力ビルドしたclangのせいかよくわからんけど、またインクルードパスでハマって嫌な思いをしたので直しとく。
pushd . cd /usr/include/ sudo ln asm-generic asm popd
ここからは変にコンパイラ指定したい人も共通。autoconf普通にやるんじゃなくて、それも含めたスクリプトを叩く。ここでもすごくハマった。
% ./DIST gen % gauche-config --reconfigure | sh % make % sudo make install
さて、実行してみる。
% gosh gosh> (use gauche.threads) #<undef> gosh> (time (thread-sleep! 0.01)) ;(time (thread-sleep! 0.01)) ; real 0.010 ; user 0.010 ; sys 0.000 #<undef> gosh> (time (thread-sleep! 1/100)) ;(time (thread-sleep! 1/100)) ; real 0.010 ; user 0.000 ; sys 0.000 #<undef> gosh>
よし。ちゃんと分数でもthread-sleep!できてる。ちなみに対策されてない版だと1秒も待たずに終わります。
しかし、上手く動いてるみたいだけども0.01と1/100でuserの部分が違っちゃうのは気になるね。