PKGBUILDs/vlc/nightly/find-deps.py
Martchus c139aa951b Import vlc-nightly from AUR and fix mistakes
* Add qt5-svg to dependencies; otherwise I will not be able to build Qt GUI at all
* Prevent using SVGs which doesn't exist
* Fix indentation (standard for Arch packages is 2 spaces)
* Make use of prepare() function
2017-10-18 21:53:08 +02:00

49 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Usage: find-deps.py <binary> [<binary> ...]
Finds (pacman/ALPM) dependencies for a binary or set of binaries based
on dynamically linked libraries.
"""
import sys
import os
import subprocess
import re
def subprocess_get_lines(args, fail_okay=False):
try:
output = subprocess.check_output(args)
except subprocess.CalledProcessError as e:
if fail_okay:
output = e.output
else:
raise
return output.decode().splitlines()
# Get the filenames of the libs we need
#del os.environ['LD_PRELOAD'] # otherwise fakeroot will interfere
ldd_output = subprocess_get_lines(['ldd'] + sys.argv[1:])
regex = re.compile(r' => (.*) \(0x[0-9a-f]+\)$')
libs = set(match.group(1) for match in map(regex.search, ldd_output) if match)
# Figure out which packages own them
deps = set(subprocess_get_lines(
['pacman', '--query', '--owns', '--quiet'] + list(libs),
fail_okay=True
))
# Remove redundant dependencies
needed = set(deps)
for pkg in deps:
if pkg not in needed:
continue # this subtree has already been pruned
redundant = subprocess_get_lines(
['pactree', '--unique', pkg]
)[1:] # first line is pkg itself
needed.difference_update(redundant)
print(' '.join(sorted(needed)))