From: MORITA Hideyuki Date: 2008-01-28T19:41:04+09:00 Subject: [ruby-dev:33461] Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) 森田と申します。 Mac OS X Leopard (10.5.1) 環境で ruby-1.8.6-p111 をビル ドしたところ、 make 時に以下のエラーで終了しました。 ===== ここから ===== > ./configure --enable-shared --enable-pthread > make .... gcc -g -O2 -fno-common -pipe -fno-common -DRUBY_EXPORT -L. main.o dmydln.o libruby-static.a -lpthread -ldl -lobjc -o miniruby ruby: [BUG] Segmentation fault ruby 1.8.6 (2007-09-24) [i686-darwin9.1.0] make: *** [.rbconfig.time] Abort trap ===== ここまで ===== http://chopine.be/lrz/ruby-osx-patches/ignore-gsetcontext.diff 上記で配布されているパッチで解決されるのです が、の 読み込みを殺しての対応に疑問を持ったため、もう少し調べ たところ、 Leopard の ucontext_t 実装の問題である可能性を示唆した ページを みつけました。 http://d.hatena.ne.jp/nyaxt/20080105#1199506818 ここの情報をもとに、Leopard 以上のバージョンで ucontext_t 以降の 領域にパディングを行うパッチを作成いたしました。 ===== ここから ===== *** node.h.org 2008-01-28 18:27:55.000000000 +0900 --- node.h 2008-01-28 19:23:10.000000000 +0900 *************** *** 384,389 **** --- 384,395 ---- #ifdef USE_CONTEXT typedef struct { ucontext_t context; + #if defined(__APPLE__) + # include + # if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 + _STRUCT_MCONTEXT __padding__; // for Leopard's ucontext_t bugs + # endif + #endif volatile int status; } rb_jmpbuf_t[1]; #else ===== ここまで ===== 上記のパッチで make 通過及び、make test は succeeded まで確認 いたしました。 Leopard 以降のバージョンで常にパディングを行うため、恒久的 解決にはなりませんが、一応報告をかねてお送りします。 --- 森田 秀幸 h-morita@esm.co.jp