* lib/mkmf.rb (what_type?): checks more restrictively, and
supports universal binary. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23076 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
29983664fc
commit
a8eaf31630
@ -1,3 +1,8 @@
|
|||||||
|
Fri Mar 27 12:56:44 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/mkmf.rb (what_type?): checks more restrictively, and
|
||||||
|
supports universal binary.
|
||||||
|
|
||||||
Fri Mar 27 01:33:37 2009 Tanaka Akira <akr@fsij.org>
|
Fri Mar 27 01:33:37 2009 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* time.c (time_cmp): negate the result of reverse comparison.
|
* time.c (time_cmp): negate the result of reverse comparison.
|
||||||
|
46
lib/mkmf.rb
46
lib/mkmf.rb
@ -372,6 +372,7 @@ end
|
|||||||
def link_command(ldflags, opt="", libpath=$DEFLIBPATH|$LIBPATH)
|
def link_command(ldflags, opt="", libpath=$DEFLIBPATH|$LIBPATH)
|
||||||
conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote,
|
conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote,
|
||||||
'src' => CONFTEST_C,
|
'src' => CONFTEST_C,
|
||||||
|
'extout' => $extout,
|
||||||
'arch_hdrdir' => "#$arch_hdrdir",
|
'arch_hdrdir' => "#$arch_hdrdir",
|
||||||
'top_srcdir' => $top_srcdir.quote,
|
'top_srcdir' => $top_srcdir.quote,
|
||||||
'INCFLAGS' => "#$INCFLAGS",
|
'INCFLAGS' => "#$INCFLAGS",
|
||||||
@ -387,6 +388,7 @@ end
|
|||||||
|
|
||||||
def cc_command(opt="")
|
def cc_command(opt="")
|
||||||
conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote,
|
conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote,
|
||||||
|
'extout' => $extout,
|
||||||
'arch_hdrdir' => "#$arch_hdrdir",
|
'arch_hdrdir' => "#$arch_hdrdir",
|
||||||
'top_srcdir' => $top_srcdir.quote)
|
'top_srcdir' => $top_srcdir.quote)
|
||||||
RbConfig::expand("$(CC) #$INCFLAGS #$CPPFLAGS #$CFLAGS #$ARCH_FLAG #{opt} -c #{CONFTEST_C}",
|
RbConfig::expand("$(CC) #$INCFLAGS #$CPPFLAGS #$CFLAGS #$ARCH_FLAG #{opt} -c #{CONFTEST_C}",
|
||||||
@ -395,6 +397,7 @@ end
|
|||||||
|
|
||||||
def cpp_command(outfile, opt="")
|
def cpp_command(outfile, opt="")
|
||||||
conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote,
|
conf = RbConfig::CONFIG.merge('hdrdir' => $hdrdir.quote, 'srcdir' => $srcdir.quote,
|
||||||
|
'extout' => $extout,
|
||||||
'arch_hdrdir' => "#$arch_hdrdir",
|
'arch_hdrdir' => "#$arch_hdrdir",
|
||||||
'top_srcdir' => $top_srcdir.quote)
|
'top_srcdir' => $top_srcdir.quote)
|
||||||
RbConfig::expand("$(CPP) #$INCFLAGS #$CPPFLAGS #$CFLAGS #{opt} #{CONFTEST_C} #{outfile}",
|
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 << "typedef #{typename} rbcv_typedef_;\n"
|
||||||
prelude << "static rbcv_typedef_ *rbcv_ptr_;\n"
|
prelude << "static rbcv_typedef_ *rbcv_ptr_;\n"
|
||||||
prelude = [prelude]
|
prelude = [prelude]
|
||||||
expr = "sizeof((*rbcv_ptr_)#{"."<<member if member})"
|
expr = "sizeof((*rbcv_ptr_)#{"." << member if member})"
|
||||||
fmt = "%s"
|
fmt = "%s"
|
||||||
def fmt.%(x)
|
def fmt.%(x)
|
||||||
x ? super : "failed"
|
x ? super : "failed"
|
||||||
@ -1028,10 +1031,20 @@ end
|
|||||||
|
|
||||||
def what_type?(type, member = nil, headers = nil, &b)
|
def what_type?(type, member = nil, headers = nil, &b)
|
||||||
m = "#{type}"
|
m = "#{type}"
|
||||||
name = type
|
var = "*rbcv_var_"
|
||||||
|
func = "rbcv_func_(void)"
|
||||||
if member
|
if member
|
||||||
m << "." << member
|
m << "." << member
|
||||||
name = "(((#{type} *)0)->#{member})"
|
else
|
||||||
|
type, member = type.split('.', 2)
|
||||||
|
end
|
||||||
|
prelude = cpp_include(headers).split(/$/)
|
||||||
|
prelude << "typedef #{type} rbcv_typedef_;\n"
|
||||||
|
prelude << "static rbcv_typedef_ #{var_};\n"
|
||||||
|
prelude << "extern rbcv_typedef_ #{func};\n"
|
||||||
|
headers = [prelude]
|
||||||
|
if member
|
||||||
|
var = "(#{var}).#{member}"
|
||||||
end
|
end
|
||||||
fmt = "seems %s"
|
fmt = "seems %s"
|
||||||
def fmt.%(x)
|
def fmt.%(x)
|
||||||
@ -1040,21 +1053,24 @@ def what_type?(type, member = nil, headers = nil, &b)
|
|||||||
checking_for checking_message(m, headers), fmt do
|
checking_for checking_message(m, headers), fmt do
|
||||||
if scalar_ptr_type?(type, member, headers, &b)
|
if scalar_ptr_type?(type, member, headers, &b)
|
||||||
if try_static_assert("sizeof(*#{name}) == 1", headers)
|
if try_static_assert("sizeof(*#{name}) == 1", headers)
|
||||||
"string"
|
return "string"
|
||||||
end
|
end
|
||||||
|
ptr = "*"
|
||||||
elsif scalar_type?(type, member, headers, &b)
|
elsif scalar_type?(type, member, headers, &b)
|
||||||
if try_static_assert("sizeof(#{name}) > sizeof(long)", headers)
|
ptr = ""
|
||||||
"long long"
|
else
|
||||||
elsif try_static_assert("sizeof(#{name}) > sizeof(int)", headers)
|
return
|
||||||
"long"
|
|
||||||
elsif try_static_assert("sizeof(#{name}) > sizeof(short)", headers)
|
|
||||||
"int"
|
|
||||||
elsif try_static_assert("sizeof(#{name}) > 1", headers)
|
|
||||||
"short"
|
|
||||||
else
|
|
||||||
"char"
|
|
||||||
end
|
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user