jellyfin-media-player/scripts/install-dylibs.py

61 lines
1.9 KiB
Python
Raw Normal View History

#!/usr/bin/python
import subprocess, os, sys, shutil, Queue, fnmatch
def exec_cmd(args, env={}, supress_output=False):
cmd = subprocess.Popen(args, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, env = env)
output = ''
while True:
out = cmd.stdout.read(1)
if out == '' and cmd.poll() != None:
break
if out != '':
if not supress_output:
sys.stdout.write(out)
output += out
if cmd.wait() != 0:
raise Exception("Command failed: \"%s\"" % " ".join(args), output)
return output
binaries = {}
def install_libraries(binary):
if binaries.has_key(binary): return []
binaries[binary] = True
other_binaries = []
out = exec_cmd(["otool", "-L", binary], supress_output=True)
for line in out.split('\n'):
line = line.strip()
if line.find("dylib") != -1 and (line.startswith('@executable_path') or line.find("libQt5") != -1):
file = line.split('/')[-1].split(' ')[0]
if line.startswith("@executable_path"):
src = os.path.join(sys.argv[1], "dependencies/darwin-x86_64/lib", file)
else:
src = line.split(" (")[0]
dst = os.path.join(sys.argv[2], "Konvergo.app", "Contents", "Frameworks", file)
if os.path.exists(src):
if (not os.path.exists(dst) or os.path.getsize(dst) != os.path.getsize(src)):
print "-- Installing %s" % file
shutil.copyfile(src, dst)
other_binaries.append(src)
return other_binaries
queue = Queue.Queue()
# Add the top-level binaries.
for b in ['Contents/MacOS/Konvergo']:
queue.put(os.path.join(sys.argv[2], "Konvergo.app", b))
for root, dirs, files in os.walk(os.path.join(sys.argv[2], "Konvergo.app", "Contents", "Frameworks", "vlc")):
for f in files:
path = os.path.join(root, f)
queue.put(path)
while queue.empty() == False:
binary = queue.get()
other_binaries = install_libraries(binary)
for b in other_binaries:
queue.put(b)