75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import os
|
|
import sys
|
|
|
|
# Generate the list of files needed in initramfs for plymouth
|
|
|
|
exclude_list = (
|
|
"/usr/bin/plymouth-log-viewer",
|
|
"/usr/sbin/plymouth-set-default-theme",
|
|
"/usr/lib/plymouth/renderers/x11.so",
|
|
"/usr/lib/plymouth/label.so",
|
|
)
|
|
|
|
paths = (
|
|
"/usr/share/plymouth",
|
|
"/usr/share/pixmaps",
|
|
"/etc/plymouth",
|
|
)
|
|
|
|
FILE_LIST = "lib/initramfs/plymouth.list"
|
|
|
|
def usage():
|
|
print "%s <directory>" % sys.argv[0]
|
|
return 1
|
|
|
|
def generate_needed_binary_list():
|
|
binaries = set()
|
|
executables = os.popen("find -type f -executable | cut -c2-").read().strip().split()
|
|
executables = set(executables).difference(exclude_list)
|
|
|
|
for exe in executables:
|
|
if exe.endswith(".la"):
|
|
continue
|
|
if ".so." in exe:
|
|
# Add the libfoo.so.X symlink instead of libfoo.so.X.y.z
|
|
symlink = exe.rsplit(".", 2)[0]
|
|
if os.path.exists(symlink[1:]):
|
|
binaries.add(symlink)
|
|
continue
|
|
|
|
binaries.add(exe)
|
|
|
|
for exe in executables:
|
|
for line in os.popen("ldd %s" % exe[1:]):
|
|
if "=> /" in line:
|
|
binaries.add(line.split()[2])
|
|
elif line.strip().startswith("/"):
|
|
binaries.add(line.strip().split()[0])
|
|
|
|
return binaries
|
|
|
|
def get_other_file_list():
|
|
files = ["usr/share/pixmaps/plymouth-pisilinux.png", "usr/share/themes/charge/charge.plymouth"]
|
|
for path in paths:
|
|
files.extend(os.popen("find %s -type f" % path[1:]).read().strip().split())
|
|
|
|
return ["/%s" % f for f in files]
|
|
|
|
if __name__ == "__main__":
|
|
|
|
try:
|
|
directory = sys.argv[1]
|
|
except:
|
|
sys.exit(usage())
|
|
|
|
os.chdir(directory)
|
|
files = generate_needed_binary_list()
|
|
files = files.union(get_other_file_list())
|
|
|
|
if not os.path.exists(os.path.dirname(FILE_LIST)):
|
|
os.makedirs(os.path.dirname(FILE_LIST))
|
|
open(FILE_LIST, "w").write("\n".join(sorted(files)))
|