Lion の GCC ではまった
OS X を Snow Leopard から Lion に移行したところ、WCSLIB の build でこけました。
$ cd wcslib-4.9/ $ ./configure --prefix=/usr/local $ make -j 4 (略) gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I.. -g -O2 -c wcserr.c wcserr.c:160: internal compiler error: Segmentation fault: 11 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://developer.apple.com/bugreporter> for instructions. make[2]: *** [libwcs-4.9.a(wcserr.o)] Error 1 (略)
普通に configure/make の流れで build しようとすると、GCC が segmentation fault を起こして make できません。
Lion + Xcode 4 になってから GCC が LLVM のもの (/usr/llvm-gcc-4.2/bin/llvm-gcc-4.2 が実体) になったため、GCC と異なる挙動をする、もしくはまだ bug が潜んでいるということのようです。LLVM と GCC については、「Xcode 4 でデフォルトになった LLVM って何?」が簡潔で分かりやすいです。
$ gcc --version i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00) Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
さて、LLVM ではない「普通の」GCC も Xcode 3 を入れると /usr/bin/gcc-4.2 として入るようです。こいつを使えば先の WCSLIB の問題は解決するようですが、自分の環境では Xcode 3 を入れていないので、代わりに clang を使います。
$ cd wcslib-4.9/ $ CC=clang ./configure --prefix=/usr/local $ make -j 4
これで通ります。もちろん、clang も GCC とは異なるので、今回 WCSLIB ではたまたま上手く通っただけかもしれません。
ちなみに、llvm-gcc が seg fault を起こす、WCSLIB の wcserr.c の該当箇所は以下の通りです。これだけ見ただけでは正常な C の code なので、何が原因かはよく分かりません。
static int wcserr_enabled = 0; int wcserr_enable(int enable) { return wcserr_enabled = (enable ? 1 : 0); }