Certain headers, such as signal.h, use enum values instead of preprocessor constants. However, these values are not
necessarily supported across platforms. For example, the idtype_t enum in signal.h on Solaris 9 has a P_PROJID member
that is only defined on Solaris 8 or later.
To allow programmers to check for the presence of certain enum members, I propose a "have_enum_member" method
as follows:
--- mkmf.bak Fri Feb 11 08:30:47 2005
+++ mkmf.rb Fri Feb 11 09:33:47 2005
@@ -552,6 +552,23 @@
end
end
+def have_enum_member(type, member, header = nil, &b)
+ checking_for "#{type}.#{member}" do
+ if try_compile(<<"SRC", &b)
+#{COMMON_HEADERS}
+#{cpp_include(header)}
+/*top*/
+static #{type} t;
+int s = #{member};
+SRC
+ $defs.push(format("-DHAVE_ENUM_%s", member.upcase))
+ true
+ else
+ false
+ end
+ end
+end
+
def have_type(type, header = nil, opt = "", &b)
checking_for type do
header = cpp_include(header)
This would then create a HAVE_ENUM_XXX preprocessor constant programmers could use within their extensions.
Regards,
Dan |