mgem 0.2.0 → 0.3.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/bin/mgem +129 -80
- data/lib/mgem.rb +14 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6fcd5e06cd00d8ad8ac67574fc402ca628e552d6
|
4
|
+
data.tar.gz: c866f30bdc6da568e0dcf662ddca76f80d3882e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0cc2be19c6f06cadd2d82fc1254edf15c2c78a9e11f8e6b04a0836d4e296c12e23306cd68cb0eb1e3670f6d4862ba61a6e4c837b7cceb1328dc3837ea8b4e3e
|
7
|
+
data.tar.gz: b49e93f42d03d550b3d1d51a8c2d8fda81e9489f5f1a95af0b36dbc034975177437941031fa87498adf864951e2836bcafda7b78a9def26f93bbc29637e708eb
|
data/bin/mgem
CHANGED
@@ -3,11 +3,16 @@
|
|
3
3
|
require "#{File.dirname(__FILE__)}/../lib/mgem"
|
4
4
|
extend Mrbgem
|
5
5
|
|
6
|
-
|
6
|
+
main_cmd = ARGV[0]
|
7
|
+
arg1 = ARGV[1]
|
8
|
+
arg2 = ARGV[2]
|
9
|
+
|
10
|
+
gems = load_gems unless main_cmd == 'help'
|
7
11
|
|
8
12
|
info_proc = lambda do |obj|
|
9
13
|
puts " #{obj.name.ljust(30)}#{obj.description}"
|
10
14
|
end
|
15
|
+
r = lambda { |o| /^(#{1.upto(o.size).map{|x|o[0...(x)]}.join('|')})$/ }
|
11
16
|
|
12
17
|
detail_info_proc = lambda do |obj|
|
13
18
|
puts <<INFO
|
@@ -34,108 +39,120 @@ def get_toolchain
|
|
34
39
|
puts <<__TOOLCHAIN_SELECT__
|
35
40
|
|
36
41
|
Please choose your toolchain:
|
37
|
-
'
|
38
|
-
'clang' for LLVM C Compiler
|
39
|
-
'vs' for Visual Studio 2012 on Windows
|
40
|
-
|
42
|
+
#{Mrbgem::TOOLCHAINS.map{|x| " '#{x[0]}' for #{Mrbgem::TOOLCHAINS[x[0]][:desc]}\n" }.join}
|
41
43
|
__TOOLCHAIN_SELECT__
|
42
44
|
|
43
45
|
print 'Toolchain: '
|
44
46
|
STDOUT.flush
|
45
|
-
toolchain =
|
46
|
-
|
47
|
-
|
48
|
-
when 'clang'
|
49
|
-
'clang'
|
50
|
-
when 'gcc'
|
51
|
-
'gcc'
|
47
|
+
toolchain = STDIN.gets.chomp
|
48
|
+
if Mrbgem::TOOLCHAINS.has_key? toolchain
|
49
|
+
toolchain = Mrbgem::TOOLCHAINS[toolchain][:id]
|
52
50
|
else
|
51
|
+
toolchain = 'gcc'
|
53
52
|
puts <<__ERROR__
|
54
53
|
|
55
54
|
Your input "#{toolchain}" wasn't valid.
|
56
55
|
Fallback to GCC toolchain!
|
57
56
|
__ERROR__
|
58
|
-
|
59
|
-
'gcc'
|
60
57
|
end
|
61
58
|
|
62
59
|
toolchain
|
63
60
|
end
|
64
61
|
|
65
|
-
def get_binaries
|
66
|
-
puts
|
67
|
-
print 'Compile mrbc? (Y/n): '
|
68
|
-
mrbc = STDIN.gets.chomp
|
69
|
-
|
70
|
-
binaries = []
|
71
|
-
binaries << 'mrbc' unless mrbc == 'n'
|
72
|
-
|
73
|
-
binaries.join ' '
|
74
|
-
end
|
75
|
-
|
76
62
|
CORE_GEMS = {
|
77
|
-
'
|
78
|
-
'mruby
|
79
|
-
'
|
80
|
-
'
|
63
|
+
'Interactive Shell [mirb]' => 'bin-mirb',
|
64
|
+
'Interpreter [mruby]' => 'bin-mruby',
|
65
|
+
'Compiler [mrbc]' => 'bin-mrbc',
|
66
|
+
'Configurator [mruby-config]' => 'bin-mruby-config',
|
67
|
+
'Debugger [mrdb]' => 'bin-debugger',
|
68
|
+
|
69
|
+
'Array Extensions' => 'array-ext',
|
70
|
+
'Enumerator' => 'enumerator',
|
71
|
+
'Enumerator Lazy' => 'enum-lazy',
|
72
|
+
'Enumerator Extensions' => 'enum-ext',
|
81
73
|
'eval' => 'eval',
|
82
74
|
'exit' => 'exit',
|
83
75
|
'Fiber' => 'fiber',
|
84
|
-
'Hash
|
76
|
+
'Hash Extensions' => 'hash-ext',
|
77
|
+
'Kernel Extensions' => 'kernel-ext',
|
85
78
|
'Math' => 'math',
|
86
|
-
'Numeric
|
87
|
-
'Object
|
79
|
+
'Numeric Extensions' => 'numeric-ext',
|
80
|
+
'Object Extensions' => 'object-ext',
|
88
81
|
'ObjectSpace' => 'objectspace',
|
89
82
|
'print' => 'print',
|
90
|
-
'Proc
|
83
|
+
'Proc Extensions' => 'proc-ext',
|
91
84
|
'random' => 'random',
|
92
|
-
'Range
|
85
|
+
'Range Extensions' => 'range-ext',
|
93
86
|
'sprintf' => 'sprintf',
|
94
|
-
'String
|
95
|
-
'String UTF8' => 'string-utf8',
|
87
|
+
'String Extensions' => 'string-ext',
|
96
88
|
'Struct' => 'struct',
|
97
|
-
'Symbol
|
89
|
+
'Symbol Extensions' => 'symbol-ext',
|
98
90
|
'Time' => 'time',
|
99
|
-
'Toplevel
|
91
|
+
'Toplevel Extensions' => 'toplevel-ext'
|
92
|
+
}
|
93
|
+
|
94
|
+
COMPILE_OPTIONS = {
|
95
|
+
'bin-debugger' => [
|
96
|
+
'conf.cc.defines = %w(MRB_ENABLE_DEBUG_HOOK)'
|
97
|
+
],
|
98
|
+
'test' => [
|
99
|
+
'conf.enable_bintest',
|
100
|
+
'conf.enable_test'
|
101
|
+
],
|
102
|
+
'debug' => [
|
103
|
+
'enable_debug'
|
104
|
+
]
|
100
105
|
}
|
101
106
|
|
107
|
+
DEFAULT_NO = ['bin-debugger', 'bin-mruby-config']
|
108
|
+
|
102
109
|
def get_default_gems
|
103
110
|
puts
|
104
111
|
gems = []
|
105
112
|
CORE_GEMS.each do |gem, path|
|
106
|
-
|
113
|
+
y_n = 'Y/n'
|
114
|
+
y_n = 'y/N' if DEFAULT_NO.include? path
|
115
|
+
print "Include '#{gem}' GEM? (#{y_n}): "
|
107
116
|
question = STDIN.gets.chomp
|
108
|
-
|
109
|
-
|
117
|
+
|
118
|
+
if DEFAULT_NO.include? path
|
119
|
+
if question == 'y'
|
120
|
+
gems << path
|
121
|
+
end
|
122
|
+
else
|
123
|
+
unless question == 'n'
|
124
|
+
gems << path
|
125
|
+
end
|
110
126
|
end
|
111
127
|
end
|
112
128
|
gems
|
113
129
|
end
|
114
130
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
131
|
+
case main_cmd
|
132
|
+
when r.('info'), r.('detail')
|
133
|
+
puts "Detail information of '#{arg1}':"
|
134
|
+
gems.search(arg1, :name).each {|gem| detail_info_proc.call(gem) }
|
135
|
+
when r.('size')
|
119
136
|
puts "Total # of GEMs: #{gems.size}"
|
120
|
-
|
121
|
-
if
|
137
|
+
when r.('list')
|
138
|
+
if arg1 =~ r.('active')
|
122
139
|
list_active_gems(gems)
|
123
140
|
else
|
124
141
|
puts "List of all GEMs:"
|
125
142
|
gems.each { |gem| info_proc.call(gem) }
|
126
143
|
end
|
127
|
-
|
128
|
-
gems.activate(
|
144
|
+
when r.('add')
|
145
|
+
gems.activate(arg1)
|
129
146
|
puts
|
130
147
|
list_active_gems(gems)
|
131
|
-
|
132
|
-
gems.deactivate(
|
148
|
+
when r.('rm')
|
149
|
+
gems.deactivate(arg1)
|
133
150
|
puts
|
134
151
|
list_active_gems(gems)
|
135
|
-
|
136
|
-
puts "Search result for '#{
|
137
|
-
gems.search(
|
138
|
-
|
152
|
+
when r.('find'), 'search'
|
153
|
+
puts "Search result for '#{arg1}':"
|
154
|
+
gems.search(arg1).each {|gem| info_proc.call(gem) }
|
155
|
+
when r.('update')
|
139
156
|
puts 'Update list of GEMs...'
|
140
157
|
amount = gems.size
|
141
158
|
gems.update!
|
@@ -148,33 +165,54 @@ elsif ARGV[0] == 'update'
|
|
148
165
|
else
|
149
166
|
puts "No new GEM"
|
150
167
|
end
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
168
|
+
when r.('config')
|
169
|
+
test_env = ' # Deactivated!'
|
170
|
+
debug_flags = ' # Deactivated!'
|
171
|
+
toolchain = 'gcc'
|
172
|
+
if arg1 =~ r.('default')
|
155
173
|
default_gems = CORE_GEMS.each_value.to_a
|
174
|
+
default_gem_command = " conf.gembox 'default'"
|
156
175
|
else
|
157
176
|
toolchain = get_toolchain
|
158
|
-
binaries = get_binaries
|
159
|
-
default_gems = get_default_gems
|
160
|
-
end
|
161
177
|
|
162
|
-
|
163
|
-
"
|
164
|
-
|
165
|
-
|
166
|
-
|
178
|
+
puts
|
179
|
+
print "Build testing environment [mrbtest]? (y/N): "
|
180
|
+
question = STDIN.gets.chomp
|
181
|
+
if question =~ r.('yes')
|
182
|
+
test_env = "#{COMPILE_OPTIONS['test'].map {|o| " #{o}"}.join("\n")}\n"
|
183
|
+
end
|
184
|
+
|
185
|
+
puts
|
186
|
+
print "Enable debug flags? (y/N): "
|
187
|
+
question = STDIN.gets.chomp
|
188
|
+
if question =~ r.('yes')
|
189
|
+
debug_flags = "#{COMPILE_OPTIONS['debug'].map {|o| " #{o}"}.join("\n")}\n"
|
190
|
+
end
|
191
|
+
|
192
|
+
default_gem_command = get_default_gems.map do |g|
|
193
|
+
opt = ''
|
194
|
+
if COMPILE_OPTIONS.include? g
|
195
|
+
opt = "#{COMPILE_OPTIONS[g].map {|o| " #{o}"}.join("\n")}\n"
|
196
|
+
end
|
197
|
+
"#{opt} conf.gem :core => 'mruby-#{g}'"
|
198
|
+
end.join("\n")
|
199
|
+
if default_gem_command == ''
|
200
|
+
default_gem_command = ' # No GEMs activated!'
|
201
|
+
end
|
167
202
|
end
|
168
203
|
|
204
|
+
write_file = nil
|
205
|
+
[arg1, arg2].each {|x| write_file ||= x =~ r.('write')}
|
206
|
+
|
169
207
|
gem_command = gems.active.map do |g|
|
170
208
|
options = ", :options => \'#{g.repooptions}\'" unless g.repooptions.nil?
|
171
209
|
" conf.gem :git => \'#{g.repository}\'#{options}"
|
172
210
|
end.join("\n")
|
173
211
|
if gem_command == ''
|
174
|
-
gem_command = ' # No GEMs activated'
|
212
|
+
gem_command = ' # No GEMs activated!'
|
175
213
|
end
|
176
214
|
|
177
|
-
|
215
|
+
build_config = <<__CONFIG__
|
178
216
|
|
179
217
|
############################
|
180
218
|
# Start of your build_config
|
@@ -182,32 +220,43 @@ elsif ARGV[0] == 'config'
|
|
182
220
|
MRuby::Build.new do |conf|
|
183
221
|
toolchain :#{toolchain}
|
184
222
|
|
185
|
-
conf.bins = %w(#{binaries})
|
186
|
-
|
187
223
|
# mruby's Core GEMs
|
188
224
|
#{default_gem_command}
|
189
225
|
|
190
226
|
# user-defined GEMs
|
191
227
|
#{gem_command}
|
228
|
+
|
229
|
+
# Testing environment
|
230
|
+
#{test_env}
|
231
|
+
|
232
|
+
# Debug Flags
|
233
|
+
#{debug_flags}
|
192
234
|
end
|
193
235
|
|
194
236
|
# End of your build_config
|
195
237
|
############################
|
196
238
|
__CONFIG__
|
239
|
+
|
240
|
+
if write_file
|
241
|
+
open('./build_config.rb', 'w') {|f| f.puts build_config}
|
242
|
+
else
|
243
|
+
puts build_config
|
244
|
+
end
|
197
245
|
else
|
198
246
|
puts <<INFO
|
199
247
|
mgem (Version #{Mrbgem::MGEM_VERSION}) is a library manager for mruby
|
200
248
|
|
201
249
|
Usage:
|
202
|
-
mgem size
|
203
|
-
mgem list
|
204
|
-
mgem info *pattern*
|
205
|
-
mgem add *name*
|
206
|
-
mgem rm *name*
|
207
|
-
mgem
|
208
|
-
mgem config
|
209
|
-
|
210
|
-
|
250
|
+
mgem size How many GEMs are available?
|
251
|
+
mgem list active List GEMs
|
252
|
+
mgem info *pattern* Show detail information about a GEM
|
253
|
+
mgem add *name* Activate a GEM
|
254
|
+
mgem rm *name* De-Activate a GEM
|
255
|
+
mgem find *pattern* Search for GEMs
|
256
|
+
mgem config Generate a mruby build config including all active GEMs
|
257
|
+
default Same as 'mgem config' but w/o interactive questions
|
258
|
+
write Same as 'mgem config' but writes to build_config.rb
|
259
|
+
mgem update Update the list of GEMs
|
211
260
|
|
212
261
|
Website:
|
213
262
|
https://github.com/bovi/mgem
|
data/lib/mgem.rb
CHANGED
@@ -3,7 +3,7 @@ require 'fileutils'
|
|
3
3
|
require "stringio"
|
4
4
|
|
5
5
|
module Mrbgem
|
6
|
-
MGEM_VERSION = '0.
|
6
|
+
MGEM_VERSION = '0.3.0'
|
7
7
|
|
8
8
|
MGEM_HOME = ENV['MGEM_HOME'] ||= ENV['HOME']
|
9
9
|
MGEM_DIR = '.mgem'
|
@@ -11,6 +11,16 @@ module Mrbgem
|
|
11
11
|
GEMS_LIST = 'mgem-list'
|
12
12
|
GEMS_REPO = 'https://github.com/mruby/mgem-list.git'
|
13
13
|
|
14
|
+
TOOLCHAINS = {
|
15
|
+
'gcc' => {:desc => 'GNU Compiler Collection', :id => 'gcc'},
|
16
|
+
'clang' => {:desc => 'LLVM C Compiler', :id => 'clang'},
|
17
|
+
'vc' => {:desc => 'Visual C++', :id => 'visualcpp'},
|
18
|
+
'wrt' => {:desc => 'OpenWRT Build environment', :id => 'openwrt'},
|
19
|
+
'ndk' => {:desc => 'Android NDK', :id => 'android'}
|
20
|
+
}
|
21
|
+
|
22
|
+
include Enumerable
|
23
|
+
|
14
24
|
def load_gems
|
15
25
|
config = {}
|
16
26
|
config[:mgem_dir] = [ENV["MGEM_HOME"], MGEM_DIR].join File::SEPARATOR
|
@@ -25,7 +35,8 @@ module Mrbgem
|
|
25
35
|
def initialize_mgem_list(config = {})
|
26
36
|
unless File.exists? config[:mgem_list]
|
27
37
|
puts "Loading fresh GEM list..."
|
28
|
-
|
38
|
+
cmd = %Q(git clone "#{GEMS_REPO}" "#{config[:mgem_list]}")
|
39
|
+
`#{cmd}`
|
29
40
|
puts "done!"
|
30
41
|
end
|
31
42
|
|
@@ -65,6 +76,7 @@ class MrbgemData
|
|
65
76
|
def protocol; @gem_data["protocol"]; end
|
66
77
|
def repository; @gem_data["repository"]; end
|
67
78
|
def repooptions; @gem_data["repooptions"]; end
|
79
|
+
def dependencies; @gem_data['dependencies']; end
|
68
80
|
|
69
81
|
def method_missing(method_name)
|
70
82
|
err = "Mrbgem Field \"#{method_name}\" doesn't exist!"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mgem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Bovensiepen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: mgem helps you search and find GEMs specifically written for mruby. It
|
14
14
|
also supports by creating a mruby build configuration.
|
@@ -40,8 +40,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
40
40
|
version: '0'
|
41
41
|
requirements: []
|
42
42
|
rubyforge_project:
|
43
|
-
rubygems_version: 2.0.
|
43
|
+
rubygems_version: 2.0.14
|
44
44
|
signing_key:
|
45
45
|
specification_version: 4
|
46
46
|
summary: A program to manage GEMs for mruby.
|
47
47
|
test_files: []
|
48
|
+
has_rdoc:
|