From: "akira yamada / やまだあきら" Date: 2003-12-25T00:42:45+09:00 Subject: [ruby-list:38983] Re: Ruby 1.8.1 preview4 >>>>> In [ruby-list : No.38982] >>>>> matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > そんな腐った対応をしないでほしいなあ。で、その腐ったプラット > フォームを同定するcpp識別子はなににしたら良いでしょう? 知人に聞いてみたところによると、 Linuxではsysv contextをサポートしていなくて、 それをglibcがwrapしているんじゃないかとのことです。 glibcのソースやサンプルプログラムによると 実装されていない場合には最終的に __set_errno (ENOSYS); return -1; となるようで、 getcontext() == -1 でかつ if(errno == ENOSYS) ならその環境では使えないということでした。 configureでこのあたりのテストができるとよいかもしれません。 なお、cppで適切に判別できるかどうかという点では ちょっとわからないんですが、 ヘッダファイルを追いかけるとfeatures.hに /* This is here only because every header file already includes this one. Get the definitions of all the appropriate `__stub_FUNCTION' symbols. contains `#define __stub_FUNCTION' when FUNCTION is a stub that will always return failure (and set errno to ENOSYS). */ #include とあって % grep context gnu/stubs.h #define __stub_getcontext #define __stub_makecontext #define __stub_setcontext #define __stub_swapcontext という感じの定義がされているようです。 -- やまだあきら / akira yamada Vine Caves, Ltd. (akira@arika.org, akira@debian.org or akira@vinecaves.com)