aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--lib/mkmf.rb47
2 files changed, 38 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 4c750ebd3a..d3168c5e6a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,11 @@
-Fri Aug 3 06:40:04 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Fri Aug 3 07:09:05 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
* lib/mkmf.rb: more verbose message. [ruby-Bugs-12766]
* lib/mkmf.rb (have_type): suppress a warning with -Wall.
+ * lib/mkmf.rb (find_type): new method.
+
Fri Aug 3 00:00:20 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
* bignum.c (big2str_table): base cannot be 0 or 1.
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