From: noreply@... Date: 2005-02-12T01:50:47+09:00 Subject: [ ruby-Patches-1486 ] have_enum_member for mkmf.rb Patches item #1486, was opened at 2005-02-11 09:47 You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=1700&aid=1486&group_id=426 Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Daniel Berger (djberg96) Assigned to: Nobody (None) Summary: have_enum_member for mkmf.rb Initial Comment: 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 ---------------------------------------------------------------------- You can respond by visiting: http://rubyforge.org/tracker/?func=detail&atid=1700&aid=1486&group_id=426