%# -*- c -*- #include "ruby/ruby.h" <% class String def tr_cpp strip.upcase.tr_s("^A-Z0-9_*", "_").tr_s("*", "P") end end types = ARGF.grep(/^\s*RUBY_CHECK_SIZEOF\((\w[^\[\],#]*)[^#]*\)| ^\s*RUBY_DEFINT\((\w[^\[\],#]*)[^#]*\)| ^\s*check_sizeof\('(.+?)'/x) {$+} conditions = { "long long" => 'defined(HAVE_TRUE_LONG_LONG)', } %> void Init_sizeof(void) { VALUE s = rb_hash_new(); rb_define_const(rb_define_module("RbConfig"), "SIZEOF", s); #define DEFINE(type, size) rb_hash_aset(s, rb_str_new_cstr(#type), INT2FIX(SIZEOF_##size)); % types.each do |type| % cond = conditions[type] #if SIZEOF_<%= type.tr_cpp %> != 0<%= " && #{cond}" if cond %> DEFINE(<%= type %>, <%= type.tr_cpp %>); #endif % end #undef DEFINE }