canoe 0.3.3.5 → 0.3.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3111ef55f0ad1370cff694b437b63ae49dce9f59347e3b70dab2e5abecabd32
4
- data.tar.gz: 97a41a1bf0f2cd914398db463bcafa05705ddf3b6a1987e815a9cc306b4a3d14
3
+ metadata.gz: e50f9ba8d96948ef0cf070c3cf105641b3abc7e6c6b83823b989fb5b83f51cc5
4
+ data.tar.gz: '02916721983f2bd1fc18837f7db4a73dd77c42bebbe4c36d498e0a8e4b73fe2f'
5
5
  SHA512:
6
- metadata.gz: 81c885681b3c65a638915922df7ad598b90d206c3c988f35b0ac685d648634288e4cfe67094fc53c91b6a691c241cc1097c0da4e2794f75511b502af92290636
7
- data.tar.gz: f4813ff8c8f3150fd1108a7a3bdf4db809d108c4b519fed546532d1a314bfc811ec2fa4e297f0a1ae83ff94d27a184292aa8df2986e2d82b3a3a93dafb4a2773
6
+ metadata.gz: ad38fa76f5190af9de7579ee5f8e11da9f42b35ec57b833f19e63a01ded4255f9dca913959c6fa5306b2a136b45228b0f8c5e3522bae64b7fcb99c9df29168f1
7
+ data.tar.gz: 5877024cb80c0bd1bd767982c28ea3ceea82aa883f5ae27d0c45d28f2b73339df917dbc50cfecf5fd5c09bbc7f8cfb538ef963e9c6b0b865c5c41dd4bb1f33a1
@@ -242,7 +242,6 @@ module Canoe
242
242
  objs = ["$(OBJ_#{n})"] + extract_one_file_obj(filename, deps).map do |o|
243
243
  "$(OBJ_#{File.basename(o, '.*').upcase})"
244
244
  end
245
-
246
245
  makefile.puts("$(#{n}): #{objs.join ' '}\n\t$(#{cmplr}) $(#{cmplr}FLAGS) -o $@ $^ $(LDFLAGS) $(LDLIBS)")
247
246
  makefile.puts ''
248
247
  end
@@ -264,6 +263,7 @@ module Canoe
264
263
  make_out_rules makefile, deps
265
264
  makefile.puts ''
266
265
  make_obj_rules makefile, deps
266
+ makefile.puts ''
267
267
  make_tests_rules makefile, deps
268
268
  makefile.puts ''
269
269
  make_clean makefile
@@ -9,12 +9,43 @@ module Canoe
9
9
  test_single(args[0], args[1..].join(" "))
10
10
  end
11
11
 
12
- # extract one test file's dependency
12
+ # extract all files the file depends on, including headers
13
13
  def extract_one_file(file, deps)
14
- ret = deps[file].map { |f| f.gsub(".#{@header_suffix}", ".#{@source_suffix}") }
14
+ ret = []
15
+ holder = deps[file] + deps[file].map { |f| f.gsub(".#{@header_suffix}", ".#{@source_suffix}") }
16
+ extract_one_file_helper(file, deps, holder, ret)
17
+ ret.uniq
18
+ end
19
+
20
+ def extract_one_file_obj(file, deps)
21
+ ret = extract_one_file(file, deps).map do |f|
22
+ file_to_obj(f)
23
+ end
24
+ ret.uniq
25
+ end
26
+
27
+ def extract_one_file_header(file, deps)
28
+ ret = extract_one_file(file, deps).map do |f|
29
+ f.gsub(".#{@source_suffix}", ".#{@header_suffix}")
30
+ end
31
+ ret.uniq
32
+ end
33
+
34
+ def extract_one_file_source(file, deps)
35
+ ret = extract_one_file(file, deps).map do |f|
36
+ f.gsub(".#{@header_suffix}", ".#{@source_suffix}")
37
+ end
38
+ ret.uniq
39
+ end
40
+
41
+ private
42
+
43
+ # extract one test file's dependency
44
+ def extract_one_file_helper(file, deps, ref, ret)
15
45
  begin
16
- deps[file].each do |f|
17
- dep = extract_one_file(f, deps)
46
+ ref.each do |f|
47
+ ret << f unless ret.include?(f)
48
+ dep = extract_one_file_helper(f, deps, deps[f], ret)
18
49
  dep.each do |d|
19
50
  ret << d unless ret.include?(d)
20
51
  end
@@ -23,17 +54,8 @@ module Canoe
23
54
  puts "#{"Fatal: ".red}file #{file} is circularly included"
24
55
  exit false
25
56
  end
26
- ret.map { |f| f.gsub(".#{@header_suffix}", ".#{@source_suffix}") }
27
- end
28
-
29
- def extract_one_file_obj(file, deps)
30
- extract_one_file(file, deps).map do |f|
31
- file_to_obj(f)
32
- end
33
57
  end
34
58
 
35
- private
36
-
37
59
  def test_all
38
60
  build_test
39
61
  fetch_all_test_files.each do |f|
@@ -84,14 +106,13 @@ module Canoe
84
106
 
85
107
  def link_one_test(test_file, deps)
86
108
  target = "#{@target_short}/#{File.basename(test_file, '.*')}"
87
- all_objs = Dir.glob("obj/*.o").reject { |f| f.start_with?('obj/test_') || f == 'obj/main.o'}
88
- @compiler.link_executable target, all_objs + [file_to_obj(test_file)]
109
+ @compiler.link_executable target, [file_to_obj(test_file)] + extract_one_file_obj(test_file, deps)
89
110
  end
90
111
 
91
112
  def build_one_test(test_file, deps, indent = "")
92
113
  files = DepAnalyzer.compiling_filter(target_deps, Time.new(0), @source_suffix, @header_suffix)
114
+ .intersection(extract_one_file_source(test_file, deps)) << test_file
93
115
  flag = true
94
- files << test_file
95
116
 
96
117
  stepper = Stepper.new(files.size, files.size)
97
118
 
@@ -2,7 +2,7 @@ module Canoe
2
2
  class WorkSpace
3
3
  def self.version
4
4
  puts <<~VER
5
- canoe v0.3.3.5
5
+ canoe v0.3.3.6
6
6
  For features in this version, please visit https://github.com/Dicridon/canoe
7
7
  Currently, canoe can do below:
8
8
  - project creation
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.5
4
+ version: 0.3.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - XIONG Ziwei
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-19 00:00:00.000000000 Z
11
+ date: 2022-02-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |+
14
14
  Canoe offers project management and building facilities to C/C++ projects.