rscons 1.15.0 → 1.16.0
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 +5 -5
- data/bin/rscons +2 -0
- data/lib/rscons.rb +35 -0
- data/lib/rscons/builders/object.rb +6 -5
- data/lib/rscons/builders/shared_object.rb +1 -1
- data/lib/rscons/cache.rb +52 -8
- data/lib/rscons/cli.rb +6 -0
- data/lib/rscons/varset.rb +7 -0
- data/lib/rscons/version.rb +1 -1
- data/rscons.gemspec +0 -1
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e6ab9f61dc793cbbd24e94de699b62fad0c5f7d7da1d09e4ed117d6660b8ed77
|
4
|
+
data.tar.gz: 8bb4e4698a8cc54941c9e2757857de1ccc8914b95596a2f6fc308f7b717e7db8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18d50b38e720459b289e51b0fd3a101294ff9bb5ac168c5923145ff39bd38eacefe9fef9d140bd252bf0f4eb1342ba9dc1e7e9569c9a5d641447b0d79b02d64f
|
7
|
+
data.tar.gz: 82d2339ac692f1338da75d2d1def8e817f13cfba1373f98be9e785016d03c55a183cc8775dc827b2174d70a1ca8883026202264c9d94f5c225dcfb2d2a44c1c0
|
data/bin/rscons
CHANGED
data/lib/rscons.rb
CHANGED
@@ -55,6 +55,11 @@ module Rscons
|
|
55
55
|
# Whether to output ANSI color escape sequences.
|
56
56
|
attr_accessor :do_ansi_color
|
57
57
|
|
58
|
+
# @since 1.16.0
|
59
|
+
# @return [VarSet]
|
60
|
+
# Access any variables set on the rscons command-line.
|
61
|
+
attr_reader :vars
|
62
|
+
|
58
63
|
# Remove all generated files.
|
59
64
|
#
|
60
65
|
# @return [void]
|
@@ -165,6 +170,35 @@ module Rscons
|
|
165
170
|
@command_executer = val
|
166
171
|
end
|
167
172
|
|
173
|
+
# Return a list of paths matching the specified pattern(s).
|
174
|
+
#
|
175
|
+
# @since 1.16.0
|
176
|
+
#
|
177
|
+
# A pattern can contain a "/**" component to recurse through directories.
|
178
|
+
# If the pattern ends with "/**" then only the recursive list of
|
179
|
+
# directories will be returned.
|
180
|
+
#
|
181
|
+
# Examples:
|
182
|
+
# - "src/**": return all directories under "src", recursively (including
|
183
|
+
# "src" itself).
|
184
|
+
# - "src/**/*": return all files and directories recursively under the src
|
185
|
+
# directory.
|
186
|
+
# - "src/**/*.c": return all .c files recursively under the src directory.
|
187
|
+
# - "dir/*/": return all directories in dir, but no files.
|
188
|
+
#
|
189
|
+
# @return [Array<String>] Paths matching the specified pattern(s).
|
190
|
+
def glob(*patterns)
|
191
|
+
require "pathname"
|
192
|
+
patterns.reduce([]) do |result, pattern|
|
193
|
+
if pattern.end_with?("/**")
|
194
|
+
pattern += "/"
|
195
|
+
end
|
196
|
+
result += Dir.glob(pattern).map do |path|
|
197
|
+
Pathname.new(path.gsub("\\", "/")).cleanpath.to_s
|
198
|
+
end
|
199
|
+
end.sort
|
200
|
+
end
|
201
|
+
|
168
202
|
private
|
169
203
|
|
170
204
|
# Determine the number of threads to use by default.
|
@@ -203,6 +237,7 @@ module Rscons
|
|
203
237
|
end
|
204
238
|
|
205
239
|
@n_threads = determine_n_threads
|
240
|
+
@vars = VarSet.new
|
206
241
|
|
207
242
|
end
|
208
243
|
|
@@ -30,7 +30,7 @@ module Rscons
|
|
30
30
|
'ASSUFFIX' => ['.S'],
|
31
31
|
'ASPPPATH' => '${CPPPATH}',
|
32
32
|
'ASPPFLAGS' => '${CPPFLAGS}',
|
33
|
-
'ASDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'],
|
33
|
+
'ASDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}', '-MT', 'TARGET'],
|
34
34
|
'ASCMD' => ['${AS}', '-c', '-o', '${_TARGET}', '${ASDEPGEN}', '${INCPREFIX}${ASPPPATH}', '${ASPPFLAGS}', '${ASFLAGS}', '${_SOURCES}'],
|
35
35
|
|
36
36
|
'CPPFLAGS' => ['${CPPDEFPREFIX}${CPPDEFINES}'],
|
@@ -42,20 +42,21 @@ module Rscons
|
|
42
42
|
'CC' => 'gcc',
|
43
43
|
'CFLAGS' => [],
|
44
44
|
'CSUFFIX' => ['.c'],
|
45
|
-
'CCDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'],
|
45
|
+
'CCDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}', '-MT', 'TARGET'],
|
46
46
|
'CCCMD' => ['${CC}', '-c', '-o', '${_TARGET}', '${CCDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${CFLAGS}', '${CCFLAGS}', '${_SOURCES}'],
|
47
47
|
|
48
48
|
'CXX' => 'g++',
|
49
49
|
'CXXFLAGS' => [],
|
50
50
|
'CXXSUFFIX' => ['.cc', '.cpp', '.cxx', '.C'],
|
51
|
-
'CXXDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}'],
|
51
|
+
'CXXDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}', '-MT', 'TARGET'],
|
52
52
|
'CXXCMD' =>['${CXX}', '-c', '-o', '${_TARGET}', '${CXXDEPGEN}', '${INCPREFIX}${CPPPATH}', '${CPPFLAGS}', '${CXXFLAGS}', '${CCFLAGS}', '${_SOURCES}'],
|
53
53
|
|
54
54
|
'DC' => 'gdc',
|
55
55
|
'DFLAGS' => [],
|
56
56
|
'DSUFFIX' => ['.d'],
|
57
|
+
'DDEPGEN' => ['-MMD', '-MF', '${_DEPFILE}', '-MT', 'TARGET'],
|
57
58
|
'D_IMPORT_PATH' => [],
|
58
|
-
'DCCMD' => ['${DC}', '-c', '-o', '${_TARGET}', '${INCPREFIX}${D_IMPORT_PATH}', '${DFLAGS}', '${_SOURCES}'],
|
59
|
+
'DCCMD' => ['${DC}', '-c', '-o', '${_TARGET}', '${DDEPGEN}', '${INCPREFIX}${D_IMPORT_PATH}', '${DFLAGS}', '${_SOURCES}'],
|
59
60
|
}
|
60
61
|
end
|
61
62
|
|
@@ -114,7 +115,7 @@ module Rscons
|
|
114
115
|
if options[:command_status]
|
115
116
|
target, deps, cache, env, vars = options.values_at(:target, :sources, :cache, :env, :vars)
|
116
117
|
if File.exists?(vars['_DEPFILE'])
|
117
|
-
deps += Environment.parse_makefile_deps(vars['_DEPFILE'],
|
118
|
+
deps += Environment.parse_makefile_deps(vars['_DEPFILE'], 'TARGET')
|
118
119
|
FileUtils.rm_f(vars['_DEPFILE'])
|
119
120
|
end
|
120
121
|
cache.register_build(target, options[:tc].command, deps.uniq, env)
|
@@ -100,7 +100,7 @@ module Rscons
|
|
100
100
|
if options[:command_status]
|
101
101
|
target, deps, cache, env, vars = options.values_at(:target, :sources, :cache, :env, :vars)
|
102
102
|
if File.exists?(vars['_DEPFILE'])
|
103
|
-
deps += Environment.parse_makefile_deps(vars['_DEPFILE'],
|
103
|
+
deps += Environment.parse_makefile_deps(vars['_DEPFILE'], 'TARGET')
|
104
104
|
FileUtils.rm_f(vars['_DEPFILE'])
|
105
105
|
end
|
106
106
|
cache.register_build(target, options[:tc].command, deps.uniq, env)
|
data/lib/rscons/cache.rb
CHANGED
@@ -111,6 +111,10 @@ module Rscons
|
|
111
111
|
# @param deps [Array<String>] List of the target's dependency files.
|
112
112
|
# @param env [Environment] The Rscons::Environment.
|
113
113
|
# @param options [Hash] Optional options.
|
114
|
+
# @option options [Boolean] :debug
|
115
|
+
# If turned on, this causes the Cache to print messages explaining why
|
116
|
+
# a build target is out of date. This could aid a builder author in
|
117
|
+
# debugging the operation of their builder.
|
114
118
|
# @option options [Boolean] :strict_deps
|
115
119
|
# Only consider a target up to date if its list of dependencies is
|
116
120
|
# exactly equal (including order) to the cached list of dependencies
|
@@ -133,39 +137,79 @@ module Rscons
|
|
133
137
|
|
134
138
|
unless Rscons.phony_target?(target)
|
135
139
|
# target file must exist on disk
|
136
|
-
|
140
|
+
unless File.exists?(target)
|
141
|
+
if options[:debug]
|
142
|
+
puts "Target #{target} needs rebuilding because it does not exist on disk"
|
143
|
+
end
|
144
|
+
return false
|
145
|
+
end
|
137
146
|
end
|
138
147
|
|
139
148
|
# target must be registered in the cache
|
140
|
-
|
149
|
+
unless @cache["targets"].has_key?(cache_key)
|
150
|
+
if options[:debug]
|
151
|
+
puts "Target #{target} needs rebuilding because there is no cached build information for it"
|
152
|
+
end
|
153
|
+
return false
|
154
|
+
end
|
141
155
|
|
142
156
|
unless Rscons.phony_target?(target)
|
143
157
|
# target must have the same checksum as when it was built last
|
144
|
-
|
158
|
+
unless @cache["targets"][cache_key]["checksum"] == lookup_checksum(target)
|
159
|
+
if options[:debug]
|
160
|
+
puts "Target #{target} needs rebuilding because it has been changed on disk since being built last"
|
161
|
+
end
|
162
|
+
return false
|
163
|
+
end
|
145
164
|
end
|
146
165
|
|
147
166
|
# command used to build target must be identical
|
148
|
-
|
167
|
+
unless @cache["targets"][cache_key]["command"] == Digest::MD5.hexdigest(command.inspect)
|
168
|
+
if options[:debug]
|
169
|
+
puts "Target #{target} needs rebuilding because the command used to build it has changed"
|
170
|
+
end
|
171
|
+
return false
|
172
|
+
end
|
149
173
|
|
150
174
|
cached_deps = @cache["targets"][cache_key]["deps"] || []
|
151
175
|
cached_deps_fnames = cached_deps.map { |dc| dc["fname"] }
|
152
176
|
if options[:strict_deps]
|
153
177
|
# depedencies passed in must exactly equal those in the cache
|
154
|
-
|
178
|
+
unless deps == cached_deps_fnames
|
179
|
+
if options[:debug]
|
180
|
+
puts "Target #{target} needs rebuilding because the :strict_deps option is given and the set of dependencies does not match the previous set of dependencies"
|
181
|
+
end
|
182
|
+
return false
|
183
|
+
end
|
155
184
|
else
|
156
185
|
# all dependencies passed in must exist in cache (but cache may have more)
|
157
|
-
|
186
|
+
unless (Set.new(deps) - Set.new(cached_deps_fnames)).empty?
|
187
|
+
if options[:debug]
|
188
|
+
puts "Target #{target} needs rebuilding because there are new dependencies"
|
189
|
+
end
|
190
|
+
return false
|
191
|
+
end
|
158
192
|
end
|
159
193
|
|
160
194
|
# set of user dependencies must match
|
161
195
|
user_deps = env.get_user_deps(target) || []
|
162
196
|
cached_user_deps = @cache["targets"][cache_key]["user_deps"] || []
|
163
197
|
cached_user_deps_fnames = cached_user_deps.map { |dc| dc["fname"] }
|
164
|
-
|
198
|
+
unless user_deps == cached_user_deps_fnames
|
199
|
+
if options[:debug]
|
200
|
+
puts "Target #{target} needs rebuilding because the set of user-specified dependency files has changed"
|
201
|
+
end
|
202
|
+
return false
|
203
|
+
end
|
165
204
|
|
166
205
|
# all cached dependencies must have their checksums match
|
167
206
|
(cached_deps + cached_user_deps).each do |dep_cache|
|
168
|
-
|
207
|
+
unless dep_cache["checksum"] == lookup_checksum(dep_cache["fname"])
|
208
|
+
if options[:debug]
|
209
|
+
puts "Target #{target} needs rebuilding because dependency file #{dep_cache["fname"]} has changed"
|
210
|
+
end
|
211
|
+
return false
|
212
|
+
end
|
169
213
|
end
|
170
214
|
end
|
171
215
|
|
data/lib/rscons/cli.rb
CHANGED
data/lib/rscons/varset.rb
CHANGED
@@ -143,6 +143,13 @@ module Rscons
|
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
|
+
# Return a String representing the VarSet.
|
147
|
+
#
|
148
|
+
# @return [String] Representation of the VarSet.
|
149
|
+
def inspect
|
150
|
+
to_h.inspect
|
151
|
+
end
|
152
|
+
|
146
153
|
# Return an array containing the values associated with the given keys.
|
147
154
|
#
|
148
155
|
# @param keys [Array<String, Symbol>]
|
data/lib/rscons/version.rb
CHANGED
data/rscons.gemspec
CHANGED
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
|
+
version: 1.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Holtrop
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -100,20 +100,6 @@ dependencies:
|
|
100
100
|
- - ">="
|
101
101
|
- !ruby/object:Gem::Version
|
102
102
|
version: '0'
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: redcarpet
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - ">="
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '0'
|
117
103
|
description: Software construction library inspired by SCons and implemented in Ruby.
|
118
104
|
email:
|
119
105
|
- jholtrop@gmail.com
|
@@ -168,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
154
|
version: '0'
|
169
155
|
requirements: []
|
170
156
|
rubyforge_project:
|
171
|
-
rubygems_version: 2.
|
157
|
+
rubygems_version: 2.7.7
|
172
158
|
signing_key:
|
173
159
|
specification_version: 4
|
174
160
|
summary: Software construction library inspired by SCons and implemented in Ruby
|