Ubuntu 14.04でruby-2.1.1をソースからビルドする
Ubuntu 14.04でruby-2.1.1をソースからビルドして動かしてみようとしたのですが、ちょっと引っかかったことがあったのでここにメモします。
本家のサイトからソースアーカイブをダウンロードしてきて、Ubuntu 14.04 (x86_64)でビルドしてみました。
$ tar xf ruby-2.1.1.tar.gz $ mkdir obj $ cd obj $ ../ruby-2.1.1/configure $ make
すると一カ所だけコンパイルエラーになってしまうところがありました。
make[2]: Entering directory `/home/koba/ruby/obj/ext/readline' compiling ../../../ruby-2.1.1/ext/readline/readline.c ../../../ruby-2.1.1/ext/readline/readline.c: In function ‘Init_readline’: ../../../ruby-2.1.1/ext/readline/readline.c:1977:26: error: ‘Function’ undeclared (first use in this function) rl_pre_input_hook = (Function *)readline_pre_input_hook; ^ ../../../ruby-2.1.1/ext/readline/readline.c:1977:26: note: each undeclared identifier is reported only once for each function it appears in ../../../ruby-2.1.1/ext/readline/readline.c:1977:36: error: expected expression before ‘)’ token rl_pre_input_hook = (Function *)readline_pre_input_hook; ^ ../../../ruby-2.1.1/ext/readline/readline.c: At top level: ../../../ruby-2.1.1/ext/readline/readline.c:634:1: warning: ‘readline_pre_input_hook’ defined but not used [-Wunused-function] readline_pre_input_hook(void) ^ make[2]: *** [readline.o] Error 1 make[2]: Leaving directory `/home/koba/ruby/obj/ext/readline' make[1]: *** [ext/readline/all] Error 2 make[1]: Leaving directory `/home/koba/ruby/obj' make: *** [build-ext] Error 2
調べてみると、どうもlibreadlineのバージョンが上がって型の定義が変更になったようです。とりあえず以下の一カ所の修正でビルドできるようになりました。
--- ruby-2.1.1/ext/readline/readline.c.org 2014-04-25 16:20:34.178381831 +0900 +++ ruby-2.1.1/ext/readline/readline.c 2014-04-25 16:20:13.634382412 +0900 @@ -1974,7 +1974,7 @@ rl_attempted_completion_function = readline_attempted_completion_function; #if defined(HAVE_RL_PRE_INPUT_HOOK) - rl_pre_input_hook = (Function *)readline_pre_input_hook; + rl_pre_input_hook = (rl_hook_func_t *)readline_pre_input_hook; #endif #ifdef HAVE_RL_CATCH_SIGNALS rl_catch_signals = 0;
せっかくなので、バグ報告をしてみようと思いました。まず開発中のtrunkのソースの該当箇所を調べたのですが、すでに修正済みでした。なので次のリリースでは問題なくなります。
2014/5/9 追記
Ruby 2.1.2 がリリースされて、このバグが修正されています。