rscons 1.4.2 → 1.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +5 -0
- data/lib/rscons/builders/cfile.rb +1 -1
- data/lib/rscons/builders/disassemble.rb +1 -1
- data/lib/rscons/builders/library.rb +2 -2
- data/lib/rscons/builders/object.rb +2 -2
- data/lib/rscons/builders/preprocess.rb +4 -4
- data/lib/rscons/builders/program.rb +10 -9
- data/lib/rscons/environment.rb +15 -15
- data/lib/rscons/varset.rb +1 -1
- data/lib/rscons/version.rb +1 -1
- data/spec/rscons/builders/cfile_spec.rb +5 -0
- data/spec/rscons/builders/disassemble_spec.rb +17 -0
- data/spec/rscons/builders/library_spec.rb +18 -0
- data/spec/rscons/builders/object_spec.rb +23 -0
- data/spec/rscons/builders/preprocess_spec.rb +18 -0
- data/spec/rscons/builders/program_spec.rb +18 -0
- data/spec/rscons/environment_spec.rb +1 -0
- data/spec/rscons/varset_spec.rb +7 -3
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NTNkMDYxN2I0NGJlMTJlOTQxYjYwMzA3MDI4ZGYxZTdjNzM3NjM4OA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MTY0ZTBlY2QxMTQwNDE5ZTQ2OWJhYmEwZDZlZjAyYTYzZDliY2Q3MQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MjU3M2FlNzE3M2YyZmFmMjJlMThmYWQzNjVjM2M0MGU1MjM0ZTc0ZTU0YjZh
|
10
|
+
NjM1ODM2ZDBhYjhmYzdkZTM0MTNiMDNiNzU2Mzc2ODdiOWJiM2Q3NjZiNzBl
|
11
|
+
YzE4YmQ5ODdmM2RlNTg4YjNmOGJlMTc1YWQ5M2EyNTUxY2I4OGM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MTI1MTgxZmQ5M2I3YTMxYzVmZTM5ZWUzNDRjMmFjMGZkNzZmMGRmMDlmMzA3
|
14
|
+
ODJlZGQ0YzNlNzIxOGUxNTdlNGY2NmQ0MzVlMmRkZmU5Y2U3MDE0NjQ0Mjg0
|
15
|
+
NzY3ZjA4ZjdmN2QzZWY4N2ZmY2RjYTQ2YWYwNzkzMzcxM2I2MzU=
|
data/README.md
CHANGED
@@ -329,6 +329,11 @@ http://rubydoc.info/github/holtrop/rscons/frames.
|
|
329
329
|
|
330
330
|
## Release Notes
|
331
331
|
|
332
|
+
### v1.4.3
|
333
|
+
|
334
|
+
- fix builders properly using construction variable overrides
|
335
|
+
- expand nil construction variables to empty strings
|
336
|
+
|
332
337
|
### v1.4.2
|
333
338
|
|
334
339
|
- add Environment#expand_path
|
@@ -32,7 +32,7 @@ module Rscons
|
|
32
32
|
else
|
33
33
|
raise "Unknown source file #{sources.first.inspect} for CFile builder"
|
34
34
|
end
|
35
|
-
command = env.build_command(
|
35
|
+
command = env.build_command("${#{cmd}_CMD}", vars)
|
36
36
|
standard_build("#{cmd} #{target}", target, command, sources, env, cache)
|
37
37
|
end
|
38
38
|
end
|
@@ -12,7 +12,7 @@ module Rscons
|
|
12
12
|
|
13
13
|
def run(target, sources, cache, env, vars)
|
14
14
|
vars = vars.merge("_SOURCES" => sources)
|
15
|
-
command = env.build_command(
|
15
|
+
command = env.build_command("${DISASM_CMD}", vars)
|
16
16
|
unless cache.up_to_date?(target, command, sources, env)
|
17
17
|
cache.mkdir_p(File.dirname(target))
|
18
18
|
return false unless env.execute("Disassemble #{target}", command, options: {out: target})
|
@@ -13,13 +13,13 @@ module Rscons
|
|
13
13
|
|
14
14
|
def run(target, sources, cache, env, vars)
|
15
15
|
# build sources to linkable objects
|
16
|
-
objects = env.build_sources(sources,
|
16
|
+
objects = env.build_sources(sources, env.expand_varref(["${OBJSUFFIX}", "${LIBSUFFIX}"], vars).flatten, cache, vars)
|
17
17
|
if objects
|
18
18
|
vars = vars.merge({
|
19
19
|
'_TARGET' => target,
|
20
20
|
'_SOURCES' => objects,
|
21
21
|
})
|
22
|
-
command = env.build_command(
|
22
|
+
command = env.build_command("${ARCMD}", vars)
|
23
23
|
standard_build("AR #{target}", target, command, objects, env, cache)
|
24
24
|
end
|
25
25
|
end
|
@@ -58,11 +58,11 @@ module Rscons
|
|
58
58
|
'_DEPFILE' => Rscons.set_suffix(target, '.mf'),
|
59
59
|
})
|
60
60
|
com_prefix = KNOWN_SUFFIXES.find do |compiler, suffix_var|
|
61
|
-
sources.first.end_with?(*env
|
61
|
+
sources.first.end_with?(*env.expand_varref("${#{suffix_var}}"))
|
62
62
|
end.tap do |v|
|
63
63
|
v.nil? and raise "Error: unknown input file type: #{sources.first.inspect}"
|
64
64
|
end.first
|
65
|
-
command = env.build_command(
|
65
|
+
command = env.build_command("${#{com_prefix}CMD}", vars)
|
66
66
|
unless cache.up_to_date?(target, command, sources, env)
|
67
67
|
cache.mkdir_p(File.dirname(target))
|
68
68
|
FileUtils.rm_f(target)
|
@@ -9,15 +9,15 @@ module Rscons
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def run(target, sources, cache, env, vars)
|
12
|
-
pp_cc = if sources.find {|s| s.end_with?(*env
|
13
|
-
|
12
|
+
pp_cc = if sources.find {|s| s.end_with?(*env.expand_varref("${CXXSUFFIX}", vars))}
|
13
|
+
"${CXX}"
|
14
14
|
else
|
15
|
-
|
15
|
+
"${CC}"
|
16
16
|
end
|
17
17
|
vars = vars.merge("_PREPROCESS_CC" => pp_cc,
|
18
18
|
"_TARGET" => target,
|
19
19
|
"_SOURCES" => sources)
|
20
|
-
command = env.build_command(
|
20
|
+
command = env.build_command("${CPP_CMD}", vars)
|
21
21
|
standard_build("Preprocess #{target}", target, command, sources, env, cache)
|
22
22
|
end
|
23
23
|
end
|
@@ -17,23 +17,24 @@ module Rscons
|
|
17
17
|
|
18
18
|
def run(target, sources, cache, env, vars)
|
19
19
|
# build sources to linkable objects
|
20
|
-
objects = env.build_sources(sources,
|
20
|
+
objects = env.build_sources(sources, env.expand_varref(["${OBJSUFFIX}", "${LIBSUFFIX}"], vars).flatten, cache, vars)
|
21
21
|
return false unless objects
|
22
|
-
ld =
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
ld = env.expand_varref("${LD}", vars)
|
23
|
+
ld = if ld != ""
|
24
|
+
ld
|
25
|
+
elsif sources.find {|s| s.end_with?(*env.expand_varref("${DSUFFIX}", vars))}
|
26
|
+
"${DC}"
|
27
|
+
elsif sources.find {|s| s.end_with?(*env.expand_varref("${CXXSUFFIX}", vars))}
|
28
|
+
"${CXX}"
|
28
29
|
else
|
29
|
-
|
30
|
+
"${CC}"
|
30
31
|
end
|
31
32
|
vars = vars.merge({
|
32
33
|
'_TARGET' => target,
|
33
34
|
'_SOURCES' => objects,
|
34
35
|
'LD' => ld,
|
35
36
|
})
|
36
|
-
command = env.build_command(
|
37
|
+
command = env.build_command("${LDCMD}", vars)
|
37
38
|
standard_build("LD #{target}", target, command, objects, env, cache)
|
38
39
|
end
|
39
40
|
end
|
data/lib/rscons/environment.rb
CHANGED
@@ -209,22 +209,22 @@ module Rscons
|
|
209
209
|
@targets = {}
|
210
210
|
end
|
211
211
|
|
212
|
-
#
|
213
|
-
#
|
214
|
-
#
|
215
|
-
# @param
|
216
|
-
#
|
217
|
-
#
|
218
|
-
#
|
219
|
-
#
|
220
|
-
def
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
@varset.expand_varref(varref)
|
212
|
+
# Expand a construction variable reference.
|
213
|
+
#
|
214
|
+
# @param varref [Array, String] Variable reference to expand.
|
215
|
+
# @param extra_vars [Hash, VarSet]
|
216
|
+
# Extra variables to use in addition to (or replace) the Environment's
|
217
|
+
# construction variables when expanding the variable reference.
|
218
|
+
#
|
219
|
+
# @return [Array, String] Expansion of the variable reference.
|
220
|
+
def expand_varref(varref, extra_vars = nil)
|
221
|
+
if extra_vars.nil?
|
222
|
+
@varset
|
223
|
+
else
|
224
|
+
@varset.merge(extra_vars)
|
225
|
+
end.expand_varref(varref)
|
227
226
|
end
|
227
|
+
alias_method :build_command, :expand_varref
|
228
228
|
|
229
229
|
# Execute a builder command
|
230
230
|
# @param short_desc [String] Message to print if the Environment's echo
|
data/lib/rscons/varset.rb
CHANGED
@@ -83,7 +83,7 @@ module Rscons
|
|
83
83
|
if varref =~ /^(.*)\$\{([^}]+)\}(.*)$/
|
84
84
|
prefix, varname, suffix = $1, $2, $3
|
85
85
|
varval = expand_varref(self[varname])
|
86
|
-
if varval.is_a?(String)
|
86
|
+
if varval.is_a?(String) or varval.nil?
|
87
87
|
expand_varref("#{prefix}#{varval}#{suffix}")
|
88
88
|
elsif varval.is_a?(Array)
|
89
89
|
varval.map {|vv| expand_varref("#{prefix}#{vv}#{suffix}")}.flatten
|
data/lib/rscons/version.rb
CHANGED
@@ -15,6 +15,11 @@ module Rscons
|
|
15
15
|
subject.run("lexer.cc", ["parser.ll"], :cache, env, {})
|
16
16
|
end
|
17
17
|
|
18
|
+
it "supports overriding construction variables" do
|
19
|
+
subject.should_receive(:standard_build).with("LEX lexer.c", "lexer.c", ["hi", "parser.l"], ["parser.l"], env, :cache)
|
20
|
+
subject.run("lexer.c", ["parser.l"], :cache, env, "LEX_CMD" => ["hi", "${_SOURCES}"])
|
21
|
+
end
|
22
|
+
|
18
23
|
it "raises an error when an unknown source file is specified" do
|
19
24
|
expect {subject.run("file.c", ["foo.bar"], :cache, env, {})}.to raise_error /Unknown source file .foo.bar. for CFile builder/
|
20
25
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Rscons
|
2
|
+
module Builders
|
3
|
+
describe Disassemble do
|
4
|
+
let(:env) {Environment.new}
|
5
|
+
subject {Disassemble.new}
|
6
|
+
|
7
|
+
it "supports overriding DISASM_CMD construction variable" do
|
8
|
+
cache = "cache"
|
9
|
+
cache.stub(:up_to_date?) { false }
|
10
|
+
cache.stub(:mkdir_p) { }
|
11
|
+
cache.stub(:register_build) { }
|
12
|
+
env.should_receive(:execute).with("Disassemble a_file.txt", ["my_disasm", "a_file.exe"], anything).and_return(true)
|
13
|
+
subject.run("a_file.txt", ["a_file.exe"], cache, env, "DISASM_CMD" => ["my_disasm", "${_SOURCES}"])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Rscons
|
2
|
+
module Builders
|
3
|
+
describe Library do
|
4
|
+
let(:env) {Environment.new}
|
5
|
+
subject {Library.new}
|
6
|
+
|
7
|
+
it "supports overriding AR construction variable" do
|
8
|
+
subject.should_receive(:standard_build).with("AR prog.a", "prog.a", ["sp-ar", "rcs", "prog.a", "prog.o"], ["prog.o"], env, :cache)
|
9
|
+
subject.run("prog.a", ["prog.o"], :cache, env, "AR" => "sp-ar")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "supports overriding ARCMD construction variable" do
|
13
|
+
subject.should_receive(:standard_build).with("AR prog.a", "prog.a", ["special", "AR!", "prog.o"], ["prog.o"], env, :cache)
|
14
|
+
subject.run("prog.a", ["prog.o"], :cache, env, "ARCMD" => ["special", "AR!", "${_SOURCES}"])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Rscons
|
2
|
+
module Builders
|
3
|
+
describe Object do
|
4
|
+
let(:env) {Environment.new}
|
5
|
+
subject {Object.new}
|
6
|
+
|
7
|
+
it "supports overriding CCCMD construction variable" do
|
8
|
+
cache = "cache"
|
9
|
+
cache.stub(:up_to_date?) { false }
|
10
|
+
cache.stub(:mkdir_p) { }
|
11
|
+
cache.stub(:register_build) { }
|
12
|
+
FileUtils.stub(:rm_f) { }
|
13
|
+
File.stub(:exists?) { false }
|
14
|
+
env.should_receive(:execute).with("CC mod.o", ["llc", "mod.c"]).and_return(true)
|
15
|
+
subject.run("mod.o", ["mod.c"], cache, env, "CCCMD" => ["llc", "${_SOURCES}"])
|
16
|
+
end
|
17
|
+
|
18
|
+
it "raises an error when given a source file with an unknown suffix" do
|
19
|
+
expect { subject.run("mod.o", ["mod.xyz"], :cache, env, {}) }.to raise_error /unknown input file type: "mod.xyz"/
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Rscons
|
2
|
+
module Builders
|
3
|
+
describe Preprocess do
|
4
|
+
let(:env) {Environment.new}
|
5
|
+
subject {Preprocess.new}
|
6
|
+
|
7
|
+
it "supports overriding CC construction variable" do
|
8
|
+
subject.should_receive(:standard_build).with("Preprocess module.pp", "module.pp", ["my_cpp", "-E", "-o", "module.pp", "module.c"], ["module.c"], env, :cache)
|
9
|
+
subject.run("module.pp", ["module.c"], :cache, env, "CC" => "my_cpp")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "supports overriding CPP_CMD construction variable" do
|
13
|
+
subject.should_receive(:standard_build).with("Preprocess module.pp", "module.pp", ["my_cpp", "module.c"], ["module.c"], env, :cache)
|
14
|
+
subject.run("module.pp", ["module.c"], :cache, env, "CPP_CMD" => ["my_cpp", "${_SOURCES}"])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Rscons
|
2
|
+
module Builders
|
3
|
+
describe Program do
|
4
|
+
let(:env) {Environment.new}
|
5
|
+
subject {Program.new}
|
6
|
+
|
7
|
+
it "supports overriding CC construction variable" do
|
8
|
+
subject.should_receive(:standard_build).with("LD prog", "prog", ["sp-c++", "-o", "prog", "prog.o"], ["prog.o"], env, :cache)
|
9
|
+
subject.run("prog", ["prog.o"], :cache, env, "CC" => "sp-c++")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "supports overriding LDCMD construction variable" do
|
13
|
+
subject.should_receive(:standard_build).with("LD prog", "prog", ["special", "LD!", "prog.o"], ["prog.o"], env, :cache)
|
14
|
+
subject.run("prog", ["prog.o"], :cache, env, "LDCMD" => ["special", "LD!", "${_SOURCES}"])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -223,6 +223,7 @@ module Rscons
|
|
223
223
|
env["path"] = ["dir1", "dir2"]
|
224
224
|
env["flags"] = ["-x", "-y", "${specialflag}"]
|
225
225
|
env["specialflag"] = "-z"
|
226
|
+
env["foo"] = {}
|
226
227
|
env.expand_varref(["-p${path}", "${flags}"]).should == ["-pdir1", "-pdir2", "-x", "-y", "-z"]
|
227
228
|
env.expand_varref("foo").should == "foo"
|
228
229
|
expect {env.expand_varref("${foo}")}.to raise_error /expand.a.variable.reference/
|
data/spec/rscons/varset_spec.rb
CHANGED
@@ -125,7 +125,8 @@ module Rscons
|
|
125
125
|
"CC" => "gcc",
|
126
126
|
"CPPPATH" => ["dir1", "dir2"],
|
127
127
|
"compiler" => "${CC}",
|
128
|
-
"cmd" => ["${CC}", "-c", "${CFLAGS}", "-I${CPPPATH}"]
|
128
|
+
"cmd" => ["${CC}", "-c", "${CFLAGS}", "-I${CPPPATH}"],
|
129
|
+
"hash" => {})
|
129
130
|
it "expands to the string itself if the string is not a variable reference" do
|
130
131
|
v.expand_varref("CC").should == "CC"
|
131
132
|
v.expand_varref("CPPPATH").should == "CPPPATH"
|
@@ -151,8 +152,11 @@ module Rscons
|
|
151
152
|
"cflag: -O2, cpppath: dir2, compiler: gcc",
|
152
153
|
]
|
153
154
|
end
|
154
|
-
it "
|
155
|
-
expect
|
155
|
+
it "returns an empty string when a variable reference refers to a non-existent variable" do
|
156
|
+
expect(v.expand_varref("${not_here}")).to eq("")
|
157
|
+
end
|
158
|
+
it "raises an error when a variable reference refers to an unhandled type" do
|
159
|
+
expect { v.expand_varref("${hash}") }.to raise_error /I do not know how to expand a variable reference to a Hash/
|
156
160
|
end
|
157
161
|
end
|
158
162
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rscons
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Holtrop
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec-core
|
@@ -179,6 +179,11 @@ files:
|
|
179
179
|
- rscons.gemspec
|
180
180
|
- spec/build_tests_spec.rb
|
181
181
|
- spec/rscons/builders/cfile_spec.rb
|
182
|
+
- spec/rscons/builders/disassemble_spec.rb
|
183
|
+
- spec/rscons/builders/library_spec.rb
|
184
|
+
- spec/rscons/builders/object_spec.rb
|
185
|
+
- spec/rscons/builders/preprocess_spec.rb
|
186
|
+
- spec/rscons/builders/program_spec.rb
|
182
187
|
- spec/rscons/cache_spec.rb
|
183
188
|
- spec/rscons/environment_spec.rb
|
184
189
|
- spec/rscons/varset_spec.rb
|
@@ -211,6 +216,11 @@ summary: Software construction library inspired by SCons and implemented in Ruby
|
|
211
216
|
test_files:
|
212
217
|
- spec/build_tests_spec.rb
|
213
218
|
- spec/rscons/builders/cfile_spec.rb
|
219
|
+
- spec/rscons/builders/disassemble_spec.rb
|
220
|
+
- spec/rscons/builders/library_spec.rb
|
221
|
+
- spec/rscons/builders/object_spec.rb
|
222
|
+
- spec/rscons/builders/preprocess_spec.rb
|
223
|
+
- spec/rscons/builders/program_spec.rb
|
214
224
|
- spec/rscons/cache_spec.rb
|
215
225
|
- spec/rscons/environment_spec.rb
|
216
226
|
- spec/rscons/varset_spec.rb
|