sysdeps 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/README +4 -2
  3. data/bin/sysdeps +6 -4
  4. data/changelog +8 -2
  5. data/lib/sysdeps.rb +15 -11
  6. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a24d25de4ab3f20610bee4a8a800d7201879d81cb9cf7fefc265316e54d247a6
4
- data.tar.gz: 1ae9d47f0ef037c59fad6642a1ff2682b357d6af1bf20b9161b0e267266f5e86
3
+ metadata.gz: a5386157b88a33cb1a4359d6485f5b68128c9b806889f9b166a695816e956f5f
4
+ data.tar.gz: 9298fea6f53fcef3e4fb6c87bd1ca7fc450769591553cbbcb8521332eed4e629
5
5
  SHA512:
6
- metadata.gz: f6a3aff396839a0e68001239a15b51a03dc35decd7e8a19ce2445bc8b46f4ab8b4b8e9fb186927f53f469d3ed7e541e95b5d76baeba1b5095373b97b712ad9a8
7
- data.tar.gz: a3884cd0ce32d53358783184615bfe28d1435cc61910ae1e668e10924805901b995a10ebb3c50e799289cdcf58fc3c980066342d43c70d8780d1cfb5baf66c5f
6
+ metadata.gz: 63dcd649f63fac64679fc086e06490f0df979cdae0424f1c349debe2bc81ce2b40c507ab441eb66cd4d1f560d7cce858e8df67512eb4aa0a8d61d75cdda55b5b
7
+ data.tar.gz: b10993d0b7dd121134c5c9af5324618a64fd84a7a7c7459d91beb08b7bbd808c3f71c45f0f7b11e2fb2ace49d85846708dc682208a25f6ca7eb3ed32d5ae6eaf
data/README CHANGED
@@ -7,13 +7,15 @@ A little script to find missing libraries on a Linux system
7
7
  -----------------------------------------------------------
8
8
 
9
9
 
10
- Usage: sysdeps [ -u ][ -p <program name | path> ][ -d <pattern> ][ -j ][ -h ]
10
+ Usage: sysdeps [ -u ][ -p <program name | path> ][ -d <pattern> ][ -j ][ -v ][ -h ]
11
11
  no args detects missing libraries
12
12
  -u build or update dapendencies cache
13
13
  -p <program name | path> prints program dependencies
14
14
  -d <pattern> prints programs which depends on <pattern> (regex)
15
15
  -j get results in JSON
16
+ -v print program version
16
17
  -h guess
17
18
 
18
-
19
19
  The dependencies cache must be built before. (sysdeps -u)
20
+
21
+ Ex usage: 'sysdeps -p dd -p tar -d dbus'
@@ -19,7 +19,7 @@ require 'json'
19
19
 
20
20
  include SysDeps
21
21
 
22
-
22
+ VERSION = '0.0.4'
23
23
  CACHE_PATH = ENV['HOME'] + '/.sysdeps_cache.json'
24
24
 
25
25
  KDEPENDENCIES = 'dependencies'.freeze
@@ -35,12 +35,13 @@ trap('INT') {
35
35
 
36
36
  help = ->() {
37
37
  STDERR.puts <<-EOF.gsub(/^\x20+/, '').gsub(/\x09/, ' ')
38
- Usage: #{File.basename $0} [ -u ][ -p <program name | path> ][ -d <pattern> ][ -j ][ -h ]
38
+ Usage: #{File.basename $0} [ -u ][ -p <program name | path> ][ -d <pattern> ][ -j ][ -v ][ -h ]
39
39
  \t\tno args detects missing libraries
40
40
  \t\t-u build or update dapendencies cache
41
41
  \t\t-p <program name | path> prints program dependencies
42
42
  \t\t-d <pattern> prints programs which depends on <pattern> (regex)
43
43
  \t\t-j get results in JSON
44
+ \t\t-v print program version
44
45
  \t\t-h guess
45
46
  EOF
46
47
  }
@@ -48,7 +49,7 @@ help = ->() {
48
49
 
49
50
  build_cache = ->() {
50
51
  STDERR.print 'Collecting system libs infos ... '
51
- syslibs = SysDeps.get_syslibs ['/lib', '/lib64', '/usr/lib', '/usr/lib64', '/usr/local/lib', '/usr/local/lib64', '/usr/libexec']
52
+ syslibs = SysDeps.get_syslibs
52
53
  STDERR.puts 'done'
53
54
 
54
55
  STDERR.print 'Collecting dependencies of programs ... '
@@ -156,7 +157,8 @@ main = ->{
156
157
  '-p' => ->{ ((arg = ARGV.shift) && !arg[/^-/]) ? prog_procs.push(arg) : (help.call ; exit 1) },
157
158
  '-d' => ->{ ((arg = ARGV.shift) && !arg[/^-/]) ? deps_procs.push(arg) : (help.call ; exit 1) },
158
159
  '-j' => ->{ $to_json = true },
159
- '-h' => ->{ help.call ; exit }, }
160
+ '-h' => ->{ help.call ; exit },
161
+ '-v' => ->{ puts VERSION ; exit },}
160
162
 
161
163
  opts.default = ->{ help.call ; exit 1 }
162
164
 
data/changelog CHANGED
@@ -1,7 +1,13 @@
1
1
  0.0.2:
2
- - fixed -p and -d argument passing
3
- - fixed -p and -d printing
2
+ - fixed -p and -d argument passing
3
+ - fixed -p and -d printing
4
4
 
5
5
  0.0.3:
6
6
  - added dependency detection for libraries to -d option too
7
7
  - fixed set of path libraries when ld.so.conf is not a file
8
+
9
+ 0.0.4:
10
+ - fixed dead links
11
+ - added -v option
12
+ - scan the entire system for libraries instead of restricting search to specific
13
+ paths, to support a wide set of linux distros
@@ -11,8 +11,6 @@
11
11
  # If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
12
12
 
13
13
 
14
- LDCONFPATH = '/etc/ld.so.conf'
15
-
16
14
  DEPMARK = 'NEEDED'.freeze
17
15
  ELF = 'ELF'.freeze
18
16
  SYM = 'symbolic'.freeze
@@ -23,23 +21,27 @@ EMPTY = ''.freeze
23
21
  readlink_absolute = ->(path) {
24
22
  curdir = Dir.getwd
25
23
  Dir.chdir(File.dirname path)
26
- abs = File.absolute_path(File.readlink(File.basename path))
24
+ fp = File.readlink(File.basename path)
25
+ abs = File.exist?(fp) ? File.absolute_path(fp) : nil
27
26
  Dir.chdir curdir
28
27
  abs }
29
28
 
30
29
 
31
- get_syslibs = ->(paths) {
32
- ldconf_paths = File.file?(LDCONFPATH) && File.readable?(LDCONFPATH) ? File.read(LDCONFPATH).split : []
33
- ldpaths = ldconf_paths.union(paths).join ' '
30
+ get_syslibs = -> {
34
31
  sopat = /\.so\.?/
35
32
 
36
- %x(find #{ldpaths} \\( -type f -o -type l \\) 2>/dev/null)
33
+ %x(find / \\( -type f -o -type l \\) 2>/dev/null)
37
34
  .split
38
- .select { |l|
39
- l[sopat] }
35
+ .select { |l| l[sopat] }
40
36
  .map { |l|
41
- File.ftype(l) == LINK ? [l, readlink_absolute(l)] : l }
42
- .flatten }
37
+ if File.ftype(l) == LINK
38
+ fp = readlink_absolute(l)
39
+ fp ? [l, fp] : nil
40
+ else
41
+ l
42
+ end }
43
+ .flatten
44
+ .select { |l| l }}
43
45
 
44
46
 
45
47
  get_program_dependencies = ->(prg) {
@@ -52,6 +54,7 @@ get_program_dependencies = ->(prg) {
52
54
 
53
55
  prgpath = readlink_absolute(prgpath) if File.ftype(prgpath) == LINK
54
56
 
57
+ return nil unless prgpath
55
58
  return nil if %x(file #{prgpath}).split[1] != ELF
56
59
 
57
60
  deppat = /\s+#{DEPMARK}\s+/
@@ -83,6 +86,7 @@ get_libraries_dependencies = ->(syslibs) {
83
86
  syslibs.each_with_object({}) { |sl, o|
84
87
  sl = readlink_absolute(sl) if File.ftype(sl) == LINK
85
88
 
89
+ next unless sl
86
90
  next if %x{file #{sl}}.split[1] != ELF
87
91
 
88
92
  o[sl.chomp] =
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sysdeps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francesco Palumbo