4295f9
import re, sys, os, collections
4295f9
4295f9
buildroot = sys.argv[1]
4295f9
known_files = sys.stdin.read().splitlines()
4295f9
known_files = {line.split()[-1]:line for line in known_files}
4295f9
4295f9
def files(root):
4295f9
    os.chdir(root)
4295f9
    todo = collections.deque(['.'])
4295f9
    while todo:
4295f9
        n = todo.pop()
4295f9
        files = os.scandir(n)
4295f9
        for file in files:
4295f9
            yield file
4295f9
            if file.is_dir() and not file.is_symlink():
4295f9
                todo.append(file)
4295f9
4295f9
o_libs = open('.file-list-libs', 'w')
4295f9
o_udev = open('.file-list-udev', 'w')
4295f9
o_pam = open('.file-list-pam', 'w')
4295f9
o_rpm_macros = open('.file-list-rpm-macros', 'w')
4295f9
o_devel = open('.file-list-devel', 'w')
4295f9
o_container = open('.file-list-container', 'w')
4295f9
o_networkd = open('.file-list-networkd', 'w')
4295f9
o_resolved = open('.file-list-resolved', 'w')
4295f9
o_oomd = open('.file-list-oomd', 'w')
4295f9
o_remote = open('.file-list-remote', 'w')
4295f9
o_tests = open('.file-list-tests', 'w')
4295f9
o_standalone_tmpfiles = open('.file-list-standalone-tmpfiles', 'w')
4295f9
o_standalone_sysusers = open('.file-list-standalone-sysusers', 'w')
4295f9
o_rest = open('.file-list-rest', 'w')
4295f9
for file in files(buildroot):
4295f9
    n = file.path[1:]
4295f9
    if re.match(r'''/usr/(share|include)$|
4295f9
                    /usr/share/man(/man.|)$|
4295f9
                    /usr/share/zsh(/site-functions|)$|
4295f9
                    /usr/share/dbus-1$|
4295f9
                    /usr/share/dbus-1/system.d$|
4295f9
                    /usr/share/dbus-1/(system-|)services$|
4295f9
                    /usr/share/polkit-1(/actions|/rules.d|)$|
4295f9
                    /usr/share/pkgconfig$|
4295f9
                    /usr/share/bash-completion(/completions|)$|
4295f9
                    /usr(/lib|/lib64|/bin|/sbin|)$|
4295f9
                    /usr/lib.*/(security|pkgconfig)$|
4295f9
                    /usr/lib/rpm(/macros.d|)$|
4295f9
                    /usr/lib/firewalld(/services|)$|
4295f9
                    /usr/share/(locale|licenses|doc)|             # no $
4295f9
                    /etc(/pam\.d|/xdg|/X11|/X11/xinit|/X11.*\.d|)$|
4295f9
                    /etc/(dnf|dnf/protected.d)$|
4295f9
                    /usr/(src|lib/debug)|                         # no $
4295f9
                    /run$|
4295f9
                    /var(/cache|/log|/lib|/run|)$
4295f9
    ''', n, re.X):
4295f9
        continue
4295f9
    if '/security/pam_' in n or '/man8/pam_' in n:
4295f9
        o = o_pam
4295f9
    elif '/rpm/' in n:
4295f9
        o = o_rpm_macros
4295f9
    elif '/usr/lib/systemd/tests' in n:
4295f9
        o = o_tests
4295f9
    elif re.search(r'/lib.*\.pc|/man3/|/usr/include|(?
4295f9
        o = o_devel
4295f9
    elif re.search(r'''journal-(remote|gateway|upload)|
4295f9
                       systemd-remote\.conf|
4295f9
                       /usr/share/systemd/gatewayd|
4295f9
                       /var/log/journal/remote
4295f9
    ''', n, re.X):
4295f9
        o = o_remote
4295f9
    elif re.search(r'''mymachines|
4295f9
                       machinectl|
4295f9
                       systemd-nspawn|
4295f9
                       import-pubring.gpg|
4295f9
                       systemd-(machined|import|pull)|
4295f9
                       /machine.slice|
4295f9
                       /machines.target|
4295f9
                       var-lib-machines.mount|
4295f9
                       org.freedesktop.(import|machine)1
4295f9
    ''', n, re.X):
4295f9
        o = o_container
4295f9
    elif re.search(r'''/usr/lib/systemd/network/80-|
4295f9
                       networkd|
4295f9
                       networkctl|
4295f9
                       org.freedesktop.network1
4295f9
    ''', n, re.X):
4295f9
        o = o_networkd
4295f9
    elif re.search(r'''resolved|
4295f9
                       resolvectl|
152484
                       resolvconf|
4295f9
                       org.freedesktop.resolve1|
4295f9
                       systemd-resolve|
4295f9
                       nss-resolve
4295f9
    ''', n, re.X):
4295f9
        o = o_resolved
4295f9
    elif '.so.' in n:
4295f9
        o = o_libs
4295f9
    elif re.search(r'''udev(?!\.pc)|
4295f9
                       hwdb|
4295f9
                       bootctl|
4295f9
                       sd-boot|systemd-boot\.|loader.conf|
4295f9
                       bless-boot|
4295f9
                       boot-system-token|
4295f9
                       kernel-install|
4295f9
                       vconsole|
4295f9
                       backlight|
4295f9
                       rfkill|
4295f9
                       random-seed|
4295f9
                       modules-load|
4295f9
                       timesync|
152484
                       cryptenroll|
4295f9
                       cryptsetup|
4295f9
                       kmod|
4295f9
                       quota|
4295f9
                       pstore|
4295f9
                       sleep|suspend|hibernate|
4295f9
                       systemd-tmpfiles-setup-dev|
4295f9
                       network/99-default.link|
4295f9
                       growfs|makefs|makeswap|mkswap|
4295f9
                       fsck|
4295f9
                       repart|
4295f9
                       gpt-auto|
4295f9
                       volatile-root|
4295f9
                       verity-setup|
4295f9
                       remount-fs|
4295f9
                       /boot$|
4295f9
                       /boot/efi|
4295f9
                       /kernel/|
4295f9
                       /kernel$|
4295f9
                       /modprobe.d
4295f9
    ''', n, re.X):
4295f9
        o = o_udev
4295f9
    elif re.search(r'''10-oomd-.*defaults\.conf|
4295f9
                       oomd\.conf|
4295f9
                       oomctl|
4295f9
                       org.freedesktop.oom1|
4295f9
                       systemd-oomd
4295f9
    ''', n, re.X):
4295f9
        o = o_oomd
4295f9
    elif n.endswith('.standalone'):
4295f9
        if 'tmpfiles' in n:
4295f9
            o = o_standalone_tmpfiles
4295f9
        elif 'sysusers' in n:
4295f9
            o = o_standalone_sysusers
4295f9
        else:
4295f9
            assert False, 'Found .standalone not belonging to known packages'
4295f9
    else:
4295f9
        o = o_rest
4295f9
4295f9
    if n in known_files:
4295f9
        prefix = ' '.join(known_files[n].split()[:-1])
4295f9
        if prefix:
4295f9
            prefix += ' '
4295f9
    elif file.is_dir() and not file.is_symlink():
4295f9
        prefix = '%dir '
4295f9
    elif 'README' in n:
4295f9
        prefix = '%doc '
4295f9
    elif n.startswith('/etc'):
4295f9
        prefix = '%config(noreplace) '
4295f9
    else:
4295f9
        prefix = ''
4295f9
4295f9
    suffix = '*' if '/man/' in n else ''
4295f9
4295f9
    print(f'{prefix}{n}{suffix}', file=o)