diff options
| -rw-r--r-- | Rakefile | 15 | ||||
| -rw-r--r-- | build_config.rb | 2 | ||||
| -rw-r--r-- | examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake | 2 | ||||
| -rw-r--r-- | examples/mrbgems/c_extension_example/mrbgem.rake | 2 | ||||
| -rw-r--r-- | examples/mrbgems/ruby_extension_example/mrbgem.rake | 2 | ||||
| -rw-r--r-- | include/mrbconf.h | 19 | ||||
| -rw-r--r-- | include/mruby/string.h | 1 | ||||
| -rw-r--r-- | src/dump.c | 8 | ||||
| -rw-r--r-- | src/range.c | 6 | ||||
| -rw-r--r-- | src/string.c | 22 | ||||
| -rw-r--r-- | src/struct.c | 4 | ||||
| -rw-r--r-- | tasks/mrbgem_spec.rake | 2 | ||||
| -rw-r--r-- | tasks/mrbgems.rake | 2 | ||||
| -rw-r--r-- | tasks/mruby_build.rake | 67 | ||||
| -rw-r--r-- | tasks/mruby_build_commands.rake | 8 | ||||
| -rw-r--r-- | tasks/toolchains/clang.rake | 2 | ||||
| -rw-r--r-- | tasks/toolchains/gcc.rake | 2 | ||||
| -rw-r--r-- | tasks/toolchains/vs2012.rake | 2 | ||||
| -rw-r--r-- | test/t/range.rb | 15 |
19 files changed, 91 insertions, 92 deletions
@@ -8,8 +8,17 @@ load 'tasks/mrbgem_spec.rake' ############################## # compile flags -MRUBY_CONFIG = File.expand_path(ENV['MRUBY_CONFIG'] || './build_config.rb') -load MRUBY_CONFIG +load 'build_config.rb' + +MRUBY_CONFIGS = ['build_config.rb'] +if ENV['MRUBY_CONFIG'] + MRUBY_CONFIGS << ENV['MRUBY_CONFIG'] + load ENV['MRUBY_CONFIG'] +end + +MRuby.each_target do |build| + build.define_rules +end load 'src/mruby_core.rake' load 'mrblib/mrblib.rake' @@ -34,7 +43,7 @@ depfiles = MRuby.targets['host'].bins.map do |bin| FileUtils.rm t.name, :force => true FileUtils.cp t.prerequisites.first, t.name end - + install_path end diff --git a/build_config.rb b/build_config.rb index eeaa255ab..12cf0affd 100644 --- a/build_config.rb +++ b/build_config.rb @@ -74,5 +74,5 @@ end # conf.cc.flags << "-m32" # conf.linker.flags << "-m32" # -# conf.gem 'examples/mrbgems/c_and_ruby_extension_example' +# conf.gem 'doc/mrbgems/c_and_ruby_extension_example' # end diff --git a/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake b/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake index 64fa1972f..88f7b31f6 100644 --- a/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake +++ b/examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake @@ -11,7 +11,7 @@ MRuby::Gem::Specification.new('c_and_ruby_extension_example') do |spec| # Add libraries # spec.linker.libraries << 'external_lib' - # Default building fules + # Default build files # spec.rbfiles = Dir.glob("#{dir}/mrblib/*.rb") # spec.objs = Dir.glob("#{dir}/src/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) } # spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb") diff --git a/examples/mrbgems/c_extension_example/mrbgem.rake b/examples/mrbgems/c_extension_example/mrbgem.rake index 6bcb6e105..e19121df4 100644 --- a/examples/mrbgems/c_extension_example/mrbgem.rake +++ b/examples/mrbgems/c_extension_example/mrbgem.rake @@ -11,7 +11,7 @@ MRuby::Gem::Specification.new('c_extension_example') do |spec| # Add libraries # spec.linker.libraries << 'external_lib' - # Default building fules + # Default build files # spec.rbfiles = Dir.glob("#{dir}/mrblib/*.rb") # spec.objs = Dir.glob("#{dir}/src/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) } # spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb") diff --git a/examples/mrbgems/ruby_extension_example/mrbgem.rake b/examples/mrbgems/ruby_extension_example/mrbgem.rake index 0a1e62b1c..da0ad73a8 100644 --- a/examples/mrbgems/ruby_extension_example/mrbgem.rake +++ b/examples/mrbgems/ruby_extension_example/mrbgem.rake @@ -11,7 +11,7 @@ MRuby::Gem::Specification.new('ruby_extension_example') do |spec| # Add libraries # spec.linker.libraries << 'external_lib' - # Default building fules + # Default build files # spec.rbfiles = Dir.glob("#{dir}/mrblib/*.rb") # spec.objs = Dir.glob("#{dir}/src/*.{c,cpp,m,asm,S}").map { |f| objfile(f.relative_path_from(dir).pathmap("#{build_dir}/%X")) } # spec.test_rbfiles = Dir.glob("#{dir}/test/*.rb") diff --git a/include/mrbconf.h b/include/mrbconf.h index 066c040f6..17f6a0fc3 100644 --- a/include/mrbconf.h +++ b/include/mrbconf.h @@ -76,7 +76,8 @@ typedef int32_t mrb_int; # define MRB_INT_MIN INT32_MIN # define MRB_INT_MAX INT32_MAX -# define mrb_int_to_str(buf, i) sprintf((buf), "%d", (i)) +# define MRB_INT_FORMAT PRId32 +# define mrb_int_to_str(buf, i) sprintf((buf), "%" MRB_INT_FORMAT, (i)) # define str_to_mrb_int(buf) (mrb_int)strtol((buf), NULL, 10) # endif #else @@ -84,13 +85,15 @@ typedef int64_t mrb_int; # define MRB_INT_MIN INT64_MIN # define MRB_INT_MAX INT64_MAX -# define mrb_int_to_str(buf, i) sprintf((buf), "%ld", (i)) +# define MRB_INT_FORMAT PRId64 +# define mrb_int_to_str(buf, i) sprintf((buf), "%" MRB_INT_FORMAT, (i)) # define str_to_mrb_int(buf) (mrb_int)strtoll((buf), NULL, 10) # else - typedef int mrb_int; -# define MRB_INT_MIN INT_MIN -# define MRB_INT_MAX INT_MAX -# define mrb_int_to_str(buf, i) sprintf((buf), "%d", (i)) + typedef int32_t mrb_int; +# define MRB_INT_MIN INT32_MIN +# define MRB_INT_MAX INT32_MAX +# define MRB_INT_FORMAT PRId32 +# define mrb_int_to_str(buf, i) sprintf((buf), "%" MRB_INT_FORMAT, (i)) # define str_to_mrb_int(buf) (mrb_int)strtol((buf), NULL, 10) # endif #endif @@ -131,6 +134,10 @@ typedef short mrb_sym; # define isnan _isnan # define isinf(n) (!_finite(n) && !_isnan(n)) # define strtoll _strtoi64 +# define PRId32 "I32d" +# define PRId64 "I64d" +#else +# include <inttypes.h> #endif #endif /* MRUBYCONF_H */ diff --git a/include/mruby/string.h b/include/mruby/string.h index cd2c83dcd..4ff0f1ee1 100644 --- a/include/mruby/string.h +++ b/include/mruby/string.h @@ -68,7 +68,6 @@ int mrb_str_offset(mrb_state *mrb, mrb_value str, int pos); mrb_value mrb_str_dup(mrb_state *mrb, mrb_value str); /* mrb_str_dup */ mrb_value mrb_str_intern(mrb_state *mrb, mrb_value self); mrb_value mrb_str_cat2(mrb_state *mrb, mrb_value str, const char *ptr); -mrb_value mrb_str_catf(mrb_state *mrb, mrb_value str, const char *format, ...); mrb_value mrb_str_to_inum(mrb_state *mrb, mrb_value str, int base, int badcheck); double mrb_str_to_dbl(mrb_state *mrb, mrb_value str, int badcheck); mrb_value mrb_str_to_str(mrb_state *mrb, mrb_value str); diff --git a/src/dump.c b/src/dump.c index 884a9141f..e0d755c8c 100644 --- a/src/dump.c +++ b/src/dump.c @@ -59,7 +59,7 @@ static inline int uint16_dump(uint16_t,char*,int); static inline int uint32_dump(uint32_t,char*,int); static char* str_dump(char*,char*,uint16_t,int); static uint16_t str_dump_len(char*,uint16_t, int); -static uint32_t get_irep_header_size(mrb_state*,mrb_irep*,int); +static uint32_t get_irep_header_size(mrb_state*,int); static uint32_t get_iseq_block_size(mrb_state*,mrb_irep*,int); static uint32_t get_pool_block_size(mrb_state*,mrb_irep*,int); static uint32_t get_syms_block_size(mrb_state*,mrb_irep*,int); @@ -202,7 +202,7 @@ str_dump_len(char *str, uint16_t len, int type) } static uint32_t -get_irep_header_size(mrb_state *mrb, mrb_irep *irep, int type) +get_irep_header_size(mrb_state *mrb, int type) { uint32_t size = 0; @@ -305,7 +305,7 @@ get_irep_record_size(mrb_state *mrb, int irep_no, int type) mrb_irep *irep = mrb->irep[irep_no]; size += DUMP_SIZE(MRB_DUMP_SIZE_OF_LONG, type); /* rlen */ - size += get_irep_header_size(mrb, irep, type); + size += get_irep_header_size(mrb, type); size += get_iseq_block_size(mrb, irep, type); size += get_pool_block_size(mrb, irep, type); size += get_syms_block_size(mrb, irep, type); @@ -480,7 +480,7 @@ calc_crc_section(mrb_state *mrb, mrb_irep *irep, uint16_t *crc, int section) int result; switch (section) { - case DUMP_IREP_HEADER: buf_size = get_irep_header_size(mrb, irep, type); break; + case DUMP_IREP_HEADER: buf_size = get_irep_header_size(mrb, type); break; case DUMP_ISEQ_BLOCK: buf_size = get_iseq_block_size(mrb, irep, type); break; case DUMP_POOL_BLOCK: buf_size = get_pool_block_size(mrb, irep, type); break; case DUMP_SYMS_BLOCK: buf_size = get_syms_block_size(mrb, irep, type); break; diff --git a/src/range.c b/src/range.c index ef92ed822..2cdc34f5c 100644 --- a/src/range.c +++ b/src/range.c @@ -43,8 +43,8 @@ mrb_range_new(mrb_state *mrb, mrb_value beg, mrb_value end, int excl) struct RRange *r; r = (struct RRange*)mrb_obj_alloc(mrb, MRB_TT_RANGE, RANGE_CLASS); - r->edges = (struct mrb_range_edges *)mrb_malloc(mrb, sizeof(struct mrb_range_edges)); range_check(mrb, beg, end); + r->edges = (struct mrb_range_edges *)mrb_malloc(mrb, sizeof(struct mrb_range_edges)); r->edges->beg = beg; r->edges->end = end; r->excl = excl; @@ -333,7 +333,7 @@ range_to_s(mrb_state *mrb, mrb_value range) } static mrb_value -inspect_range(mrb_state *mrb, mrb_value range, mrb_value dummy, int recur) +inspect_range(mrb_state *mrb, mrb_value range, int recur) { mrb_value str, str2; struct RRange *r = mrb_range_ptr(range); @@ -368,7 +368,7 @@ inspect_range(mrb_state *mrb, mrb_value range, mrb_value dummy, int recur) static mrb_value range_inspect(mrb_state *mrb, mrb_value range) { - return inspect_range(mrb, range, range, 0); + return inspect_range(mrb, range, 0); } /* 15.2.14.4.14(x) */ diff --git a/src/string.c b/src/string.c index 144c4bd2a..df74bb3c8 100644 --- a/src/string.c +++ b/src/string.c @@ -6,7 +6,6 @@ #include "mruby.h" -#include <stdarg.h> #include <string.h> #include "mruby/string.h" #include <ctype.h> @@ -2854,27 +2853,6 @@ mrb_str_cat2(mrb_state *mrb, mrb_value str, const char *ptr) return mrb_str_cat(mrb, str, ptr, strlen(ptr)); } -static mrb_value -mrb_str_vcatf(mrb_state *mrb, mrb_value str, const char *fmt, va_list ap) -{ - mrb_string_value(mrb, &str); - mrb_str_resize(mrb, str, (char*)RSTRING_END(str) - RSTRING_PTR(str)); - - return str; -} - -mrb_value -mrb_str_catf(mrb_state *mrb, mrb_value str, const char *format, ...) -{ - va_list ap; - - va_start(ap, format); - str = mrb_str_vcatf(mrb, str, format, ap); - va_end(ap); - - return str; -} - mrb_value mrb_str_append(mrb_state *mrb, mrb_value str, mrb_value str2) { diff --git a/src/struct.c b/src/struct.c index 85d0fa094..1396cd728 100644 --- a/src/struct.c +++ b/src/struct.c @@ -463,7 +463,7 @@ mrb_struct_initialize(mrb_state *mrb, mrb_value self, mrb_value values) } static mrb_value -inspect_struct(mrb_state *mrb, mrb_value s, mrb_value dummy, int recur) +inspect_struct(mrb_state *mrb, mrb_value s, int recur) { const char *cn = mrb_class_name(mrb, mrb_obj_class(mrb, s)); mrb_value members, str = mrb_str_new(mrb, "#<struct ", 9); @@ -521,7 +521,7 @@ inspect_struct(mrb_state *mrb, mrb_value s, mrb_value dummy, int recur) static mrb_value mrb_struct_inspect(mrb_state *mrb, mrb_value s) { - return inspect_struct(mrb, s, s, 0); + return inspect_struct(mrb, s, 0); } /* 15.2.18.4.9 */ diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index 0e228629b..49e45bbc9 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -35,9 +35,7 @@ module MRuby def setup MRuby::Gem.current = self - @build.compilers.each do |compiler| - compiler.defines -= %w(DISABLE_GEMS) compiler.include_paths << "#{dir}/include" end MRuby::Build::COMMANDS.each do |command| diff --git a/tasks/mrbgems.rake b/tasks/mrbgems.rake index 9d8798ef3..285aa75b8 100644 --- a/tasks/mrbgems.rake +++ b/tasks/mrbgems.rake @@ -8,7 +8,7 @@ MRuby.each_target do # loader all gems self.libmruby << objfile("#{build_dir}/mrbgems/gem_init") file objfile("#{build_dir}/mrbgems/gem_init") => "#{build_dir}/mrbgems/gem_init.c" - file "#{build_dir}/mrbgems/gem_init.c" => [MRUBY_CONFIG] do |t| + file "#{build_dir}/mrbgems/gem_init.c" => [MRUBY_CONFIGS].flatten do |t| FileUtils.mkdir_p "#{build_dir}/mrbgems" open(t.name, 'w') do |f| f.puts %Q[/*] diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake index cd9f77fc4..cbef16d24 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -53,39 +53,37 @@ module MRuby Exts = Struct.new(:object, :executable, :library) def initialize(name='host', &block) - MRuby::Build.current = self - @name = name - @root = File.expand_path("#{File.dirname(__FILE__)}/..") + @name = name.to_s - if ENV['OS'] == 'Windows_NT' - @exts = Exts.new('.o', '.exe', '.a') - else - @exts = Exts.new('.o', '', '.a') - end - - @file_separator = '/' - @cc = Command::Compiler.new(self, %w(.c)) - @cxx = Command::Compiler.new(self, %w(.cc .cxx .cpp)) - @objc = Command::Compiler.new(self, %w(.m)) - @asm = Command::Compiler.new(self, %w(.S .asm)) - @linker = Command::Linker.new(self) - @archiver = Command::Archiver.new(self) - @yacc = Command::Yacc.new(self) - @gperf = Command::Gperf.new(self) - @git = Command::Git.new(self) - @mrbc = Command::Mrbc.new(self) - - @bins = %w(mruby mrbc mirb) - @gems, @libmruby = [], [] + unless MRuby.targets[@name] + @root = File.expand_path("#{File.dirname(__FILE__)}/..") - MRuby.targets[name.to_s] = self - - instance_eval(&block) + if ENV['OS'] == 'Windows_NT' + @exts = Exts.new('.o', '.exe', '.a') + else + @exts = Exts.new('.o', '', '.a') + end - compilers.each do |compiler| - compiler.defines -= %w(DISABLE_GEMS) if respond_to?(:enable_gems?) && enable_gems? - compiler.define_rules build_dir + @file_separator = '/' + @cc = Command::Compiler.new(self, %w(.c)) + @cxx = Command::Compiler.new(self, %w(.cc .cxx .cpp)) + @objc = Command::Compiler.new(self, %w(.m)) + @asm = Command::Compiler.new(self, %w(.S .asm)) + @linker = Command::Linker.new(self) + @archiver = Command::Archiver.new(self) + @yacc = Command::Yacc.new(self) + @gperf = Command::Gperf.new(self) + @git = Command::Git.new(self) + @mrbc = Command::Mrbc.new(self) + + @bins = %w(mruby mrbc mirb) + @gems, @libmruby = [], [] + + MRuby.targets[@name] = self end + + MRuby::Build.current = MRuby.targets[@name] + MRuby.targets[@name].instance_eval(&block) end def toolchain(name) @@ -108,6 +106,17 @@ module MRuby end end + def define_rules + compilers.each do |compiler| + if respond_to?(:enable_gems?) && enable_gems? + compiler.defines -= %w(DISABLE_GEMS) + else + compiler.defines += %w(DISABLE_GEMS) + end + compiler.define_rules build_dir + end + end + def filename(name) if name.is_a?(Array) name.flatten.map { |n| filename(n) } diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake index 20203ad7e..b3c83277c 100644 --- a/tasks/mruby_build_commands.rake +++ b/tasks/mruby_build_commands.rake @@ -36,14 +36,14 @@ module MRuby def initialize(build, source_exts=[]) super(build) - @command = ENV['CC'] || 'gcc' + @command = ENV['CC'] || 'cc' @flags = [ENV['CFLAGS'] || []] @source_exts = source_exts @include_paths = ["#{build.root}/include"] - @defines = %w(DISABLE_GEMS) + @defines = %w() @option_include_path = '-I%s' @option_define = '-D%s' - @compile_options = "%{flags} -MMD -o %{outfile} -c %{infile}" + @compile_options = '%{flags} -o %{outfile} -c %{infile}' end def all_flags(_defineds=[], _include_paths=[], _flags=[]) @@ -111,7 +111,7 @@ module MRuby def initialize(build) super - @command = ENV['LD'] || 'gcc' + @command = ENV['LD'] || 'ld' @flags = (ENV['LDFLAGS'] || []) @flags_before_libraries, @flags_after_libraries = [], [] @libraries = [] diff --git a/tasks/toolchains/clang.rake b/tasks/toolchains/clang.rake index 1785c4c79..d5d2ccd7c 100644 --- a/tasks/toolchains/clang.rake +++ b/tasks/toolchains/clang.rake @@ -1,7 +1,7 @@ MRuby::Toolchain.new(:clang) do |conf| toolchain :gcc - [conf.cc, conf.cxx, conf.objc].each do |cc| + [conf.cc, conf.cxx, conf.objc, conf.asm].each do |cc| cc.command = ENV['CC'] || 'clang' end conf.linker.command = ENV['LD'] || 'clang' diff --git a/tasks/toolchains/gcc.rake b/tasks/toolchains/gcc.rake index 2c160683d..bef9b8618 100644 --- a/tasks/toolchains/gcc.rake +++ b/tasks/toolchains/gcc.rake @@ -1,5 +1,5 @@ MRuby::Toolchain.new(:gcc) do |conf| - [conf.cc, conf.cxx, conf.objc].each do |cc| + [conf.cc, conf.cxx, conf.objc, conf.asm].each do |cc| cc.command = ENV['CC'] || 'gcc' cc.flags = [ENV['CFLAGS'] || %w(-g -O3 -Wall -Werror-implicit-function-declaration)] cc.include_paths = ["#{root}/include"] diff --git a/tasks/toolchains/vs2012.rake b/tasks/toolchains/vs2012.rake index e3b80b98b..2852a5f8a 100644 --- a/tasks/toolchains/vs2012.rake +++ b/tasks/toolchains/vs2012.rake @@ -14,7 +14,7 @@ MRuby::Toolchain.new(:vs2012) do |conf| linker.flags = [ENV['LDFLAGS'] || %w(/nologo)] linker.libraries = %w() linker.library_paths = %w() - linker.option_library = '%s' + linker.option_library = '%s.lib' linker.option_library_path = '/LIBPATH:%s' linker.link_options = "%{flags} /OUT:%{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}" end diff --git a/test/t/range.rb b/test/t/range.rb index 691ca7898..21bcb5c55 100644 --- a/test/t/range.rb +++ b/test/t/range.rb @@ -48,14 +48,13 @@ assert('Range#include', '15.2.14.4.8') do a.include?(5) and not a.include?(20) end -# TODO SEGFAULT ATM -#assert('Range#initialize', '15.2.14.4.9') do -# a = Range.new(1, 10, true) -# b = Range.new(1, 10, false) -# -# a == (1..10) and a.exclude_end? and b == (1..10) and -# not b.exclude_end? -#end +assert('Range#initialize', '15.2.14.4.9') do + a = Range.new(1, 10, true) + b = Range.new(1, 10, false) + + a == (1...10) and a.exclude_end? and b == (1..10) and + not b.exclude_end? +end assert('Range#last', '15.2.14.4.10') do (1..10).last == 10 |
