MacPortsのport:ruby21, ruby20, ruby19を更新(セキュリティ修正あり)
あたらしいバージョンがリリースされていたので対応しました。
- port:ruby21: 2.1.4
- port:ruby20: 2.0.0-p594
- port:ruby19: 1.9.4-p550
今回のリリースはセキュリティ修正を含みます。詳細は公式の情報をごらんください。
また、今回のリリースからPOODLE対応として安全でないとわかっているSSL/TLSオプションが無効になっています。こちらも公式ページに説明があります。
MacPortsのrubyとしては、この変更を取り消すvariantは用意しません。
OS X 10.7と10.8でコンパイルが終了しない対策
buildbotの進捗をながめてたら、10.7と10.8のビルドがタイムアウトで失敗していた。手元の10.7環境で試してみたところ、minirubyでrbconfig.rbを生成するところで止まってることが確認できた。どうもminirubyがおかしいみたい。`./miniruby sample/test.rb`を実行してみてもうんともすんとも言わない。
このレベルで動かないのはconfig.hがおかしいことが多いので、正常に動作した10.9環境と比べてみる。
% diff -u config.h-10.9 .ext/include/x86_64-darwin11.0/ruby/config.h --- config.h-10.9 2014-10-28 02:38:10.000000000 +0900 +++ .ext/include/x86_64-darwin11.0/ruby/config.h 2014-10-28 22:09:09.000000000 +0900 @@ -272,7 +272,6 @@ #define HAVE_UTIMES 1 #define HAVE_WAIT4 1 #define HAVE_WAITPID 1 -#define HAVE_BUILTIN___BUILTIN_BSWAP16 1 #define HAVE_BUILTIN___BUILTIN_BSWAP32 1 #define HAVE_BUILTIN___BUILTIN_BSWAP64 1 #define HAVE_BUILTIN___BUILTIN_CLZ 1 @@ -316,9 +315,9 @@ #define DLEXT_MAXLEN 7 #define DLEXT ".bundle" #define LIBDIR_BASENAME "lib" -#define RUBY_SETJMP(env) _setjmp((env)) -#define RUBY_LONGJMP(env,val) _longjmp((env),val) +#define RUBY_SETJMP(env) __builtin_setjmp((void **)(env)) +#define RUBY_LONGJMP(env,val) __builtin_longjmp((void **)(env),val) #define RUBY_JMP_BUF jmp_buf #define HAVE_PTHREAD_H 1 -#define RUBY_PLATFORM "x86_64-darwin13.0" +#define RUBY_PLATFORM "x86_64-darwin11.0" #endif /* INCLUDE_RUBY_CONFIG_H */
まー、RUBY_SETJMP()やRUBY_LONGJMP()あたりがあやしいよね。configureのオプションで--with-setjmp-type=_setjmpとして強制的に指定してやればminirubyは動くようになって解消した。とりあえず、MacPortsのPortfileにはこれを入れて対処することに。
抜本的な対応は、rubyのupstreamのほうでどうにかしよう。
(10/29 追記)trunkに修正が入り、この問題は解消しました。はやすぎる!