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の部分が違っちゃうのは気になるね。