rscons 0.0.5 → 0.0.6
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.
- data/build_tests/custom_builder/build.rb +1 -1
- data/build_tests/library/build.rb +4 -0
- data/build_tests/library/one.c +8 -0
- data/build_tests/library/three.c +0 -0
- data/build_tests/library/two.c +0 -0
- data/build_tests/two_sources/build.rb +4 -0
- data/build_tests/two_sources/one.c +8 -0
- data/build_tests/two_sources/two.c +3 -0
- data/lib/rscons.rb +2 -0
- data/lib/rscons/builders/library.rb +33 -0
- data/lib/rscons/builders/object.rb +3 -3
- data/lib/rscons/builders/program.rb +5 -14
- data/lib/rscons/environment.rb +33 -2
- data/lib/rscons/varset.rb +5 -1
- data/lib/rscons/version.rb +1 -1
- data/spec/build_tests_spec.rb +23 -0
- metadata +39 -5
- checksums.yaml +0 -15
File without changes
|
File without changes
|
data/lib/rscons.rb
CHANGED
@@ -8,12 +8,14 @@ require "rscons/monkey/module"
|
|
8
8
|
require "rscons/monkey/string"
|
9
9
|
|
10
10
|
# default builders
|
11
|
+
require "rscons/builders/library"
|
11
12
|
require "rscons/builders/object"
|
12
13
|
require "rscons/builders/program"
|
13
14
|
|
14
15
|
# Namespace module for rscons classes
|
15
16
|
module Rscons
|
16
17
|
DEFAULT_BUILDERS = [
|
18
|
+
Library,
|
17
19
|
Object,
|
18
20
|
Program,
|
19
21
|
]
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Rscons
|
4
|
+
# A default RScons builder that produces a static library archive.
|
5
|
+
class Library < Builder
|
6
|
+
def default_variables(env)
|
7
|
+
{
|
8
|
+
'AR' => 'ar',
|
9
|
+
'LIBSUFFIX' => '.a',
|
10
|
+
'ARFLAGS' => [],
|
11
|
+
'ARCOM' => ['$AR', 'rcs', '$ARFLAGS', '$TARGET', '$SOURCES']
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def run(target, sources, cache, env, vars = {})
|
16
|
+
# build sources to linkable objects
|
17
|
+
objects = env.build_sources(sources, [env['OBJSUFFIX'], env['LIBSUFFIX']].flatten, cache, vars)
|
18
|
+
if objects
|
19
|
+
vars = vars.merge({
|
20
|
+
'TARGET' => target,
|
21
|
+
'SOURCES' => objects,
|
22
|
+
})
|
23
|
+
command = env.build_command(env['ARCOM'], vars)
|
24
|
+
unless cache.up_to_date?(target, command, objects)
|
25
|
+
FileUtils.rm_f(target)
|
26
|
+
return false unless env.execute("AR #{target}", command)
|
27
|
+
cache.register_build(target, command, objects)
|
28
|
+
end
|
29
|
+
target
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -38,12 +38,12 @@ module Rscons
|
|
38
38
|
source.has_suffix?(env['CXXSUFFIX']))
|
39
39
|
end
|
40
40
|
|
41
|
-
def run(target, sources, cache, env)
|
42
|
-
vars = {
|
41
|
+
def run(target, sources, cache, env, vars = {})
|
42
|
+
vars = vars.merge({
|
43
43
|
'TARGET' => target,
|
44
44
|
'SOURCES' => sources,
|
45
45
|
'DEPFILE' => target.set_suffix('.mf'),
|
46
|
-
}
|
46
|
+
})
|
47
47
|
com_prefix = if sources.first.has_suffix?(env['ASSUFFIX'])
|
48
48
|
'AS'
|
49
49
|
elsif sources.first.has_suffix?(env['CSUFFIX'])
|
@@ -14,28 +14,19 @@ module Rscons
|
|
14
14
|
}
|
15
15
|
end
|
16
16
|
|
17
|
-
def run(target, sources, cache, env)
|
18
|
-
#
|
19
|
-
objects = sources.
|
20
|
-
if source.has_suffix?([env['OBJSUFFIX'], env['LIBSUFFIX']])
|
21
|
-
source
|
22
|
-
else
|
23
|
-
o_file = env.get_build_fname(source, env['OBJSUFFIX', :string])
|
24
|
-
builder = env.builders.values.find { |b| b.produces?(o_file, source, env) }
|
25
|
-
builder or raise "No builder found to convert input source #{source.inspect} to an object file."
|
26
|
-
builder.run(o_file, [source], cache, env) or break
|
27
|
-
end
|
28
|
-
end
|
17
|
+
def run(target, sources, cache, env, vars = {})
|
18
|
+
# build sources to linkable objects
|
19
|
+
objects = env.build_sources(sources, [env['OBJSUFFIX'], env['LIBSUFFIX']].flatten, cache, vars)
|
29
20
|
if objects
|
30
21
|
use_cxx = sources.map do |s|
|
31
22
|
s.has_suffix?(env['CXXSUFFIX'])
|
32
23
|
end.any?
|
33
24
|
ld_alt = use_cxx ? env['CXX'] : env['CC']
|
34
|
-
vars = {
|
25
|
+
vars = vars.merge({
|
35
26
|
'TARGET' => target,
|
36
27
|
'SOURCES' => objects,
|
37
28
|
'LD' => env['LD'] || ld_alt,
|
38
|
-
}
|
29
|
+
})
|
39
30
|
command = env.build_command(env['LDCOM'], vars)
|
40
31
|
unless cache.up_to_date?(target, command, objects)
|
41
32
|
return false unless env.execute("LD #{target}", command)
|
data/lib/rscons/environment.rb
CHANGED
@@ -141,7 +141,7 @@ module Rscons
|
|
141
141
|
@targets[target][:source],
|
142
142
|
cache,
|
143
143
|
self,
|
144
|
-
|
144
|
+
@targets[target][:vars] || {})
|
145
145
|
else
|
146
146
|
false
|
147
147
|
end
|
@@ -193,11 +193,15 @@ module Rscons
|
|
193
193
|
alias_method :orig_method_missing, :method_missing
|
194
194
|
def method_missing(method, *args)
|
195
195
|
if @builders.has_key?(method.to_s)
|
196
|
-
target, source, *rest = args
|
196
|
+
target, source, vars, *rest = args
|
197
|
+
unless vars.nil? or vars.is_a?(Hash) or vars.is_a?(VarSet)
|
198
|
+
raise "Unexpected construction variable set: #{vars.inspect}"
|
199
|
+
end
|
197
200
|
source = [source] unless source.is_a?(Array)
|
198
201
|
@targets[target] = {
|
199
202
|
builder: @builders[method.to_s],
|
200
203
|
source: source,
|
204
|
+
vars: vars,
|
201
205
|
args: rest,
|
202
206
|
}
|
203
207
|
else
|
@@ -228,5 +232,32 @@ module Rscons
|
|
228
232
|
end
|
229
233
|
deps
|
230
234
|
end
|
235
|
+
|
236
|
+
# Build a list of source files into files containing one of the suffixes
|
237
|
+
# given by suffixes.
|
238
|
+
# This method is used internally by RScons builders.
|
239
|
+
# @param sources [Array] List of source files to build.
|
240
|
+
# @param suffixes [Array] List of suffixes to try to convert source files into.
|
241
|
+
# @param cache [Cache] The Cache.
|
242
|
+
# Return a list of the converted file names.
|
243
|
+
def build_sources(sources, suffixes, cache, vars = {})
|
244
|
+
sources.map do |source|
|
245
|
+
if source.has_suffix?(suffixes)
|
246
|
+
source
|
247
|
+
else
|
248
|
+
converted = nil
|
249
|
+
suffixes.each do |suffix|
|
250
|
+
converted_fname = get_build_fname(source, suffix)
|
251
|
+
builder = @builders.values.find { |b| b.produces?(converted_fname, source, self) }
|
252
|
+
if builder
|
253
|
+
converted = builder.run(converted_fname, [source], cache, self, vars)
|
254
|
+
return nil unless converted
|
255
|
+
break
|
256
|
+
end
|
257
|
+
end
|
258
|
+
converted or raise "Could not find a builder to handle #{source.inspect}."
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
231
262
|
end
|
232
263
|
end
|
data/lib/rscons/varset.rb
CHANGED
@@ -8,7 +8,11 @@ module Rscons
|
|
8
8
|
# Create a VarSet
|
9
9
|
# @param vars [Hash] Optional initial variables.
|
10
10
|
def initialize(vars = {})
|
11
|
-
|
11
|
+
if vars.is_a?(VarSet)
|
12
|
+
@vars = vars.clone.vars
|
13
|
+
else
|
14
|
+
@vars = vars
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
# Access the value of variable as a particular type
|
data/lib/rscons/version.rb
CHANGED
data/spec/build_tests_spec.rb
CHANGED
@@ -143,4 +143,27 @@ describe Rscons do
|
|
143
143
|
`./simple`.should == "This is a simple C++ program\n"
|
144
144
|
end
|
145
145
|
|
146
|
+
it 'allows overriding construction variables for individual builder calls' do
|
147
|
+
lines = test_dir('two_sources')
|
148
|
+
lines.should == [
|
149
|
+
'gcc -c -o one.o -MMD -MF one.mf -DONE one.c',
|
150
|
+
'gcc -c -o two.o -MMD -MF two.mf two.c',
|
151
|
+
'gcc -o two_sources one.o two.o',
|
152
|
+
]
|
153
|
+
File.exists?('two_sources').should be_true
|
154
|
+
`./two_sources`.should == "This is a C program with two sources.\n"
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'builds a static library archive' do
|
158
|
+
lines = test_dir('library')
|
159
|
+
lines.should == [
|
160
|
+
'gcc -c -o one.o -MMD -MF one.mf -Dmake_lib one.c',
|
161
|
+
'gcc -c -o two.o -MMD -MF two.mf -Dmake_lib two.c',
|
162
|
+
'ar rcs lib.a one.o two.o',
|
163
|
+
'gcc -c -o three.o -MMD -MF three.mf three.c',
|
164
|
+
'gcc -o library lib.a three.o',
|
165
|
+
]
|
166
|
+
File.exists?('library').should be_true
|
167
|
+
`ar t lib.a`.should == "one.o\ntwo.o\n"
|
168
|
+
end
|
146
169
|
end
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
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.6
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Josh Holtrop
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-
|
12
|
+
date: 2013-09-13 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rspec-core
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rspec-mocks
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -41,6 +46,7 @@ dependencies:
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rspec-expectations
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
51
|
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
@@ -48,6 +54,7 @@ dependencies:
|
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
59
|
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
@@ -55,6 +62,7 @@ dependencies:
|
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rspec
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
67
|
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
@@ -62,6 +70,7 @@ dependencies:
|
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
75
|
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
@@ -69,6 +78,7 @@ dependencies:
|
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: rake
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
83
|
- - ! '>='
|
74
84
|
- !ruby/object:Gem::Version
|
@@ -76,6 +86,7 @@ dependencies:
|
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
91
|
- - ! '>='
|
81
92
|
- !ruby/object:Gem::Version
|
@@ -83,6 +94,7 @@ dependencies:
|
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: simplecov
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
99
|
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
@@ -90,6 +102,7 @@ dependencies:
|
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
107
|
- - ! '>='
|
95
108
|
- !ruby/object:Gem::Version
|
@@ -97,6 +110,7 @@ dependencies:
|
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
111
|
name: json
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
100
114
|
requirements:
|
101
115
|
- - ! '>='
|
102
116
|
- !ruby/object:Gem::Version
|
@@ -104,6 +118,7 @@ dependencies:
|
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
107
122
|
requirements:
|
108
123
|
- - ! '>='
|
109
124
|
- !ruby/object:Gem::Version
|
@@ -111,6 +126,7 @@ dependencies:
|
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: rdoc
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
114
130
|
requirements:
|
115
131
|
- - ! '>='
|
116
132
|
- !ruby/object:Gem::Version
|
@@ -118,6 +134,7 @@ dependencies:
|
|
118
134
|
type: :development
|
119
135
|
prerelease: false
|
120
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
121
138
|
requirements:
|
122
139
|
- - ! '>='
|
123
140
|
- !ruby/object:Gem::Version
|
@@ -125,6 +142,7 @@ dependencies:
|
|
125
142
|
- !ruby/object:Gem::Dependency
|
126
143
|
name: yard
|
127
144
|
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
128
146
|
requirements:
|
129
147
|
- - ! '>='
|
130
148
|
- !ruby/object:Gem::Version
|
@@ -132,6 +150,7 @@ dependencies:
|
|
132
150
|
type: :development
|
133
151
|
prerelease: false
|
134
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
135
154
|
requirements:
|
136
155
|
- - ! '>='
|
137
156
|
- !ruby/object:Gem::Version
|
@@ -160,12 +179,20 @@ files:
|
|
160
179
|
- build_tests/header/build.rb
|
161
180
|
- build_tests/header/header.c
|
162
181
|
- build_tests/header/header.h
|
182
|
+
- build_tests/library/build.rb
|
183
|
+
- build_tests/library/one.c
|
184
|
+
- build_tests/library/three.c
|
185
|
+
- build_tests/library/two.c
|
163
186
|
- build_tests/simple/build.rb
|
164
187
|
- build_tests/simple/simple.c
|
165
188
|
- build_tests/simple_cc/build.rb
|
166
189
|
- build_tests/simple_cc/simple.cc
|
190
|
+
- build_tests/two_sources/build.rb
|
191
|
+
- build_tests/two_sources/one.c
|
192
|
+
- build_tests/two_sources/two.c
|
167
193
|
- lib/rscons.rb
|
168
194
|
- lib/rscons/builder.rb
|
195
|
+
- lib/rscons/builders/library.rb
|
169
196
|
- lib/rscons/builders/object.rb
|
170
197
|
- lib/rscons/builders/program.rb
|
171
198
|
- lib/rscons/cache.rb
|
@@ -181,26 +208,33 @@ files:
|
|
181
208
|
homepage: https://github.com/holtrop/rscons
|
182
209
|
licenses:
|
183
210
|
- MIT
|
184
|
-
metadata: {}
|
185
211
|
post_install_message:
|
186
212
|
rdoc_options: []
|
187
213
|
require_paths:
|
188
214
|
- lib
|
189
215
|
required_ruby_version: !ruby/object:Gem::Requirement
|
216
|
+
none: false
|
190
217
|
requirements:
|
191
218
|
- - ! '>='
|
192
219
|
- !ruby/object:Gem::Version
|
193
220
|
version: '0'
|
221
|
+
segments:
|
222
|
+
- 0
|
223
|
+
hash: -4013238338906189018
|
194
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
225
|
+
none: false
|
195
226
|
requirements:
|
196
227
|
- - ! '>='
|
197
228
|
- !ruby/object:Gem::Version
|
198
229
|
version: '0'
|
230
|
+
segments:
|
231
|
+
- 0
|
232
|
+
hash: -4013238338906189018
|
199
233
|
requirements: []
|
200
234
|
rubyforge_project:
|
201
|
-
rubygems_version:
|
235
|
+
rubygems_version: 1.8.23
|
202
236
|
signing_key:
|
203
|
-
specification_version:
|
237
|
+
specification_version: 3
|
204
238
|
summary: Software construction library inspired by SCons and implemented in Ruby
|
205
239
|
test_files:
|
206
240
|
- spec/build_tests_spec.rb
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
NTA3MjNjNjMxN2U3MmY3ZmIwOGIxYjY2MzQzMzQ5MmMyOTQ3YTMyMQ==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
OTYxNGZmMGM2NWQ2MGZjNDM5YzI1OTMzNWQ4ZDkxOWY1MzFkNmVkOA==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YmZiNjA2MjI0NGMyZWE0NjhmMmQ4NTZjOWM4ZWFiODdmNTRmNzFlMzEyMzM5
|
10
|
-
MDgwODViOTk3NDc3NjFlODQxNDk5ZWNlMTM4NjcxODM2NjY5OWIyYzgwNzZk
|
11
|
-
NGQxOTgzNTMzZjVmZjk0MDhiMTBkODY4OWU3ZGEyNDRmNDE0YWY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MmU3ODEyODYxMWNiY2I4NDBiMzgyMTY2OTVmNzE3OGI3NjFkNTc5MjE5ZmVl
|
14
|
-
YmU1Y2ZjMzNkZmI4OTg0MjM3YjcwNTY5OTFkYzg5NmNhOTFlZGVjODE2NDc2
|
15
|
-
NzlkMTg0YTFiZmVjMzlhMTQwZmQ0MjcyOTNmOGRiMzhiMjg2OTE=
|