diff --git a/ChangeLog b/ChangeLog index 8c58280240..9e4af8865f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Dec 3 19:48:11 2010 Nobuyoshi Nakada + + * lib/mkmf.rb (check_sizeof): should return integer always. + Wed Dec 1 22:05:32 2010 NAKAMURA Usaku * numeric.c (Init_Numeric): fixed a potential bug when using bccwin32 diff --git a/lib/mkmf.rb b/lib/mkmf.rb index b259f00d25..d0cd8c93bb 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -1006,14 +1006,7 @@ def check_sizeof(type, headers = nil, opts = "", &b) x ? super : "failed" end checking_for checking_message("size of #{type}", headers), fmt do - if UNIVERSAL_INTS.include?(type) - type - elsif size = UNIVERSAL_INTS.find {|t| - try_static_assert("#{expr} == sizeof(#{t})", prelude, opts, &b) - } - $defs.push(format("-DSIZEOF_%s=SIZEOF_%s", type.tr_cpp, size.tr_cpp)) - size - elsif size = try_constant(expr, prelude, opts, &b) + if size = try_constant(expr, prelude, opts, &b) $defs.push(format("-DSIZEOF_%s=%s", type.tr_cpp, size)) size end diff --git a/test/mkmf/base.rb b/test/mkmf/base.rb new file mode 100644 index 0000000000..044383d99b --- /dev/null +++ b/test/mkmf/base.rb @@ -0,0 +1,37 @@ +require 'test/unit' +require 'mkmf' +require 'tmpdir' + +$extout = '$(topdir)/'+RbConfig::CONFIG["EXTOUT"] +RbConfig::CONFIG['topdir'] = CONFIG['topdir'] = File.expand_path(CONFIG['topdir']) +RbConfig::CONFIG["extout"] = CONFIG["extout"] = $extout +$INCFLAGS << " -I." +$extout_prefix = "$(extout)$(target_prefix)/" + +class TestMkmf < Test::Unit::TestCase + def setup + @tmpdir = Dir.mktmpdir + @curdir = Dir.pwd + @mkmfobj = Object.new + Dir.chdir(@tmpdir) + class << (@output = "") + def flush; end + def reopen(*) end + alias write << + end + $stdout = @output + end + + def teardown + $stdout = STDOUT + Dir.chdir(@curdir) + FileUtils.rm_rf(@tmpdir) + end + + def mkmf(*args, &block) + @mkmfobj.instance_eval(*args, &block) + end + + def default_test + end +end diff --git a/test/mkmf/test_find_executable.rb b/test/mkmf/test_find_executable.rb new file mode 100644 index 0000000000..b727a0a5c1 --- /dev/null +++ b/test/mkmf/test_find_executable.rb @@ -0,0 +1,36 @@ +require File.join(File.dirname(__FILE__), 'base') + +class TestMkmf + class TestFindExecutable < TestMkmf + class F + def do_find_executable(name) + find_executable(name) + end + end + + def test_find_executable + bug2669 = '[ruby-core:27912]' + path, ENV["PATH"] = ENV["PATH"], path + ENV["PATH"] = @tmpdir + f = F.new + name = "foobar#{$$}#{rand(1000)}" + if /mswin\d|mingw|cygwin/ =~ RUBY_PLATFORM + exts = %w[.exe .com .cmd .bat] + else + exts = [""] + end + exts.each do |ext| + full = name+ext + begin + open(full, "w") {|ff| ff.chmod(0755)} + result = f.do_find_executable(name) + ensure + File.unlink(full) + end + assert_equal("#{@tmpdir}/#{name}#{ext}", result, bug2669) + end + ensure + ENV["PATH"] = path + end + end +end diff --git a/test/mkmf/test_sizeof.rb b/test/mkmf/test_sizeof.rb new file mode 100644 index 0000000000..0d42cfaa04 --- /dev/null +++ b/test/mkmf/test_sizeof.rb @@ -0,0 +1,18 @@ +require File.join(File.dirname(__FILE__), 'base') + +class TestMkmf + class TestSizeof < TestMkmf + def test_sizeof_builtin + %w[char short int long float double void*].each do |type| + assert_kind_of(Integer, mkmf {check_sizeof(type)}) + end + end + + def test_sizeof_struct + open("confdefs.h", "w") {|f| + f.puts "typedef struct {char x;} test1_t;" + } + assert_equal(1, mkmf {check_sizeof("test1_t", "confdefs.h")}) + end + end +end diff --git a/version.h b/version.h index 4fa659e16a..30d6e1bec0 100644 --- a/version.h +++ b/version.h @@ -1,7 +1,7 @@ #define RUBY_VERSION "1.8.8" -#define RUBY_RELEASE_DATE "2010-12-01" +#define RUBY_RELEASE_DATE "2010-12-03" #define RUBY_VERSION_CODE 188 -#define RUBY_RELEASE_CODE 20101201 +#define RUBY_RELEASE_CODE 20101203 #define RUBY_PATCHLEVEL -1 #define RUBY_VERSION_MAJOR 1 @@ -9,7 +9,7 @@ #define RUBY_VERSION_TEENY 8 #define RUBY_RELEASE_YEAR 2010 #define RUBY_RELEASE_MONTH 12 -#define RUBY_RELEASE_DAY 1 +#define RUBY_RELEASE_DAY 3 #define NO_STRING_LITERAL_CONCATENATION 1 #ifdef RUBY_EXTERN