1#
2#
3import shutil
4import re
5import subprocess
6import os
7import sys
8#
9already_done = []
10#
11systemLibs = ["libstdc++","libm","libc","libdl","libpthread","libgcc_s","linux-vdso","libXext","libX11","/lib64/ld-linux-x86-64",
12                "libXdmcp","libXau","libdrm","libXfixes","lib32z1","libxcb1"]
13# Returns the list of libs as dependencies in /opt (macport)
14def log(s):
15    #print "Log:<"+str(s)+">"
16    pass
17
18#
19def aptfilesearch(lib):
20    if lib in already_done:
21        return None
22    cmd = ["/usr/bin/apt-file","search", lib]
23    cmd = subprocess.Popen(" ".join(cmd), shell=True, stdout=subprocess.PIPE)
24    for line in cmd.stdout:
25        if(len(line)!=0):
26            package=re.sub(":.*$","",line).strip()
27            already_done.append(lib)
28            return package
29    return None
30def getlinkedlibs(target):
31    cmd = ["/usr/bin/ldd","", target]
32    #log(cmd)
33    q = []
34    cmd = subprocess.Popen(" ".join(cmd), shell=True, stdout=subprocess.PIPE)
35    for line in cmd.stdout:
36       line = re.sub('=>.*$', '', line)
37       line = re.sub(' ', '', line)
38       line=line.strip()
39       #log(line)
40       q.append(line)
41    #log("\n"+target + "Found deps to adjust:"+str(q))
42    return q;
43#
44def purgeSystemLibs(folder):
45   out= []
46   for incoming in folder:
47       short=re.sub("\.so.*$","",incoming)
48       if short in systemLibs:
49           pass
50       else:
51           out.append(incoming)
52   return out
53def walking(folder):
54    copied=0
55    dependencies = []
56    #log("Copy files"+folder)
57    for dirname, dirnames, filenames in os.walk(folder):
58       for filename in filenames:
59           absPath=os.path.join(dirname, filename)
60           #log(absPath)
61           libs=getlinkedlibs(absPath)
62           libs=purgeSystemLibs(libs)
63           log(absPath+"Found deps to adjust:"+str(libs))
64           for libname in libs:
65               if not libname in dependencies:
66                   dependencies.append(libname)
67    return dependencies
68#
69#print "Adjusting dependencies"
70if len(sys.argv) !=1:
71   print "debian_track folder"
72   exit
73
74#deps=walking('/tmp/x/usr/lib')
75deps=walking(sys.argv[1])
76alldeps = [ ]
77for lib in deps:
78   print("\t" + lib)
79   package=aptfilesearch(lib)
80   if package is not None:
81       #print("\t"+"\t" + package)
82       if not package in alldeps:
83           alldeps.append(package)
84print("Package dependency list:")
85print("========================")
86for lib in alldeps:
87    print("\t"+lib)
88print("Done")
89
90
91