From: Takao Kouji Date: 2008-07-15T23:21:39+09:00 Subject: [ruby-dev:35519] Re: リリース前ToDoリスト 高尾宏治です。 On 2008/07/15, at 21:37, Nobuyoshi Nakada wrote: >> なお、本パッチはconfigureのオプションに--enable-libeditを付けないと、 >> 期待通りに動作しません。つまり、修正前のように動作します。 >> >> --enable-libeditオプションを不要にするため、 >> HAVE_EDITLINE_READLINE_Hが定義されているかどうかではなく、 >> history_baseの扱いをextconf.rbで判定するようにできれば、 >> より良いと思うのですが、その方法は分かりません。 > > libeditかどうかで判断すればいいのでしょうか。 なかださんのパッチでは期待通りに動きませんでした。 Mac OSXには /Developer/SDKs/MacOSX10.5.sdk/usr/lib/libreadline.dylib というのがあります。 これはlibedit.2.dylibへのシンボリックリンクになっています。 なので、extconf.rbの実行後、extconf.hには #define HISTORY_BASE (history_base) が記述されていました。 コンパイルし、実行した結果も思わしくありません。 $ ruby -rreadline -e 'puts Readline::VERSION; Readline::HISTORY.push("1", "2", "3"); Readline::HISTORY.each { |s| puts s }' EditLine wrapper 2 3 extconf.rbでチェックするならば、 以下のCのソースコードをコンパイル、実行して、 終了ステータスが1ならば「HISTORY_BASE (history_base - 1)」、 終了ステータスが0ならば「HISTORY_BASE (history_base)」とする、 といったことができれば良いのですが方法を知りません。 時間があればextconf.rbの記述方法を調べたいと考えています。 #include #ifdef HAVE_EDITLINE_READLINE_H #include #else #include #include #endif /* HAVE_EDITLINE_READLINE_H */ int main(int argc, char **argv) { HIST_ENTRY *entry; using_history(); add_history("1"); add_history("2"); entry = history_get(history_base); if (strncmp("2", entry->line, 1) == 0) { return 1; } return 0; }