なかだです。

At Wed, 20 Aug 2003 12:38:17 +0900,
Shugo Maeda wrote:
> 現状では、やはり最初のパッチのように自前でチェックするしかなさそ
> うなので、そのようにしたものを0.6としてリリースしました。
> RAAに登録してあります。

わたなべさんのブロックを使うという案でいってみました。

これだと、have_libwrapはこういう形になります。

  def have_libwrap
    have_library("wrap"){|src|src+"int allow_severity, deny_severity;"}
  end

このほうが、任意のテストに対して対処できるというメリットがあり
ます。


Index: lib/mkmf.rb =================================================================== RCS file: /cvs/ruby/src/ruby/lib/mkmf.rb,v retrieving revision 1.146 diff -u -2 -p -r1.146 mkmf.rb --- lib/mkmf.rb 16 Aug 2003 14:58:34 -0000 1.146 +++ lib/mkmf.rb 20 Aug 2003 09:02:40 -0000 @@ -195,12 +195,14 @@ end def create_tmpsrc(src) + src = yield(src) if block_given? + src = src.sub(/[^\n]\z/, "\\&\n") open(CONFTEST_C, "w") do |cfile| cfile.print src end + src end -def try_do(src, command) - src = src.sub(/[^\n]\z/, "\\&\n") - create_tmpsrc(src) +def try_do(src, command, &b) + src = create_tmpsrc(src, &b) xsystem(command) ensure @@ -235,22 +237,22 @@ def libpathflag(libpath=$LIBPATH) end -def try_link0(src, opt="") - try_do(src, link_command("", opt)) +def try_link0(src, opt="", &b) + try_do(src, link_command("", opt), &b) end -def try_link(src, opt="") - try_link0(src, opt) +def try_link(src, opt="", &b) + try_link0(src, opt, &b) ensure rm_f "conftest*", "c0x32*" end -def try_compile(src, opt="") - try_do(src, cc_command(opt)) +def try_compile(src, opt="", &b) + try_do(src, cc_command(opt), &b) ensure rm_f "conftest*" end -def try_cpp(src, opt="") - try_do(src, cpp_command(CPPOUTFILE, opt)) +def try_cpp(src, opt="", &b) + try_do(src, cpp_command(CPPOUTFILE, opt), &b) ensure rm_f "conftest*" @@ -266,18 +268,21 @@ def cpp_include(header) end -def try_static_assert(expr, headers = nil, opt = "") +def try_static_assert(expr, headers = nil, opt = "", &b) headers = cpp_include(headers) - try_compile(<<SRC, opt) + try_compile(<<SRC, opt, &b) #{COMMON_HEADERS} #{headers} +/*top*/ int tmp[(#{expr}) ? 1 : -1]; SRC end -def try_constant(const, headers = nil, opt = "") +def try_constant(const, headers = nil, opt = "", &b) + headers = cpp_include(headers) if CROSS_COMPILING - unless try_compile(<<"SRC", opt) + unless try_compile(<<"SRC", opt, &b) #{COMMON_HEADERS} -#{cpp_include(headers)} +#{headers} +/*top*/ int tmp = #{const}; SRC @@ -307,9 +312,10 @@ SRC else src = %{#{COMMON_HEADERS} -#{cpp_include(headers)} +#{headers} #include <stdio.h> +/*top*/ int main() {printf("%d\\n", (int)(#{const})); return 0;} } - if try_link0(src, opt) + if try_link0(src, opt, &b) xpopen("./conftest") do |f| return Integer(f.gets) @@ -320,8 +326,9 @@ int main() {printf("%d\\n", (int)(#{cons end -def try_func(func, libs, headers = nil) +def try_func(func, libs, headers = nil, &b) headers = cpp_include(headers) - try_link(<<"SRC", libs) or try_link(<<"SRC", libs) + try_link(<<"SRC", libs, &b) or try_link(<<"SRC", libs, &b) #{headers} +/*top*/ int main() { return 0; } int t() { #{func}(); return 0; } @@ -329,4 +336,5 @@ SRC #{COMMON_HEADERS} #{headers} +/*top*/ int main() { return 0; } int t() { void ((*volatile p)()); p = (void ((*)()))#{func}; return 0; } @@ -334,7 +342,6 @@ SRC end -def egrep_cpp(pat, src, opt="") - src = src.sub(/[^\n]\z/, "\\&\n") - create_tmpsrc(src) +def egrep_cpp(pat, src, opt = "", &b) + src = create_tmpsrc(src, &b) xpopen(cpp_command('', opt)) do |f| if Regexp === pat @@ -361,7 +368,8 @@ ensure end -def macro_defined?(macro, src, opt="") +def macro_defined?(macro, src, opt = "", &b) src = src.sub(/[^\n]\z/, "\\&\n") - try_cpp(src + <<"SRC", opt) + try_cpp(src + <<"SRC", opt, &b) +/*top*/ #ifndef #{macro} # error @@ -370,6 +378,6 @@ SRC end -def try_run(src, opt="") - if try_link0(src, opt) +def try_run(src, opt = "", &b) + if try_link0(src, opt, &b) xsystem("./conftest") else @@ -447,5 +455,5 @@ def checking_for(m) end -def have_library(lib, func=nil) +def have_library(lib, func = nil, &b) func = "main" if !func or func.empty? checking_for "#{func}() in -l#{lib}" do @@ -454,5 +462,5 @@ def have_library(lib, func=nil) else libs = append_library($libs, lib) - if try_func(func, libs) + if try_func(func, libs, &b) $libs = libs true @@ -464,10 +472,10 @@ def have_library(lib, func=nil) end -def find_library(lib, func, *paths) +def find_library(lib, func, *paths, &b) checking_for "#{func}() in -l#{lib}" do libpath = $LIBPATH libs = append_library($libs, lib) begin - until r = try_func(func, libs) or paths.empty? + until r = try_func(func, libs, &b) or paths.empty? $LIBPATH = libpath | [paths.shift] end @@ -483,7 +491,7 @@ def find_library(lib, func, *paths) end -def have_func(func, header=nil) +def have_func(func, headers = nil, &b) checking_for "#{func}()" do - if try_func(func, $libs, header) + if try_func(func, $libs, headers, &b) $defs.push(format("-DHAVE_%s", func.upcase)) true @@ -494,7 +502,7 @@ def have_func(func, header=nil) end -def have_header(header) +def have_header(header, &b) checking_for header do - if try_cpp(cpp_include(header)) + if try_cpp(cpp_include(header), &b) $defs.push(format("-DHAVE_%s", header.tr("a-z./\055", "A-Z___"))) true @@ -505,9 +513,10 @@ def have_header(header) end -def have_struct_member(type, member, header=nil) +def have_struct_member(type, member, header = nil, &b) checking_for "#{type}.#{member}" do - if try_compile(<<"SRC") + if try_compile(<<"SRC", &b) #{COMMON_HEADERS} #{cpp_include(header)} +/*top*/ int main() { return 0; } int s = (char *)&((#{type}*)0)->#{member} - (char *)0; @@ -521,13 +530,16 @@ SRC end -def have_type(type, header=nil, opt="") +def have_type(type, header = nil, opt = "", &b) checking_for type do - if try_compile(<<"SRC", opt) or try_compile(<<"SRC", opt) + header = cpp_include(header) + if try_compile(<<"SRC", opt, &b) or try_compile(<<"SRC", opt, &b) #{COMMON_HEADERS} -#{cpp_include(header)} +#{header} +/*top*/ static #{type} t; SRC #{COMMON_HEADERS} -#{cpp_include(header)} +#{header} +/*top*/ static #{type} *t; SRC @@ -540,10 +552,10 @@ SRC end -def check_sizeof(type, header=nil) +def check_sizeof(type, header = nil, &b) expr = "sizeof(#{type})" m = "checking size of #{type}... " message "%s", m Logging::message "check_sizeof: %s--------------------\n", m - if size = try_constant(expr, header) + if size = try_constant(expr, header, &b) $defs.push(format("-DSIZEOF_%s", type.upcase)) end
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦