rscons 0.0.12 → 0.0.13
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/build_tests/build_dir/tweaker_build.rb +12 -0
- data/lib/rscons/environment.rb +35 -7
- data/lib/rscons/varset.rb +1 -1
- data/lib/rscons/version.rb +1 -1
- data/spec/build_tests_spec.rb +17 -7
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjE2OGU4MDZjYTk0MDhkYWU2NzgxZGJjYjgzZmIxYTI0NTk4YzU2Zg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OTkwYjJhODI0NjgzZTc2NDg3MGNmMDlhNmE2MjgxOWNmNWY4YjE3ZQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NTQzMjdjYzkxODUwNjIzNTg0NDI2ZmIxM2QzZTllNWJhNjRiOWRmMDc0OTUz
|
10
|
+
ZDJjMmI0MDMxMGE3NWRmZTFmZjA3NmE0YWNkNWYzNmVkY2VmZTIyNTEwOTZl
|
11
|
+
YTBkNGZlZjRhYjZlNjgxNDIyZTJlNWJkZjhkMjgwY2E2YTA4Mzc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MjM1ZTY0YmZlNDcwMGRiNTU3ZDQyZWVjMGMwYmM1MGM2YjlmODk0MGRmMjNm
|
14
|
+
NjVmOWI5MjUxMTI0ZDA0ZjZhMWU1OWRhOWNjZDMxZjYwMzAyNDQ3ZTY3NDA2
|
15
|
+
YzIxYTAwMjExNzMwYjgxMmYxYmEyMTUwZDdhOWNjNTEyNmY3Y2E=
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Rscons::Environment.new do |env|
|
2
|
+
env.append('CPPPATH' => Dir['src/**/*/'])
|
3
|
+
env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/')
|
4
|
+
env.add_tweaker do |build_op|
|
5
|
+
if build_op[:target] =~ %r{build_one/.*\.o}
|
6
|
+
build_op[:vars]["CFLAGS"] << "-O1"
|
7
|
+
elsif build_op[:target] =~ %r{build_two/.*\.o}
|
8
|
+
build_op[:vars]["CFLAGS"] << "-O2"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
env.Program('tweaker', Dir['src/**/*.c'])
|
12
|
+
end
|
data/lib/rscons/environment.rb
CHANGED
@@ -22,6 +22,7 @@ module Rscons
|
|
22
22
|
@targets = {}
|
23
23
|
@builders = {}
|
24
24
|
@build_dirs = []
|
25
|
+
@tweakers = []
|
25
26
|
@varset[:exclude_builders] ||= []
|
26
27
|
unless @varset[:exclude_builders] == :all
|
27
28
|
exclude_builders = Set.new(@varset[:exclude_builders] || [])
|
@@ -45,7 +46,7 @@ module Rscons
|
|
45
46
|
# Make a copy of the Environment object.
|
46
47
|
# The cloned environment will contain a copy of all environment options,
|
47
48
|
# construction variables, builders, and build directories. It will not
|
48
|
-
# contain a copy of the targets.
|
49
|
+
# contain a copy of the targets or tweakers.
|
49
50
|
# If a block is given, the Environment object is yielded to the block and
|
50
51
|
# when the block returns, the {#process} method is automatically called.
|
51
52
|
def clone(variables = {})
|
@@ -74,6 +75,11 @@ module Rscons
|
|
74
75
|
end
|
75
76
|
end
|
76
77
|
|
78
|
+
# Add a tweaker block to the Environment.
|
79
|
+
def add_tweaker(&block)
|
80
|
+
@tweakers << block
|
81
|
+
end
|
82
|
+
|
77
83
|
# Specify a build directory for this Environment.
|
78
84
|
# Source files from src_dir will produce object files under obj_dir.
|
79
85
|
def build_dir(src_dir, obj_dir)
|
@@ -136,11 +142,11 @@ module Rscons
|
|
136
142
|
if @targets[target][:source].map do |src|
|
137
143
|
targets_processed.include?(src) or not @targets.include?(src) or process_target.call(src)
|
138
144
|
end.all?
|
139
|
-
@targets[target][:builder]
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
145
|
+
run_builder(@targets[target][:builder],
|
146
|
+
target,
|
147
|
+
@targets[target][:source],
|
148
|
+
cache,
|
149
|
+
@targets[target][:vars] || {})
|
144
150
|
else
|
145
151
|
false
|
146
152
|
end
|
@@ -238,6 +244,7 @@ module Rscons
|
|
238
244
|
# @param sources [Array] List of source files to build.
|
239
245
|
# @param suffixes [Array] List of suffixes to try to convert source files into.
|
240
246
|
# @param cache [Cache] The Cache.
|
247
|
+
# @param vars [Hash] Extra variables to pass to the builder.
|
241
248
|
# Return a list of the converted file names.
|
242
249
|
def build_sources(sources, suffixes, cache, vars = {})
|
243
250
|
sources.map do |source|
|
@@ -249,7 +256,7 @@ module Rscons
|
|
249
256
|
converted_fname = get_build_fname(source, suffix)
|
250
257
|
builder = @builders.values.find { |b| b.produces?(converted_fname, source, self) }
|
251
258
|
if builder
|
252
|
-
converted = builder
|
259
|
+
converted = run_builder(builder, converted_fname, [source], cache, vars)
|
253
260
|
return nil unless converted
|
254
261
|
break
|
255
262
|
end
|
@@ -258,5 +265,26 @@ module Rscons
|
|
258
265
|
end
|
259
266
|
end
|
260
267
|
end
|
268
|
+
|
269
|
+
# Invoke a builder to build the given target based on the given sources.
|
270
|
+
# @param builder [Builder] The Builder to use.
|
271
|
+
# @param target [String] The target output file.
|
272
|
+
# @param sources [Array] List of source files.
|
273
|
+
# @param cache [Cache] The Cache.
|
274
|
+
# @param vars [Hash] Extra variables to pass to the builder.
|
275
|
+
# Return the result of the builder's run() method.
|
276
|
+
def run_builder(builder, target, sources, cache, vars)
|
277
|
+
vars = @varset.merge(vars)
|
278
|
+
@tweakers.each do |tweaker_block|
|
279
|
+
build_operation = {
|
280
|
+
builder: builder,
|
281
|
+
target: target,
|
282
|
+
sources: sources,
|
283
|
+
vars: vars,
|
284
|
+
}
|
285
|
+
tweaker_block.call(build_operation)
|
286
|
+
end
|
287
|
+
builder.run(target, sources, cache, self, vars)
|
288
|
+
end
|
261
289
|
end
|
262
290
|
end
|
data/lib/rscons/varset.rb
CHANGED
data/lib/rscons/version.rb
CHANGED
data/spec/build_tests_spec.rb
CHANGED
@@ -11,10 +11,10 @@ describe Rscons do
|
|
11
11
|
FileUtils.rm_rf('build_tests_run')
|
12
12
|
end
|
13
13
|
|
14
|
-
def build_testdir
|
15
|
-
if File.exists?(
|
16
|
-
build_rb = File.read(
|
17
|
-
File.open(
|
14
|
+
def build_testdir(build_script = "build.rb")
|
15
|
+
if File.exists?(build_script)
|
16
|
+
build_rb = File.read(build_script)
|
17
|
+
File.open(build_script, "w") do |fh|
|
18
18
|
fh.puts(<<EOF + build_rb)
|
19
19
|
require "simplecov"
|
20
20
|
|
@@ -27,7 +27,7 @@ end
|
|
27
27
|
require "rscons"
|
28
28
|
EOF
|
29
29
|
end
|
30
|
-
IO.popen(%{ruby -I #{@owd}/lib
|
30
|
+
IO.popen(%{ruby -I #{@owd}/lib #{build_script}}) do |io|
|
31
31
|
io.readlines.reject do |line|
|
32
32
|
line =~ /^Coverage report/
|
33
33
|
end
|
@@ -35,11 +35,11 @@ EOF
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def test_dir(build_test_directory)
|
38
|
+
def test_dir(build_test_directory, build_script = "build.rb")
|
39
39
|
@build_test_name = build_test_directory
|
40
40
|
FileUtils.cp_r("build_tests/#{build_test_directory}", 'build_tests_run')
|
41
41
|
Dir.chdir("build_tests_run")
|
42
|
-
build_testdir
|
42
|
+
build_testdir(build_script)
|
43
43
|
end
|
44
44
|
|
45
45
|
def file_sub(fname)
|
@@ -207,4 +207,14 @@ EOF
|
|
207
207
|
File.exists?('library').should be_true
|
208
208
|
`ar t lib.a`.should == "one.o\ntwo.o\n"
|
209
209
|
end
|
210
|
+
|
211
|
+
it 'supports tweakers to override construction variables' do
|
212
|
+
lines = test_dir("build_dir", "tweaker_build.rb")
|
213
|
+
`./tweaker`.should == "Hello from two()\n"
|
214
|
+
lines.should =~ [
|
215
|
+
'gcc -c -o build_one/one.o -MMD -MF build_one/one.mf -Isrc/one/ -Isrc/two/ -O1 src/one/one.c',
|
216
|
+
'gcc -c -o build_two/two.o -MMD -MF build_two/two.mf -Isrc/one/ -Isrc/two/ -O2 src/two/two.c',
|
217
|
+
'gcc -o tweaker build_one/one.o build_two/two.o',
|
218
|
+
]
|
219
|
+
end
|
210
220
|
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: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Holtrop
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec-core
|
@@ -153,6 +153,7 @@ files:
|
|
153
153
|
- build_tests/build_dir/src/one/one.c
|
154
154
|
- build_tests/build_dir/src/two/two.c
|
155
155
|
- build_tests/build_dir/src/two/two.h
|
156
|
+
- build_tests/build_dir/tweaker_build.rb
|
156
157
|
- build_tests/clone_env/build.rb
|
157
158
|
- build_tests/clone_env/src/program.c
|
158
159
|
- build_tests/custom_builder/build.rb
|