From: nobu.nokada@... Date: 2005-02-12T08:06:31+09:00 Subject: Re: Passing a block to methods in mkmf.rb Hi, At Sat, 12 Feb 2005 01:31:00 +0900, Berger, Daniel wrote in [ruby-core:04421]: > I'm curious as to what the optional block is for in the mkmf.rb methods > like have_header, etc. I thought it merely yielded back the C source > that it was trying to compile behind the scenes to do the check. > However, when I try to pass a block I get errors: > > # extconf.rb test > have_header("windows.h"){ |code| p code } The block must return new source code, not nil. > On Windows XP Pro: > > C:\eclipse\workspace\ruby-foo>ruby extconftest.rb > checking for windows.h... c:/ruby/lib/ruby/1.8/fileutils.rb:687:in > `unlink': Permission denied - mkmftmp.log (Errno::EACCES) It's a bug. > On Solaris 9: > > djberge@sp5wd-b1-/home/djberge/programming/ruby-534>ruby extconftest.rb > checking for wait.h... /opt/lib/ruby/1.8/mkmf.rb:215:in `create_tmpsrc': > private method `sub' called for nil:NilClass (NoMethodError) This is caused by nil return from the block, and results the above error on the platform which disallow removing opened files. Index: lib/mkmf.rb =================================================================== RCS file: /cvs/ruby/src/ruby/lib/mkmf.rb,v retrieving revision 1.162.2.22 diff -U2 -p -r1.162.2.22 mkmf.rb --- lib/mkmf.rb 6 Feb 2005 17:03:35 -0000 1.162.2.22 +++ lib/mkmf.rb 11 Feb 2005 23:02:55 -0000 @@ -173,7 +173,7 @@ module Logging begin log.print(open {yield}) + ensure @log.close File::open(tmplog) {|t| FileUtils.copy_stream(t, log)} - ensure @log, @logfile, @orgout, @orgerr = log, *save @postpone -= 1 -- Nobu Nakada