From f3a1a4a4ba1d36dcfa79bc7be8a4fd56ff5ab40d Mon Sep 17 00:00:00 2001 From: nobu Date: Thu, 2 Aug 2007 22:09:08 +0000 Subject: * lib/mkmf.rb (find_type): new method. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/mkmf.rb | 47 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) (limited to 'lib/mkmf.rb') diff --git a/lib/mkmf.rb b/lib/mkmf.rb index fbc0f56618..c2502d7d05 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -772,6 +772,21 @@ SRC end end +def try_type(type, headers = nil, opt = "", &b) + if try_compile(<<"SRC", opt, &b) +#{COMMON_HEADERS} +#{cpp_include(headers)} +/*top*/ +typedef #{type} conftest_type; +int conftestval[sizeof(conftest_type)?1:-1]; +SRC + $defs.push(format("-DHAVE_TYPE_%s", type.strip.upcase.tr_s("^A-Z0-9_", "_"))) + true + else + false + end +end + # Returns whether or not the static type +type+ is defined. You may # optionally pass additional +headers+ to check against in addition to the # common header files. @@ -787,18 +802,26 @@ end # def have_type(type, headers = nil, opt = "", &b) checking_for checking_message(type, headers, opt) do - headers = cpp_include(headers) - if try_compile(<<"SRC", opt, &b) -#{COMMON_HEADERS} -#{headers} -/*top*/ -typedef #{type} conftest_type; -int conftestval[sizeof(conftest_type)?1:-1]; -SRC - $defs.push(format("-DHAVE_TYPE_%s", type.strip.upcase.tr_s("^A-Z0-9_", "_"))) - true - else - false + try_type(type, headers, opt, &b) + end +end + +# Returns where the static type +type+ is defined. +# +# You may also pass additional flags to +opt+ which are then passed along to +# the compiler. +# +# See also +have_type+. +# +def find_type(type, opt, *headers, &b) + opt ||= "" + fmt = "not found" + def fmt.%(x) + x ? x.respond_to?(:join) ? x.join(",") : x : self + end + checking_for checking_message(type, nil, opt), fmt do + headers.find do |h| + try_type(type, h, opt, &b) end end end -- cgit v1.2.3