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