From c16b9028e7c02b78b10d4d68499610badd418d77 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 27 Mar 2009 03:56:46 +0000 Subject: * lib/mkmf.rb (what_type?): checks more restrictively, and supports universal binary. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@23076 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/mkmf.rb | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) (limited to 'lib') diff --git a/lib/mkmf.rb b/lib/mkmf.rb index f27f286d0..9153a3510 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -372,6 +372,7 @@ end def link_command(ldflags, opt="", libpath=$DEFLIBPATH|$LIBPATH) conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'src' => CONFTEST_C, + 'extout' => $extout, 'arch_hdrdir' => "#$arch_hdrdir", 'top_srcdir' => $top_srcdir.quote, 'INCFLAGS' => "#$INCFLAGS", @@ -387,6 +388,7 @@ end def cc_command(opt="") conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote, + 'extout' => $extout, 'arch_hdrdir' => "#$arch_hdrdir", 'top_srcdir' => $top_srcdir.quote) RbConfig::expand("$(CC) #$INCFLAGS #$CPPFLAGS #$CFLAGS #$ARCH_FLAG #{opt} -c #{CONFTEST_C}", @@ -395,6 +397,7 @@ end def cpp_command(outfile, opt="") conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote, + 'extout' => $extout, 'arch_hdrdir' => "#$arch_hdrdir", 'top_srcdir' => $top_srcdir.quote) RbConfig::expand("$(CPP) #$INCFLAGS #$CPPFLAGS #$CFLAGS #{opt} #{CONFTEST_C} #{outfile}", @@ -983,7 +986,7 @@ def check_sizeof(type, headers = nil, &b) prelude << "typedef #{typename} rbcv_typedef_;\n" prelude << "static rbcv_typedef_ *rbcv_ptr_;\n" prelude = [prelude] - expr = "sizeof((*rbcv_ptr_)#{"."< sizeof(long)", headers) - "long long" - elsif try_static_assert("sizeof(#{name}) > sizeof(int)", headers) - "long" - elsif try_static_assert("sizeof(#{name}) > sizeof(short)", headers) - "int" - elsif try_static_assert("sizeof(#{name}) > 1", headers) - "short" - else - "char" - end + ptr = "" + else + return end + unsigned = try_static_assert("(rbcv_typedef_)-1 < 0", headers) ? "unsigned" : "" + [ + unsigned, + (UNIVERSAL_INTS+["short"]).find do |t| + prelude = headers + [["static #{unsigned} #{t} #{ptr}#{name};\n", + "extern #{unsigned} #{t} #{ptr}#{func};\n"]] + try_static_assert("sizeof(#{ptr}#{name}) == sizeof(#{unsigned}#{t})", prelude) + end, + ptr + ].compact.join(" ") end end -- cgit