123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #!/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)))
|