summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Rakefile15
-rw-r--r--build_config.rb2
-rw-r--r--examples/mrbgems/c_and_ruby_extension_example/mrbgem.rake2
-rw-r--r--examples/mrbgems/c_extension_example/mrbgem.rake2
-rw-r--r--examples/mrbgems/ruby_extension_example/mrbgem.rake2
-rw-r--r--include/mrbconf.h19
-rw-r--r--include/mruby/string.h1
-rw-r--r--src/dump.c8
-rw-r--r--src/range.c6
-rw-r--r--src/string.c22
-rw-r--r--src/struct.c4
-rw-r--r--tasks/mrbgem_spec.rake2
-rw-r--r--tasks/mrbgems.rake2
-rw-r--r--tasks/mruby_build.rake67
-rw-r--r--tasks/mruby_build_commands.rake8
-rw-r--r--tasks/toolchains/clang.rake2
-rw-r--r--tasks/toolchains/gcc.rake2
-rw-r--r--tasks/toolchains/vs2012.rake2
-rw-r--r--test/t/range.rb15
19 files changed, 91 insertions, 92 deletions
diff --git a/Rakefile b/Rakefile
index 6a04ef87c..ac2d43ae5 100644
--- a/Rakefile
+++ b/Rakefile
@@ -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