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