daedalus-core 0.2.0 → 0.3.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/daedalus/dependency_grapher.rb +59 -9
- data/lib/daedalus/version.rb +1 -1
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a6062bb9e0d98bf16f54127b8e21d9294f4e56c1
|
4
|
+
data.tar.gz: f67aef0682be44b26cccb52a7d8901f0fb467fec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b6f4187ce6469758bdbd332c4de348155a0af8212652dad278ddf4703332a96f63a4f181e631f842e5db493d97820ad393697708b689e135238699ecaf25518
|
7
|
+
data.tar.gz: 15830e804c19c89e8df2b38dba98fba60fbe3eea04ff9f4a586021edd00fd19d5632f48aa4d0e94aef23ac41cc1a77baddbd693f655a254c7118f385cb3cbd08
|
@@ -25,13 +25,53 @@ class DependencyGrapher
|
|
25
25
|
|
26
26
|
class ExpressionEvaluator
|
27
27
|
def initialize(expression)
|
28
|
-
@expression = expression
|
28
|
+
@expression = expression.strip
|
29
29
|
end
|
30
30
|
|
31
|
-
# TODO: when melbourne is running in MRI, use it to parse
|
32
|
-
# the expression and then evaluate it.
|
33
31
|
def evaluate(defines)
|
34
|
-
|
32
|
+
# Stage1: find 'defined's and evaluate
|
33
|
+
# replace defined with boolean evaluation value
|
34
|
+
@expression.gsub!(/(defined\(.+?\))/) { |expr|
|
35
|
+
defkey = expr.match(/\((.+?)\)/)[1]
|
36
|
+
if defines.include?(defkey)
|
37
|
+
'true'
|
38
|
+
else
|
39
|
+
'false'
|
40
|
+
end
|
41
|
+
}
|
42
|
+
# Stage2: scan macro-defined keywords
|
43
|
+
# replace with actual value (true or false)
|
44
|
+
# this covers patterns like __clang__ and __x86_64__
|
45
|
+
@expression.gsub!(/__[A-Za-z0-9_]+__/) { |expr|
|
46
|
+
if defines.include?(expr)
|
47
|
+
defines[expr].to_s
|
48
|
+
elsif integer?(expr)
|
49
|
+
expr
|
50
|
+
else
|
51
|
+
'0'
|
52
|
+
end
|
53
|
+
}
|
54
|
+
|
55
|
+
# this covers other patters.
|
56
|
+
@expression.gsub!(/[A-Z0-9_]{4,}/) { |expr|
|
57
|
+
if defines.include?(expr)
|
58
|
+
defines[expr].to_s
|
59
|
+
elsif integer?(expr)
|
60
|
+
expr
|
61
|
+
else
|
62
|
+
'0'
|
63
|
+
end
|
64
|
+
}
|
65
|
+
# Stage3: Evaluate with ruby eval()
|
66
|
+
eval(@expression)
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
def integer?(str)
|
71
|
+
Integer(str)
|
72
|
+
true
|
73
|
+
rescue
|
74
|
+
false
|
35
75
|
end
|
36
76
|
end
|
37
77
|
|
@@ -252,7 +292,6 @@ class DependencyGrapher
|
|
252
292
|
class Define < Node
|
253
293
|
def initialize(macro, parser)
|
254
294
|
super parser
|
255
|
-
|
256
295
|
macro.strip!
|
257
296
|
if index = macro.index(" ")
|
258
297
|
@name = macro[0..index-1]
|
@@ -389,11 +428,22 @@ class DependencyGrapher
|
|
389
428
|
def parse(lines)
|
390
429
|
@line = 0
|
391
430
|
|
392
|
-
|
393
|
-
|
394
|
-
|
431
|
+
inlined_line = ""
|
432
|
+
unless lines.empty?
|
433
|
+
while (line = lines.shift.chomp(''))
|
434
|
+
@line += 1
|
435
|
+
line.rstrip!
|
436
|
+
if line.end_with?('\\')
|
437
|
+
# continue reading if line ends in \
|
438
|
+
inlined_line += line.chop
|
439
|
+
else
|
440
|
+
# stop reading
|
441
|
+
inlined_line += line
|
442
|
+
break
|
443
|
+
end
|
444
|
+
end
|
395
445
|
|
396
|
-
|
446
|
+
m = inlined_line.match(/^\s*#(include|ifdef|ifndef|endif|else|define|undef|if|elif)(.*)$/)
|
397
447
|
|
398
448
|
send :"process_#{m[1]}", m[2] if m
|
399
449
|
end
|
data/lib/daedalus/version.rb
CHANGED
metadata
CHANGED
@@ -1,39 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: daedalus-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Shirai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
type: :development
|
14
15
|
name: rake
|
15
|
-
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
16
17
|
requirements:
|
17
18
|
- - "~>"
|
18
19
|
- !ruby/object:Gem::Version
|
19
20
|
version: '0.9'
|
20
|
-
type: :development
|
21
21
|
prerelease: false
|
22
|
-
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
+
type: :development
|
28
29
|
name: rspec
|
29
|
-
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
32
|
- - "~>"
|
32
33
|
- !ruby/object:Gem::Version
|
33
34
|
version: '2.8'
|
34
|
-
type: :development
|
35
35
|
prerelease: false
|
36
|
-
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
@@ -82,9 +82,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
82
|
version: '0'
|
83
83
|
requirements: []
|
84
84
|
rubyforge_project:
|
85
|
-
rubygems_version: 2.
|
85
|
+
rubygems_version: 2.4.5
|
86
86
|
signing_key:
|
87
87
|
specification_version: 4
|
88
88
|
summary: Daedalus is a build system extracted from Rubinius. Almost no functionality
|
89
89
|
has been implemented. This is very alpha.
|
90
90
|
test_files: []
|
91
|
+
has_rdoc: true
|