first commit
This commit is contained in:
+99
@@ -0,0 +1,99 @@
|
||||
MRuby.each_target do
|
||||
if enable_gems?
|
||||
# set up all gems
|
||||
gems.each(&:setup)
|
||||
gems.check self
|
||||
|
||||
# loader all gems
|
||||
self.libmruby_objs << objfile("#{build_dir}/mrbgems/gem_init")
|
||||
file objfile("#{build_dir}/mrbgems/gem_init") => ["#{build_dir}/mrbgems/gem_init.c", "#{build_dir}/LEGAL"]
|
||||
file "#{build_dir}/mrbgems/gem_init.c" => [MRUBY_CONFIG, __FILE__, *Dir.glob("#{build_dir}/mrbgems/mruby-*/*.c")] do |t|
|
||||
mkdir_p "#{build_dir}/mrbgems"
|
||||
open(t.name, 'w') do |f|
|
||||
gem_func_gems = gems.select { |g| g.generate_functions }
|
||||
gem_func_decls = gem_func_gems.each_with_object('') do |g, s|
|
||||
s << "void GENERATED_TMP_mrb_#{g.funcname}_gem_init(mrb_state*);\n" \
|
||||
"void GENERATED_TMP_mrb_#{g.funcname}_gem_final(mrb_state*);\n"
|
||||
end
|
||||
gem_init_calls = gem_func_gems.each_with_object('') do |g, s|
|
||||
s << " GENERATED_TMP_mrb_#{g.funcname}_gem_init(mrb);\n"
|
||||
end
|
||||
gem_final_calls = gem_func_gems.reverse_each.with_object('') do |g, s|
|
||||
s << " GENERATED_TMP_mrb_#{g.funcname}_gem_final(mrb);\n"
|
||||
end
|
||||
f.puts %Q[/*]
|
||||
f.puts %Q[ * This file contains a list of all]
|
||||
f.puts %Q[ * initializing methods which are]
|
||||
f.puts %Q[ * necessary to bootstrap all gems.]
|
||||
f.puts %Q[ *]
|
||||
f.puts %Q[ * IMPORTANT:]
|
||||
f.puts %Q[ * This file was generated!]
|
||||
f.puts %Q[ * All manual changes will get lost.]
|
||||
f.puts %Q[ */]
|
||||
f.puts %Q[]
|
||||
f.puts %Q[#include <mruby.h>]
|
||||
f.puts %Q[]
|
||||
f.write gem_func_decls
|
||||
unless gem_final_calls.empty?
|
||||
f.puts %Q[]
|
||||
f.puts %Q[static void]
|
||||
f.puts %Q[mrb_final_mrbgems(mrb_state *mrb) {]
|
||||
f.write gem_final_calls
|
||||
f.puts %Q[}]
|
||||
end
|
||||
f.puts %Q[]
|
||||
f.puts %Q[void]
|
||||
f.puts %Q[mrb_init_mrbgems(mrb_state *mrb) {]
|
||||
f.write gem_init_calls
|
||||
f.puts %Q[ mrb_state_atexit(mrb, mrb_final_mrbgems);] unless gem_final_calls.empty?
|
||||
f.puts %Q[}]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# legal documents
|
||||
file "#{build_dir}/LEGAL" => [MRUBY_CONFIG, __FILE__] do |t|
|
||||
mkdir_p File.dirname t.name
|
||||
open(t.name, 'w+') do |f|
|
||||
f.puts <<LEGAL
|
||||
Copyright (c) #{Time.now.year} mruby developers
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
LEGAL
|
||||
|
||||
if enable_gems?
|
||||
f.puts <<GEMS_LEGAL
|
||||
|
||||
Additional Licenses
|
||||
|
||||
Due to the reason that you choosed additional mruby packages (GEMS),
|
||||
please check the following additional licenses too:
|
||||
GEMS_LEGAL
|
||||
|
||||
gems.map do |g|
|
||||
authors = [g.authors].flatten.sort.join(", ")
|
||||
f.puts
|
||||
f.puts "GEM: #{g.name}"
|
||||
f.puts "Copyright (c) #{Time.now.year} #{authors}"
|
||||
f.puts "License: #{g.licenses}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user