diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mkmf.rb | 47 |
1 files changed, 35 insertions, 12 deletions
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 |