bake-toolkit 1.0.11 → 1.0.12
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/bakery +20 -89
- data/lib/bake/cache.rb +13 -0
- data/lib/bake/options.rb +11 -2
- data/lib/bake/version.rb +2 -2
- data/lib/bakery/buildPattern.rb +24 -0
- data/lib/bakery/model/metamodel.rb +4 -0
- data/lib/bakery/options.rb +17 -4
- data/lib/bakery/toBake.rb +78 -0
- data/lib/option/parser.rb +2 -3
- data/lib/tocxx.rb +10 -4
- metadata +5 -3
data/bin/bakery
CHANGED
@@ -18,32 +18,14 @@ require 'cxxproject/utils/printer'
|
|
18
18
|
require 'tocxx'
|
19
19
|
require "bakery/loader"
|
20
20
|
require "bakery/options"
|
21
|
+
require "bakery/toBake"
|
22
|
+
require "bakery/buildPattern"
|
21
23
|
require 'cxxproject/ext/stdout'
|
22
24
|
require 'cxxproject/utils/cleanup'
|
23
25
|
|
24
26
|
module Cxxproject
|
25
27
|
|
26
|
-
|
27
|
-
attr_reader :proj, :conf, :coll_p
|
28
|
-
def initialize(proj, conf, coll_p)
|
29
|
-
@proj = proj
|
30
|
-
@conf = conf
|
31
|
-
@coll_p = coll_p
|
32
|
-
end
|
33
|
-
def getId
|
34
|
-
proj + "*******" + conf
|
35
|
-
end
|
36
|
-
def hash
|
37
|
-
getId.hash
|
38
|
-
end
|
39
|
-
def eql?(comparee)
|
40
|
-
self == comparee
|
41
|
-
end
|
42
|
-
def ==(comparee)
|
43
|
-
self.getId == comparee.getId
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
28
|
+
|
47
29
|
@options = BakeryOptions.new(ARGV)
|
48
30
|
@options.parse_options
|
49
31
|
|
@@ -56,7 +38,7 @@ module Cxxproject
|
|
56
38
|
end
|
57
39
|
|
58
40
|
|
59
|
-
if @options.collection_name.
|
41
|
+
if @options.collection_name.empty?
|
60
42
|
puts "Please specify a collection name (with -b). Possible values are:"
|
61
43
|
env.find(:class => BakeryModel::Collection).each { |e|
|
62
44
|
puts "* " + e.name
|
@@ -64,76 +46,25 @@ module Cxxproject
|
|
64
46
|
ExitHelper.exit(0)
|
65
47
|
end
|
66
48
|
|
67
|
-
cols = env.find(:class => BakeryModel::Collection, :name => @options.collection_name)
|
68
|
-
if (cols.length == 0)
|
69
|
-
Printer.printError "Collection #{@options.collection_name} not found in #{@options.collection_dir+"/Collection.meta"}"
|
70
|
-
ExitHelper.exit(1)
|
71
|
-
elsif (cols.length > 1)
|
72
|
-
Printer.printError "Collection #{@options.collection_name} found more than once in #{@options.collection_dir+"/Collection.meta"}"
|
73
|
-
ExitHelper.exit(1)
|
74
|
-
end
|
75
49
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
Printer.printError "Error in #{@options.collection_dir+"/Collection.meta"} (line #{p.line_number}): Config name empty"
|
85
|
-
ExitHelper.exit(1)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
toBuildPattern = []
|
90
|
-
@options.roots.each do |r|
|
91
|
-
col.project.each do |p|
|
92
|
-
projs = Dir.glob(r+"/"+p.name+"/Project.meta")
|
93
|
-
if projs.length == 0
|
94
|
-
toBuildPattern << BuildPattern.new(nil, nil, p) # remember it for sorted info printout
|
50
|
+
def self.getCollections(env, name)
|
51
|
+
cols = env.find(:class => BakeryModel::Collection, :name => name)
|
52
|
+
@toBuild |= getBuildPattern(cols, name)
|
53
|
+
@colsAll |= cols
|
54
|
+
cols[0].collections.each do |cRef|
|
55
|
+
alreadyProcessed = false
|
56
|
+
@colsAll.each do |ca|
|
57
|
+
alreadyProcessed = true if ca.name == cRef.name
|
95
58
|
end
|
96
|
-
|
97
|
-
toBuildPattern << BuildPattern.new(f, "^"+p.config.gsub("*","(\\w*)")+"$", p)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
toBuild = []
|
103
|
-
toBuildPattern.each do |bp|
|
104
|
-
next unless bp.proj
|
105
|
-
contents = File.open(bp.proj, "r") {|io| io.read }
|
106
|
-
contents.split("\n").each do |c|
|
107
|
-
res = c.match("\\s*(Library|Executable|Custom){1}Config\\s*(\\w*)")
|
108
|
-
if res
|
109
|
-
if res[2].match(bp.conf) != nil
|
110
|
-
toBuild << BuildPattern.new(bp.proj, res[2], nil)
|
111
|
-
bp.coll_p.found
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
toBuildPattern.each do |bp|
|
118
|
-
Printer.printInfo "Info in #{@options.collection_dir+"/Collection.meta"} (line #{bp.coll_p.line_number}): No match for project #{bp.coll_p.name} with config #{bp.coll_p.config}" unless bp.coll_p.isFound
|
119
|
-
end
|
120
|
-
|
121
|
-
col.exclude.each do |p|
|
122
|
-
p.name = "/"+p.name.gsub("*","(\\w*)")+"/Project.meta"
|
123
|
-
p.config = "^"+p.config.gsub("*","(\\w*)")+"$"
|
124
|
-
end
|
125
|
-
|
126
|
-
toBuild.delete_if do |bp|
|
127
|
-
exclude = false
|
128
|
-
col.exclude.each do |p|
|
129
|
-
exclude = true if (bp.proj.match(p.name) != nil and bp.conf.match(p.config) != nil)
|
59
|
+
getCollections(env, cRef.name) unless alreadyProcessed
|
130
60
|
end
|
131
|
-
|
132
|
-
end
|
61
|
+
end
|
133
62
|
|
134
|
-
toBuild
|
63
|
+
@toBuild = []
|
64
|
+
@colsAll = []
|
65
|
+
getCollections(env, @options.collection_name)
|
135
66
|
|
136
|
-
maxRuns = toBuild.length
|
67
|
+
maxRuns = @toBuild.length
|
137
68
|
currentRun = 0
|
138
69
|
failedRuns = 0
|
139
70
|
|
@@ -144,7 +75,7 @@ module Cxxproject
|
|
144
75
|
excludeParam = true
|
145
76
|
next
|
146
77
|
end
|
147
|
-
if excludeParam
|
78
|
+
if excludeParam or x == @options.collection_name
|
148
79
|
excludeParam = false
|
149
80
|
next
|
150
81
|
end
|
@@ -161,7 +92,7 @@ module Cxxproject
|
|
161
92
|
|
162
93
|
exitValue = 0
|
163
94
|
abort = false
|
164
|
-
toBuild.each do |bp|
|
95
|
+
@toBuild.each do |bp|
|
165
96
|
currentRun += 1
|
166
97
|
p = File.dirname(bp.proj)
|
167
98
|
cmd = (["-m #{p} -b #{bp.conf}"] + passedParams).join(" ")
|
data/lib/bake/cache.rb
CHANGED
@@ -25,6 +25,9 @@ module Cxxproject
|
|
25
25
|
|
26
26
|
def initialize(pm_filename, config_name, options)
|
27
27
|
@cacheFilename = File.dirname(pm_filename)+"/.bake/"+File.basename(pm_filename)+"."+sanitize_filename(config_name)+".cache"
|
28
|
+
|
29
|
+
CLOBBER.include(File.dirname(pm_filename)+"/.bake")
|
30
|
+
|
28
31
|
FileUtils.mkdir_p(File.dirname(@cacheFilename))
|
29
32
|
@options = options
|
30
33
|
@defaultToolchain = nil
|
@@ -128,6 +131,11 @@ module Cxxproject
|
|
128
131
|
|
129
132
|
if cache != nil
|
130
133
|
Printer.printInfo "Info: cache is up-to-date, loading cached meta information" if @options.verbose
|
134
|
+
|
135
|
+
cache.files.each do |c|
|
136
|
+
CLOBBER.include(File.dirname(c)+"/.bake")
|
137
|
+
end
|
138
|
+
|
131
139
|
return cache.project2config
|
132
140
|
end
|
133
141
|
return nil
|
@@ -152,6 +160,11 @@ module Cxxproject
|
|
152
160
|
rescue
|
153
161
|
end
|
154
162
|
File.open(@cacheFilename, 'wb') {|file| file.write(bbdump) }
|
163
|
+
|
164
|
+
project_files.each do |f|
|
165
|
+
CLOBBER.include(File.dirname(f)+"/.bake")
|
166
|
+
end
|
167
|
+
|
155
168
|
end
|
156
169
|
|
157
170
|
end
|
data/lib/bake/options.rb
CHANGED
@@ -8,7 +8,7 @@ module Cxxproject
|
|
8
8
|
class Options < Parser
|
9
9
|
attr_reader :build_config, :main_dir, :project, :filename, :eclipse_version, :alias_filename # String
|
10
10
|
attr_reader :roots, :include_filter, :exclude_filter # String List
|
11
|
-
attr_reader :clean, :rebuild, :single, :verbose, :nocache, :color, :show_includes, :linkOnly, :check_uninc, :printLess, :no_autodir # Boolean
|
11
|
+
attr_reader :clean, :rebuild, :single, :verbose, :nocache, :color, :show_includes, :linkOnly, :check_uninc, :printLess, :no_autodir, :clobber # Boolean
|
12
12
|
attr_reader :threads, :socket # Fixnum
|
13
13
|
|
14
14
|
def initialize(argv)
|
@@ -20,6 +20,7 @@ module Cxxproject
|
|
20
20
|
@filename = nil
|
21
21
|
@single = false
|
22
22
|
@clean = false
|
23
|
+
@clobber = false
|
23
24
|
@rebuild = false
|
24
25
|
@verbose = false
|
25
26
|
@nocache = false
|
@@ -57,6 +58,7 @@ module Cxxproject
|
|
57
58
|
add_option(Option.new("-v1",false) { set_v(1) })
|
58
59
|
add_option(Option.new("-v2",false) { set_v(2) })
|
59
60
|
|
61
|
+
add_option(Option.new("--clobber",false) { set_clobber })
|
60
62
|
add_option(Option.new("--ignore_cache",false) { set_nocache })
|
61
63
|
add_option(Option.new("--threads",true) { |x| set_threads(x) })
|
62
64
|
add_option(Option.new("--socket",true) { |x| set_socket(x) })
|
@@ -89,9 +91,9 @@ module Cxxproject
|
|
89
91
|
puts " -w <root> Add a workspace root (can be used multiple times)."
|
90
92
|
puts " If no root is specified, the parent directory of the main project is added automatically."
|
91
93
|
puts " --rebuild Clean before build."
|
94
|
+
puts " --clobber Clean the file/project (same as option -c) AND the bake cache files."
|
92
95
|
puts " --prepro Stop after preprocessor."
|
93
96
|
puts " --link_only Only link executable - doesn't update objects and archives or start PreSteps and PostSteps"
|
94
|
-
puts " --print_less Some progression logs will be suppressed"
|
95
97
|
puts " --ignore_cache Rereads the original meta files - usefull if workspace structure has been changed."
|
96
98
|
puts " --check_uninc Checks for unnecessary includes (only done for successful project builds)."
|
97
99
|
puts " --threads <num> Set NUMBER of parallel compiled files (default is 8)."
|
@@ -183,6 +185,10 @@ module Cxxproject
|
|
183
185
|
def set_clean()
|
184
186
|
@clean = true
|
185
187
|
end
|
188
|
+
def set_clobber()
|
189
|
+
@clobber = true
|
190
|
+
set_clean
|
191
|
+
end
|
186
192
|
def set_rebuild()
|
187
193
|
@clean = true
|
188
194
|
@rebuild = true
|
@@ -209,10 +215,13 @@ module Cxxproject
|
|
209
215
|
if num == 0
|
210
216
|
@printLess = true
|
211
217
|
@verbose = false
|
218
|
+
Rake::application.options.silent = true
|
212
219
|
elsif num == 1
|
220
|
+
Rake::application.options.silent = false
|
213
221
|
@printLess = false
|
214
222
|
@verbose = false
|
215
223
|
elsif num == 2
|
224
|
+
Rake::application.options.silent = false
|
216
225
|
@printLess = false
|
217
226
|
@verbose = true
|
218
227
|
end
|
data/lib/bake/version.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Cxxproject
|
2
|
+
|
3
|
+
class BuildPattern
|
4
|
+
attr_reader :proj, :conf, :coll_p
|
5
|
+
def initialize(proj, conf, coll_p)
|
6
|
+
@proj = proj
|
7
|
+
@conf = conf
|
8
|
+
@coll_p = coll_p
|
9
|
+
end
|
10
|
+
def getId
|
11
|
+
proj + "*******" + conf
|
12
|
+
end
|
13
|
+
def hash
|
14
|
+
getId.hash
|
15
|
+
end
|
16
|
+
def eql?(comparee)
|
17
|
+
self == comparee
|
18
|
+
end
|
19
|
+
def ==(comparee)
|
20
|
+
self.getId == comparee.getId
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -24,10 +24,14 @@ module Cxxproject
|
|
24
24
|
has_attr 'name', String, :defaultValueLiteral => ""
|
25
25
|
has_attr 'config', String, :defaultValueLiteral => ""
|
26
26
|
end
|
27
|
+
class SubCollection < ModelElement
|
28
|
+
has_attr 'name', String, :defaultValueLiteral => ""
|
29
|
+
end
|
27
30
|
class Collection < ModelElement
|
28
31
|
has_attr 'name', String, :defaultValueLiteral => ""
|
29
32
|
contains_many 'project', Project, 'collection'
|
30
33
|
contains_many 'exclude', Exclude, 'collection'
|
34
|
+
contains_many 'collections', SubCollection, 'collection'
|
31
35
|
end
|
32
36
|
|
33
37
|
module Project::ClassModule
|
data/lib/bakery/options.rb
CHANGED
@@ -13,7 +13,7 @@ module Cxxproject
|
|
13
13
|
def initialize(argv)
|
14
14
|
super(argv)
|
15
15
|
|
16
|
-
@collection_name =
|
16
|
+
@collection_name = ""
|
17
17
|
@collection_dir = nil
|
18
18
|
@color = nil
|
19
19
|
@error = false
|
@@ -21,7 +21,9 @@ module Cxxproject
|
|
21
21
|
@socket = 0
|
22
22
|
@def_root = nil
|
23
23
|
|
24
|
-
|
24
|
+
add_default(Proc.new{ |x| set_collection_name_default(x) })
|
25
|
+
|
26
|
+
add_option(Option.new("-b",true) { |x| set_collection_name(x) })
|
25
27
|
add_option(Option.new("-m",true) { |x| set_collection_dir(x) })
|
26
28
|
add_option(Option.new("-r",false) { set_error })
|
27
29
|
add_option(Option.new("-a",true) { |x| set_color(x) })
|
@@ -31,8 +33,8 @@ module Cxxproject
|
|
31
33
|
end
|
32
34
|
|
33
35
|
def usage
|
34
|
-
puts "\nUsage: bake [options]"
|
35
|
-
puts " -b <name>
|
36
|
+
puts "\nUsage: bake <name> [options]"
|
37
|
+
puts " [-b] <name> Name of the collection to build."
|
36
38
|
puts " -m <dir> Directory containing the collection file (default is current directory)."
|
37
39
|
puts " -r Stop on first error."
|
38
40
|
puts " -a <scheme> Use ansi color sequences (console must support it). Possible values are 'white' and 'black'."
|
@@ -60,7 +62,18 @@ module Cxxproject
|
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
65
|
+
def set_collection_name_default(collection_name)
|
66
|
+
index = collection_name.index('-')
|
67
|
+
return false if (index != nil and index == 0)
|
68
|
+
set_collection_name(collection_name)
|
69
|
+
return true
|
70
|
+
end
|
71
|
+
|
63
72
|
def set_collection_name(collection_name)
|
73
|
+
if not @collection_name.empty?
|
74
|
+
Printer.printError "Error: Cannot set collection name '#{collection_name}', because collection name is already set to '#{@collection_name}'"
|
75
|
+
ExitHelper.exit(1)
|
76
|
+
end
|
64
77
|
@collection_name = collection_name
|
65
78
|
end
|
66
79
|
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require "bakery/buildPattern"
|
2
|
+
|
3
|
+
module Cxxproject
|
4
|
+
|
5
|
+
def self.getBuildPattern(cols, name)
|
6
|
+
|
7
|
+
if (cols.length == 0)
|
8
|
+
Printer.printError "Collection #{name} not found in #{@options.collection_dir+"/Collection.meta"}"
|
9
|
+
ExitHelper.exit(1)
|
10
|
+
elsif (cols.length > 1)
|
11
|
+
Printer.printError "Collection #{name} found more than once in #{@options.collection_dir+"/Collection.meta"}"
|
12
|
+
ExitHelper.exit(1)
|
13
|
+
end
|
14
|
+
|
15
|
+
col = cols[0]
|
16
|
+
|
17
|
+
col.project.each do |p|
|
18
|
+
if p.name == ""
|
19
|
+
Printer.printError "Error in #{@options.collection_dir+"/Collection.meta"} (line #{p.line_number}): Project name empty"
|
20
|
+
ExitHelper.exit(1)
|
21
|
+
end
|
22
|
+
if p.config == ""
|
23
|
+
Printer.printError "Error in #{@options.collection_dir+"/Collection.meta"} (line #{p.line_number}): Config name empty"
|
24
|
+
ExitHelper.exit(1)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
toBuildPattern = []
|
29
|
+
@options.roots.each do |r|
|
30
|
+
col.project.each do |p|
|
31
|
+
projs = Dir.glob(r+"/"+p.name+"/Project.meta")
|
32
|
+
if projs.length == 0
|
33
|
+
toBuildPattern << BuildPattern.new(nil, nil, p) # remember it for sorted info printout
|
34
|
+
end
|
35
|
+
projs.each do |f|
|
36
|
+
toBuildPattern << BuildPattern.new(f, "^"+p.config.gsub("*","(\\w*)")+"$", p)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
toBuild = []
|
42
|
+
toBuildPattern.each do |bp|
|
43
|
+
next unless bp.proj
|
44
|
+
contents = File.open(bp.proj, "r") {|io| io.read }
|
45
|
+
contents.split("\n").each do |c|
|
46
|
+
res = c.match("\\s*(Library|Executable|Custom){1}Config\\s*(\\w*)")
|
47
|
+
if res
|
48
|
+
if res[2].match(bp.conf) != nil
|
49
|
+
toBuild << BuildPattern.new(bp.proj, res[2], nil)
|
50
|
+
bp.coll_p.found
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
toBuildPattern.each do |bp|
|
57
|
+
Printer.printInfo "Info in #{@options.collection_dir+"/Collection.meta"} (line #{bp.coll_p.line_number}): No match for project #{bp.coll_p.name} with config #{bp.coll_p.config}" unless bp.coll_p.isFound
|
58
|
+
end
|
59
|
+
|
60
|
+
col.exclude.each do |p|
|
61
|
+
p.name = "/"+p.name.gsub("*","(\\w*)")+"/Project.meta"
|
62
|
+
p.config = "^"+p.config.gsub("*","(\\w*)")+"$"
|
63
|
+
end
|
64
|
+
|
65
|
+
toBuild.delete_if do |bp|
|
66
|
+
exclude = false
|
67
|
+
col.exclude.each do |p|
|
68
|
+
exclude = true if (bp.proj.match(p.name) != nil and bp.conf.match(p.config) != nil)
|
69
|
+
end
|
70
|
+
exclude
|
71
|
+
end
|
72
|
+
|
73
|
+
toBuild.uniq!
|
74
|
+
|
75
|
+
return toBuild
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
data/lib/option/parser.rb
CHANGED
@@ -38,11 +38,10 @@ class Parser
|
|
38
38
|
while pos < @argv.length do
|
39
39
|
if not @options.include?@argv[pos]
|
40
40
|
if @default
|
41
|
-
|
41
|
+
res = @default.call(@argv[pos])
|
42
|
+
if (not res and not ignoreInvalid)
|
42
43
|
raise "Option #{@argv[pos]} unknown"
|
43
44
|
end
|
44
|
-
elsif not ignoreInvalid
|
45
|
-
raise "Option #{@argv[pos]} unknown"
|
46
45
|
end
|
47
46
|
else
|
48
47
|
option = @options[@argv[pos]]
|
data/lib/tocxx.rb
CHANGED
@@ -812,18 +812,24 @@ module Cxxproject
|
|
812
812
|
FileUtils.rm @parseBB.get_dep_file(object), :force => true
|
813
813
|
end
|
814
814
|
else
|
815
|
-
|
815
|
+
if @options.clobber
|
816
|
+
cleanTask = Rake.application[:clobber]
|
817
|
+
cleanType = "Clobber"
|
818
|
+
else
|
819
|
+
cleanTask = Rake.application[:clean]
|
820
|
+
cleanType = "Clean"
|
821
|
+
end
|
816
822
|
cleanTask.invoke
|
817
823
|
end
|
818
824
|
|
819
825
|
if Rake.application.idei and Rake.application.idei.get_abort
|
820
|
-
Printer.printError "
|
826
|
+
Printer.printError "\#{cleanType} aborted."
|
821
827
|
return false
|
822
828
|
elsif cleanTask != nil and cleanTask.failure
|
823
|
-
Printer.printError "\
|
829
|
+
Printer.printError "\n#{cleanType} failed."
|
824
830
|
return false
|
825
831
|
elsif not @options.rebuild
|
826
|
-
Printer.printSuccess "\
|
832
|
+
Printer.printSuccess "\n#{cleanType} done."
|
827
833
|
return true
|
828
834
|
end
|
829
835
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: bake-toolkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0.
|
5
|
+
version: 1.0.12
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Alexander Schaal
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2013-04-
|
13
|
+
date: 2013-04-17 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: cxxproject
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - "="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 0.5.
|
23
|
+
version: 0.5.64
|
24
24
|
type: :runtime
|
25
25
|
version_requirements: *id001
|
26
26
|
- !ruby/object:Gem::Dependency
|
@@ -68,10 +68,12 @@ files:
|
|
68
68
|
- lib/bake/subst.rb
|
69
69
|
- lib/bake/util.rb
|
70
70
|
- lib/bake/version.rb
|
71
|
+
- lib/bakery/buildPattern.rb
|
71
72
|
- lib/bakery/loader.rb
|
72
73
|
- lib/bakery/model/language.rb
|
73
74
|
- lib/bakery/model/metamodel.rb
|
74
75
|
- lib/bakery/options.rb
|
76
|
+
- lib/bakery/toBake.rb
|
75
77
|
- lib/option/parser.rb
|
76
78
|
- lib/tocxx.rb
|
77
79
|
- lib/vs/options.rb
|