mundler 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/exe/mundle +2 -0
- data/lib/mundler/build_config.rb +84 -4
- data/lib/mundler/clean_environment.rb +11 -0
- data/lib/mundler/cli.rb +4 -2
- data/lib/mundler/config.rb +8 -2
- data/lib/mundler/dsl.rb +25 -4
- data/lib/mundler/libraries/example.rb +13 -0
- data/lib/mundler/mruby.rb +23 -25
- data/lib/mundler/platforms/host.rb +1 -2
- data/lib/mundler/platforms/ios.rb +6 -5
- data/lib/mundler/platforms/ios_simulator.rb +11 -5
- data/lib/mundler/version.rb +1 -1
- data/lib/mundler.rb +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e34cffc5ea496c40d16c21f544456bf5fa2db7f921e7c70aa000c5b5fdb5cdc5
|
4
|
+
data.tar.gz: 125ad566d2322fa8d931a428c5d8cdfc7df98818dd3e793c1a7a23b66e225758
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 326e51648e28ea76872db38f4d8c03168960fad4ed5ee8c53e37b7d6da3d8605f62152a1aa87d22dd04b6e4070bfa60fad265cb52ec5dc8046c323f5f4488219
|
7
|
+
data.tar.gz: ba5c5387ddfa27ac31e10f53c128e4b26c319c03dcfde893bea970309025bc44d1cfdb568662e60071a3a255d72312b758d870bb180e9407e8626dfb81a90c99
|
data/exe/mundle
CHANGED
data/lib/mundler/build_config.rb
CHANGED
@@ -61,10 +61,90 @@ module Mundler
|
|
61
61
|
.join("\n")
|
62
62
|
end
|
63
63
|
|
64
|
-
def platform(
|
65
|
-
|
66
|
-
|
67
|
-
type
|
64
|
+
def platform(platform_attrs)
|
65
|
+
platform_name = platform_attrs[:name].to_s
|
66
|
+
type = @config.platform_types[platform_name]
|
67
|
+
raise "Can't find platform: #{platform_name}" unless type
|
68
|
+
|
69
|
+
options = {}
|
70
|
+
@config.libraries.each do |library_name, library_options|
|
71
|
+
library_type = @config.library_types[library_name]
|
72
|
+
|
73
|
+
raise "Unknown library: #{library_name}" unless library_type
|
74
|
+
|
75
|
+
library_builder = library_type.new
|
76
|
+
|
77
|
+
puts "Using #{library_name} library (#{platform_name})"
|
78
|
+
library_builder.build(platform_name, library_options)
|
79
|
+
library_attrs = library_builder.platform_configuration(platform_name, library_options)
|
80
|
+
raise "Library #{library_name} for platform #{platform_name} returned expected result" unless library_attrs.is_a?(Hash)
|
81
|
+
merge_platform_attributes!(options, library_attrs)
|
82
|
+
end
|
83
|
+
|
84
|
+
merge_platform_attributes!(options, platform_attrs[:options])
|
85
|
+
|
86
|
+
type.config(options, self)
|
87
|
+
end
|
88
|
+
|
89
|
+
# Merge with a bit of specific logic to make sure build settings
|
90
|
+
#
|
91
|
+
# E.g. if lhs was something like
|
92
|
+
#
|
93
|
+
# ```
|
94
|
+
# {
|
95
|
+
# cc: { flags: "-I#{sdl_install}/include/SDL2" },
|
96
|
+
# linker: { flags: "-L#{sdl_install}/lib -lSDL2 -lSDL2_image -lSDL2_ttf" }
|
97
|
+
# }
|
98
|
+
# ```
|
99
|
+
#
|
100
|
+
# and rhs was like
|
101
|
+
#
|
102
|
+
# ```
|
103
|
+
# {
|
104
|
+
# cc: { flags: "abc" },
|
105
|
+
# linker: { flags: "def" },
|
106
|
+
# more_options: true
|
107
|
+
# }
|
108
|
+
# ```
|
109
|
+
#
|
110
|
+
# result would be
|
111
|
+
# ```
|
112
|
+
# {
|
113
|
+
# cc: { flags: ["-I#{sdl_install}/include/SDL2", "abc"] },
|
114
|
+
# linker: { flags: ["-L#{sdl_install}/lib -lSDL2 -lSDL2_image -lSDL2_ttf", "def"] }
|
115
|
+
# more_options: true
|
116
|
+
# }
|
117
|
+
# ```
|
118
|
+
#
|
119
|
+
def merge_platform_attributes!(lhs, rhs)
|
120
|
+
rhs = rhs.dup
|
121
|
+
|
122
|
+
[:cc, :linker].each do |cc_or_linker|
|
123
|
+
[:command, :flags].each do |command_or_flags|
|
124
|
+
lhs_flags = lhs.dig(cc_or_linker, command_or_flags)
|
125
|
+
rhs_flags = rhs.dig(cc_or_linker, command_or_flags)
|
126
|
+
|
127
|
+
if rhs_flags
|
128
|
+
lhs[cc_or_linker] ||= {}
|
129
|
+
lhs[cc_or_linker][command_or_flags] ||= []
|
130
|
+
lhs_flags = lhs.dig(cc_or_linker, command_or_flags)
|
131
|
+
|
132
|
+
if lhs_flags.is_a?(String)
|
133
|
+
lhs[cc_or_linker][command_or_flags] = [lhs_flags]
|
134
|
+
end
|
135
|
+
|
136
|
+
if rhs_flags.is_a?(String)
|
137
|
+
rhs[cc_or_linker][command_or_flags] = [rhs_flags]
|
138
|
+
end
|
139
|
+
|
140
|
+
lhs[cc_or_linker][command_or_flags] = lhs[cc_or_linker][command_or_flags] + rhs[cc_or_linker][command_or_flags]
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
rhs.delete(cc_or_linker)
|
145
|
+
end
|
146
|
+
|
147
|
+
lhs.merge!(rhs)
|
68
148
|
end
|
69
149
|
|
70
150
|
def env_vars
|
data/lib/mundler/cli.rb
CHANGED
@@ -11,11 +11,12 @@ module Mundler
|
|
11
11
|
desc "install", "Download and compile mruby"
|
12
12
|
def install
|
13
13
|
Mundler::Project.new(Dir.pwd).install
|
14
|
+
puts("\e[32mMundle complete!\e[0m")
|
14
15
|
rescue Mundler::CompilationError
|
15
|
-
$stderr.puts("\e[
|
16
|
+
$stderr.puts("\e[31mMundle failed\e[0m")
|
16
17
|
exit 1
|
17
18
|
rescue Interrupt
|
18
|
-
$stderr.puts("\e[
|
19
|
+
$stderr.puts("\e[31mMundle failed (user cancelled)\e[0m")
|
19
20
|
exit 1
|
20
21
|
rescue MundlefileNotFound
|
21
22
|
$stderr.puts("\e[31mMundlefile not found in the current directory\e[0m")
|
@@ -27,6 +28,7 @@ module Mundler
|
|
27
28
|
project = Mundler::Project.new(Dir.pwd)
|
28
29
|
project.clean
|
29
30
|
project.install
|
31
|
+
puts("\e[32mMundle complete!\e[0m")
|
30
32
|
rescue Mundler::CompilationError
|
31
33
|
$stderr.puts("\e[31mFailed to install\e[0m")
|
32
34
|
exit 1
|
data/lib/mundler/config.rb
CHANGED
@@ -10,11 +10,15 @@ module Mundler
|
|
10
10
|
@gemboxes = []
|
11
11
|
@gems = []
|
12
12
|
@platform_types = {}
|
13
|
+
@library_types = {}
|
13
14
|
@env = {}
|
15
|
+
@libraries = {}
|
14
16
|
end
|
15
17
|
|
16
18
|
attr_reader :mruby
|
17
19
|
attr_reader :platform_types
|
20
|
+
attr_reader :library_types
|
21
|
+
attr_reader :libraries
|
18
22
|
attr_reader :env
|
19
23
|
|
20
24
|
def hex
|
@@ -38,9 +42,11 @@ module Mundler
|
|
38
42
|
#{mruby.inspect}
|
39
43
|
#{platforms.inspect}
|
40
44
|
#{platform_types.keys.sort.inspect}
|
45
|
+
#{library_types.keys.sort.inspect}
|
41
46
|
#{hashable_string_for_hash(env)}
|
42
47
|
#{gemboxes.inspect}
|
43
48
|
#{gems.inspect}
|
49
|
+
#{hashable_string_for_hash(libraries)}
|
44
50
|
HASHABLE
|
45
51
|
end
|
46
52
|
|
@@ -50,9 +56,9 @@ module Mundler
|
|
50
56
|
str = "{"
|
51
57
|
sorted_keys = hash.keys.sort
|
52
58
|
|
53
|
-
sorted_keys.
|
59
|
+
sorted_keys.map do |key|
|
54
60
|
str = str + "#{key}=>#{hash[key]}"
|
55
|
-
end
|
61
|
+
end.join(", ")
|
56
62
|
|
57
63
|
str + "}"
|
58
64
|
end
|
data/lib/mundler/dsl.rb
CHANGED
@@ -3,13 +3,12 @@ module Mundler
|
|
3
3
|
def initialize(path)
|
4
4
|
@config = Config.new
|
5
5
|
@path = path
|
6
|
+
|
7
|
+
load_libraries
|
8
|
+
load_platforms
|
6
9
|
end
|
7
10
|
|
8
11
|
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
12
|
begin
|
14
13
|
instance_eval(File.read(@path), @path)
|
15
14
|
rescue Errno::ENOENT
|
@@ -19,6 +18,20 @@ module Mundler
|
|
19
18
|
|
20
19
|
attr_reader :config
|
21
20
|
|
21
|
+
def load_libraries
|
22
|
+
libraries = Dir.glob(File.join(__dir__, "libraries", "*.rb"))
|
23
|
+
libraries.each do |library|
|
24
|
+
instance_eval(File.read(library))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def load_platforms
|
29
|
+
platforms = Dir.glob(File.join(__dir__, "platforms", "*.rb"))
|
30
|
+
platforms.each do |platform|
|
31
|
+
instance_eval(File.read(platform))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
22
35
|
private
|
23
36
|
|
24
37
|
def mruby(url: nil, tag: nil, branch: nil)
|
@@ -52,5 +65,13 @@ module Mundler
|
|
52
65
|
def env(name, value)
|
53
66
|
config.env[name] = value
|
54
67
|
end
|
68
|
+
|
69
|
+
def library(name, options = {})
|
70
|
+
config.libraries[name.to_s] = options
|
71
|
+
end
|
72
|
+
|
73
|
+
def define_library(name, library_class)
|
74
|
+
config.library_types[name.to_s] = library_class
|
75
|
+
end
|
55
76
|
end
|
56
77
|
end
|
data/lib/mundler/mruby.rb
CHANGED
@@ -29,7 +29,8 @@ module Mundler
|
|
29
29
|
FileUtils.rm_rf(@path)
|
30
30
|
FileUtils.mkdir_p(@path)
|
31
31
|
FileUtils.cd(@path)
|
32
|
-
|
32
|
+
|
33
|
+
Mundler.with_clean_env do
|
33
34
|
system(
|
34
35
|
{
|
35
36
|
# The {mundler gem path}/cached_git directory contains a binary called
|
@@ -38,15 +39,7 @@ module Mundler
|
|
38
39
|
"PATH" => ([cached_git_dir] + ENV["PATH"].split(":")).join(":")
|
39
40
|
},
|
40
41
|
"git clone #{mruby_url} . >/dev/null 2>&1"
|
41
|
-
) ||
|
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
|
42
|
+
) || raise(Mundler::CloneError, "Failed to clone #{mruby_url}")
|
50
43
|
end
|
51
44
|
|
52
45
|
if version
|
@@ -70,6 +63,22 @@ module Mundler
|
|
70
63
|
def compile(build_config)
|
71
64
|
logfile = Tempfile.new(['mundler_build', '.log'])
|
72
65
|
|
66
|
+
version = (
|
67
|
+
@config.mruby[:tag] ||
|
68
|
+
@config.mruby[:branch] ||
|
69
|
+
@config.mruby[:version]
|
70
|
+
)
|
71
|
+
|
72
|
+
@config.gemboxes.each do |gembox|
|
73
|
+
puts "Using #{gembox} gembox"
|
74
|
+
end
|
75
|
+
@config.gems.each do |gem|
|
76
|
+
puts "Using #{gem[:name]} gem"
|
77
|
+
end
|
78
|
+
|
79
|
+
puts "Using mruby (#{version})"
|
80
|
+
|
81
|
+
|
73
82
|
success_indicator = File.join(@path, ".mundler_built_successfully")
|
74
83
|
if File.file?(success_indicator)
|
75
84
|
return
|
@@ -87,14 +96,14 @@ module Mundler
|
|
87
96
|
directory = pathname.directory? ? pathname.to_s : Pathname.new(file).dirname.to_s
|
88
97
|
next if covered.include?(directory)
|
89
98
|
covered << directory
|
90
|
-
print "\e[
|
99
|
+
print "\e[34m.\e[0m"
|
91
100
|
end
|
92
101
|
end
|
93
102
|
sleep(0.3)
|
94
103
|
end
|
95
104
|
end
|
96
105
|
|
97
|
-
|
106
|
+
Mundler.with_clean_env do
|
98
107
|
rake = `which rake`.chomp
|
99
108
|
system(
|
100
109
|
{
|
@@ -115,9 +124,7 @@ module Mundler
|
|
115
124
|
end
|
116
125
|
|
117
126
|
cleaned = true
|
118
|
-
end
|
119
127
|
|
120
|
-
compile = Proc.new do
|
121
128
|
rake = `which rake`.chomp
|
122
129
|
system(
|
123
130
|
{
|
@@ -138,20 +145,11 @@ module Mundler
|
|
138
145
|
end
|
139
146
|
end
|
140
147
|
|
141
|
-
|
142
|
-
Bundler.with_unbundled_env(&clean)
|
143
|
-
Bundler.with_unbundled_env(&compile)
|
144
|
-
elsif defined?(Bundler)
|
145
|
-
Bundler.with_clean_env(&clean)
|
146
|
-
Bundler.with_clean_env(&compile)
|
147
|
-
else
|
148
|
-
clean.call
|
149
|
-
compile.call
|
150
|
-
end
|
148
|
+
puts "\n\n"
|
151
149
|
|
152
|
-
output_thread.kill
|
153
150
|
FileUtils.touch(success_indicator)
|
154
151
|
ensure
|
152
|
+
output_thread.kill if output_thread
|
155
153
|
logfile.close
|
156
154
|
logfile.delete
|
157
155
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module IOSPlatform
|
2
2
|
def self.config(options, build_config)
|
3
3
|
valid_archs = [:armv7, :arm64]
|
4
|
-
|
4
|
+
default_archs = [:arm64]
|
5
|
+
options[:archs] ||= default_archs
|
5
6
|
|
6
7
|
options[:archs].map do |arch|
|
7
8
|
unless valid_archs.include?(arch)
|
@@ -19,11 +20,11 @@ module IOSPlatform
|
|
19
20
|
-isysroot #{ios_sdk}
|
20
21
|
)
|
21
22
|
|
22
|
-
cc_command = options.dig(:
|
23
|
-
linker_command = options.dig(:
|
23
|
+
cc_command = options.dig(:cc, :command) || clang
|
24
|
+
linker_command = options.dig(:linker, :command) || clang
|
24
25
|
|
25
|
-
cc_flags = flags + Array(options.dig(:
|
26
|
-
linker_flags = flags + Array(options.dig(:
|
26
|
+
cc_flags = flags + Array(options.dig(:cc, :flags) || [])
|
27
|
+
linker_flags = flags + Array(options.dig(:linker, :flags) || [])
|
27
28
|
|
28
29
|
<<~BUILD
|
29
30
|
MRuby::CrossBuild.new("ios__#{arch}") do |conf|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module IOSSimulatorPlatform
|
2
2
|
def self.config(options, build_config)
|
3
|
-
valid_archs = [:i386, :x86_64]
|
3
|
+
valid_archs = [:i386, :x86_64, :arm64]
|
4
4
|
options[:archs] ||= valid_archs
|
5
5
|
|
6
6
|
options[:archs].map do |arch|
|
@@ -19,19 +19,25 @@ module IOSSimulatorPlatform
|
|
19
19
|
-isysroot #{ios_simulator_sdk}
|
20
20
|
)
|
21
21
|
|
22
|
+
cc_command = options.dig(:cc, :command) || clang
|
23
|
+
linker_command = options.dig(:linker, :command) || clang
|
24
|
+
|
25
|
+
cc_flags = flags + Array(options.dig(:cc, :flags) || [])
|
26
|
+
linker_flags = flags + Array(options.dig(:linker, :flags) || [])
|
27
|
+
|
22
28
|
<<~BUILD
|
23
29
|
MRuby::CrossBuild.new("ios_simulator__#{arch}") do |conf|
|
24
30
|
#{build_config.gemboxes}
|
25
31
|
#{build_config.gems}
|
26
32
|
|
27
33
|
conf.cc do |cc|
|
28
|
-
cc.command = #{
|
29
|
-
cc.flags = #{
|
34
|
+
cc.command = #{cc_command.inspect}
|
35
|
+
cc.flags = #{cc_flags.inspect}
|
30
36
|
end
|
31
37
|
|
32
38
|
conf.linker do |l|
|
33
|
-
l.command = #{
|
34
|
-
l.flags = #{
|
39
|
+
l.command = #{linker_command.inspect}
|
40
|
+
l.flags = #{linker_flags.inspect}
|
35
41
|
end
|
36
42
|
end
|
37
43
|
BUILD
|
data/lib/mundler/version.rb
CHANGED
data/lib/mundler.rb
CHANGED
@@ -8,9 +8,11 @@ require "mundler/build_config"
|
|
8
8
|
require "mundler/dsl"
|
9
9
|
require "mundler/mruby"
|
10
10
|
require "mundler/project"
|
11
|
+
require "mundler/clean_environment"
|
11
12
|
|
12
13
|
module Mundler
|
13
14
|
class CompilationError < StandardError; end
|
15
|
+
class CloneError < CompilationError; end
|
14
16
|
class NotInstalledError < StandardError; end
|
15
17
|
class MundlefileNotFound < StandardError; end
|
16
18
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mundler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Inkpen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -65,9 +65,11 @@ files:
|
|
65
65
|
- lib/mundler/build_config.rb
|
66
66
|
- lib/mundler/cached_git/cached_git
|
67
67
|
- lib/mundler/cached_git/git
|
68
|
+
- lib/mundler/clean_environment.rb
|
68
69
|
- lib/mundler/cli.rb
|
69
70
|
- lib/mundler/config.rb
|
70
71
|
- lib/mundler/dsl.rb
|
72
|
+
- lib/mundler/libraries/example.rb
|
71
73
|
- lib/mundler/mruby.rb
|
72
74
|
- lib/mundler/platforms/android.rb
|
73
75
|
- lib/mundler/platforms/host.rb
|