LinkAgainstFinder 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12b8fcc3ef7f74b4edc0911a0a41968908536dab274aabcf95d4d90fe57a4234
4
- data.tar.gz: adf9bcd8e1b9887bc8b880ec2b86de5e49b9854adad5e89bfcc6efc27b4e3d36
3
+ metadata.gz: c71d62c0650b379e0b4125f35ef67042ece04132cd9cb32a058f471f652c99c6
4
+ data.tar.gz: 3c59c5e5c3243da079a144021abea26d0808faeb67f98f40afedfb2065091c59
5
5
  SHA512:
6
- metadata.gz: bc39ba0529c447c78bd963ab3fcac8a756efe9929e99bc817f1a821775cb05f4ed8dbd632abfc9549a2dcdaa9f54384f4d85d17c2d00af13153a39ae7a2e81b2
7
- data.tar.gz: 5f21d9764308ee4ce56c698bb2fec7e00849a8034174c3883ce9b86e010830d6719481f7f1be37629bde0a8905ced20ab66776536b4cc0c4bef6f19d3047e8b3
6
+ metadata.gz: eb5729689553f096975853ede7593a9e30ddadab016c2b9ca812abd4bac67eb5e2542c7c25e09204b4ae33a4335e6d139adcda61fd4bb03f89ebe8abb895bcff
7
+ data.tar.gz: e1b072bec22d31cd28fbe269544a9c4acbb8145dbdb0cd56872c2a63e9f9a963079d67d5c4443aa61c8354eac43e8e36dc868426618301d3f3ce49f2c5008453
data/.idea/workspace.xml CHANGED
@@ -3,6 +3,9 @@
3
3
  <component name="ChangeListManager">
4
4
  <list default="true" id="efc6ee81-c3ff-495b-b1aa-0b001b799fa0" name="Default Changelist" comment="">
5
5
  <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
6
+ <change beforePath="$PROJECT_DIR$/exe/linkAgainstFinder" beforeDir="false" afterPath="$PROJECT_DIR$/exe/linkAgainstFinder" afterDir="false" />
7
+ <change beforePath="$PROJECT_DIR$/lib/LinkAgainstFinder.rb" beforeDir="false" afterPath="$PROJECT_DIR$/lib/LinkAgainstFinder.rb" afterDir="false" />
8
+ <change beforePath="$PROJECT_DIR$/lib/LinkAgainstFinder/version.rb" beforeDir="false" afterPath="$PROJECT_DIR$/lib/LinkAgainstFinder/version.rb" afterDir="false" />
6
9
  </list>
7
10
  <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
8
11
  <option name="SHOW_DIALOG" value="false" />
@@ -79,6 +82,7 @@
79
82
  <option name="presentableId" value="Default" />
80
83
  <updated>1572519494008</updated>
81
84
  <workItem from="1572519495052" duration="8944000" />
85
+ <workItem from="1572754070238" duration="229000" />
82
86
  </task>
83
87
  <servers />
84
88
  </component>
@@ -90,7 +94,9 @@
90
94
  <map>
91
95
  <entry key="MAIN">
92
96
  <value>
93
- <State />
97
+ <State>
98
+ <option name="COLUMN_ORDER" />
99
+ </State>
94
100
  </value>
95
101
  </entry>
96
102
  </map>
@@ -7,6 +7,6 @@ path = ARGV[0]
7
7
  Dir.chdir(path) unless path.nil?
8
8
 
9
9
  files = Dir.glob('**/*.a')
10
- finder = LinkAgainstFinder::Finder.new(files)
11
- libs = finder.calculateDepedencyRelations
10
+ finder = LinkAgainstFinder::Finder.new
11
+ libs = finder.calculateEachOtherDependencyRelations(files)
12
12
  puts libs
@@ -5,44 +5,55 @@ module LinkAgainstFinder
5
5
 
6
6
  class Finder
7
7
 
8
- def initialize(all_binary_paths)
9
- @all_binary_paths = all_binary_paths
8
+ public
9
+ # @return [Lib]
10
+ def calculateEachOtherDependencyRelations(binaries)
11
+ calculateDependencyRelations(binaries, binaries)
10
12
  end
11
13
 
12
- public
13
14
 
14
- class Lib
15
- attr_accessor :path
16
- attr_accessor :symbolTable
17
- attr_accessor :dependencies
15
+ # @return [Lib]
16
+ def calculateDependencyRelations(targetBins, potentialBins)
18
17
 
19
- def to_s
20
- <<-TEXT
21
- #{path}:
22
- #{dependencies.map{|l| "-> #{l.path}"}.join("\n")}
23
- TEXT
24
- end
25
- end
18
+ cache = {}
19
+ generate_lib = Proc.new do |path|
20
+ lib = cache[path]
21
+ next lib unless lib.nil?
26
22
 
27
- def calculateDepedencyRelations
28
- libs = @all_binary_paths.map do |path|
29
23
  lib = Lib.new
30
24
  lib.path = path
31
25
  lib.symbolTable = Objdump.new(path).getSymbolTable
32
26
  lib.dependencies = Set.new
27
+ cache[path] = lib
33
28
  lib
34
29
  end
35
30
 
36
- libs.each do |lib|
31
+ targets = targetBins.map(&generate_lib)
32
+ potentials = potentialBins.map(&generate_lib)
33
+
34
+ targets.each do |lib|
37
35
  lib.symbolTable.externalSymbols.each do |symbol|
38
- dep = libs.find do |otherLib|
36
+ dep = potentials.find do |otherLib|
39
37
  otherLib.symbolTable.internalSymbols.include?(symbol)
40
38
  end
41
39
  lib.dependencies.add(dep) unless dep.nil?
42
40
  end
43
41
  end
44
42
 
45
- return libs
43
+ return targets
44
+ end
45
+
46
+ class Lib
47
+ attr_accessor :path
48
+ attr_accessor :symbolTable
49
+ attr_accessor :dependencies
50
+
51
+ def to_s
52
+ <<-TEXT
53
+ #{path}:
54
+ #{dependencies.map{|l| "-> #{l.path}"}.join("\n")}
55
+ TEXT
56
+ end
46
57
  end
47
58
 
48
59
  end
@@ -1,3 +1,3 @@
1
1
  module LinkAgainstFinder
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: LinkAgainstFinder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gao
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-01 00:00:00.000000000 Z
11
+ date: 2019-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler