rscons 1.11.1 → 1.12.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 +4 -4
- data/lib/rscons.rb +5 -0
- data/lib/rscons/ansi.rb +52 -0
- data/lib/rscons/builders/directory.rb +3 -2
- data/lib/rscons/builders/install.rb +2 -1
- data/lib/rscons/cli.rb +9 -1
- data/lib/rscons/environment.rb +54 -21
- data/lib/rscons/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b20b9e60cf3744f02e69d2abfcc87453225b2085
|
4
|
+
data.tar.gz: d491f89527d60984f9ded839f065a58b3d29b9fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58a410427a682e312203153d088aee392c74a68ddf50061896898327f43077fbf046310c25109bf3a6f5c192d03e79529e26175f32c8f1e23579d159c7633e71
|
7
|
+
data.tar.gz: 6520c5177851e0b238398ba2321a26383b00ba9ba8b7b2468de54d5212730745ffbacfa1624cf1a0c878604caaeb5789f595c08ea73432512137ed43686de0ea
|
data/lib/rscons.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require_relative "rscons/ansi"
|
1
2
|
require_relative "rscons/build_target"
|
2
3
|
require_relative "rscons/builder"
|
3
4
|
require_relative "rscons/cache"
|
@@ -50,6 +51,10 @@ module Rscons
|
|
50
51
|
# The number of threads to use when scheduling subprocesses.
|
51
52
|
attr_accessor :n_threads
|
52
53
|
|
54
|
+
# @return [Boolean]
|
55
|
+
# Whether to output ANSI color escape sequences.
|
56
|
+
attr_accessor :do_ansi_color
|
57
|
+
|
53
58
|
# Remove all generated files.
|
54
59
|
#
|
55
60
|
# @return [void]
|
data/lib/rscons/ansi.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
module Rscons
|
2
|
+
module Ansi
|
3
|
+
class << self
|
4
|
+
|
5
|
+
# Write a message to an IO with ANSI escape codes.
|
6
|
+
#
|
7
|
+
# @param io [IO]
|
8
|
+
# The IO to write to.
|
9
|
+
# @param message [Array<String, Symbol>]
|
10
|
+
# Strings to be printed, with Symbols representing ANSI escape codes.
|
11
|
+
#
|
12
|
+
# @return [void]
|
13
|
+
def write(io, *message)
|
14
|
+
do_color = Rscons.do_ansi_color
|
15
|
+
if do_color.nil?
|
16
|
+
do_color = do_ansi?(io)
|
17
|
+
end
|
18
|
+
out = ""
|
19
|
+
message.each do |m|
|
20
|
+
if m.is_a?(String)
|
21
|
+
out += m
|
22
|
+
elsif do_color
|
23
|
+
case m
|
24
|
+
when :red
|
25
|
+
out += "\e[0;31m"
|
26
|
+
when :cyan
|
27
|
+
out += "\e[0;36m"
|
28
|
+
when :reset
|
29
|
+
out += "\e[0m"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
io.write(out)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Determine whether to output ANSI color escape codes.
|
39
|
+
#
|
40
|
+
# @return [Boolean]
|
41
|
+
# Whether to output ANSI color escape codes.
|
42
|
+
def do_ansi?(io)
|
43
|
+
if RUBY_PLATFORM =~ /mingw/
|
44
|
+
(ENV["TERM"] == "xterm") && %w[fifo characterSpecial].include?(io.stat.ftype)
|
45
|
+
else
|
46
|
+
io.tty?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -17,10 +17,11 @@ module Rscons
|
|
17
17
|
if File.directory?(target)
|
18
18
|
target
|
19
19
|
elsif File.exists?(target)
|
20
|
-
$stderr
|
20
|
+
Ansi.write($stderr, :red, "Error: `#{target}' already exists and is not a directory", :reset, "\n")
|
21
21
|
false
|
22
22
|
else
|
23
|
-
|
23
|
+
desc = "Directory #{target}"
|
24
|
+
env.print_builder_run_message(desc, desc)
|
24
25
|
cache.mkdir_p(target)
|
25
26
|
target
|
26
27
|
end
|
@@ -43,7 +43,8 @@ module Rscons
|
|
43
43
|
# Check the cache and copy if necessary
|
44
44
|
unless cache.up_to_date?(dest, :Copy, [src], env)
|
45
45
|
unless printed_message
|
46
|
-
|
46
|
+
desc = "#{name} #{target}"
|
47
|
+
env.print_builder_run_message(desc, desc)
|
47
48
|
printed_message = true
|
48
49
|
end
|
49
50
|
cache.mkdir_p(File.dirname(dest))
|
data/lib/rscons/cli.rb
CHANGED
@@ -39,6 +39,15 @@ module Rscons
|
|
39
39
|
Rscons.n_threads = n_threads.to_i
|
40
40
|
end
|
41
41
|
|
42
|
+
opts.on("-r", "--color MODE", "Set color mode (off, auto, force)") do |color_mode|
|
43
|
+
case color_mode
|
44
|
+
when "off"
|
45
|
+
Rscons.do_ansi_color = false
|
46
|
+
when "force"
|
47
|
+
Rscons.do_ansi_color = true
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
42
51
|
opts.on_tail("--version", "Show version") do
|
43
52
|
puts "Rscons version #{Rscons::VERSION}"
|
44
53
|
exit 0
|
@@ -70,7 +79,6 @@ module Rscons
|
|
70
79
|
begin
|
71
80
|
load rsconsfile
|
72
81
|
rescue Rscons::BuildError => e
|
73
|
-
$stderr.puts e.message
|
74
82
|
exit 1
|
75
83
|
end
|
76
84
|
|
data/lib/rscons/environment.rb
CHANGED
@@ -118,6 +118,7 @@ module Rscons
|
|
118
118
|
env.add_post_build_hook(&build_hook_block)
|
119
119
|
end
|
120
120
|
end
|
121
|
+
env.instance_variable_set(:@n_threads, @n_threads)
|
121
122
|
|
122
123
|
if block_given?
|
123
124
|
yield env
|
@@ -302,13 +303,19 @@ module Rscons
|
|
302
303
|
# @return [void]
|
303
304
|
def process
|
304
305
|
cache = Cache.instance
|
306
|
+
failure = nil
|
305
307
|
begin
|
306
308
|
while @job_set.size > 0 or @threaded_commands.size > 0
|
307
309
|
|
308
|
-
|
309
|
-
|
310
|
+
if failure
|
311
|
+
@job_set.clear!
|
312
|
+
job = nil
|
313
|
+
else
|
314
|
+
targets_still_building = @threaded_commands.map do |tc|
|
315
|
+
tc.build_operation[:target]
|
316
|
+
end
|
317
|
+
job = @job_set.get_next_job_to_run(targets_still_building)
|
310
318
|
end
|
311
|
-
job = @job_set.get_next_job_to_run(targets_still_building)
|
312
319
|
|
313
320
|
# TODO: have Cache determine when checksums may be invalid based on
|
314
321
|
# file size and/or timestamp.
|
@@ -323,7 +330,9 @@ module Rscons
|
|
323
330
|
allow_delayed_execution: true,
|
324
331
|
setup_info: job[:setup_info])
|
325
332
|
unless result
|
326
|
-
|
333
|
+
failure = "Failed to build #{job[:target]}"
|
334
|
+
Ansi.write($stderr, :red, failure, :reset, "\n")
|
335
|
+
next
|
327
336
|
end
|
328
337
|
end
|
329
338
|
|
@@ -349,9 +358,11 @@ module Rscons
|
|
349
358
|
end
|
350
359
|
else
|
351
360
|
unless @echo == :command
|
352
|
-
|
361
|
+
print_failed_command(tc.command)
|
353
362
|
end
|
354
|
-
|
363
|
+
failure = "Failed to build #{tc.build_operation[:target]}"
|
364
|
+
Ansi.write($stderr, :red, failure, :reset, "\n")
|
365
|
+
break
|
355
366
|
end
|
356
367
|
end
|
357
368
|
|
@@ -359,6 +370,9 @@ module Rscons
|
|
359
370
|
ensure
|
360
371
|
cache.write
|
361
372
|
end
|
373
|
+
if failure
|
374
|
+
raise BuildError.new(failure)
|
375
|
+
end
|
362
376
|
end
|
363
377
|
|
364
378
|
# Clear all targets registered for the Environment.
|
@@ -398,16 +412,12 @@ module Rscons
|
|
398
412
|
#
|
399
413
|
# @return [true,false,nil] Return value from Kernel.system().
|
400
414
|
def execute(short_desc, command, options = {})
|
401
|
-
|
402
|
-
puts command_to_s(command)
|
403
|
-
elsif @echo == :short
|
404
|
-
puts short_desc
|
405
|
-
end
|
415
|
+
print_builder_run_message(short_desc, command)
|
406
416
|
env_args = options[:env] ? [options[:env]] : []
|
407
417
|
options_args = options[:options] ? [options[:options]] : []
|
408
418
|
system(*env_args, *Rscons.command_executer, *command, *options_args).tap do |result|
|
409
419
|
unless result or @echo == :command
|
410
|
-
|
420
|
+
print_failed_command(command)
|
411
421
|
end
|
412
422
|
end
|
413
423
|
end
|
@@ -451,6 +461,7 @@ module Rscons
|
|
451
461
|
user_deps = user_deps.map {|ud| expand_varref(ud)}
|
452
462
|
@user_deps[target] ||= []
|
453
463
|
@user_deps[target] = (@user_deps[target] + user_deps).uniq
|
464
|
+
build_after(target, user_deps)
|
454
465
|
end
|
455
466
|
|
456
467
|
# Manually record the given target(s) as needing to be built after the
|
@@ -642,7 +653,7 @@ module Rscons
|
|
642
653
|
call_build_hooks[:post]
|
643
654
|
else
|
644
655
|
unless @echo == :command
|
645
|
-
|
656
|
+
print_failed_command(tc.command)
|
646
657
|
end
|
647
658
|
end
|
648
659
|
end
|
@@ -829,7 +840,7 @@ module Rscons
|
|
829
840
|
varset_hash = @varset.to_h
|
830
841
|
varset_hash.keys.sort_by(&:to_s).each do |var|
|
831
842
|
var_str = var.is_a?(Symbol) ? var.inspect : var
|
832
|
-
|
843
|
+
Ansi.write($stdout, :cyan, var_str, :reset, " => #{varset_hash[var].inspect}\n")
|
833
844
|
end
|
834
845
|
end
|
835
846
|
|
@@ -842,6 +853,34 @@ module Rscons
|
|
842
853
|
@n_threads || Rscons.n_threads
|
843
854
|
end
|
844
855
|
|
856
|
+
# Print the builder run message, depending on the Environment's echo mode.
|
857
|
+
#
|
858
|
+
# @param short_description [String]
|
859
|
+
# Builder short description, printed if the echo mode is :short.
|
860
|
+
# @param command [Array<String>]
|
861
|
+
# Builder command, printed if the echo mode is :command.
|
862
|
+
#
|
863
|
+
# @return [void]
|
864
|
+
def print_builder_run_message(short_description, command)
|
865
|
+
case @echo
|
866
|
+
when :command
|
867
|
+
message = command_to_s(command) if command
|
868
|
+
when :short
|
869
|
+
message = short_description if short_description
|
870
|
+
end
|
871
|
+
Ansi.write($stdout, :cyan, message, :reset, "\n") if message
|
872
|
+
end
|
873
|
+
|
874
|
+
# Print a failed command.
|
875
|
+
#
|
876
|
+
# @param command [Array<String>]
|
877
|
+
# Builder command.
|
878
|
+
#
|
879
|
+
# @return [void]
|
880
|
+
def print_failed_command(command)
|
881
|
+
Ansi.write($stdout, :red, "Failed command was: #{command_to_s(command)}", :reset, "\n")
|
882
|
+
end
|
883
|
+
|
845
884
|
private
|
846
885
|
|
847
886
|
# Add a build target.
|
@@ -874,13 +913,7 @@ module Rscons
|
|
874
913
|
#
|
875
914
|
# @return [void]
|
876
915
|
def start_threaded_command(tc)
|
877
|
-
|
878
|
-
puts command_to_s(tc.command)
|
879
|
-
elsif @echo == :short
|
880
|
-
if tc.short_description
|
881
|
-
puts tc.short_description
|
882
|
-
end
|
883
|
-
end
|
916
|
+
print_builder_run_message(tc.short_description, tc.command)
|
884
917
|
|
885
918
|
env_args = tc.system_env ? [tc.system_env] : []
|
886
919
|
options_args = tc.system_options ? [tc.system_options] : []
|
data/lib/rscons/version.rb
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.12.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: 2017-
|
11
|
+
date: 2017-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- LICENSE.txt
|
120
120
|
- bin/rscons
|
121
121
|
- lib/rscons.rb
|
122
|
+
- lib/rscons/ansi.rb
|
122
123
|
- lib/rscons/build_target.rb
|
123
124
|
- lib/rscons/builder.rb
|
124
125
|
- lib/rscons/builders/cfile.rb
|