build 1.1.1 → 2.0.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/.travis.yml +10 -12
- data/Gemfile +0 -5
- data/Rakefile +3 -2
- data/build.gemspec +4 -2
- data/lib/build/chain_node.rb +95 -0
- data/lib/build/controller.rb +4 -12
- data/lib/build/logger.rb +7 -5
- data/lib/build/rule.rb +24 -1
- data/lib/build/rulebook.rb +9 -9
- data/lib/build/task.rb +18 -18
- data/lib/build/version.rb +1 -1
- data/spec/build/controller_spec.rb +80 -66
- data/spec/build/rulebook_spec.rb +1 -1
- data/spec/build/target.rb +20 -0
- data/spec/spec_helper.rb +2 -19
- metadata +40 -11
- data/lib/build/target_node.rb +0 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9cc4f25b15c353f405140484002cf0106fa5cdfc115269ff256d92fcc86be47f
|
4
|
+
data.tar.gz: d92ce080796f19b6a1a3ff80acbd51b43f97845ac201c7ea295da464e64daf34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0924bb939bbb829cd707df95fe25b0ed21965dd1d0a87509f1adeb9bb4f9a16df2e35dedeed89ffc68a31763d3db3a8766b7b60b4338f4996b87c135357f1cf
|
7
|
+
data.tar.gz: 58b0a8611fa3549816e8ecc837876fd33be5b3c6eae51fc868ad8063f1e0810fdb948ea4a80864123c73077308f47ccde5f35ea50665a89f0c74d7c0c2c8a805
|
data/.travis.yml
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
language: ruby
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
- 2.2.4
|
6
|
-
- 2.3.0
|
7
|
-
- ruby-head
|
8
|
-
- rbx-2
|
9
|
-
env: COVERAGE=true
|
2
|
+
dist: xenial
|
3
|
+
cache: bundler
|
4
|
+
|
10
5
|
matrix:
|
11
|
-
|
12
|
-
|
13
|
-
- rvm:
|
14
|
-
- rvm:
|
6
|
+
include:
|
7
|
+
- rvm: 2.3
|
8
|
+
- rvm: 2.4
|
9
|
+
- rvm: 2.5
|
10
|
+
- rvm: 2.6
|
11
|
+
- rvm: 2.6
|
12
|
+
env: COVERAGE=BriefSummary,Coveralls
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/build.gemspec
CHANGED
@@ -18,12 +18,14 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.required_ruby_version = '>= 2.0'
|
19
19
|
|
20
20
|
spec.add_dependency "build-graph", "~> 1.0"
|
21
|
-
spec.add_dependency "build-environment", "~> 1.
|
21
|
+
spec.add_dependency "build-environment", "~> 1.2"
|
22
|
+
spec.add_dependency "build-dependency", "~> 1.2"
|
22
23
|
spec.add_dependency "build-makefile", "~> 1.0"
|
23
24
|
|
24
25
|
spec.add_dependency "graphviz"
|
25
26
|
|
26
|
-
spec.add_development_dependency "
|
27
|
+
spec.add_development_dependency "covered"
|
28
|
+
spec.add_development_dependency "bundler"
|
27
29
|
spec.add_development_dependency "rspec", "~> 3.6"
|
28
30
|
spec.add_development_dependency "rake"
|
29
31
|
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in
|
11
|
+
# all copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
# THE SOFTWARE.
|
20
|
+
|
21
|
+
require 'build/files'
|
22
|
+
require 'build/graph'
|
23
|
+
|
24
|
+
require_relative 'task'
|
25
|
+
|
26
|
+
module Build
|
27
|
+
class ChainNode < Graph::Node
|
28
|
+
def initialize(chain, arguments, environment)
|
29
|
+
@chain = chain
|
30
|
+
@arguments = arguments
|
31
|
+
@environment = environment
|
32
|
+
|
33
|
+
# Wait here, for all dependent targets, to be done:
|
34
|
+
super(Files::List::NONE, :inherit, chain)
|
35
|
+
end
|
36
|
+
|
37
|
+
def task_class
|
38
|
+
Task
|
39
|
+
end
|
40
|
+
|
41
|
+
def apply_dependency(scope, dependency)
|
42
|
+
# puts "Traversing #{dependency.name}..."
|
43
|
+
|
44
|
+
# Not sure why need first
|
45
|
+
provision = @chain.resolved[dependency].first
|
46
|
+
|
47
|
+
environments = [@environment]
|
48
|
+
public_environments = []
|
49
|
+
|
50
|
+
provision.each_dependency do |dependency|
|
51
|
+
if environment = apply_dependency(scope, dependency)
|
52
|
+
environments << environment
|
53
|
+
|
54
|
+
unless dependency.private?
|
55
|
+
public_environments << environment
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
unless dependency.alias?
|
61
|
+
# puts "Building #{dependency.name}: #{provision.value}..."
|
62
|
+
|
63
|
+
local_environment = Build::Environment.combine(*environments)&.evaluate || Build::Environment.new
|
64
|
+
|
65
|
+
task_class = Rulebook.for(local_environment).with(Task, environment: local_environment)
|
66
|
+
|
67
|
+
task = task_class.new(scope.walker, self, scope.group, logger: scope.logger)
|
68
|
+
|
69
|
+
output_environment = nil
|
70
|
+
|
71
|
+
scope.walker.with(task_class: task_class) do
|
72
|
+
task.visit do
|
73
|
+
output_environment = Build::Environment.new(local_environment)
|
74
|
+
|
75
|
+
output_environment.construct!(task, *@arguments, &provision.value)
|
76
|
+
|
77
|
+
public_environments << output_environment.dup(parent: nil)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
return Build::Environment.combine(*public_environments)
|
83
|
+
end
|
84
|
+
|
85
|
+
def apply!(scope)
|
86
|
+
@chain.dependencies.each do |dependency|
|
87
|
+
apply_dependency(scope, dependency)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def to_s
|
92
|
+
"#<#{self.class}>"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
data/lib/build/controller.rb
CHANGED
@@ -27,7 +27,7 @@ require_relative 'rulebook'
|
|
27
27
|
require_relative 'name'
|
28
28
|
|
29
29
|
require_relative 'rule_node'
|
30
|
-
require_relative '
|
30
|
+
require_relative 'chain_node'
|
31
31
|
require_relative 'task'
|
32
32
|
|
33
33
|
require_relative 'logger'
|
@@ -72,17 +72,9 @@ module Build
|
|
72
72
|
@walker.failed?
|
73
73
|
end
|
74
74
|
|
75
|
-
# Add a build
|
76
|
-
def
|
77
|
-
|
78
|
-
|
79
|
-
# Not sure if this is a good idea - makes debugging slightly easier.
|
80
|
-
Object.const_set("TaskClassFor#{Name.from_target(target.name).identifier}_#{task_class.object_id}", task_class)
|
81
|
-
|
82
|
-
# A target node will invoke the build callback on target.
|
83
|
-
@nodes << TargetNode.new(task_class, target, arguments)
|
84
|
-
|
85
|
-
return @nodes.last
|
75
|
+
# Add a build environment to the controller.
|
76
|
+
def add_chain(chain, arguments = [], environment)
|
77
|
+
@nodes << ChainNode.new(chain, arguments, environment)
|
86
78
|
end
|
87
79
|
|
88
80
|
def update
|
data/lib/build/logger.rb
CHANGED
@@ -64,11 +64,13 @@ module Build
|
|
64
64
|
|
65
65
|
buffer << "\n"
|
66
66
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
67
|
+
if @verbose
|
68
|
+
if environment
|
69
|
+
environment.each do |key, value|
|
70
|
+
buffer << "\texport #{key}=#{value.dump}\n"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
72
74
|
end
|
73
75
|
|
74
76
|
def format_exception(exception, buffer)
|
data/lib/build/rule.rb
CHANGED
@@ -19,8 +19,16 @@
|
|
19
19
|
# THE SOFTWARE.
|
20
20
|
|
21
21
|
module Build
|
22
|
-
# A rule is a function with a specific set of input and output parameters, which can match against a given set of specific
|
22
|
+
# A rule is a function with a specific set of input and output parameters, which can match against a given set of specific arguments. For example, there might be several rules for compiling, but the specific rules depend on the language being compiled.
|
23
23
|
class Rule
|
24
|
+
def self.build(name, &block)
|
25
|
+
rule = self.new(*name.split('.', 2))
|
26
|
+
|
27
|
+
rule.instance_eval(&block)
|
28
|
+
|
29
|
+
return rule.freeze
|
30
|
+
end
|
31
|
+
|
24
32
|
class Parameter
|
25
33
|
def initialize(direction, name, options = {}, &block)
|
26
34
|
@direction = direction
|
@@ -119,6 +127,21 @@ module Build
|
|
119
127
|
|
120
128
|
attr :primary_output
|
121
129
|
|
130
|
+
def freeze
|
131
|
+
return self if frozen?
|
132
|
+
|
133
|
+
@name.freeze
|
134
|
+
@full_name.freeze
|
135
|
+
@process_name.freeze
|
136
|
+
@type.freeze
|
137
|
+
|
138
|
+
@apply.freeze
|
139
|
+
@parameters.freeze
|
140
|
+
@primary_output.freeze
|
141
|
+
|
142
|
+
super
|
143
|
+
end
|
144
|
+
|
122
145
|
def input(name, options = {}, &block)
|
123
146
|
self << Parameter.new(:input, name, options, &block)
|
124
147
|
end
|
data/lib/build/rulebook.rb
CHANGED
@@ -36,12 +36,12 @@ module Build
|
|
36
36
|
processes = @processes[rule.process_name] ||= []
|
37
37
|
processes << rule
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def [] name
|
41
41
|
@rules[name]
|
42
42
|
end
|
43
43
|
|
44
|
-
def with(superclass, state
|
44
|
+
def with(superclass, **state)
|
45
45
|
task_class = Class.new(superclass)
|
46
46
|
|
47
47
|
# Define methods for all processes, e.g. task_class#compile
|
@@ -65,12 +65,18 @@ module Build
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
+
# Typically, this defines methods like #environment and #target which can be accessed in the build rule.
|
68
69
|
state.each do |key, value|
|
69
70
|
task_class.send(:define_method, key) do
|
70
71
|
value
|
71
72
|
end
|
72
73
|
end
|
73
74
|
|
75
|
+
rulebook = self
|
76
|
+
task_class.send(:define_method, :rulebook) do
|
77
|
+
rulebook
|
78
|
+
end
|
79
|
+
|
74
80
|
return task_class
|
75
81
|
end
|
76
82
|
|
@@ -78,13 +84,7 @@ module Build
|
|
78
84
|
rulebook = self.new
|
79
85
|
|
80
86
|
environment.defined.each do |name, define|
|
81
|
-
|
82
|
-
|
83
|
-
object.instance_eval(&define.block)
|
84
|
-
|
85
|
-
object.freeze
|
86
|
-
|
87
|
-
rulebook << object
|
87
|
+
rulebook << define.klass.build(name, &define.block)
|
88
88
|
end
|
89
89
|
|
90
90
|
return rulebook
|
data/lib/build/task.rb
CHANGED
@@ -49,18 +49,22 @@ module Build
|
|
49
49
|
def initialize(walker, node, group, logger: nil)
|
50
50
|
super(walker, node)
|
51
51
|
|
52
|
+
@environment = environment
|
52
53
|
@group = group
|
53
|
-
|
54
|
-
@logger = logger || Logger.new($stderr)
|
54
|
+
@logger = logger
|
55
55
|
end
|
56
56
|
|
57
|
+
attr :environment
|
58
|
+
attr :group
|
59
|
+
attr :logger
|
60
|
+
|
57
61
|
def wet?
|
58
62
|
@node.dirty?
|
59
63
|
end
|
60
64
|
|
61
65
|
def spawn(*arguments)
|
62
66
|
if wet?
|
63
|
-
@logger
|
67
|
+
@logger&.info(:shell) {arguments}
|
64
68
|
status = @group.spawn(*arguments)
|
65
69
|
|
66
70
|
if status != 0
|
@@ -80,21 +84,21 @@ module Build
|
|
80
84
|
def touch(path)
|
81
85
|
return unless wet?
|
82
86
|
|
83
|
-
@logger
|
87
|
+
@logger&.info(:shell) {['touch', path]}
|
84
88
|
FileUtils.touch(path)
|
85
89
|
end
|
86
90
|
|
87
91
|
def cp(source_path, destination_path)
|
88
92
|
return unless wet?
|
89
93
|
|
90
|
-
@logger
|
94
|
+
@logger&.info(:shell) {['cp', source_path, destination_path]}
|
91
95
|
FileUtils.copy(source_path, destination_path)
|
92
96
|
end
|
93
97
|
|
94
98
|
def rm(path)
|
95
99
|
return unless wet?
|
96
100
|
|
97
|
-
@logger
|
101
|
+
@logger&.info(:shell) {['rm -rf', path]}
|
98
102
|
FileUtils.rm_rf(path)
|
99
103
|
end
|
100
104
|
|
@@ -102,7 +106,7 @@ module Build
|
|
102
106
|
return unless wet?
|
103
107
|
|
104
108
|
unless File.exist?(path)
|
105
|
-
@logger
|
109
|
+
@logger&.info(:shell) {['mkpath', path]}
|
106
110
|
FileUtils.mkpath(path)
|
107
111
|
end
|
108
112
|
end
|
@@ -110,24 +114,19 @@ module Build
|
|
110
114
|
def install(source_path, destination_path)
|
111
115
|
return unless wet?
|
112
116
|
|
113
|
-
@logger
|
117
|
+
@logger&.info(:shell) {['install', source_path, destination_path]}
|
114
118
|
FileUtils.install(source_path, destination_path)
|
115
119
|
end
|
116
120
|
|
117
121
|
def write(path, data, mode = "w")
|
118
122
|
return unless wet?
|
119
123
|
|
120
|
-
@logger
|
124
|
+
@logger&.info(:shell) {["write", path, "#{data.size}bytes"]}
|
121
125
|
File.open(path, mode) do |file|
|
122
126
|
file.write(data)
|
123
127
|
end
|
124
128
|
end
|
125
129
|
|
126
|
-
# @deprecated Please use {#self} instead.
|
127
|
-
def fs
|
128
|
-
self
|
129
|
-
end
|
130
|
-
|
131
130
|
def update
|
132
131
|
@node.apply!(self)
|
133
132
|
end
|
@@ -135,12 +134,13 @@ module Build
|
|
135
134
|
def invoke_rule(rule, arguments, &block)
|
136
135
|
arguments = rule.normalize(arguments, self)
|
137
136
|
|
138
|
-
@logger
|
137
|
+
@logger&.debug(:invoke) {"-> #{rule}(#{arguments.inspect})"}
|
139
138
|
|
140
|
-
|
141
|
-
|
139
|
+
invoke(
|
140
|
+
RuleNode.new(rule, arguments, &block)
|
141
|
+
)
|
142
142
|
|
143
|
-
@logger
|
143
|
+
@logger&.debug(:invoke) {"<- #{rule}(...) -> #{rule.result(arguments)}"}
|
144
144
|
|
145
145
|
return rule.result(arguments)
|
146
146
|
end
|
data/lib/build/version.rb
CHANGED
@@ -23,92 +23,106 @@
|
|
23
23
|
require 'build/rulebook'
|
24
24
|
require 'build/controller'
|
25
25
|
|
26
|
+
require_relative 'target'
|
27
|
+
|
26
28
|
RSpec.describe Build::Controller do
|
27
|
-
let(:
|
28
|
-
Class.new do
|
29
|
-
def initialize(name)
|
30
|
-
@name = name
|
31
|
-
end
|
32
|
-
|
33
|
-
attr :name
|
34
|
-
|
35
|
-
def build(&block)
|
36
|
-
@build = block if block_given?
|
37
|
-
|
38
|
-
return @build
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
29
|
+
let(:base) {Build::Environment.new(name: "base")}
|
42
30
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
31
|
+
context "failure exit status" do
|
32
|
+
let(:make_target) do
|
33
|
+
Target.new("make") do |target|
|
34
|
+
target.provides "make" do
|
35
|
+
define Build::Rule, "make.file" do
|
36
|
+
output :destination
|
37
|
+
|
38
|
+
apply do |parameters|
|
39
|
+
run! "exit -1"
|
40
|
+
end
|
41
|
+
end
|
50
42
|
end
|
51
43
|
end
|
52
44
|
end
|
53
45
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
46
|
+
let(:build_target) do
|
47
|
+
Target.new("foo") do |target|
|
48
|
+
target.depends "make"
|
49
|
+
|
50
|
+
target.provides "foo" do
|
51
|
+
foo_path = Build::Files::Path['foo']
|
52
|
+
|
53
|
+
make destination: foo_path
|
54
|
+
end
|
55
|
+
end
|
58
56
|
end
|
59
57
|
|
60
|
-
|
61
|
-
|
58
|
+
it "build graph should fail" do
|
59
|
+
chain = Build::Dependency::Chain.expand(["foo"], [make_target, build_target])
|
60
|
+
|
61
|
+
controller = Build::Controller.new do |controller|
|
62
|
+
controller.add_chain(chain, [], base)
|
63
|
+
end
|
64
|
+
|
65
|
+
controller.logger.level = Logger::DEBUG
|
66
|
+
|
67
|
+
controller.update
|
68
|
+
|
69
|
+
expect(controller.failed?).to be_truthy
|
62
70
|
end
|
63
|
-
|
64
|
-
controller.logger.level = Logger::DEBUG
|
65
|
-
|
66
|
-
controller.update
|
67
|
-
|
68
|
-
expect(controller.failed?).to be_truthy
|
69
71
|
end
|
70
72
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
73
|
+
context "copying files" do
|
74
|
+
let(:files_target) do
|
75
|
+
Target.new("files") do |target|
|
76
|
+
target.provides "files" do
|
77
|
+
define Build::Rule, "make.file" do
|
78
|
+
output :destination
|
79
|
+
|
80
|
+
apply do |parameters|
|
81
|
+
touch parameters[:destination]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
define Build::Rule, "copy.file" do
|
86
|
+
input :source
|
87
|
+
output :destination
|
88
|
+
|
89
|
+
apply do |parameters|
|
90
|
+
cp parameters[:source], parameters[:destination]
|
91
|
+
end
|
92
|
+
end
|
78
93
|
end
|
79
94
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
95
|
+
end
|
96
|
+
|
97
|
+
let(:build_target) do
|
98
|
+
Target.new("build") do |target|
|
99
|
+
target.depends "files"
|
84
100
|
|
85
|
-
|
86
|
-
|
101
|
+
target.provides "foo" do
|
102
|
+
foo_path = Build::Files::Path['foo']
|
103
|
+
bar_path = Build::Files::Path['bar']
|
104
|
+
|
105
|
+
make destination: foo_path
|
106
|
+
copy source: foo_path, destination: bar_path
|
87
107
|
end
|
88
108
|
end
|
89
109
|
end
|
90
110
|
|
91
|
-
|
92
|
-
|
93
|
-
foo_path = Build::Files::Path['foo']
|
94
|
-
bar_path = Build::Files::Path['bar']
|
111
|
+
it "should execute the build graph" do
|
112
|
+
chain = Build::Dependency::Chain.expand(["foo"], [files_target, build_target])
|
95
113
|
|
96
|
-
|
114
|
+
controller = Build::Controller.new do |controller|
|
115
|
+
controller.add_chain(chain, [], base)
|
116
|
+
end
|
97
117
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
118
|
+
expect(controller.nodes.size).to be 1
|
119
|
+
|
120
|
+
controller.update
|
121
|
+
|
122
|
+
expect(File).to be_exist('foo')
|
123
|
+
expect(File).to be_exist('bar')
|
124
|
+
|
125
|
+
FileUtils.rm ['foo', 'bar']
|
103
126
|
end
|
104
|
-
|
105
|
-
expect(controller.nodes.size).to be 1
|
106
|
-
|
107
|
-
controller.update
|
108
|
-
|
109
|
-
expect(File).to be_exist('foo')
|
110
|
-
expect(File).to be_exist('bar')
|
111
|
-
|
112
|
-
FileUtils.rm ['foo', 'bar']
|
113
127
|
end
|
114
128
|
end
|
data/spec/build/rulebook_spec.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
require 'build/dependency'
|
3
|
+
|
4
|
+
class Target
|
5
|
+
include Build::Dependency
|
6
|
+
|
7
|
+
def initialize(name = nil)
|
8
|
+
@name = name
|
9
|
+
|
10
|
+
if block_given?
|
11
|
+
yield self
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
attr :name
|
16
|
+
|
17
|
+
def inspect
|
18
|
+
"\#<#{self.class}: #{@name}>"
|
19
|
+
end
|
20
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,23 +1,6 @@
|
|
1
1
|
|
2
|
-
|
3
|
-
|
4
|
-
require 'simplecov'
|
5
|
-
|
6
|
-
SimpleCov.start do
|
7
|
-
add_filter "/spec/"
|
8
|
-
end
|
9
|
-
|
10
|
-
if ENV['TRAVIS']
|
11
|
-
require 'coveralls'
|
12
|
-
Coveralls.wear!
|
13
|
-
end
|
14
|
-
rescue LoadError
|
15
|
-
warn "Could not load simplecov: #{$!}"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
require "bundler/setup"
|
20
|
-
require "build"
|
2
|
+
require 'covered/rspec'
|
3
|
+
require 'build'
|
21
4
|
|
22
5
|
RSpec.configure do |config|
|
23
6
|
# Enable flags like --only-failures and --next-failure
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: build
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: build-graph
|
@@ -30,14 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.2'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: build-dependency
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.2'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.2'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: build-makefile
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,20 +80,34 @@ dependencies:
|
|
66
80
|
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: covered
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: bundler
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
|
-
- - "
|
101
|
+
- - ">="
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
103
|
+
version: '0'
|
76
104
|
type: :development
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
|
-
- - "
|
108
|
+
- - ">="
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rspec
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,6 +152,7 @@ files:
|
|
124
152
|
- Rakefile
|
125
153
|
- build.gemspec
|
126
154
|
- lib/build.rb
|
155
|
+
- lib/build/chain_node.rb
|
127
156
|
- lib/build/controller.rb
|
128
157
|
- lib/build/graphviz.rb
|
129
158
|
- lib/build/logger.rb
|
@@ -131,13 +160,13 @@ files:
|
|
131
160
|
- lib/build/rule.rb
|
132
161
|
- lib/build/rule_node.rb
|
133
162
|
- lib/build/rulebook.rb
|
134
|
-
- lib/build/target_node.rb
|
135
163
|
- lib/build/task.rb
|
136
164
|
- lib/build/version.rb
|
137
165
|
- spec/build/controller_spec.rb
|
138
166
|
- spec/build/name_spec.rb
|
139
167
|
- spec/build/rule_spec.rb
|
140
168
|
- spec/build/rulebook_spec.rb
|
169
|
+
- spec/build/target.rb
|
141
170
|
- spec/spec_helper.rb
|
142
171
|
homepage: ''
|
143
172
|
licenses:
|
@@ -158,8 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
187
|
- !ruby/object:Gem::Version
|
159
188
|
version: '0'
|
160
189
|
requirements: []
|
161
|
-
|
162
|
-
rubygems_version: 2.6.12
|
190
|
+
rubygems_version: 3.0.2
|
163
191
|
signing_key:
|
164
192
|
specification_version: 4
|
165
193
|
summary: Build is a framework for working with task based build systems.
|
@@ -168,4 +196,5 @@ test_files:
|
|
168
196
|
- spec/build/name_spec.rb
|
169
197
|
- spec/build/rule_spec.rb
|
170
198
|
- spec/build/rulebook_spec.rb
|
199
|
+
- spec/build/target.rb
|
171
200
|
- spec/spec_helper.rb
|
data/lib/build/target_node.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
# Copyright, 2016, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
2
|
-
#
|
3
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
# of this software and associated documentation files (the "Software"), to deal
|
5
|
-
# in the Software without restriction, including without limitation the rights
|
6
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
# copies of the Software, and to permit persons to whom the Software is
|
8
|
-
# furnished to do so, subject to the following conditions:
|
9
|
-
#
|
10
|
-
# The above copyright notice and this permission notice shall be included in
|
11
|
-
# all copies or substantial portions of the Software.
|
12
|
-
#
|
13
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
-
# THE SOFTWARE.
|
20
|
-
|
21
|
-
require 'build/files'
|
22
|
-
require 'build/graph'
|
23
|
-
|
24
|
-
module Build
|
25
|
-
class TargetNode < Graph::Node
|
26
|
-
def initialize(task_class, target, arguments)
|
27
|
-
@target = target
|
28
|
-
@task_class = task_class
|
29
|
-
@arguments = arguments
|
30
|
-
|
31
|
-
# Wait here, for all dependent targets, to be done:
|
32
|
-
super(Files::List::NONE, :inherit, target)
|
33
|
-
end
|
34
|
-
|
35
|
-
attr :task_class
|
36
|
-
|
37
|
-
def name
|
38
|
-
@task_class.name
|
39
|
-
end
|
40
|
-
|
41
|
-
def apply!(scope)
|
42
|
-
scope.instance_exec(*@arguments, &@target.build)
|
43
|
-
end
|
44
|
-
|
45
|
-
def inspect
|
46
|
-
@task_class.name.inspect
|
47
|
-
end
|
48
|
-
|
49
|
-
def to_s
|
50
|
-
"#<#{self.class} #{@target.name}>"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|