trace_visualization 0.0.2 → 0.0.3
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/Gemfile +2 -0
- data/Rakefile +4 -4
- data/bin/trace_visualization +133 -0
- data/lib/trace_visualization.rb +6 -0
- data/lib/trace_visualization/mapping.rb +61 -42
- data/lib/trace_visualization/reorder.rb +2 -0
- data/lib/trace_visualization/repetitions_score.rb +87 -0
- data/lib/trace_visualization/utils.rb +1 -1
- data/lib/trace_visualization/version.rb +1 -1
- data/lib/trace_visualization/visualization/console_color_print.rb +8 -8
- data/spec/bwt_spec.rb +3 -5
- data/spec/longest_common_prefix_spec.rb +11 -4
- data/spec/repetitions_concatenation_spec.rb +8 -2
- data/spec/repetitions_psy_spec.rb +23 -10
- data/spec/suffix_array_spec.rb +64 -37
- data/trace_visualization.gemspec +14 -14
- metadata +6 -15
- data/lib/trace_visualization/preprocessor/Makefile +0 -43
- data/lib/trace_visualization/preprocessor/hashmap.c +0 -93
- data/lib/trace_visualization/preprocessor/hashmap.h +0 -27
- data/lib/trace_visualization/preprocessor/hashmap_test.cpp +0 -90
- data/lib/trace_visualization/preprocessor/lexeme.h +0 -11
- data/lib/trace_visualization/preprocessor/lexeme_table.c +0 -50
- data/lib/trace_visualization/preprocessor/lexeme_table.h +0 -13
- data/lib/trace_visualization/preprocessor/lexeme_table_cpp.h +0 -61
- data/lib/trace_visualization/preprocessor/parser_functions.c +0 -42
- data/lib/trace_visualization/preprocessor/parser_test.cpp +0 -71
- data/lib/trace_visualization/preprocessor/preprocessor.l +0 -18
- data/lib/trace_visualization/preprocessor/test_main.cpp +0 -39
@@ -6,28 +6,28 @@ module TraceVisualization
|
|
6
6
|
|
7
7
|
GRN = "\033[1;32m"
|
8
8
|
YLW = "\033[1;33m"
|
9
|
-
|
9
|
+
FINISH = "\033[0m"
|
10
10
|
|
11
|
-
def self.hl(
|
12
|
-
raise
|
11
|
+
def self.hl(mapping, repetition)
|
12
|
+
raise 'repetition must be instance of TraceVisualization::Data::Repetition' if not repetition.instance_of? TraceVisualization::Data::Repetition
|
13
13
|
|
14
|
-
result =
|
14
|
+
result = ''
|
15
15
|
prev_position = 0
|
16
16
|
positions = repetition.build_positions
|
17
17
|
|
18
18
|
positions.each do |position|
|
19
|
-
result +=
|
19
|
+
result += mapping.restore(prev_position, position[0][0])
|
20
20
|
|
21
21
|
for i in 0 ... position.size
|
22
22
|
pos, len = position[i]
|
23
|
-
result += GRN + "#{
|
24
|
-
result += YLW + "#{
|
23
|
+
result += GRN + "#{mapping.restore(pos, pos + len)}" + FINISH
|
24
|
+
result += YLW + "#{mapping.restore(pos + len, position[i + 1][0])}" + FINISH if i < position.size - 1
|
25
25
|
end
|
26
26
|
|
27
27
|
prev_position = position[-1][0] + position[-1][1]
|
28
28
|
end
|
29
29
|
|
30
|
-
result +=
|
30
|
+
result += mapping.restore(prev_position, -1)
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
data/spec/bwt_spec.rb
CHANGED
@@ -48,9 +48,7 @@ describe TraceVisualization::BurrowsWheelerTransform do
|
|
48
48
|
ws.to_str.should eq " "
|
49
49
|
a.to_str.should eq "a"
|
50
50
|
b.to_str.should eq "b"
|
51
|
-
|
52
|
-
puts "ip.ord = #{ip.ord}, ws.ord = #{ws.ord}, a = #{a.ord}, b = #{b.ord}"
|
53
|
-
|
51
|
+
|
54
52
|
sa = TraceVisualization::SuffixArray.effective(mapped_str)
|
55
53
|
|
56
54
|
(sa.length == mapped_str.length).should be_true
|
@@ -60,9 +58,9 @@ describe TraceVisualization::BurrowsWheelerTransform do
|
|
60
58
|
|
61
59
|
if ip < ws
|
62
60
|
bwt.should eq [ip, ip, a, ws, ws, b, ws]
|
63
|
-
bwt_str.should eq
|
61
|
+
bwt_str.should eq '127.0.0.1127.0.0.1a b '
|
64
62
|
else
|
65
|
-
|
63
|
+
# TODO Implement!
|
66
64
|
end
|
67
65
|
end
|
68
66
|
|
@@ -6,7 +6,7 @@ describe TraceVisualization::LongestCommonPrefix do
|
|
6
6
|
|
7
7
|
context '.effective' do
|
8
8
|
it 'should return array with longest common prefix in linear time' do
|
9
|
-
str =
|
9
|
+
str = 'mississippi'
|
10
10
|
|
11
11
|
sa = TraceVisualization::SuffixArray.effective(str)
|
12
12
|
lcp = TraceVisualization::LongestCommonPrefix.effective(str, sa, str.size)
|
@@ -16,10 +16,17 @@ describe TraceVisualization::LongestCommonPrefix do
|
|
16
16
|
|
17
17
|
it 'should return correct result for mapped string', :current => true do
|
18
18
|
str = "127.0.0.1 foo\r\n127.0.0.1 bar"
|
19
|
-
|
19
|
+
|
20
|
+
mapping = TraceVisualization::Mapping.init do
|
21
|
+
default_tokens
|
22
|
+
end
|
23
|
+
|
24
|
+
mapping.process do
|
25
|
+
from_string(str)
|
26
|
+
end
|
20
27
|
|
21
|
-
sa = TraceVisualization::SuffixArray.effective(
|
22
|
-
lcp = TraceVisualization::LongestCommonPrefix.effective(
|
28
|
+
sa = TraceVisualization::SuffixArray.effective(mapping)
|
29
|
+
lcp = TraceVisualization::LongestCommonPrefix.effective(mapping, sa, mapping.length)
|
23
30
|
|
24
31
|
sa.should eq([6, 5, 8, 1, 10, 9, 2, 4, 3, 11, 7, 0])
|
25
32
|
lcp.should eq([0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2])
|
@@ -5,8 +5,14 @@ require 'trace_visualization/data/repetition'
|
|
5
5
|
describe TraceVisualization::RepetitionsConcatenation do
|
6
6
|
it "process common positions" do
|
7
7
|
str = "aaaxbbbyaaazbbbvaaawbbb"
|
8
|
-
|
9
|
-
|
8
|
+
|
9
|
+
mapping = TraceVisualization::Mapping.init do
|
10
|
+
default_tokens
|
11
|
+
end
|
12
|
+
|
13
|
+
mapping.process { from_string(str) }
|
14
|
+
|
15
|
+
context = TraceVisualization::Repetitions::Context.new(mapping, [])
|
10
16
|
|
11
17
|
lpos = [0, 8, 16]
|
12
18
|
rpos = [4, 12, 20]
|
@@ -1,13 +1,12 @@
|
|
1
1
|
require 'trace_visualization'
|
2
|
-
require 'trace_visualization/repetitions_psy'
|
3
2
|
require 'trace_visualization/suffix_array'
|
4
3
|
require 'trace_visualization/longest_common_prefix'
|
5
4
|
require 'trace_visualization/bwt'
|
6
|
-
|
5
|
+
|
7
6
|
|
8
7
|
describe TraceVisualization::Repetitions do
|
9
8
|
it 'simple test PSY1' do
|
10
|
-
TraceVisualization::Repetitions.psy1(
|
9
|
+
TraceVisualization::Repetitions.psy1('aaabbbcccaaacccbbb', 3, false).should eq [
|
11
10
|
{:lcp=>3, :i=>0, :j=>1},
|
12
11
|
{:lcp=>3, :i=>8, :j=>9},
|
13
12
|
{:lcp=>3, :i=>16, :j=>17}
|
@@ -15,17 +14,31 @@ describe TraceVisualization::Repetitions do
|
|
15
14
|
end
|
16
15
|
|
17
16
|
it 'simple test PSY1 with mapping' do
|
18
|
-
str =
|
19
|
-
|
17
|
+
str = 'aaa[123]aaa'
|
18
|
+
|
19
|
+
mapping = TraceVisualization::Mapping.init do
|
20
|
+
default_tokens
|
21
|
+
end
|
22
|
+
|
23
|
+
mapping.process do
|
24
|
+
from_string(str)
|
25
|
+
end
|
20
26
|
|
21
|
-
TraceVisualization::Repetitions.psy1(
|
27
|
+
TraceVisualization::Repetitions.psy1(mapping, 3, false).should eq [{:lcp=>3, :i=>2, :j=>3}]
|
22
28
|
end
|
23
29
|
|
24
30
|
it 'test decode PSY1' do
|
25
31
|
str = "aaa[123]xyz[654]aaa[123]" # <---> "aaaXxyzYaaaX"
|
26
|
-
|
32
|
+
|
33
|
+
mapping = TraceVisualization::Mapping.init do
|
34
|
+
default_tokens
|
35
|
+
end
|
36
|
+
|
37
|
+
mapping.process do
|
38
|
+
from_string(str)
|
39
|
+
end
|
27
40
|
|
28
|
-
rs = TraceVisualization::Repetitions.psy1(
|
41
|
+
rs = TraceVisualization::Repetitions.psy1(mapping, 3)
|
29
42
|
|
30
43
|
rs.size.should eq 1
|
31
44
|
rs[0].length.should eq 4
|
@@ -33,7 +46,7 @@ describe TraceVisualization::Repetitions do
|
|
33
46
|
|
34
47
|
length = rs[0].length
|
35
48
|
position = rs[0].left_positions[0]
|
36
|
-
|
37
|
-
|
49
|
+
|
50
|
+
mapping.restore(position, length).should eq "aaa[123]"
|
38
51
|
end
|
39
52
|
end
|
data/spec/suffix_array_spec.rb
CHANGED
@@ -3,22 +3,29 @@ require 'trace_visualization/mapping'
|
|
3
3
|
|
4
4
|
describe TraceVisualization::SuffixArray do
|
5
5
|
|
6
|
-
context
|
7
|
-
it
|
8
|
-
TraceVisualization::SuffixArray.naive(
|
9
|
-
TraceVisualization::SuffixArray.naive(
|
6
|
+
context '.naive' do
|
7
|
+
it 'should return suffix array' do
|
8
|
+
TraceVisualization::SuffixArray.naive('abaabaab').should eq([5, 2, 6, 3, 0, 7, 4, 1])
|
9
|
+
TraceVisualization::SuffixArray.naive('abracadabra').should eq([10, 7, 0, 3, 5, 8, 1, 4, 6, 9, 2])
|
10
10
|
end
|
11
11
|
|
12
|
-
it
|
13
|
-
str =
|
14
|
-
|
12
|
+
it 'should correct process mapped string' do
|
13
|
+
str = 'abc[123]def[456]ghi'
|
14
|
+
|
15
|
+
mapping = TraceVisualization::Mapping.init do
|
16
|
+
default_tokens
|
17
|
+
end
|
18
|
+
|
19
|
+
mapping.process do
|
20
|
+
from_string(str)
|
21
|
+
end
|
15
22
|
|
16
|
-
TraceVisualization::SuffixArray.naive(
|
23
|
+
TraceVisualization::SuffixArray.naive(mapping).should eq([0, 1, 2, 4, 5, 6, 8, 9, 10, 3, 7])
|
17
24
|
end
|
18
25
|
end
|
19
26
|
|
20
|
-
context
|
21
|
-
it
|
27
|
+
context '.radix_pass' do
|
28
|
+
it 'do stable radix sort' do
|
22
29
|
str = [3, 3, 2, 1, 5, 5, 4]
|
23
30
|
a = [0, 1, 2, 3, 4, 5, 6]
|
24
31
|
n = a.length
|
@@ -30,8 +37,8 @@ describe TraceVisualization::SuffixArray do
|
|
30
37
|
end
|
31
38
|
end
|
32
39
|
|
33
|
-
context
|
34
|
-
it
|
40
|
+
context '.effective_linear' do
|
41
|
+
it 'should return suffix array for linear time (native function)' do
|
35
42
|
s = [3, 3, 2, 1, 5, 5, 4, 0, 0, 0]
|
36
43
|
n = s.length - 3 # exclude last 3 zeros
|
37
44
|
alphabet_size = 10
|
@@ -43,47 +50,67 @@ describe TraceVisualization::SuffixArray do
|
|
43
50
|
end
|
44
51
|
end
|
45
52
|
|
46
|
-
context
|
47
|
-
it
|
48
|
-
TraceVisualization::SuffixArray.effective(
|
49
|
-
TraceVisualization::SuffixArray.effective(
|
53
|
+
context '.effective' do
|
54
|
+
it 'should return suffix array for linear time (wrapper function)' do
|
55
|
+
TraceVisualization::SuffixArray.effective('abaabaab').should eq(TraceVisualization::SuffixArray.naive('abaabaab'))
|
56
|
+
TraceVisualization::SuffixArray.effective('abracadabra').should eq(TraceVisualization::SuffixArray.naive('abracadabra'))
|
50
57
|
end
|
51
58
|
|
52
|
-
it
|
53
|
-
str =
|
54
|
-
|
59
|
+
it 'should correct process mapped string' do
|
60
|
+
str = 'abc[123]def[456]ghi'
|
61
|
+
|
62
|
+
mapping = TraceVisualization::Mapping.init do
|
63
|
+
default_tokens
|
64
|
+
end
|
65
|
+
|
66
|
+
mapping.process do
|
67
|
+
from_string(str)
|
68
|
+
end
|
55
69
|
|
56
|
-
TraceVisualization::SuffixArray.effective(
|
70
|
+
TraceVisualization::SuffixArray.effective(mapping).should eq([0, 1, 2, 4, 5, 6, 8, 9, 10, 3, 7])
|
57
71
|
end
|
58
72
|
|
59
|
-
it
|
73
|
+
it 'another string for mapped processing' do
|
60
74
|
str = "127.0.0.1 a 127.0.0.1 b"
|
61
75
|
|
62
76
|
# 'X a X b'
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
mapped_str[1].to_int.should eq 1
|
67
|
-
mapped_str[2].to_int.should eq 2
|
68
|
-
mapped_str[3].to_int.should eq 1
|
69
|
-
mapped_str[4].to_int.should eq 4
|
70
|
-
mapped_str[5].to_int.should eq 1
|
71
|
-
mapped_str[6].to_int.should eq 3
|
77
|
+
mapping = TraceVisualization::Mapping.init do
|
78
|
+
default_tokens
|
79
|
+
end
|
72
80
|
|
73
|
-
|
81
|
+
mapping.process do
|
82
|
+
from_string(str)
|
83
|
+
end
|
84
|
+
|
85
|
+
mapping[0].to_int.should eq 4
|
86
|
+
mapping[1].to_int.should eq 1
|
87
|
+
mapping[2].to_int.should eq 2
|
88
|
+
mapping[3].to_int.should eq 1
|
89
|
+
mapping[4].to_int.should eq 4
|
90
|
+
mapping[5].to_int.should eq 1
|
91
|
+
mapping[6].to_int.should eq 3
|
92
|
+
|
93
|
+
length_before = mapping.length
|
74
94
|
|
75
|
-
sa = TraceVisualization::SuffixArray.effective(
|
76
|
-
|
95
|
+
sa = TraceVisualization::SuffixArray.effective(mapping)
|
96
|
+
mapping.length.should be length_before
|
77
97
|
|
78
98
|
sa.should eq [1, 5, 3, 2, 6, 0, 4]
|
79
|
-
sa.length.should be
|
99
|
+
sa.length.should be mapping.length
|
80
100
|
end
|
81
101
|
|
82
|
-
it
|
102
|
+
it 'bug with endless loop' do
|
83
103
|
str = "127.0.0.1 user login\r\n127.0.0.1 user logout"
|
84
|
-
|
104
|
+
|
105
|
+
mapping = TraceVisualization::Mapping.init do
|
106
|
+
default_tokens
|
107
|
+
end
|
108
|
+
|
109
|
+
mapping.process do
|
110
|
+
from_string(str)
|
111
|
+
end
|
85
112
|
|
86
|
-
sa = TraceVisualization::SuffixArray.effective(
|
113
|
+
sa = TraceVisualization::SuffixArray.effective(mapping)
|
87
114
|
end
|
88
115
|
end
|
89
116
|
|
data/trace_visualization.gemspec
CHANGED
@@ -4,32 +4,32 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'trace_visualization/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'trace_visualization'
|
8
8
|
spec.version = TraceVisualization::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Sergey']
|
10
|
+
spec.email = ['mastedm@gmail.com']
|
11
11
|
spec.description = %q{
|
12
12
|
Intelligent visualization of software traces
|
13
13
|
}
|
14
14
|
spec.summary = %q{
|
15
15
|
Software for smart trace visualization
|
16
16
|
}
|
17
|
-
spec.homepage =
|
18
|
-
spec.license =
|
17
|
+
spec.homepage = ''
|
18
|
+
spec.license = 'MIT'
|
19
19
|
|
20
20
|
spec.files = `git ls-files`.split($/)
|
21
21
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
22
22
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
23
|
-
spec.require_paths = [
|
23
|
+
spec.require_paths = ['lib']
|
24
24
|
|
25
|
-
spec.add_development_dependency
|
26
|
-
spec.add_development_dependency
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
26
|
+
spec.add_development_dependency 'rake'
|
27
27
|
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
28
|
+
spec.add_development_dependency 'redcarpet', '~> 1.17'
|
29
|
+
spec.add_development_dependency 'yard', '~> 0.7.5'
|
30
30
|
|
31
|
-
spec.add_development_dependency
|
32
|
-
spec.add_development_dependency
|
33
|
-
spec.add_development_dependency
|
34
|
-
spec.add_development_dependency
|
31
|
+
spec.add_development_dependency 'rspec-core', '~> 2.0'
|
32
|
+
spec.add_development_dependency 'rspec-expectations', '~> 2.0'
|
33
|
+
spec.add_development_dependency 'rspec-mocks'
|
34
|
+
spec.add_development_dependency 'rr', '~> 1.0'
|
35
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trace_visualization
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09
|
11
|
+
date: 2013-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -125,7 +125,8 @@ dependencies:
|
|
125
125
|
description: "\n Intelligent visualization of software traces \n "
|
126
126
|
email:
|
127
127
|
- mastedm@gmail.com
|
128
|
-
executables:
|
128
|
+
executables:
|
129
|
+
- trace_visualization
|
129
130
|
extensions: []
|
130
131
|
extra_rdoc_files: []
|
131
132
|
files:
|
@@ -134,6 +135,7 @@ files:
|
|
134
135
|
- LICENSE
|
135
136
|
- README.md
|
136
137
|
- Rakefile
|
138
|
+
- bin/trace_visualization
|
137
139
|
- lib/trace_visualization.rb
|
138
140
|
- lib/trace_visualization/assert.rb
|
139
141
|
- lib/trace_visualization/bwt.rb
|
@@ -145,18 +147,6 @@ files:
|
|
145
147
|
- lib/trace_visualization/lexeme_overlap_filter.rb
|
146
148
|
- lib/trace_visualization/longest_common_prefix.rb
|
147
149
|
- lib/trace_visualization/mapping.rb
|
148
|
-
- lib/trace_visualization/preprocessor/Makefile
|
149
|
-
- lib/trace_visualization/preprocessor/hashmap.c
|
150
|
-
- lib/trace_visualization/preprocessor/hashmap.h
|
151
|
-
- lib/trace_visualization/preprocessor/hashmap_test.cpp
|
152
|
-
- lib/trace_visualization/preprocessor/lexeme.h
|
153
|
-
- lib/trace_visualization/preprocessor/lexeme_table.c
|
154
|
-
- lib/trace_visualization/preprocessor/lexeme_table.h
|
155
|
-
- lib/trace_visualization/preprocessor/lexeme_table_cpp.h
|
156
|
-
- lib/trace_visualization/preprocessor/parser_functions.c
|
157
|
-
- lib/trace_visualization/preprocessor/parser_test.cpp
|
158
|
-
- lib/trace_visualization/preprocessor/preprocessor.l
|
159
|
-
- lib/trace_visualization/preprocessor/test_main.cpp
|
160
150
|
- lib/trace_visualization/profile.rb
|
161
151
|
- lib/trace_visualization/reorder.rb
|
162
152
|
- lib/trace_visualization/repetitions.rb
|
@@ -164,6 +154,7 @@ files:
|
|
164
154
|
- lib/trace_visualization/repetitions_context.rb
|
165
155
|
- lib/trace_visualization/repetitions_incrementation.rb
|
166
156
|
- lib/trace_visualization/repetitions_psy.rb
|
157
|
+
- lib/trace_visualization/repetitions_score.rb
|
167
158
|
- lib/trace_visualization/suffix_array.rb
|
168
159
|
- lib/trace_visualization/utils.rb
|
169
160
|
- lib/trace_visualization/version.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
LEX = flex
|
2
|
-
CC = gcc
|
3
|
-
CPP = g++
|
4
|
-
|
5
|
-
LDFLAGS =-lfl
|
6
|
-
|
7
|
-
CPPUNIT_BIN_CFG = cppunit-config
|
8
|
-
CPPUNIT_CFLAGS = `$(CPPUNIT_BIN_CFG) --cflags`
|
9
|
-
CPPUNIT_LIBS = `$(CPPUNIT_BIN_CFG) --libs`
|
10
|
-
|
11
|
-
CFLAGS =-O0 -Wall -g
|
12
|
-
CPPFLAGS =-O0 -Wall $(CPPUNIT_CFLAGS) -g
|
13
|
-
# CPPFLAGS =-O0 -Wall -std=c++11 $(CPPUNIT_CFLAGS)
|
14
|
-
|
15
|
-
.cpp.o :
|
16
|
-
$(CPP) $(CPPFLAGS) -o $@ -c $<
|
17
|
-
|
18
|
-
.c.o :
|
19
|
-
$(CC) $(CFLAGS) -o $@ -c $<
|
20
|
-
|
21
|
-
%.cppo : %.c
|
22
|
-
$(CPP) $(CPPFLAGS) -o $@ -c $<
|
23
|
-
|
24
|
-
preprocessor: preprocessor.o parser_functions.o
|
25
|
-
$(CC) -o $@ $(LDFLAGS) $^
|
26
|
-
|
27
|
-
preprocessor.c: preprocessor.l
|
28
|
-
$(LEX) -o $@ $^
|
29
|
-
|
30
|
-
unit_tests: test_main.o hashmap.cppo hashmap_test.o \
|
31
|
-
parser_functions.cppo parser_test.o \
|
32
|
-
lexeme_table.cppo
|
33
|
-
$(CPP) -o $@ $(CPPUNIT_LIBS) $^
|
34
|
-
|
35
|
-
unit_tests_run: unit_tests
|
36
|
-
./unit_tests
|
37
|
-
|
38
|
-
install: preprocessor
|
39
|
-
cp preprocessor ../../../bin/
|
40
|
-
make clean
|
41
|
-
|
42
|
-
clean:
|
43
|
-
rm -f *.o *.cppo preprocessor.c unit_tests preprocessor
|