summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-02 22:09:08 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-02 22:09:08 +0000
commitf3a1a4a4ba1d36dcfa79bc7be8a4fd56ff5ab40d (patch)
tree55e33336a252078a2aed3fc8f77baac162350885 /lib
parent332297419613bf3df97e77d4f21ee7be6b1da1aa (diff)
* lib/mkmf.rb (find_type): new method.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/mkmf.rb47
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