なかだです。

At Tue, 5 Jun 2001 13:35:57 +0900,
WATANABE Hirofumi <eban / os.rim.or.jp> wrote:
> +  if egrep_cpp(field, "#include <pwd.h>\n")
> +    $defs.push(format("-D%s", field.upcase))
>    end

  mingw32/mswin32 では egrep_cpp がうまく動きません。
command.com/cmd.exe が exit code をちゃんと返さないために、パイ
プを使うと egrep の結果が分からなくなります。[ruby-dev:13446]
を当てるのと当てないのとで結果が逆になりますが、いずれにせよ真っ
当な結果にはなりません。

  これをちゃんと解決するには、自分でコマンドラインを解析してパ
イプラインを作るとか、大事になりそうなのでとりあえず egrep_cpp
の方を変えてみました。


Index: ext/extmk.rb.in =================================================================== RCS file: /cvs/ruby/src/ruby/ext/extmk.rb.in,v retrieving revision 1.47 diff -u -2 -p -r1.47 extmk.rb.in --- ext/extmk.rb.in 2001/06/05 04:54:52 1.47 +++ ext/extmk.rb.in 2001/06/05 17:20:15 @@ -90,4 +90,16 @@ def xsystem command end +def xopen command, &block + if $DEBUG + puts command + return system(command) + end + $stderr.reopen($log) + $log.puts command + r = open("|"+command, "r", &block) + $stderr.reopen($orgerr) + return r +end + def try_link0(src, opt="") cfile = open("conftest.c", "w") @@ -132,6 +144,11 @@ def egrep_cpp(pat, src, opt="") cfile.print src cfile.close + pat = Regexp.new(pat) if String === pat begin - xsystem(format(CPP+"|egrep #{pat}", $CFLAGS, $CPPFLAGS, opt)) + xopen(format(CPP, $CFLAGS, $CPPFLAGS, opt)) do |f| + $log.puts "| egrep #{pat}" + f.grep(pat) {return true} + end + false ensure rm_f "conftest*" Index: lib/mkmf.rb =================================================================== RCS file: /cvs/ruby/src/ruby/lib/mkmf.rb,v retrieving revision 1.54 diff -u -2 -p -r1.54 mkmf.rb --- lib/mkmf.rb 2001/06/05 04:54:52 1.54 +++ lib/mkmf.rb 2001/06/05 17:20:09 @@ -71,4 +71,16 @@ def xsystem command end +def xopen command, &block + if $DEBUG + puts command + return system(command) + end + $stderr.reopen($log) + $log.puts command + r = open("|"+command, "r", &block) + $stderr.reopen($orgerr) + return r +end + def try_link0(src, opt="") cfile = open("conftest.c", "w") @@ -113,6 +125,11 @@ def egrep_cpp(pat, src, opt="") cfile.print src cfile.close + pat = Regexp.new(pat) if String === pat begin - xsystem(format(CPP+"|egrep #{pat}", $CPPFLAGS, $CFLAGS, opt)) + xopen(format(CPP, $CFLAGS, $CPPFLAGS, opt)) do |f| + $log.puts "| egrep #{pat}" + f.grep(pat) {return true} + end + false ensure rm_f "conftest*" Index: ext/etc/extconf.rb =================================================================== RCS file: /cvs/ruby/src/ruby/ext/etc/extconf.rb,v retrieving revision 1.3 diff -u -2 -p -r1.3 extconf.rb --- ext/etc/extconf.rb 2001/06/05 04:42:46 1.3 +++ ext/etc/extconf.rb 2001/06/05 22:57:23 @@ -12,10 +12,10 @@ b = have_func("getpwent") c = have_func("getgrent") if a or b or c - etc_grep_header("pw_gecos") + etc_grep_header("pw_gecos") unless /mingw/ === RUBY_PLATFORM etc_grep_header("pw_change") etc_grep_header("pw_quota") etc_grep_header("pw_age") etc_grep_header("pw_class") - etc_grep_header("pw_comment") unless /cygwin/ === RUBY_PLATFORM + etc_grep_header("pw_comment") unless /cygwin|mingw/ === RUBY_PLATFORM etc_grep_header("pw_expire") create_makefile("etc")
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦