From 1db86c9e99b511065898b95a0ebecb83b2d497e3 Mon Sep 17 00:00:00 2001 From: MATSUMOTO Ryosuke Date: Mon, 21 Jan 2013 20:47:42 +0900 Subject: Changed flags name in libmruby.flags.mak --- tasks/libmruby.rake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tasks/libmruby.rake b/tasks/libmruby.rake index 108f42f59..6f84937fd 100644 --- a/tasks/libmruby.rake +++ b/tasks/libmruby.rake @@ -2,14 +2,14 @@ MRuby.each_target do file libfile("#{build_dir}/lib/libmruby") => libmruby.flatten do |t| archiver.run t.name, t.prerequisites open("#{build_dir}/lib/libmruby.flags.mak", 'w') do |f| - f.puts 'CFLAGS = "%s"' % cc.all_flags.gsub('"', '\\"') + f.puts 'MRUBY_CFLAGS = "%s"' % cc.all_flags.gsub('"', '\\"') gem_flags = gems.map { |g| g.linker.flags } gem_library_paths = gems.map { |g| g.linker.library_paths } - f.puts 'LDFLAGS = "%s"' % linker.all_flags(gem_library_paths, gem_flags).gsub('"', '\\"') + f.puts 'MRUBY_LDFLAGS = "%s"' % linker.all_flags(gem_library_paths, gem_flags).gsub('"', '\\"') gem_libraries = gems.map { |g| g.linker.libraries } - f.puts 'LIBS = "%s"' % linker.library_flags(gem_libraries).gsub('"', '\\"') + f.puts 'MRUBY_LIBS = "%s"' % linker.library_flags(gem_libraries).gsub('"', '\\"') end end end -- cgit v1.2.3 From a9064dce15ff6872611457b9c3fdc0104167895b Mon Sep 17 00:00:00 2001 From: Yuichiro MASUI Date: Mon, 21 Jan 2013 23:52:39 +0900 Subject: Added "Unknown toolchain/gem" error message --- tasks/mruby_build.rake | 8 +++----- tasks/mruby_build_gem.rake | 6 +++++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake index b9e0d2749..711f7f024 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -29,10 +29,6 @@ module MRuby conf.instance_eval(&@initializer) end - def toolchain(name) - @@toolchains[name.to_s].setup(self) - end - def self.load Dir.glob("#{File.dirname(__FILE__)}/toolchains/*.rake").each do |file| Kernel.load file @@ -93,7 +89,9 @@ module MRuby end def toolchain(name) - Toolchain.toolchains[name.to_s].setup(self) + tc = Toolchain.toolchains[name.to_s] + fail "Unknown #{name} toolchain" unless tc + tc.setup(self) end def build_dir diff --git a/tasks/mruby_build_gem.rake b/tasks/mruby_build_gem.rake index ae0a79447..80990773d 100644 --- a/tasks/mruby_build_gem.rake +++ b/tasks/mruby_build_gem.rake @@ -2,7 +2,11 @@ module MRuby module LoadGems def gem(gemdir, &block) gemdir = load_external_gem(gemdir) if gemdir.is_a?(Hash) - load File.join(gemdir, "mrbgem.rake") + gemrake = File.join(gemdir, "mrbgem.rake") + + fail "Can't find #{gemrake}" unless File.exists?(gemrake) + load gemrake + Gem.current.dir = gemdir Gem.current.build = MRuby::Build.current Gem.current.build_config_initializer = block -- cgit v1.2.3 From 323d8501d64d5cb2fb176e240c06ebfebebf62e0 Mon Sep 17 00:00:00 2001 From: Yukihiro Matz Matsumoto Date: Tue, 22 Jan 2013 00:40:04 +0900 Subject: zero initialize hex buffers; close 768 --- src/load.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/load.c b/src/load.c index 504246799..78ece114f 100644 --- a/src/load.c +++ b/src/load.c @@ -138,7 +138,7 @@ load_rite_irep_record(mrb_state *mrb, RiteFILE* rfp, unsigned char* dst, uint32_ int i; uint32_t blocklen; uint16_t offset, pdl, snl, clen; - unsigned char hex2[2], hex4[4], hex8[8], hcrc[4]; + unsigned char hex2[2] = {0}, hex4[4] = {0}, hex8[8] = {0}, hcrc[4] = {0}; unsigned char *pStart; char *char_buf; uint16_t buf_size =0; -- cgit v1.2.3 From f6edd3065cd684df1140101f2603fb9acade4b49 Mon Sep 17 00:00:00 2001 From: Yuichiro MASUI Date: Tue, 22 Jan 2013 14:06:59 +0900 Subject: Add C++/Objective-C init in toolchains --- tasks/toolchains/clang.rake | 4 +++- tasks/toolchains/gcc.rake | 2 +- tasks/toolchains/vs2012.rake | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tasks/toolchains/clang.rake b/tasks/toolchains/clang.rake index 01dd5f234..1785c4c79 100644 --- a/tasks/toolchains/clang.rake +++ b/tasks/toolchains/clang.rake @@ -1,6 +1,8 @@ MRuby::Toolchain.new(:clang) do |conf| toolchain :gcc - conf.cc.command = ENV['CC'] || 'clang' + [conf.cc, conf.cxx, conf.objc].each do |cc| + cc.command = ENV['CC'] || 'clang' + end conf.linker.command = ENV['LD'] || 'clang' end diff --git a/tasks/toolchains/gcc.rake b/tasks/toolchains/gcc.rake index c624c8fc9..54fd3ecd8 100644 --- a/tasks/toolchains/gcc.rake +++ b/tasks/toolchains/gcc.rake @@ -1,5 +1,5 @@ MRuby::Toolchain.new(:gcc) do |conf| - conf.cc do |cc| + [conf.cc, conf.cxx, conf.objc].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 c3599a59b..b5d2298c2 100644 --- a/tasks/toolchains/vs2012.rake +++ b/tasks/toolchains/vs2012.rake @@ -1,5 +1,5 @@ MRuby::Toolchain.new(:vs2012) do |conf| - conf.cc do |cc| + [conf.cc, conf.cxx].each do |cc| cc.command = ENV['CC'] || 'cl.exe' cc.flags = [ENV['CFLAGS'] || %w(/c /nologo /W3 /D_DEBUG /MDd /Zi /Od /RTC1 /DDISABLE_GEMS /DHAVE_STRING_H /DNO_GETTIMEOFDAY /D_CRT_SECURE_NO_WARNINGS)] cc.include_paths = ["#{root}/include"] -- cgit v1.2.3 From 310b0dce8fa1e3f98b2184c2b6c1a0f091c2d4eb Mon Sep 17 00:00:00 2001 From: Yuichiro MASUI Date: Tue, 22 Jan 2013 20:18:48 +0900 Subject: Added finalizer of mrbgems --- doc/mrbgems/README.md | 15 +++++++++++++++ doc/mrbgems/c_and_ruby_extension_example/src/example.c | 5 +++++ doc/mrbgems/c_extension_example/src/example.c | 5 +++++ src/init.c | 9 +++++++++ src/state.c | 3 +++ tasks/mrbgem_spec.rake | 6 ++++++ tasks/mrbgems.rake | 8 ++++++++ tools/mrbc/mrbc.c | 5 +++++ 8 files changed, 56 insertions(+) diff --git a/doc/mrbgems/README.md b/doc/mrbgems/README.md index 9e930d8b2..fb27aa37b 100644 --- a/doc/mrbgems/README.md +++ b/doc/mrbgems/README.md @@ -106,6 +106,21 @@ mrb_c_extension_example_gem_init(mrb_state* mrb) { } ``` +### Finalize + +mrbgems expects that you have implemented a C method called +```mrb_YOURGEMNAME_gem_final(mrb_state)```. ```YOURGEMNAME``` will be replaced +by the name of your GEM. If you call your GEM *c_extension_example*, your +finalizer method could look like this: + +``` +void +mrb_c_extension_example_gem_final(mrb_state* mrb) { + free(someone); +} +``` + + ### Example ``` diff --git a/doc/mrbgems/c_and_ruby_extension_example/src/example.c b/doc/mrbgems/c_and_ruby_extension_example/src/example.c index 3d3cb20c9..7651ae5c0 100644 --- a/doc/mrbgems/c_and_ruby_extension_example/src/example.c +++ b/doc/mrbgems/c_and_ruby_extension_example/src/example.c @@ -13,3 +13,8 @@ mrb_c_and_ruby_extension_example_gem_init(mrb_state* mrb) { struct RClass *class_cextension = mrb_define_module(mrb, "CRubyExtension"); mrb_define_class_method(mrb, class_cextension, "c_method", mrb_c_method, ARGS_NONE()); } + +void +mrb_c_and_ruby_extension_example_gem_final(mrb_state* mrb) { + // finalizer +} diff --git a/doc/mrbgems/c_extension_example/src/example.c b/doc/mrbgems/c_extension_example/src/example.c index 11f54e6d2..fa166186d 100644 --- a/doc/mrbgems/c_extension_example/src/example.c +++ b/doc/mrbgems/c_extension_example/src/example.c @@ -13,3 +13,8 @@ mrb_c_extension_example_gem_init(mrb_state* mrb) { struct RClass *class_cextension = mrb_define_module(mrb, "CExtension"); mrb_define_class_method(mrb, class_cextension, "c_method", mrb_c_method, ARGS_NONE()); } + +void +mrb_c_extension_example_gem_final(mrb_state* mrb) { + // finalizer +} diff --git a/src/init.c b/src/init.c index 48008b150..73ff8fce2 100644 --- a/src/init.c +++ b/src/init.c @@ -28,6 +28,7 @@ void mrb_init_time(mrb_state*); void mrb_init_math(mrb_state*); void mrb_init_mrblib(mrb_state*); void mrb_init_mrbgems(mrb_state*); +void mrb_final_mrbgems(mrb_state*); #define DONE mrb_gc_arena_restore(mrb, 0); void @@ -70,3 +71,11 @@ mrb_init_core(mrb_state *mrb) mrb_init_mrbgems(mrb); DONE; #endif } + +void +mrb_final_core(mrb_state *mrb) +{ +#ifndef DISABLE_GEMS + mrb_final_mrbgems(mrb); DONE; +#endif +} \ No newline at end of file diff --git a/src/state.c b/src/state.c index c1ad4c6ad..c48997a7c 100644 --- a/src/state.c +++ b/src/state.c @@ -12,6 +12,7 @@ void mrb_init_heap(mrb_state*); void mrb_init_core(mrb_state*); void mrb_init_ext(mrb_state*); +void mrb_final_core(mrb_state*); mrb_state* mrb_open_allocf(mrb_allocf f, void *ud) @@ -88,6 +89,8 @@ mrb_close(mrb_state *mrb) { int i; + mrb_final_core(mrb); + /* free */ mrb_gc_free_gv(mrb); mrb_free(mrb, mrb->stbase); diff --git a/tasks/mrbgem_spec.rake b/tasks/mrbgem_spec.rake index 906f47ad0..5af721b0d 100644 --- a/tasks/mrbgem_spec.rake +++ b/tasks/mrbgem_spec.rake @@ -105,6 +105,8 @@ module MRuby print_gem_init_header f build.mrbc.run f, rbfiles, "gem_mrblib_irep_#{funcname}" unless rbfiles.empty? f.puts %Q[void mrb_#{funcname}_gem_init(mrb_state *mrb);] + f.puts %Q[void mrb_#{funcname}_gem_final(mrb_state *mrb);] + f.puts %Q[] f.puts %Q[void GENERATED_TMP_mrb_#{funcname}_gem_init(mrb_state *mrb) {] f.puts %Q[ int ai = mrb_gc_arena_save(mrb);] f.puts %Q[ mrb_#{funcname}_gem_init(mrb);] if objs != [objfile("#{build_dir}/gem_init")] @@ -117,6 +119,10 @@ module MRuby end f.puts %Q[ mrb_gc_arena_restore(mrb, ai);] f.puts %Q[}] + f.puts %Q[] + f.puts %Q[void GENERATED_TMP_mrb_#{funcname}_gem_final(mrb_state *mrb) {] + f.puts %Q[ mrb_#{funcname}_gem_final(mrb);] if objs != [objfile("#{build_dir}/gem_init")] + f.puts %Q[}] end end # generate_gem_init diff --git a/tasks/mrbgems.rake b/tasks/mrbgems.rake index dc5e67eef..9d8798ef3 100644 --- a/tasks/mrbgems.rake +++ b/tasks/mrbgems.rake @@ -24,10 +24,18 @@ MRuby.each_target do f.puts %Q[#include "mruby.h"] f.puts %Q[] f.puts %Q[#{gems.map{|g| "void GENERATED_TMP_mrb_%s_gem_init(mrb_state* mrb);" % g.funcname}.join("\n")}] + f.puts %Q[] + f.puts %Q[#{gems.map{|g| "void GENERATED_TMP_mrb_%s_gem_final(mrb_state* mrb);" % g.funcname}.join("\n")}] + f.puts %Q[] f.puts %Q[void] f.puts %Q[mrb_init_mrbgems(mrb_state *mrb) {] f.puts %Q[#{gems.map{|g| "GENERATED_TMP_mrb_%s_gem_init(mrb);" % g.funcname}.join("\n")}] f.puts %Q[}] + f.puts %Q[] + f.puts %Q[void] + f.puts %Q[mrb_final_mrbgems(mrb_state *mrb) {] + f.puts %Q[#{gems.map{|g| "GENERATED_TMP_mrb_%s_gem_final(mrb);" % g.funcname}.join("\n")}] + f.puts %Q[}] end end end diff --git a/tools/mrbc/mrbc.c b/tools/mrbc/mrbc.c index 4dc9871c7..63762143a 100644 --- a/tools/mrbc/mrbc.c +++ b/tools/mrbc/mrbc.c @@ -231,4 +231,9 @@ void mrb_init_mrbgems(mrb_state *mrb) { } + +void +mrb_final_mrbgems(mrb_state *mrb) +{ +} #endif -- cgit v1.2.3 From 10c264d4bb2b97d625522abc4d9b517f408db462 Mon Sep 17 00:00:00 2001 From: Yuichiro MASUI Date: Tue, 22 Jan 2013 20:24:33 +0900 Subject: Removed ext --- src/init_ext.c | 16 ---------------- src/state.c | 2 -- 2 files changed, 18 deletions(-) delete mode 100644 src/init_ext.c diff --git a/src/init_ext.c b/src/init_ext.c deleted file mode 100644 index 96ee34da1..000000000 --- a/src/init_ext.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -** init_ext.c - initialize extend libraries -** -** See Copyright Notice in mruby.h -*/ - -#include "mruby.h" - -void -mrb_init_ext(mrb_state *mrb) -{ -#ifdef INCLUDE_SOCKET - extern void mrb_init_socket(mrb_state *mrb); - mrb_init_socket(mrb); -#endif -} diff --git a/src/state.c b/src/state.c index c1ad4c6ad..60631b02d 100644 --- a/src/state.c +++ b/src/state.c @@ -11,7 +11,6 @@ void mrb_init_heap(mrb_state*); void mrb_init_core(mrb_state*); -void mrb_init_ext(mrb_state*); mrb_state* mrb_open_allocf(mrb_allocf f, void *ud) @@ -27,7 +26,6 @@ mrb_open_allocf(mrb_allocf f, void *ud) mrb_init_heap(mrb); mrb_init_core(mrb); - mrb_init_ext(mrb); return mrb; } -- cgit v1.2.3 From d5b263f7a9a946156c83cc2edbbe4e87b2059964 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 22 Jan 2013 10:37:54 -0500 Subject: Refine pretty printing --- mrblib/mrblib.rake | 2 +- tasks/mruby_build_commands.rake | 14 +++++++------- tasks/ruby_ext.rake | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/mrblib/mrblib.rake b/mrblib/mrblib.rake index 46d8c5a79..5b4070745 100644 --- a/mrblib/mrblib.rake +++ b/mrblib/mrblib.rake @@ -7,7 +7,7 @@ MRuby.each_target do mrbc_, *rbfiles = t.prerequisites FileUtils.mkdir_p File.dirname(t.name) open(t.name, 'w') do |f| - _pp "GEN *.rb > #{t.name}" + _pp "GEN", "*.rb", "#{t.name}" f.puts File.read("#{dir}/init_mrblib.c") mrbc.run f, rbfiles, 'mrblib_irep' end diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake index 8ffafe9b0..f25d0d662 100644 --- a/tasks/mruby_build_commands.rake +++ b/tasks/mruby_build_commands.rake @@ -58,7 +58,7 @@ module MRuby include_path_flags = [include_paths, _include_paths, File.dirname(infile)].flatten.map do |f| option_include_path % filename(f) end - _pp "CC #{filename(infile)} > #{filename(outfile)}" + _pp "CC", "#{filename(infile)}", "#{filename(outfile)}" _run compile_options, { :flags => (flags + define_flags + include_path_flags + _flags).join(' '), :infile => filename(infile), :outfile => filename(outfile) } end @@ -131,7 +131,7 @@ module MRuby FileUtils.mkdir_p File.dirname(outfile) library_flags = [libraries, _libraries].flatten.reverse.map{ |d| option_library % d } library_path_flags = [library_paths, _library_paths].flatten.map{ |f| option_library_path % filename(f) } - _pp "LD #{filename(outfile)}" + _pp "LD", "#{filename(outfile)}" _run link_options, { :flags => (flags + library_path_flags + _flags).join(' '), :outfile => filename(outfile) , :objs => filename(objfiles).join(' '), :libs => library_flags.join(' ') } @@ -149,7 +149,7 @@ module MRuby def run(outfile, objfiles) FileUtils.mkdir_p File.dirname(outfile) - _pp "AR #{filename(outfile)}" + _pp "AR", "#{filename(outfile)}" _run archive_options, { :outfile => filename(outfile), :objs => filename(objfiles).join(' ') } end end @@ -165,7 +165,7 @@ module MRuby def run(outfile, infile) FileUtils.mkdir_p File.dirname(outfile) - _pp "YACC #{filename(infile)} > #{filename(outfile)}" + _pp "YACC", "#{filename(infile)}", "#{filename(outfile)}" _run compile_options, { :outfile => filename(outfile) , :infile => filename(infile) } end end @@ -181,7 +181,7 @@ module MRuby def run(outfile, infile) FileUtils.mkdir_p File.dirname(outfile) - _pp "GPERF #{filename(infile)} > #{filename(outfile)}" + _pp "GPERF", "#{filename(infile)}", "#{filename(outfile)}" _run compile_options, { :outfile => filename(outfile) , :infile => filename(infile) } end end @@ -198,7 +198,7 @@ module MRuby end def run_clone(dir, url, _flags = []) - _pp "GIT #{url} > #{filename(dir)}" + _pp "GIT", "#{url}", "#{filename(dir)}" _run clone_options, { :flags => [flags, _flags].flatten.join(' '), :url => url, :dir => filename(dir) } end end @@ -214,7 +214,7 @@ module MRuby @command ||= @build.mrbcfile IO.popen("#{filename @command} #{@compile_options % {:funcname => funcname}}", 'r+') do |io| [infiles].flatten.each do |f| - _pp " MRBC #{f}" + _pp " MRBC", "#{f}" io.write IO.read(f) end io.close_write diff --git a/tasks/ruby_ext.rake b/tasks/ruby_ext.rake index 2536a2e4b..2cc1738c3 100644 --- a/tasks/ruby_ext.rake +++ b/tasks/ruby_ext.rake @@ -57,6 +57,6 @@ else $pp_show = false if $verbose end -def _pp(msg) - puts msg if $pp_show +def _pp(cmd, src, tgt=nil) + puts '%-5s %s %s' % [cmd, src, tgt ? "-> #{tgt}" : nil] if $pp_show end -- cgit v1.2.3 From 28ac47efbfb35cad3bdab2d335eb925c8e35c5a8 Mon Sep 17 00:00:00 2001 From: Robert McNally Date: Tue, 22 Jan 2013 08:43:56 -0800 Subject: Fixed markdown of code in mrbgems/README.md --- doc/mrbgems/README.md | 153 ++++++++++++++++++++++---------------------------- 1 file changed, 67 insertions(+), 86 deletions(-) diff --git a/doc/mrbgems/README.md b/doc/mrbgems/README.md index 9e930d8b2..bb8947013 100644 --- a/doc/mrbgems/README.md +++ b/doc/mrbgems/README.md @@ -11,44 +11,34 @@ extension integrated. To add a GEM into the build_config.rb add the following line for example: -``` -conf.gem '/path/to/your/gem/dir' -``` + conf.gem '/path/to/your/gem/dir' You can also use a relative path which would be relative from the mruby root: -``` -conf.gem 'doc/mrbgems/ruby_extension_example' -``` + conf.gem 'doc/mrbgems/ruby_extension_example' A remote GIT repository location for a GEM is also supported: -``` -conf.gem :git => 'https://github.com/masuidrive/mrbgems-example.git', :branch => 'master' -``` + conf.gem :git => 'https://github.com/masuidrive/mrbgems-example.git', :branch => 'master' -``` -conf.gem :github => 'masuidrive/mrbgems-example', :branch => 'master' -``` + conf.gem :github => 'masuidrive/mrbgems-example', :branch => 'master' ## GEM Structure The maximal GEM structure looks like this: -``` -+- GEM_NAME <- Name of GEM - | - +- mrblib/ <- Source for Ruby extension - | - +- src/ <- Source for C extension - | - +- test/ <- Test code (Ruby) - | - +- mrbgem.rake <- GEM Specification - | - +- README.md <- Readme for GEM -``` + +- GEM_NAME <- Name of GEM + | + +- mrblib/ <- Source for Ruby extension + | + +- src/ <- Source for C extension + | + +- test/ <- Test code (Ruby) + | + +- mrbgem.rake <- GEM Specification + | + +- README.md <- Readme for GEM The folder *mrblib* contains pure Ruby files to extend mruby. The folder *src* contains C files to extend mruby. The folder *test* contains C and pure Ruby files @@ -61,12 +51,10 @@ of your GEM. mrbgems expects a specifcation file called *mrbgem.rake* inside of your GEM direcotry. A typical GEM specification could look like this for example: -``` -MRuby::Gem::Specification.new('c_and_ruby_extension_example') do |spec| - spec.license = 'MIT' - spec.authors = 'mruby developers' -end -``` + MRuby::Gem::Specification.new('c_and_ruby_extension_example') do |spec| + spec.license = 'MIT' + spec.authors = 'mruby developers' + end The mrbgems build process will use this specification to compile Object and Ruby files. The compilation results will be add to *lib/libmruby.a*. This file is used @@ -98,31 +86,27 @@ mrbgems expects that you have implemented a C method called by the name of your GEM. If you call your GEM *c_extension_example*, your initialisation method could look like this: -``` -void -mrb_c_extension_example_gem_init(mrb_state* mrb) { - struct RClass *class_cextension = mrb_define_module(mrb, "CExtension"); - mrb_define_class_method(mrb, class_cextension, "c_method", mrb_c_method, ARGS_NONE()); -} -``` + void + mrb_c_extension_example_gem_init(mrb_state* mrb) { + struct RClass *class_cextension = mrb_define_module(mrb, "CExtension"); + mrb_define_class_method(mrb, class_cextension, "c_method", mrb_c_method, ARGS_NONE()); + } ### Example -``` -+- c_extension_example/ - | - +- src/ - | | - | +- example.c <- C extension source - | - +- test/ - | | - | +- example.rb <- Test code for C extension - | - +- mrbgem.rake <- GEM specification - | - +- README.md -``` + +- c_extension_example/ + | + +- src/ + | | + | +- example.c <- C extension source + | + +- test/ + | | + | +- example.rb <- Test code for C extension + | + +- mrbgem.rake <- GEM specification + | + +- README.md ## Ruby Extension @@ -136,21 +120,19 @@ none ### Example -``` -+- ruby_extension_example/ - | - +- mrblib/ - | | - | +- example.rb <- Ruby extension source - | - +- test/ - | | - | +- example.rb <- Test code for Ruby extension - | - +- mrbgem.rake <- GEM specification - | - +- README.md -``` + +- ruby_extension_example/ + | + +- mrblib/ + | | + | +- example.rb <- Ruby extension source + | + +- test/ + | | + | +- example.rb <- Test code for Ruby extension + | + +- mrbgem.rake <- GEM specification + | + +- README.md ## C and Ruby Extension @@ -164,21 +146,20 @@ See C and Ruby example. ### Example -``` -+- c_and_ruby_extension_example/ - | - +- mrblib/ - | | - | +- example.rb <- Ruby extension source - | - +- src/ - | | - | +- example.c <- C extension source - | - +- test/ - | | - | +- example.rb <- Test code for C and Ruby extension - | - +- mrbgem.rake <- GEM specification - | - +- README.md + +- c_and_ruby_extension_example/ + | + +- mrblib/ + | | + | +- example.rb <- Ruby extension source + | + +- src/ + | | + | +- example.c <- C extension source + | + +- test/ + | | + | +- example.rb <- Test code for C and Ruby extension + | + +- mrbgem.rake <- GEM specification + | + +- README.md -- cgit v1.2.3 From 26f353d8078f0cfee621dde14a76952dcbab72c3 Mon Sep 17 00:00:00 2001 From: Jon Date: Tue, 22 Jan 2013 16:19:17 -0500 Subject: Fix pretty-print test miss --- test/mrbtest.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mrbtest.rake b/test/mrbtest.rake index 76ddc30f8..10d8eccb6 100644 --- a/test/mrbtest.rake +++ b/test/mrbtest.rake @@ -19,7 +19,7 @@ MRuby.each_target do file mlib => [clib] file clib => [mrbcfile, init, asslib] + mrbs do |t| - _pp "GEN *.rb > #{clib}" + _pp "GEN", "*.rb", "#{clib}" open(clib, 'w') do |f| f.puts IO.read(init) mrbc.run f, [asslib] + mrbs, 'mrbtest_irep' -- cgit v1.2.3 From 7f095534fdaad8dc6f378c1ea6c513c08a42ec01 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 23 Jan 2013 00:23:13 -0500 Subject: Refine pretty-print indenting --- tasks/mruby_build_commands.rake | 2 +- tasks/ruby_ext.rake | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake index f25d0d662..533f0fe62 100644 --- a/tasks/mruby_build_commands.rake +++ b/tasks/mruby_build_commands.rake @@ -214,7 +214,7 @@ module MRuby @command ||= @build.mrbcfile IO.popen("#{filename @command} #{@compile_options % {:funcname => funcname}}", 'r+') do |io| [infiles].flatten.each do |f| - _pp " MRBC", "#{f}" + _pp "MRBC", "#{f}", nil, :indent => 2 io.write IO.read(f) end io.close_write diff --git a/tasks/ruby_ext.rake b/tasks/ruby_ext.rake index 2cc1738c3..6817f6018 100644 --- a/tasks/ruby_ext.rake +++ b/tasks/ruby_ext.rake @@ -57,6 +57,10 @@ else $pp_show = false if $verbose end -def _pp(cmd, src, tgt=nil) - puts '%-5s %s %s' % [cmd, src, tgt ? "-> #{tgt}" : nil] if $pp_show +def _pp(cmd, src, tgt=nil, options={}) + return unless $pp_show + + width = 5 + template = options[:indent] ? "%#{width*options[:indent]}s %s %s" : "%-#{width}s %s %s" + puts template % [cmd, src, tgt ? "-> #{tgt}" : nil] end -- cgit v1.2.3 From d8d87f692f4f632815b91810224db538dc1b025f Mon Sep 17 00:00:00 2001 From: mattn Date: Wed, 23 Jan 2013 22:48:27 +0900 Subject: Remove reverse --- tasks/mruby_build_commands.rake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/mruby_build_commands.rake b/tasks/mruby_build_commands.rake index 533f0fe62..33dc82742 100644 --- a/tasks/mruby_build_commands.rake +++ b/tasks/mruby_build_commands.rake @@ -124,12 +124,12 @@ module MRuby end def library_flags(_libraries) - [libraries, _libraries].flatten.reverse.map{ |d| option_library % d }.join(' ') + [libraries, _libraries].flatten.map{ |d| option_library % d }.join(' ') end def run(outfile, objfiles, _libraries=[], _library_paths=[], _flags=[]) FileUtils.mkdir_p File.dirname(outfile) - library_flags = [libraries, _libraries].flatten.reverse.map{ |d| option_library % d } + library_flags = [libraries, _libraries].flatten.map{ |d| option_library % d } library_path_flags = [library_paths, _library_paths].flatten.map{ |f| option_library_path % filename(f) } _pp "LD", "#{filename(outfile)}" _run link_options, { :flags => (flags + library_path_flags + _flags).join(' '), -- cgit v1.2.3 From 6e72fb4781197e9231e794667ac9f83e1db429bd Mon Sep 17 00:00:00 2001 From: Carson McDonald Date: Wed, 23 Jan 2013 18:44:48 -0500 Subject: Add build summary at the end of a build. --- Rakefile | 9 ++++++++- tasks/mruby_build.rake | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index f0991d323..7d8dd4117 100644 --- a/Rakefile +++ b/Rakefile @@ -42,7 +42,14 @@ depfiles += MRuby.targets.reject { |n, t| n == 'host' }.map { |n, t| }.flatten desc "build all targets, install (locally) in-repo" -task :all => depfiles +task :all => depfiles do + puts + puts "Build summary:" + puts + MRuby.each_target do + print_build_summary + end +end desc "run all mruby tests" task :test => MRuby.targets.values.map { |t| t.exefile("#{t.build_dir}/test/mrbtest") } do diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake index 711f7f024..08c0a5a05 100644 --- a/tasks/mruby_build.rake +++ b/tasks/mruby_build.rake @@ -146,6 +146,16 @@ module MRuby sh "#{filename mrbtest}" puts end + + def print_build_summary + puts "================================================" + puts " Config Name: #{@name}" + puts " Output Directory: #{self.build_dir}" + puts " Binaries: #{@bins.join(', ')}" unless @bins.empty? + puts " Included Gems: #{@gems.map{|g| g.name }.join(', ')}" unless @gems.empty? + puts "================================================" + puts + end end # Build class CrossBuild < Build -- cgit v1.2.3