Files
mruby-mruby/tasks/mruby_build_gem.rake
T
William Light 7c3f06ddd8 Implement gembox-relative gemdir paths
In the case where a relative path is specified to a gembox from
build_config.rb, it was previously tricky to specify relative gem paths
from inside that gembox.

For example, consider a project in which mruby is checked out as a
submodule in the project root:

	+- project_root
	   |
	   +- mruby/
	   |  |
	   |  +- build_config.rb
	   |  |
	   |  +- ...
	   |
	   +- my_gembox/
	      |
	      +- my_gembox.gembox
	      |
	      +- my_gem/
	         |
	         +- mrbgem.rake
	         |
	         +- ...

If build_config.rb refers to my_gembox with a relative path, it's
difficult for my_gembox to then refer to my_gem. With this proposed
change, my_gembox.gembox can look like this:

	MRuby::GemBox.new do |conf|
	  conf.gem "my_gem"
	end
2013-10-01 20:21:46 +02:00

73 lines
2.0 KiB
Ruby

module MRuby
module LoadGems
def gembox(gemboxfile)
gembox = File.expand_path("#{gemboxfile}.gembox", "#{MRUBY_ROOT}/mrbgems")
fail "Can't find gembox '#{gembox}'" unless File.exists?(gembox)
GemBox.config = self
GemBox.path = gembox
instance_eval File.read(gembox)
end
def gem(gemdir, &block)
caller_dir = File.expand_path(File.dirname(/^(.*?):\d/.match(caller.first).to_a[1]))
if gemdir.is_a?(Hash)
gemdir = load_special_path_gem(gemdir)
elsif gemdir.is_a?(String)
gemdir = "#{File.dirname(GemBox.path)}/#{gemdir}"
else
gemdir = File.expand_path(gemdir, caller_dir)
end
gemrake = File.join(gemdir, "mrbgem.rake")
fail "Can't find #{gemrake}" unless File.exists?(gemrake)
Gem.current = nil
load gemrake
return nil unless Gem.current
Gem.current.dir = gemdir
Gem.current.build = MRuby::Build.current
Gem.current.build_config_initializer = block
gems << Gem.current
Gem.current
end
def load_special_path_gem(params)
if params[:github]
params[:git] = "https://github.com/#{params[:github]}.git"
elsif params[:bitbucket]
params[:git] = "https://bitbucket.org/#{params[:bitbucket]}.git"
end
if params[:core]
gemdir = "#{root}/mrbgems/#{params[:core]}"
elsif params[:git]
url = params[:git]
gemdir = "#{gem_clone_dir}/#{url.match(/([-\w]+)(\.[-\w]+|)$/).to_a[1]}"
if File.exists?(gemdir)
if $pull_gems
git.run_pull gemdir, url
else
gemdir
end
else
options = [params[:options]] || []
options << "--branch \"#{params[:branch]}\"" if params[:branch]
FileUtils.mkdir_p "#{gem_clone_dir}"
git.run_clone gemdir, url, options
end
else
fail "unknown gem option #{params}"
end
gemdir
end
def enable_gems?
!@gems.empty?
end
end # LoadGems
end # MRuby