8 pmoddeps = File.join(File.dirname(__FILE__), 'pmoddeps.gdb')
13 Find.find(*ARGV) do |path|
14 next if not FileTest.file?(path)
15 next if not (path.end_with?('.ko') or ['kernel', 'kernel.debug'].include?(File.basename(path)))
20 Open3.popen3(pmoddeps + ' ' + path) do |pin, pout, perr|
30 md[f[1]] = f[2..-1].map{|e| e.to_i}
35 modname = File.basename(path)
37 provides[modname] = mv
41 kernel = provides.select{|pmn, pd| pmn.start_with?('kernel')}
43 depends.each do |modname, md|
44 md.each do |depname, vers|
45 minv, pref, maxv = vers
48 not h.select{|pn, pv| pn == depname and pv >= minv and pv <= maxv}.empty?
53 defm << [modname, provides[modname]]
56 # try module depend name
57 defm << [depname + '.ko', provides[depname + '.ko']]
59 defm.reject!{|e, v| not v}
60 match = defm.select{|mn, k| chk.call(k)}
62 puts "#{modname} depend #{depname} found in #{match[0][0]}" if verbose
66 # else not found in the right place
68 match = provides.select do |pmn, pd|
73 $stderr.puts "#{modname} depend #{depname} #{minv} #{pref} #{maxv} not found"
76 $stderr.puts "#{modname} depend #{depname} found in #{m[0]} instead"