rscons 1.4.2 → 1.4.3
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 +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
|