canoe 0.3.3.3 → 0.3.3.4
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/dependence.rb +14 -17
- data/lib/workspace/make.rb +15 -10
- data/lib/workspace/test.rb +20 -10
- data/lib/workspace/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 28de761c23336af9df9ed1117d47f85c22f77abd3030195462d0e43ccba5091c
|
|
4
|
+
data.tar.gz: f0734ecf77c58d6d86a72835fff2e56e1ff49504be3f2ad7cc3e182e550b5623
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ff0167eca4be655a4cc33258b5dddfa07e7cbad53d6745b38d75eb301c032403d5338e6249f7704dee460dbaa87a3a4141b8f1ca023abcff5af4a660691b4f2c
|
|
7
|
+
data.tar.gz: f5c494d7cefeefca5e2fd14353f9645479c29f4bb338330ebb9075d103fce73ea678bbb62823053bafdbe3bad497d7b5ecc8a3ca369ff078b937d1e7296e5fbd
|
data/lib/dependence.rb
CHANGED
|
@@ -17,6 +17,7 @@ module Canoe
|
|
|
17
17
|
include SystemCommand
|
|
18
18
|
|
|
19
19
|
class << self
|
|
20
|
+
include Err
|
|
20
21
|
include WorkSpaceUtil
|
|
21
22
|
def read_from(filename)
|
|
22
23
|
File.open(filename, 'r') do |f|
|
|
@@ -32,29 +33,28 @@ module Canoe
|
|
|
32
33
|
|
|
33
34
|
def compiling_filter(deps, build_time, src_sfx = 'cpp', hdr_sfx = 'hpp')
|
|
34
35
|
files = []
|
|
35
|
-
@processed = {}
|
|
36
36
|
@recompiles = {}
|
|
37
37
|
deps.each_key do |k|
|
|
38
|
-
@processed[k] = false
|
|
39
38
|
@recompiles[k] = false
|
|
40
39
|
end
|
|
41
40
|
deps.each do |k, v|
|
|
42
41
|
next if k.end_with? ".#{hdr_sfx}"
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
files << k
|
|
46
|
-
@processed[k] = true
|
|
47
|
-
@recompiles[k] = true
|
|
48
|
-
next
|
|
49
|
-
end
|
|
43
|
+
# first analyze dependency to discover circular includes
|
|
50
44
|
v.each do |f|
|
|
51
45
|
next unless mark(f, build_time, deps) || mark(f.sub(".#{hdr_sfx}", ".#{src_sfx}"), build_time, deps)
|
|
52
46
|
|
|
53
47
|
files << k
|
|
54
|
-
@processed[k] = true
|
|
55
48
|
@recompiles[k] = true
|
|
56
49
|
break
|
|
57
50
|
end
|
|
51
|
+
|
|
52
|
+
next if @recompiles[k]
|
|
53
|
+
|
|
54
|
+
if should_recompile?(k, build_time)
|
|
55
|
+
files << k
|
|
56
|
+
@recompiles[k] = true
|
|
57
|
+
end
|
|
58
58
|
end
|
|
59
59
|
files
|
|
60
60
|
end
|
|
@@ -62,22 +62,19 @@ module Canoe
|
|
|
62
62
|
private
|
|
63
63
|
|
|
64
64
|
def mark(file, build_time, deps)
|
|
65
|
-
ret = false
|
|
66
65
|
return false unless File.exist? file
|
|
67
|
-
return true if should_recompile?(file, build_time)
|
|
68
66
|
|
|
67
|
+
# first analyze dependency to discover circular includes
|
|
69
68
|
deps[file].each do |f|
|
|
70
|
-
if @processed[f]
|
|
71
|
-
ret |= @recompiles[f]
|
|
72
|
-
next
|
|
73
|
-
end
|
|
74
|
-
@processed[f] = true
|
|
75
69
|
if mark(f, build_time, deps)
|
|
76
70
|
@recompiles[f] = true
|
|
77
71
|
return true
|
|
78
72
|
end
|
|
73
|
+
rescue SystemStackError
|
|
74
|
+
puts "#{"Fatal: ".red}file #{file} is circularly included"
|
|
75
|
+
exit false
|
|
79
76
|
end
|
|
80
|
-
|
|
77
|
+
true if should_recompile?(file, build_time)
|
|
81
78
|
end
|
|
82
79
|
|
|
83
80
|
def should_recompile?(file, build_time)
|
data/lib/workspace/make.rb
CHANGED
|
@@ -84,7 +84,7 @@ module Canoe
|
|
|
84
84
|
def define_variables(makefile, deps)
|
|
85
85
|
define_dirs(makefile)
|
|
86
86
|
src_files = deps.keys.select { |f| f.end_with? get_source_suffix }
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
generate_all_names(src_files)
|
|
89
89
|
define_srcs(makefile, src_files)
|
|
90
90
|
makefile.puts ''
|
|
@@ -163,15 +163,20 @@ module Canoe
|
|
|
163
163
|
end
|
|
164
164
|
|
|
165
165
|
def get_all_dep_name(file_name, deps)
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
166
|
+
begin
|
|
167
|
+
dep = deps[file_name]
|
|
168
|
+
if dep.empty?
|
|
169
|
+
[]
|
|
170
|
+
else
|
|
171
|
+
tmp = dep.map { |n| extract_name(n, @workspace.components_prefix).upcase }
|
|
172
|
+
dep.each do |d|
|
|
173
|
+
tmp += get_all_dep_name(d, deps)
|
|
174
|
+
end
|
|
175
|
+
tmp
|
|
173
176
|
end
|
|
174
|
-
|
|
177
|
+
rescue SystemStackError
|
|
178
|
+
puts "#{"Fatal: ".red}file #{file_name} is circularly included"
|
|
179
|
+
exit false
|
|
175
180
|
end
|
|
176
181
|
end
|
|
177
182
|
|
|
@@ -246,7 +251,7 @@ module Canoe
|
|
|
246
251
|
def make_clean(makefile)
|
|
247
252
|
clean = <<~DOC
|
|
248
253
|
.PHONY: clean
|
|
249
|
-
clean:
|
|
254
|
+
clean:
|
|
250
255
|
\trm ./target/*
|
|
251
256
|
\trm ./obj/*.o
|
|
252
257
|
DOC
|
data/lib/workspace/test.rb
CHANGED
|
@@ -12,13 +12,17 @@ module Canoe
|
|
|
12
12
|
# extract one test file's dependency
|
|
13
13
|
def extract_one_file(file, deps)
|
|
14
14
|
ret = deps[file].map { |f| f.gsub(".#{@header_suffix}", ".#{@source_suffix}") }
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
begin
|
|
16
|
+
deps[file].each do |f|
|
|
17
|
+
dep = extract_one_file(f, deps)
|
|
18
|
+
dep.each do |d|
|
|
19
|
+
ret << d unless ret.include?(d)
|
|
20
|
+
end
|
|
20
21
|
end
|
|
21
|
-
|
|
22
|
+
rescue SystemStackError
|
|
23
|
+
puts "#{"Fatal: ".red}file #{file} is circularly included"
|
|
24
|
+
exit false
|
|
25
|
+
end
|
|
22
26
|
ret.map { |f| f.gsub(".#{@header_suffix}", ".#{@source_suffix}") }
|
|
23
27
|
end
|
|
24
28
|
|
|
@@ -83,17 +87,23 @@ module Canoe
|
|
|
83
87
|
@compiler.link_executable target, extract_one_file_obj(test_file, deps) + [file_to_obj(test_file)]
|
|
84
88
|
end
|
|
85
89
|
|
|
86
|
-
def build_one_test(test_file, deps)
|
|
90
|
+
def build_one_test(test_file, deps, indent = "")
|
|
87
91
|
files = DepAnalyzer.compiling_filter(target_deps, Time.new(0), @source_suffix, @header_suffix)
|
|
88
92
|
flag = true
|
|
89
93
|
files << test_file
|
|
90
94
|
|
|
95
|
+
stepper = Stepper.new(files.size, files.size)
|
|
96
|
+
|
|
91
97
|
files.each do |f|
|
|
92
98
|
o = file_to_obj(f)
|
|
99
|
+
printf "#{indent}#{stepper.progress_as_str.green} compiling #{f.yellow}: "
|
|
93
100
|
flag &= compile f, o
|
|
101
|
+
stepper.step
|
|
94
102
|
end
|
|
95
|
-
|
|
96
103
|
abort_on_err("Compiling errors encountered") unless flag;
|
|
104
|
+
|
|
105
|
+
printf "#{indent}#{stepper.progress_as_str.green} compiling finished\n"
|
|
106
|
+
puts "#{indent}[100%]".green + " linking"
|
|
97
107
|
link_one_test(test_file, deps)
|
|
98
108
|
end
|
|
99
109
|
|
|
@@ -105,8 +115,8 @@ module Canoe
|
|
|
105
115
|
stepper = Stepper.new fetch_all_test_files.size, files.size
|
|
106
116
|
|
|
107
117
|
files.each do |f|
|
|
108
|
-
printf "#{stepper.progress_as_str.green}
|
|
109
|
-
build_one_test(f, deps)
|
|
118
|
+
printf "#{stepper.progress_as_str.green} building #{File.basename(f, "." + @source_suffix).yellow}:\n"
|
|
119
|
+
build_one_test(f, deps, " ")
|
|
110
120
|
stepper.step
|
|
111
121
|
end
|
|
112
122
|
end
|
data/lib/workspace/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: canoe
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.3.
|
|
4
|
+
version: 0.3.3.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- XIONG Ziwei
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-12-
|
|
11
|
+
date: 2021-12-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: |+
|
|
14
14
|
Canoe offers project management and building facilities to C/C++ projects.
|