mundler 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler.rb +16 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/build_config.rb +75 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/cli.rb +90 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/config.rb +44 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/dsl.rb +47 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/mruby.rb +184 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/platforms/ios.rb +42 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/platforms/ios_simulator.rb +42 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/project.rb +51 -0
- data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/version.rb +3 -0
- data/exe/mundle +7 -0
- metadata +97 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8bff85e95c9055e66797b7e104e4781625b8184b0d9a8e1992e0e05a2db566ec
|
4
|
+
data.tar.gz: b1afb00af0ef0a556f7be323cbe7dab1e8e14ce84026e75079c5498173a291ce
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cb8b8c78f8d369b30d670b60da360c7ee33a6c990a82bf424aa309ac49ecde96c1a525baf4b0e182ff670288093b7321c073540f41082d3b15ef2f53d2b4fff1
|
7
|
+
data.tar.gz: 07da326cea2279e896f5f05b33c74f71e1fcd7b0245d5f2f1794d6ccd916aef652a798c9f1a8613ab4b5010628fd0ce4b03e130a9da4c84eb46bf41186448f3d
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "digest"
|
2
|
+
require "fileutils"
|
3
|
+
require "tempfile"
|
4
|
+
|
5
|
+
require "mundler/version"
|
6
|
+
require "mundler/config"
|
7
|
+
require "mundler/build_config"
|
8
|
+
require "mundler/dsl"
|
9
|
+
require "mundler/mruby"
|
10
|
+
require "mundler/project"
|
11
|
+
|
12
|
+
module Mundler
|
13
|
+
class CompilationError < StandardError; end
|
14
|
+
class NotInstalledError < StandardError; end
|
15
|
+
class MundlefileNotFound < StandardError; end
|
16
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Mundler
|
2
|
+
class BuildConfig
|
3
|
+
def initialize(config)
|
4
|
+
@config = config
|
5
|
+
end
|
6
|
+
|
7
|
+
def tempfile
|
8
|
+
tempfile = Tempfile.new("build_config.rb")
|
9
|
+
File.write(tempfile, contents)
|
10
|
+
tempfile
|
11
|
+
end
|
12
|
+
|
13
|
+
def gemboxes
|
14
|
+
@config.gemboxes.map do |gembox|
|
15
|
+
"conf.gembox #{gembox.inspect}"
|
16
|
+
end.join("\n")
|
17
|
+
end
|
18
|
+
|
19
|
+
def gems
|
20
|
+
@config.gems.map do |gem|
|
21
|
+
# e.g. gem = {:name=>"mruby-regexp-pcre", :path=>nil, :github=>nil, :core=>nil}
|
22
|
+
args = ":mgem => #{gem[:name].inspect}"
|
23
|
+
|
24
|
+
if gem[:github]
|
25
|
+
args = ":github => #{gem[:github].inspect}"
|
26
|
+
elsif gem[:path]
|
27
|
+
args = ":path => #{gem[:path].inspect}"
|
28
|
+
elsif gem[:core]
|
29
|
+
args = ":core => #{gem[:core].inspect}"
|
30
|
+
end
|
31
|
+
|
32
|
+
"conf.gem #{args}"
|
33
|
+
end.join("\n ")
|
34
|
+
end
|
35
|
+
|
36
|
+
def mruby_version
|
37
|
+
mruby_url = @config.mruby[:url]
|
38
|
+
|
39
|
+
version = (
|
40
|
+
@config.mruby[:tag] ||
|
41
|
+
@config.mruby[:branch] ||
|
42
|
+
@config.mruby[:version]
|
43
|
+
)
|
44
|
+
|
45
|
+
"#{mruby_url} #{version}"
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def platforms
|
51
|
+
@config.platforms.map do |platform|
|
52
|
+
type = @config.platform_types[platform[:name].to_s]
|
53
|
+
raise "Can't find platform: #{platform[:name]}" unless type
|
54
|
+
type.config(platform, self)
|
55
|
+
end.join("\n")
|
56
|
+
end
|
57
|
+
|
58
|
+
def contents
|
59
|
+
contents = <<~CONTENTS
|
60
|
+
# #{mruby_version}
|
61
|
+
|
62
|
+
MRuby::Build.new do |conf|
|
63
|
+
toolchain :clang
|
64
|
+
|
65
|
+
#{gemboxes}
|
66
|
+
#{gems}
|
67
|
+
end
|
68
|
+
|
69
|
+
#{platforms}
|
70
|
+
CONTENTS
|
71
|
+
|
72
|
+
contents.strip + "\n"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require "thor"
|
2
|
+
|
3
|
+
module Mundler
|
4
|
+
class CLI < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
def self.exit_on_failure?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "install", "Download and compile mruby"
|
12
|
+
def install
|
13
|
+
Mundler::Project.new(Dir.pwd).install
|
14
|
+
rescue Mundler::CompilationError
|
15
|
+
$stderr.puts("\e[31mFailed to install\e[0m")
|
16
|
+
exit 1
|
17
|
+
rescue Interrupt
|
18
|
+
$stderr.puts("\e[31mUser cancelled\e[0m")
|
19
|
+
exit 1
|
20
|
+
rescue MundlefileNotFound
|
21
|
+
$stderr.puts("\e[31mMundlefile not found in the current directory\e[0m")
|
22
|
+
exit 1
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "update", "Same as install except it forces recompile"
|
26
|
+
def update
|
27
|
+
project = Mundler::Project.new(Dir.pwd)
|
28
|
+
project.clean
|
29
|
+
project.install
|
30
|
+
rescue Mundler::CompilationError
|
31
|
+
$stderr.puts("\e[31mFailed to install\e[0m")
|
32
|
+
exit 1
|
33
|
+
rescue Interrupt
|
34
|
+
$stderr.puts("\e[31mUser cancelled\e[0m")
|
35
|
+
exit 1
|
36
|
+
rescue MundlefileNotFound
|
37
|
+
$stderr.puts("\e[31mMundlefile not found in the current directory\e[0m")
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
|
41
|
+
desc "summary", "Print a summary of installed libraries and binaries"
|
42
|
+
def summary
|
43
|
+
project = Mundler::Project.new(Dir.pwd)
|
44
|
+
project.print_summary
|
45
|
+
rescue Interrupt
|
46
|
+
$stderr.puts("\e[31mUser cancelled\e[0m")
|
47
|
+
exit 1
|
48
|
+
rescue MundlefileNotFound
|
49
|
+
$stderr.puts("\e[31mMundlefile not found in the current directory\e[0m")
|
50
|
+
exit 1
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "clean", "Removes cached versions of mruby."
|
54
|
+
def clean
|
55
|
+
Mundler::Project.new(Dir.pwd).clean
|
56
|
+
rescue Interrupt
|
57
|
+
$stderr.puts("\e[31mUser cancelled\e[0m")
|
58
|
+
exit 1
|
59
|
+
rescue MundlefileNotFound
|
60
|
+
$stderr.puts("\e[31mMundlefile not found in the current directory\e[0m")
|
61
|
+
exit 1
|
62
|
+
end
|
63
|
+
|
64
|
+
desc "exec", "Execute command with mruby's bin prepended to $PATH"
|
65
|
+
def exec(*args)
|
66
|
+
Mundler::Project.new(Dir.pwd).exec(args)
|
67
|
+
rescue Interrupt
|
68
|
+
exit 1
|
69
|
+
rescue NotInstalledError
|
70
|
+
$stderr.puts("\e[31mChanges to the Mundlefile have been detected. Run `mundle install` and try again.\e[0m")
|
71
|
+
exit 1
|
72
|
+
rescue MundlefileNotFound
|
73
|
+
$stderr.puts("\e[31mMundlefile not found in the current directory\e[0m")
|
74
|
+
exit 1
|
75
|
+
end
|
76
|
+
|
77
|
+
desc "path", "Prints out the path relevant to the compiled version of mruby relevant to the `Mundlefile`"
|
78
|
+
def path
|
79
|
+
puts Mundler::Project.new(Dir.pwd).path
|
80
|
+
rescue Interrupt
|
81
|
+
$stderr.puts("\e[31mUser cancelled\e[0m")
|
82
|
+
exit 1
|
83
|
+
rescue MundlefileNotFound
|
84
|
+
$stderr.puts("\e[31mMundlefile not found in the current directory\e[0m")
|
85
|
+
exit 1
|
86
|
+
end
|
87
|
+
|
88
|
+
default_task :install
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Mundler
|
2
|
+
class Config
|
3
|
+
def initialize
|
4
|
+
@mruby = {
|
5
|
+
url: "https://github.com/mruby/mruby",
|
6
|
+
branch: "stable"
|
7
|
+
}
|
8
|
+
|
9
|
+
@platforms = []
|
10
|
+
@gemboxes = []
|
11
|
+
@gems = []
|
12
|
+
@platform_types = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :mruby
|
16
|
+
attr_reader :platform_types
|
17
|
+
|
18
|
+
def hex
|
19
|
+
Digest::MD5.hexdigest(to_s)
|
20
|
+
end
|
21
|
+
|
22
|
+
def gemboxes
|
23
|
+
@gemboxes.sort!
|
24
|
+
end
|
25
|
+
|
26
|
+
def gems
|
27
|
+
@gems.sort_by! { |platform| platform[:name] }
|
28
|
+
end
|
29
|
+
|
30
|
+
def platforms
|
31
|
+
@platforms.sort_by! { |platform| platform[:name] }
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
<<~HASHABLE
|
36
|
+
#{mruby.inspect}
|
37
|
+
#{platforms.inspect}
|
38
|
+
#{platform_types.keys.sort.inspect}
|
39
|
+
#{gemboxes.inspect}
|
40
|
+
#{gems.inspect}
|
41
|
+
HASHABLE
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Mundler
|
2
|
+
class DSL
|
3
|
+
def initialize(path)
|
4
|
+
@config = Config.new
|
5
|
+
@path = path
|
6
|
+
end
|
7
|
+
|
8
|
+
def evaluate!
|
9
|
+
platforms = Dir.glob(File.join(__dir__, "platforms", "*.rb"))
|
10
|
+
platforms.each do |platform|
|
11
|
+
instance_eval(File.read(platform))
|
12
|
+
end
|
13
|
+
begin
|
14
|
+
instance_eval(File.read(@path), @path)
|
15
|
+
rescue Errno::ENOENT
|
16
|
+
raise MundlefileNotFound
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_reader :config
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def mruby(url: nil, tag: nil, branch: nil)
|
25
|
+
branch = "stable" if tag.nil? && branch.nil?
|
26
|
+
config.mruby[:url] = url if url
|
27
|
+
config.mruby[:branch] = branch if branch
|
28
|
+
config.mruby[:tag] = tag if tag
|
29
|
+
end
|
30
|
+
|
31
|
+
def gembox(name)
|
32
|
+
config.gemboxes << name.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def define_platform(name, platform_class)
|
36
|
+
config.platform_types[name.to_s] = platform_class
|
37
|
+
end
|
38
|
+
|
39
|
+
def platform(name, options)
|
40
|
+
config.platforms << { name: name.to_s, options: options }
|
41
|
+
end
|
42
|
+
|
43
|
+
def gem(name, core: nil, path: nil, github: nil)
|
44
|
+
config.gems << { name: name, path: path, github: github, core: core }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,184 @@
|
|
1
|
+
module Mundler
|
2
|
+
class MRuby
|
3
|
+
def initialize(config)
|
4
|
+
@config = config
|
5
|
+
@path = File.join(ENV["HOME"], ".mundler", config.hex)
|
6
|
+
|
7
|
+
# Protect just incase, as we're doing an rm_rf
|
8
|
+
raise "Something went wrong" if config.hex.length == 0
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :path
|
12
|
+
|
13
|
+
def delete_repository
|
14
|
+
FileUtils.rm_rf(@path)
|
15
|
+
end
|
16
|
+
|
17
|
+
def clone_repository
|
18
|
+
success_indicator = File.join(@path, ".mundler_cloned_successfully")
|
19
|
+
return if File.file?(success_indicator)
|
20
|
+
|
21
|
+
mruby_url = @config.mruby[:url]
|
22
|
+
|
23
|
+
version = (
|
24
|
+
@config.mruby[:tag] ||
|
25
|
+
@config.mruby[:branch] ||
|
26
|
+
@config.mruby[:version]
|
27
|
+
)
|
28
|
+
|
29
|
+
FileUtils.rm_rf(@path)
|
30
|
+
FileUtils.mkdir_p(@path)
|
31
|
+
FileUtils.cd(@path)
|
32
|
+
git_clone = Proc.new do
|
33
|
+
system(
|
34
|
+
{
|
35
|
+
# The {mundler gem path}/cached_git directory contains a binary called
|
36
|
+
# `git` that will run instead of normal git, making a cache of a
|
37
|
+
# clone.
|
38
|
+
"PATH" => ([cached_git_dir] + ENV["PATH"].split(":")).join(":")
|
39
|
+
},
|
40
|
+
"git clone #{mruby_url} . >/dev/null 2>&1"
|
41
|
+
) || error_out("Failed to clone mruby: #{mruby_url}")
|
42
|
+
end
|
43
|
+
|
44
|
+
if defined?(Bundler) && Bundler.respond_to?(:with_unbundled_env)
|
45
|
+
Bundler.with_unbundled_env(&git_clone)
|
46
|
+
elsif defined?(Bundler)
|
47
|
+
Bundler.with_clean_env(&git_clone)
|
48
|
+
else
|
49
|
+
git_clone.call
|
50
|
+
end
|
51
|
+
|
52
|
+
if version
|
53
|
+
system("git reset --hard #{version} >/dev/null 2>&1") ||
|
54
|
+
error_out("Failed to set version to #{version}")
|
55
|
+
end
|
56
|
+
|
57
|
+
FileUtils.touch(success_indicator)
|
58
|
+
end
|
59
|
+
|
60
|
+
def exec(args)
|
61
|
+
raise NotInstalledError unless installed?
|
62
|
+
|
63
|
+
bin_dir = File.join(@path, "bin")
|
64
|
+
path = bin_dir + ":" + ENV['PATH']
|
65
|
+
Process.spawn({ "PATH" => path }, *args)
|
66
|
+
Process.wait
|
67
|
+
exit($?.exitstatus) if $?.exitstatus
|
68
|
+
end
|
69
|
+
|
70
|
+
def compile(build_config)
|
71
|
+
logfile = Tempfile.new(['mundler_build', '.log'])
|
72
|
+
|
73
|
+
success_indicator = File.join(@path, ".mundler_built_successfully")
|
74
|
+
if File.file?(success_indicator)
|
75
|
+
return
|
76
|
+
end
|
77
|
+
|
78
|
+
FileUtils.cd(@path)
|
79
|
+
|
80
|
+
cleaned = false
|
81
|
+
covered = []
|
82
|
+
output_thread = Thread.new do
|
83
|
+
loop do
|
84
|
+
if cleaned
|
85
|
+
Dir.glob(File.join(Dir.pwd, "build", "*", "*", "*")).each do |file|
|
86
|
+
pathname = Pathname.new(file)
|
87
|
+
directory = pathname.directory? ? pathname.to_s : Pathname.new(file).dirname.to_s
|
88
|
+
next if covered.include?(directory)
|
89
|
+
covered << directory
|
90
|
+
print "\e[32m.\e[0m"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
sleep(0.3)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
clean = Proc.new do
|
98
|
+
rake = `which rake`.chomp
|
99
|
+
system(
|
100
|
+
{
|
101
|
+
"MRUBY_CONFIG" => build_config,
|
102
|
+
# The {mundler gem path}/cached_git directory contains a binary called
|
103
|
+
# `git` that will run instead of normal git, making a cache of a
|
104
|
+
# clone.
|
105
|
+
"PATH" => ([cached_git_dir] + ENV["PATH"].split(":")).join(":")
|
106
|
+
},
|
107
|
+
"#{rake} clean >#{logfile.path} 2>&1 && #{rake} deep_clean >#{logfile.path} 2>&1"
|
108
|
+
) || begin
|
109
|
+
$stderr.print "\e[31mF\e[0m"
|
110
|
+
$stderr.puts "\n\n"
|
111
|
+
$stderr.puts File.read(logfile)
|
112
|
+
|
113
|
+
raise Mundler::CompilationError
|
114
|
+
end
|
115
|
+
|
116
|
+
cleaned = true
|
117
|
+
end
|
118
|
+
|
119
|
+
compile = Proc.new do
|
120
|
+
rake = `which rake`.chomp
|
121
|
+
system(
|
122
|
+
{
|
123
|
+
"MRUBY_CONFIG" => build_config,
|
124
|
+
# The {mundler gem path}/cached_git directory contains a binary called
|
125
|
+
# `git` that will run instead of normal git, making a cache of a
|
126
|
+
# clone.
|
127
|
+
"PATH" => ([cached_git_dir] + ENV["PATH"].split(":")).join(":")
|
128
|
+
},
|
129
|
+
"#{rake} >#{logfile.path} 2>&1"
|
130
|
+
) || begin
|
131
|
+
$stderr.print "\e[31mF\e[0m"
|
132
|
+
$stderr.puts "\n\n"
|
133
|
+
$stderr.puts File.read(logfile)
|
134
|
+
|
135
|
+
raise Mundler::CompilationError
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
if defined?(Bundler) && Bundler.respond_to?(:with_unbundled_env)
|
140
|
+
Bundler.with_unbundled_env(&clean)
|
141
|
+
Bundler.with_unbundled_env(&compile)
|
142
|
+
elsif defined?(Bundler)
|
143
|
+
Bundler.with_clean_env(&clean)
|
144
|
+
Bundler.with_clean_env(&compile)
|
145
|
+
else
|
146
|
+
clean.call
|
147
|
+
compile.call
|
148
|
+
end
|
149
|
+
|
150
|
+
output_thread.kill
|
151
|
+
FileUtils.touch(success_indicator)
|
152
|
+
ensure
|
153
|
+
logfile.close
|
154
|
+
logfile.delete
|
155
|
+
end
|
156
|
+
|
157
|
+
def print_summary
|
158
|
+
FileUtils.cd(@path)
|
159
|
+
puts "Libraries:"
|
160
|
+
Dir.glob(File.join(Dir.pwd, "**", "*.a")).each { |a| puts "* " + a.split("build/").last }
|
161
|
+
|
162
|
+
binaries = Dir.glob(File.join(Dir.pwd, "build", "host", "bin", "*"))
|
163
|
+
if binaries.count > 0
|
164
|
+
puts ""
|
165
|
+
puts "Binaries:"
|
166
|
+
binaries.each { |a| puts "* " + a.split("/").last }
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
private
|
171
|
+
|
172
|
+
def installed?
|
173
|
+
success_indicator = File.join(@path, ".mundler_built_successfully")
|
174
|
+
File.file?(success_indicator)
|
175
|
+
end
|
176
|
+
|
177
|
+
def cached_git_dir
|
178
|
+
dir = File.expand_path(File.join(__dir__, "..", "..", "cached_git"))
|
179
|
+
raise "cached git not found" unless File.file?(File.join(dir, "git"))
|
180
|
+
raise "cached git not found" unless File.file?(File.join(dir, "cached_git"))
|
181
|
+
dir
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module IOSPlatform
|
2
|
+
def self.config(options, build_config)
|
3
|
+
valid_archs = [:armv7, :arm64]
|
4
|
+
options[:archs] ||= valid_archs
|
5
|
+
|
6
|
+
options[:archs].map do |arch|
|
7
|
+
unless valid_archs.include?(arch)
|
8
|
+
raise "Invalid architecture #{arch}. Valid values: #{valid_archs}"
|
9
|
+
end
|
10
|
+
|
11
|
+
minimum_ios_version = options[:minimum_ios_sdk_version] || "10.0"
|
12
|
+
ios_sdk = `xcrun --sdk iphoneos --show-sdk-path`.chomp
|
13
|
+
|
14
|
+
clang = `xcrun -find clang`.chomp
|
15
|
+
flags = %W(
|
16
|
+
-O3
|
17
|
+
-miphoneos-version-min=#{minimum_ios_version}
|
18
|
+
-arch #{arch}
|
19
|
+
-isysroot #{ios_sdk}
|
20
|
+
)
|
21
|
+
|
22
|
+
<<~BUILD
|
23
|
+
MRuby::CrossBuild.new("ios__#{arch}") do |conf|
|
24
|
+
#{build_config.gemboxes}
|
25
|
+
#{build_config.gems}
|
26
|
+
|
27
|
+
conf.cc do |cc|
|
28
|
+
cc.command = #{clang.inspect}
|
29
|
+
cc.flags = #{flags.inspect}
|
30
|
+
end
|
31
|
+
|
32
|
+
conf.linker do |l|
|
33
|
+
l.command = #{clang.inspect}
|
34
|
+
l.flags = #{flags.inspect}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
BUILD
|
38
|
+
end.join("\n")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
define_platform "ios", IOSPlatform
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module IOSSimulatorPlatform
|
2
|
+
def self.config(options, build_config)
|
3
|
+
valid_archs = [:i386, :x86_64]
|
4
|
+
options[:archs] ||= valid_archs
|
5
|
+
|
6
|
+
options[:archs].map do |arch|
|
7
|
+
unless valid_archs.include?(arch)
|
8
|
+
raise "Invalid architecture #{arch}. Valid values: #{valid_archs}"
|
9
|
+
end
|
10
|
+
|
11
|
+
minimum_ios_version = options[:minimum_ios_sdk_version] || "10.0"
|
12
|
+
ios_simulator_sdk = `xcrun --sdk iphonesimulator --show-sdk-path`.chomp
|
13
|
+
|
14
|
+
clang = `xcrun -find clang`.chomp
|
15
|
+
flags = %W(
|
16
|
+
-O3
|
17
|
+
-mios-simulator-version-min=#{minimum_ios_version}
|
18
|
+
-arch #{arch}
|
19
|
+
-isysroot #{ios_simulator_sdk}
|
20
|
+
)
|
21
|
+
|
22
|
+
<<~BUILD
|
23
|
+
MRuby::CrossBuild.new("ios_simulator__#{arch}") do |conf|
|
24
|
+
#{build_config.gemboxes}
|
25
|
+
#{build_config.gems}
|
26
|
+
|
27
|
+
conf.cc do |cc|
|
28
|
+
cc.command = #{clang.inspect}
|
29
|
+
cc.flags = #{flags.inspect}
|
30
|
+
end
|
31
|
+
|
32
|
+
conf.linker do |l|
|
33
|
+
l.command = #{clang.inspect}
|
34
|
+
l.flags = #{flags.inspect}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
BUILD
|
38
|
+
end.join("\n")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
define_platform "ios_simulator", IOSSimulatorPlatform
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Mundler
|
2
|
+
class Project
|
3
|
+
def initialize(project_path)
|
4
|
+
@project_path = project_path
|
5
|
+
@mruby = MRuby.new(config)
|
6
|
+
end
|
7
|
+
|
8
|
+
def install(&blk)
|
9
|
+
@mruby.clone_repository
|
10
|
+
build_config = BuildConfig.new(config).tempfile
|
11
|
+
@mruby.compile(build_config.path)
|
12
|
+
FileUtils.cp(build_config.path, File.join(@project_path, "Mundlefile.lock"))
|
13
|
+
ensure
|
14
|
+
if build_config
|
15
|
+
build_config.close
|
16
|
+
build_config.delete
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def print_summary
|
21
|
+
@mruby.print_summary
|
22
|
+
end
|
23
|
+
|
24
|
+
def clean
|
25
|
+
@mruby.delete_repository
|
26
|
+
end
|
27
|
+
|
28
|
+
def exec(args)
|
29
|
+
@mruby.exec(args)
|
30
|
+
end
|
31
|
+
|
32
|
+
def path
|
33
|
+
@mruby.path
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def config
|
39
|
+
@config ||= begin
|
40
|
+
mundlefile_path = (
|
41
|
+
ENV["MUNDLEFILE_PATH"] ||
|
42
|
+
File.join(@project_path, "Mundlefile")
|
43
|
+
)
|
44
|
+
|
45
|
+
dsl = DSL.new(mundlefile_path)
|
46
|
+
dsl.evaluate!
|
47
|
+
dsl.config
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/exe/mundle
ADDED
metadata
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mundler
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Inkpen
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-07-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: A simple tool help download and compile mruby when gems change
|
56
|
+
email:
|
57
|
+
- dan2552@gmail.com
|
58
|
+
executables:
|
59
|
+
- mundle
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler.rb"
|
64
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/build_config.rb"
|
65
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/cli.rb"
|
66
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/config.rb"
|
67
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/dsl.rb"
|
68
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/mruby.rb"
|
69
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/platforms/ios.rb"
|
70
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/platforms/ios_simulator.rb"
|
71
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/project.rb"
|
72
|
+
- "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/version.rb"
|
73
|
+
- exe/mundle
|
74
|
+
homepage: https://github.com/Dan2552/mundler
|
75
|
+
licenses:
|
76
|
+
- MIT
|
77
|
+
metadata: {}
|
78
|
+
post_install_message:
|
79
|
+
rdoc_options: []
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
requirements: []
|
93
|
+
rubygems_version: 3.0.3
|
94
|
+
signing_key:
|
95
|
+
specification_version: 4
|
96
|
+
summary: A simple tool help download and compile mruby when gems change
|
97
|
+
test_files: []
|