public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Owen W. Taylor <otaylor@fishsoup.net>
To: git-commits@fedoraproject.org
Subject: [flatpaks/flatpak-runtime] f45: Move tools and data files into subdirectories
Date: Fri, 11 Sep 2026 14:40:12 GMT [thread overview]
Message-ID: <178913761293.1.7372116763432216545.flatpaks-flatpak-runtime-db33c7e13940@fedoraproject.org> (raw)
A new commit has been pushed.
Repo : flatpaks/flatpak-runtime
Branch : f45
Commit : db33c7e1394080af25480222a6ac1bd16fb8a827
Author : Owen W. Taylor <otaylor@fishsoup.net>
Date : 2018-01-31T11:21:01+01:00
Stats : +2839/-2835 in 18 file(s)
URL : https://src.fedoraproject.org/flatpaks/flatpak-runtime/c/db33c7e1394080af25480222a6ac1bd16fb8a827?branch=f45
Log:
Move tools and data files into subdirectories
Declutter the toplevel directory in preparation for merging this code into the
flatpak-runtime dist-git.
---
diff --git a/.gitignore b/.gitignore
index dad4e7d..73d7763 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
out/*
cache/*
report.html
+tools/__pycache__
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 6f25ae1..65b8cc2 100644
--- a/Makefile
+++ b/Makefile
@@ -15,17 +15,20 @@ FILE_LISTS = \
all: report.html flatpak-runtime.yaml
-report.html $(PROFILE_FILES): $(PACKAGE_LISTS) package-notes.txt generate-report.py report-template.html
- ./generate-report.py
+report.html $(PROFILE_FILES): $(PACKAGE_LISTS) package-notes.txt tools/generate-report.py report-template.html
+ ./tools/generate-report.py
-flatpak-runtime.yaml: $(PROFILE_FILES) flatpak-runtime.in.yaml generate-modulemd.py
- ./generate-modulemd.py
+$(FILE_LISTS): tools/generate-files.sh tools/list-files.py
+ ./tools/generate-files.sh $@
-$(FILE_LISTS): %.files: generate-files.sh list-files.py
- ./generate-files.sh $@
+$(PACKAGE_LISTS): tools/resolve-files.py $(FILE_LISTS)
-%.packages: %.files resolve-files.py
- ./resolve-files.py $<
+ for f in $(patsubst %.packages,%.files,$(PACKAGE_LISTS)) ; do \
+ ./tools/resolve-files.py $$f ; \
+ done
+
+flatpak-runtime.yaml: $(PROFILE_FILES) flatpak-runtime.in.yaml tools/generate-modulemd.py
+ ./tools/generate-modulemd.py
clean:
rm -f out/*
diff --git a/data/f26-flatpak-runtime.packages b/data/f26-flatpak-runtime.packages
new file mode 100644
index 0000000..538ff24
--- /dev/null
+++ b/data/f26-flatpak-runtime.packages
@@ -0,0 +1,204 @@
+abattis-cantarell-fonts
+acl
+adwaita-cursor-theme
+adwaita-gtk2-theme
+adwaita-icon-theme
+at-spi2-atk
+at-spi2-core
+atk
+audit-libs
+avahi-libs
+basesystem
+bash
+bzip2-libs
+ca-certificates
+cairo
+cairo-gobject
+chkconfig
+colord-libs
+coreutils
+coreutils-common
+cracklib
+crypto-policies
+cryptsetup-libs
+cups-libs
+dbus
+dbus-libs
+device-mapper
+device-mapper-libs
+elfutils-default-yama-scope
+elfutils-libelf
+elfutils-libs
+emacs-filesystem
+enchant
+expat
+fedora-modular-release
+fedora-modular-repos
+filesystem
+flatpak-runtime-config
+fontconfig
+fontpackages-filesystem
+freetype
+gawk
+gdbm
+gdk-pixbuf2
+gdk-pixbuf2-modules
+glib-networking
+glib2
+glibc
+glibc-all-langpacks
+glibc-common
+gmp
+gnome-desktop3
+gnome-themes-standard
+gnutls
+gobject-introspection
+graphite2
+grep
+gsettings-desktop-schemas
+gtk-update-icon-cache
+gtk2
+gtk3
+gvfs-client
+gzip
+harfbuzz
+hicolor-icon-theme
+hunspell
+hunspell-en-GB
+hunspell-en-US
+hwdata
+info
+iptables-libs
+jasper-libs
+jbigkit-libs
+json-glib
+keyutils-libs
+kmod-libs
+krb5-libs
+lcms2
+libX11
+libX11-common
+libXau
+libXcomposite
+libXcursor
+libXdamage
+libXext
+libXfixes
+libXft
+libXi
+libXinerama
+libXrandr
+libXrender
+libXtst
+libXxf86vm
+libacl
+libappstream-glib
+libarchive
+libattr
+libblkid
+libcap
+libcap-ng
+libcom_err
+libcroco
+libcrypt
+libdatrie
+libdb
+libdrm
+libepoxy
+libfdisk
+libffi
+libgcab1
+libgcc
+libgcrypt
+libglvnd
+libglvnd-egl
+libglvnd-glx
+libgpg-error
+libgusb
+libidn
+libidn2
+libjpeg-turbo
+libmodman
+libmount
+libnotify
+libpcap
+libpciaccess
+libpng
+libproxy
+libpwquality
+librsvg2
+libseccomp
+libselinux
+libsemanage
+libsepol
+libsigsegv
+libsmartcols
+libsoup
+libstdc++
+libstemmer
+libtasn1
+libthai
+libtiff
+libunistring
+libusbx
+libutempter
+libuuid
+libverto
+libwayland-client
+libwayland-cursor
+libwayland-server
+libxcb
+libxkbcommon
+libxml2
+libxshmfence
+lz4-libs
+lzo
+mesa-libEGL
+mesa-libGL
+mesa-libgbm
+mesa-libglapi
+mesa-libwayland-egl
+mpfr
+ncurses
+ncurses-base
+ncurses-libs
+nettle
+openssl-libs
+p11-kit
+p11-kit-trust
+pam
+pango
+pcre
+pixman
+popt
+python3
+python3-appdirs
+python3-cairo
+python3-gobject
+python3-gobject-base
+python3-libs
+python3-packaging
+python3-pip
+python3-pyparsing
+python3-setuptools
+python3-six
+qrencode-libs
+readline
+rest
+sed
+setup
+shadow-utils
+shared-mime-info
+sqlite-libs
+system-python
+system-python-libs
+systemd
+systemd-libs
+systemd-pam
+tzdata
+ustr
+util-linux
+xkeyboard-config
+xz-libs
+zenity
+zlib
diff --git a/data/f27-live.packages b/data/f27-live.packages
new file mode 100644
index 0000000..0d2f5ef
--- /dev/null
+++ b/data/f27-live.packages
@@ -0,0 +1,1561 @@
+aajohan-comfortaa-fonts
+abattis-cantarell-fonts
+abrt
+abrt-addon-ccpp
+abrt-addon-coredump-helper
+abrt-addon-kerneloops
+abrt-addon-pstoreoops
+abrt-addon-vmcore
+abrt-addon-xorg
+abrt-cli
+abrt-dbus
+abrt-desktop
+abrt-gui
+abrt-gui-libs
+abrt-java-connector
+abrt-libs
+abrt-plugin-bodhi
+abrt-retrace-client
+abrt-tui
+accountsservice
+accountsservice-libs
+acl
+adcli
+adobe-source-han-sans-cn-fonts
+adobe-source-han-sans-tw-fonts
+adobe-source-han-serif-cn-fonts
+adobe-source-han-serif-tw-fonts
+adwaita-cursor-theme
+adwaita-gtk2-theme
+adwaita-icon-theme
+adwaita-qt4
+adwaita-qt5
+alsa-lib
+alsa-plugins-pulseaudio
+alsa-ucm
+alsa-utils
+anaconda
+anaconda-core
+anaconda-gui
+anaconda-tui
+anaconda-user-help
+anaconda-widgets
+appstream-data
+apr
+apr-util
+argyllcms
+atk
+atkmm
+atmel-firmware
+at-spi2-atk
+at-spi2-core
+attr
+audit
+audit-libs
+audit-libs-python3
+augeas-libs
+authconfig
+autocorr-en
+avahi
+avahi-glib
+avahi-libs
+b43-fwcutter
+b43-openfwwf
+baobab
+basesystem
+bash
+bash-completion
+bc
+bcache-tools
+bind99-libs
+bind99-license
+bind-libs
+bind-libs-lite
+bind-license
+bind-utils
+blivet-gui-runtime
+bluez
+bluez-cups
+bluez-libs
+bluez-obexd
+boost-date-time
+boost-filesystem
+boost-iostreams
+boost-system
+brasero-libs
+bridge-utils
+brlapi
+brltty
+btrfs-progs
+bubblewrap
+bzip2
+bzip2-libs
+ca-certificates
+cairo
+cairo-gobject
+cairomm
+c-ares
+caribou
+caribou-gtk2-module
+caribou-gtk3-module
+cdparanoia-libs
+celt051
+checkpolicy
+cheese
+cheese-libs
+chkconfig
+chrony
+cifs-utils
+cldr-emoji-annotation
+clucene-contribs-lib
+clucene-core
+clutter
+clutter-gst2
+clutter-gst3
+clutter-gtk
+cogl
+colord
+colord-gtk
+colord-libs
+color-filesystem
+compat-openssl10
+comps-extras
+control-center
+control-center-filesystem
+copy-jdk-configs
+coreutils
+coreutils-common
+corosync
+corosynclib
+cpio
+cracklib
+cracklib-dicts
+crda
+createrepo_c
+createrepo_c-libs
+cronie
+cronie-anacron
+crontabs
+crypto-policies
+cryptsetup
+cryptsetup-libs
+cups
+cups-client
+cups-filesystem
+cups-filters
+cups-filters-libs
+cups-libs
+cups-pk-helper
+curl
+cyrus-sasl
+cyrus-sasl-gssapi
+cyrus-sasl-lib
+cyrus-sasl-plain
+dbus
+dbus-glib
+dbus-libs
+dbusmenu-qt
+dbus-x11
+dbxtool
+dconf
+dejavu-fonts-common
+dejavu-sans-fonts
+dejavu-sans-mono-fonts
+dejavu-serif-fonts
+deltarpm
+desktop-backgrounds-gnome
+desktop-file-utils
+device-mapper
+device-mapper-event
+device-mapper-event-libs
+device-mapper-libs
+device-mapper-multipath
+device-mapper-multipath-libs
+device-mapper-persistent-data
+dhcp-client
+dhcp-common
+dhcp-libs
+diffutils
+djvulibre-libs
+dleyna-connector-dbus
+dleyna-core
+dleyna-server
+dmidecode
+dmraid
+dmraid-events
+dnf
+dnf-conf
+dnf-plugins-core
+dnf-yum
+dnsmasq
+dos2unix
+dosfstools
+dotconf
+dracut
+dracut-config-rescue
+dracut-live
+dracut-network
+drpm
+e2fsprogs
+e2fsprogs-libs
+ebtables
+edk2-ovmf
+efibootmgr
+efivar
+efivar-libs
+elfutils
+elfutils-default-yama-scope
+elfutils-libelf
+elfutils-libs
+emacs-filesystem
+enca
+enchant
+eog
+epiphany-runtime
+espeak
+ethtool
+evince
+evince-djvu
+evince-libs
+evince-nautilus
+evolution
+evolution-data-server
+evolution-data-server-langpacks
+evolution-ews
+evolution-ews-langpacks
+evolution-help
+evolution-langpacks
+exempi
+exiv2
+exiv2-libs
+expat
+f27-backgrounds-base
+f27-backgrounds-gnome
+fcoe-utils
+fedora-bookmarks
+fedora-logos
+fedora-logos-httpd
+fedora-productimg-workstation
+fedora-release
+fedora-release-workstation
+fedora-repos
+fedora-repos-rawhide
+fedora-user-agent-chrome
+fedora-workstation-backgrounds
+file
+file-libs
+file-roller
+file-roller-nautilus
+filesystem
+findutils
+fipscheck
+fipscheck-lib
+firefox
+firewalld
+firewalld-filesystem
+flac-libs
+flatpak
+flatpak-libs
+folks
+fontconfig
+fontpackages-filesystem
+foomatic
+foomatic-db
+foomatic-db-filesystem
+foomatic-db-ppds
+fpaste
+fprintd
+fprintd-pam
+freetype
+frei0r-plugins
+fros
+fros-gnome
+fuse
+fuse-common
+fuse-libs
+fwupd
+fwupdate-efi
+fwupdate-libs
+fwupd-labels
+gavl
+gawk
+gc
+GConf2
+gcr
+gd
+gdb-headless
+gdbm
+gdisk
+gdk-pixbuf2
+gdk-pixbuf2-modules
+gdm
+gdouros-symbola-fonts
+gedit
+genisoimage
+geoclue2
+geoclue2-libs
+geocode-glib
+GeoIP
+GeoIP-GeoLite-data
+gettext
+gettext-libs
+gfbgraph
+ghostscript
+ghostscript-core
+ghostscript-fonts
+ghostscript-x11
+giflib
+git
+git-core
+git-core-doc
+gjs
+glade-libs
+glib2
+glibc
+glibc-all-langpacks
+glibc-common
+glibc-langpack-en
+glibmm24
+glib-networking
+glusterfs
+glusterfs-api
+glusterfs-cli
+glusterfs-client-xlators
+glusterfs-fuse
+glusterfs-libs
+glx-utils
+gmime30
+gmp
+gnome-abrt
+gnome-autoar
+gnome-backgrounds
+gnome-bluetooth
+gnome-bluetooth-libs
+gnome-boxes
+gnome-calculator
+gnome-calendar
+gnome-characters
+gnome-classic-session
+gnome-clocks
+gnome-color-manager
+gnome-contacts
+gnome-desktop3
+gnome-disk-utility
+gnome-documents
+gnome-documents-libs
+gnome-font-viewer
+gnome-getting-started-docs
+gnome-initial-setup
+gnome-keyring
+gnome-keyring-pam
+gnome-logs
+gnome-maps
+gnome-menus
+gnome-online-accounts
+gnome-online-miners
+gnome-screenshot
+gnome-session
+gnome-session-wayland-session
+gnome-session-xsession
+gnome-settings-daemon
+gnome-shell
+gnome-shell-extension-alternate-tab
+gnome-shell-extension-apps-menu
+gnome-shell-extension-background-logo
+gnome-shell-extension-common
+gnome-shell-extension-launch-new-instance
+gnome-shell-extension-places-menu
+gnome-shell-extension-window-list
+gnome-software
+gnome-system-monitor
+gnome-terminal
+gnome-terminal-nautilus
+gnome-themes-standard
+gnome-todo
+gnome-user-docs
+gnome-user-share
+gnome-video-effects
+gnome-weather
+gnu-free-fonts-common
+gnu-free-mono-fonts
+gnu-free-sans-fonts
+gnu-free-serif-fonts
+gnupg
+gnupg2
+gnupg2-smime
+gnutls
+gobject-introspection
+gom
+google-android-emoji-fonts
+google-crosextra-caladea-fonts
+google-crosextra-carlito-fonts
+google-noto-emoji-fonts
+google-noto-fonts-common
+google-noto-sans-lisu-fonts
+google-noto-sans-mandaic-fonts
+google-noto-sans-meetei-mayek-fonts
+google-noto-sans-sinhala-fonts
+google-noto-sans-tagalog-fonts
+google-noto-sans-tai-tham-fonts
+google-noto-sans-tai-viet-fonts
+gperftools-libs
+gpgme
+gpgmepp
+gpg-pubkey
+graphite2
+grep
+grilo
+grilo-plugins
+groff-base
+grub2-common
+grub2-efi-ia32
+grub2-efi-ia32-cdboot
+grub2-efi-x64
+grub2-efi-x64-cdboot
+grub2-pc
+grub2-pc-modules
+grub2-tools
+grub2-tools-efi
+grub2-tools-extra
+grub2-tools-minimal
+grubby
+gsettings-desktop-schemas
+gsm
+gsound
+gspell
+gssdp
+gssproxy
+gstreamer1
+gstreamer1-plugins-bad-free
+gstreamer1-plugins-bad-free-gtk
+gstreamer1-plugins-base
+gstreamer1-plugins-good
+gstreamer1-plugins-ugly-free
+gtk2
+gtk3
+gtkmm24
+gtkmm30
+gtksourceview3
+gtkspell3
+gtk-update-icon-cache
+gtk-vnc2
+guile
+gupnp
+gupnp-av
+gupnp-dlna
+gutenprint
+gutenprint-cups
+gutenprint-libs
+gvfs
+gvfs-afc
+gvfs-afp
+gvfs-archive
+gvfs-client
+gvfs-fuse
+gvfs-goa
+gvfs-gphoto2
+gvfs-mtp
+gvfs-smb
+gvnc
+gzip
+hardlink
+harfbuzz
+harfbuzz-icu
+hfsplus-tools
+hicolor-icon-theme
+highlight
+hostname
+hplip
+hplip-common
+hplip-libs
+httpd
+httpd-filesystem
+httpd-tools
+http-parser
+hunspell
+hunspell-en
+hunspell-en-GB
+hunspell-en-US
+hwdata
+hyperv-daemons
+hyperv-daemons-license
+hypervfcopyd
+hypervkvpd
+hypervvssd
+hyphen
+hyphen-en
+ibus
+ibus-gtk2
+ibus-gtk3
+ibus-hangul
+ibus-kkc
+ibus-libpinyin
+ibus-libs
+ibus-libzhuyin
+ibus-m17n
+ibus-qt
+ibus-rawcode
+ibus-setup
+ibus-typing-booster
+ibus-wayland
+iio-sensor-proxy
+info
+initscripts
+ipcalc
+iproute
+iproute-tc
+ipset
+ipset-libs
+iptables
+iptables-libs
+iptstate
+iputils
+ipw2100-firmware
+ipw2200-firmware
+ipxe-roms-qemu
+iscsi-initiator-utils
+iscsi-initiator-utils-iscsiuio
+isns-utils-libs
+iso-codes
+isomd5sum
+iw
+iwl1000-firmware
+iwl100-firmware
+iwl105-firmware
+iwl135-firmware
+iwl2000-firmware
+iwl2030-firmware
+iwl3160-firmware
+iwl3945-firmware
+iwl4965-firmware
+iwl5000-firmware
+iwl5150-firmware
+iwl6000-firmware
+iwl6000g2a-firmware
+iwl6000g2b-firmware
+iwl6050-firmware
+iwl7260-firmware
+jansson
+jasper-libs
+java-1.8.0-openjdk-headless
+javapackages-tools
+jbigkit-libs
+jimtcl
+jomolhari-fonts
+js-jquery
+json-c
+json-glib
+julietaula-montserrat-fonts
+jwhois
+kbd
+kbd-legacy
+kbd-misc
+kernel
+kernel-core
+kernel-modules
+kernel-modules-extra
+kexec-tools
+kexec-tools-anaconda-addon
+keybinder3
+keyutils
+keyutils-libs
+khmeros-base-fonts
+khmeros-fonts-common
+kmod
+kmod-libs
+kpartx
+krb5-libs
+kyotocabinet-libs
+lame-libs
+langpacks-en
+langtable
+langtable-data
+langtable-python3
+lcms2
+less
+liba52
+libabw
+libacl
+libaio
+libao
+libappstream-glib
+libarchive
+libassuan
+libasyncns
+libatasmart
+libatomic_ops
+libattr
+libavc1394
+libbabeltrace
+libbasicobjects
+libblkid
+libblockdev
+libblockdev-btrfs
+libblockdev-crypto
+libblockdev-dm
+libblockdev-fs
+libblockdev-kbd
+libblockdev-loop
+libblockdev-lvm
+libblockdev-mdraid
+libblockdev-mpath
+libblockdev-part
+libblockdev-plugins-all
+libblockdev-swap
+libblockdev-utils
+libbluray
+libbytesize
+libcacard
+libcanberra
+libcanberra-gtk2
+libcanberra-gtk3
+libcap
+libcap-ng
+libcdio
+libcdio-paranoia
+libcdr
+libcgroup
+libchamplain
+libchamplain-gtk
+libcmis
+libcollection
+libcom_err
+libcomps
+libconfig
+libcroco
+libcrypt-nss
+libcryptui
+libcue
+libcurl
+libdaemon
+libdatrie
+libdb
+libdb-utils
+libdfu
+libdhash
+libdmapsharing
+libdmx
+libdnet
+libdnf
+libdrm
+libdv
+libdvdnav
+libdvdread
+libe-book
+libedit
+libeot
+libepoxy
+liberation-fonts-common
+liberation-mono-fonts
+liberation-sans-fonts
+liberation-serif-fonts
+libertas-usb8388-firmware
+libetonyek
+libev
+libevdev
+libevent
+libexif
+libexttextcat
+libfdisk
+libfdt
+libffi
+libfontenc
+libfprint
+libfreehand
+libgcab1
+libgcc
+libgcrypt
+libgdata
+libgdither
+libgee
+libgepub
+libgexiv2
+libgltf
+libglvnd
+libglvnd-egl
+libglvnd-gles
+libglvnd-glx
+libgnomekbd
+libgnome-keyring
+libgomp
+libgovirt
+libgpg-error
+libgphoto2
+libgpod
+libgrss
+libgsf
+libgtop2
+libgudev
+libgusb
+libgweather
+libgxps
+libhangul
+libibverbs
+libical
+libICE
+libicu
+libidn
+libidn2
+libiec61883
+libieee1284
+libimagequant
+libimobiledevice
+libini_config
+libinput
+libipa_hbac
+libipt
+libiptcdata
+libiscsi
+libjpeg-turbo
+libkadm5
+libkkc
+libkkc-common
+libkkc-data
+libksba
+liblangtag
+liblangtag-data
+libldb
+liblouis
+libmbim
+libmbim-utils
+libmcpp
+libmediaart
+libmetalink
+libmng
+libmnl
+libmodman
+libmount
+libmpc
+libmpcdec
+libmspack
+libmspub
+libmtp
+libmusicbrainz5
+libmwaw
+libmx
+libndp
+libnetfilter_conntrack
+libnfnetlink
+libnfs
+libnfsidmap
+libnghttp2
+libnl3
+libnl3-cli
+libnma
+libnm-gtk
+libnotify
+liboauth
+libodfgen
+libogg
+liborcus
+libosinfo
+libpagemaker
+libpath_utils
+libpcap
+libpciaccess
+libpeas
+libpeas-gtk
+libpeas-loader-python3
+libphodav
+libpinyin
+libpinyin-data
+libpipeline
+libpkgconf
+libplist
+libpng
+libproxy
+libproxy-mozjs
+libpskc
+libpsl
+libpwquality
+libqb
+libqmi
+libqmi-utils
+libquvi
+libquvi-scripts
+librados2
+LibRaw
+libraw1394
+librbd1
+librdmacm
+libref_array
+libreoffice-calc
+libreoffice-core
+libreoffice-data
+libreoffice-draw
+libreoffice-emailmerge
+libreoffice-filters
+libreoffice-graphicfilter
+libreoffice-gtk2
+libreoffice-gtk3
+libreoffice-help-en
+libreoffice-impress
+libreofficekit
+libreoffice-langpack-en
+libreoffice-math
+libreoffice-opensymbol-fonts
+libreoffice-pdfimport
+libreoffice-pyuno
+libreoffice-ure
+libreoffice-ure-common
+libreoffice-writer
+libreoffice-x11
+libreoffice-xsltfilter
+librepo
+libreport
+libreport-anaconda
+libreport-cli
+libreport-fedora
+libreport-filesystem
+libreport-gtk
+libreport-plugin-bugzilla
+libreport-plugin-kerneloops
+libreport-plugin-logger
+libreport-plugin-reportuploader
+libreport-plugin-systemd-journal
+libreport-plugin-ureport
+libreport-python3
+libreport-web
+librevenge
+librsvg2
+libsamplerate
+libsane-hpaio
+libseccomp
+libsecret
+libselinux
+libselinux-python3
+libselinux-utils
+libsemanage
+libsemanage-python3
+libsepol
+libshout
+libsigc++20
+libsigsegv
+libSM
+libsmartcols
+libsmbclient
+libsmbios
+libsndfile
+libsolv
+libsoup
+libspectre
+libsrtp
+libss
+libssh
+libssh2
+libsss_autofs
+libsss_certmap
+libsss_idmap
+libsss_nss_idmap
+libsss_sudo
+libstaroffice
+libstdc++
+libstemmer
+libsysfs
+libtalloc
+libtar
+libtasn1
+libtdb
+libteam
+libtevent
+libthai
+libtheora
+libtiff
+libtimezonemap
+libtirpc
+libtool-ltdl
+libudisks2
+libunistring
+libunwind
+libusal
+libusb
+libusbmuxd
+libusbx
+libuser
+libutempter
+libuuid
+libv4l
+libvdpau
+libverto
+libverto-libev
+libvirt-daemon
+libvirt-daemon-config-network
+libvirt-daemon-driver-interface
+libvirt-daemon-driver-network
+libvirt-daemon-driver-nodedev
+libvirt-daemon-driver-nwfilter
+libvirt-daemon-driver-qemu
+libvirt-daemon-driver-secret
+libvirt-daemon-driver-storage
+libvirt-daemon-driver-storage-core
+libvirt-daemon-driver-storage-disk
+libvirt-daemon-driver-storage-gluster
+libvirt-daemon-driver-storage-iscsi
+libvirt-daemon-driver-storage-logical
+libvirt-daemon-driver-storage-mpath
+libvirt-daemon-driver-storage-rbd
+libvirt-daemon-driver-storage-scsi
+libvirt-daemon-driver-storage-sheepdog
+libvirt-daemon-driver-storage-zfs
+libvirt-daemon-kvm
+libvirt-gconfig
+libvirt-glib
+libvirt-gobject
+libvirt-libs
+libvisio
+libvisual
+libvorbis
+libvpx
+libwacom
+libwacom-data
+libwayland-client
+libwayland-cursor
+libwayland-server
+libwbclient
+libwebp
+libwnck3
+libwpd
+libwpg
+libwps
+libwsman1
+libwvstreams
+libX11
+libX11-common
+libX11-xcb
+libXau
+libxcb
+libXcomposite
+libXcursor
+libXdamage
+libXdmcp
+libXext
+libXfixes
+libXfont
+libXfont2
+libXft
+libXi
+libXinerama
+libxkbcommon
+libxkbcommon-x11
+libxkbfile
+libxklavier
+libxml2
+libXmu
+libXpm
+libXrandr
+libXrender
+libXres
+libxshmfence
+libxslt
+libXt
+libXtst
+libXv
+libXvMC
+libXxf86dga
+libXxf86misc
+libXxf86vm
+libzapojit
+libzhuyin
+libzmf
+linux-atm-libs
+linux-firmware
+lksctp-tools
+lldpad
+llvm-libs
+Lmod
+lockdev
+logrotate
+lohit-assamese-fonts
+lohit-bengali-fonts
+lohit-devanagari-fonts
+lohit-gujarati-fonts
+lohit-gurmukhi-fonts
+lohit-kannada-fonts
+lohit-odia-fonts
+lohit-tamil-fonts
+lohit-telugu-fonts
+lpsolve
+lrzsz
+lsof
+lttng-ust
+lua
+lua-expat
+lua-filesystem
+lua-json
+lua-libs
+lua-lpeg
+lua-posix
+lua-socket
+lua-term
+lvm2
+lvm2-libs
+lxpolkit
+lz4
+lz4-libs
+lzo
+lzop
+m17n-db
+m17n-lib
+mactel-boot
+mailcap
+make
+man-db
+man-pages
+marisa
+mcelog
+mcpp
+mdadm
+media-player-info
+memtest86+
+mesa-dri-drivers
+mesa-filesystem
+mesa-libEGL
+mesa-libgbm
+mesa-libGL
+mesa-libglapi
+mesa-libwayland-egl
+mesa-libxatracker
+microcode_ctl
+mlocate
+mobile-broadband-provider-info
+mod_dnssd
+ModemManager
+ModemManager-glib
+mod_http2
+mokutil
+mousetweaks
+mozilla-filesystem
+mozjs17
+mozjs38
+mozjs52
+mpage
+mpfr
+mpg123-libs
+mtdev
+mtools
+mtr
+mutter
+mythes
+mythes-en
+nautilus
+nautilus-extensions
+nautilus-sendto
+naver-nanum-fonts-common
+naver-nanum-gothic-fonts
+ncurses
+ncurses-base
+ncurses-libs
+neon
+netcf-libs
+net-snmp-libs
+nettle
+net-tools
+NetworkManager
+NetworkManager-adsl
+NetworkManager-bluetooth
+NetworkManager-config-connectivity-fedora
+NetworkManager-glib
+NetworkManager-libnm
+NetworkManager-openconnect
+NetworkManager-openconnect-gnome
+NetworkManager-openvpn
+NetworkManager-openvpn-gnome
+NetworkManager-pptp
+NetworkManager-pptp-gnome
+NetworkManager-ssh
+NetworkManager-ssh-gnome
+NetworkManager-team
+NetworkManager-vpnc
+NetworkManager-vpnc-gnome
+NetworkManager-wifi
+NetworkManager-wwan
+newt
+nfs-utils
+nmap-ncat
+nm-connection-editor
+npth
+nspr
+nss
+nss-mdns
+nss-pem
+nss-softokn
+nss-softokn-freebl
+nss-sysinit
+nss-tools
+nss-util
+ntfs-3g
+ntfsprogs
+numactl-libs
+numad
+opencc
+openCOLLADA
+openconnect
+openjpeg2
+openldap
+openssh
+openssh-clients
+openssh-server
+openssl
+openssl-libs
+open-vm-tools
+open-vm-tools-desktop
+openvpn
+opus
+orc
+orca
+osinfo-db
+osinfo-db-tools
+os-prober
+ostree
+ostree-libs
+p11-kit
+p11-kit-trust
+PackageKit
+PackageKit-command-not-found
+PackageKit-glib
+PackageKit-gstreamer-plugin
+PackageKit-gtk3-module
+pakchois
+paktype-naskh-basic-fonts
+pam
+pam_krb5
+pango
+pangomm
+paps
+paps-libs
+paratype-pt-sans-fonts
+parted
+passwd
+passwdqc
+passwdqc-lib
+pciutils
+pciutils-libs
+pcre
+pcre2
+pcre2-utf16
+pcsc-lite-libs
+perl-Carp
+perl-constant
+perl-Data-Dumper
+perl-Encode
+perl-Errno
+perl-Error
+perl-Exporter
+perl-File-Path
+perl-File-Temp
+perl-Getopt-Long
+perl-Git
+perl-HTTP-Tiny
+perl-interpreter
+perl-IO
+perl-IO-Socket-IP
+perl-IO-Socket-SSL
+perl-libnet
+perl-libs
+perl-macros
+perl-MIME-Base64
+perl-Mozilla-CA
+perl-Net-SSLeay
+perl-parent
+perl-PathTools
+perl-Pod-Escapes
+perl-podlators
+perl-Pod-Perldoc
+perl-Pod-Simple
+perl-Pod-Usage
+perl-Scalar-List-Utils
+perl-Socket
+perl-Storable
+perl-Term-ANSIColor
+perl-Term-Cap
+perl-TermReadKey
+perl-Text-ParseWords
+perl-Text-Tabs+Wrap
+perl-threads
+perl-threads-shared
+perl-Time-Local
+perl-Unicode-Normalize
+perl-URI
+pigz
+pinentry
+pinentry-gnome3
+pinentry-gtk
+pinfo
+pipewire
+pipewire-libs
+pixman
+pkcs11-helper
+pkgconf
+pkgconf-m4
+pkgconf-pkg-config
+plymouth
+plymouth-core-libs
+plymouth-graphics-libs
+plymouth-plugin-label
+plymouth-plugin-two-step
+plymouth-scripts
+plymouth-system-theme
+plymouth-theme-charge
+policycoreutils
+policycoreutils-python3
+policycoreutils-python-utils
+polkit
+polkit-libs
+polkit-pkla-compat
+poppler
+poppler-data
+poppler-glib
+poppler-utils
+popt
+ppp
+pptp
+procps-ng
+psacct
+psmisc
+publicsuffix-list-dafsa
+pulseaudio
+pulseaudio-gdm-hooks
+pulseaudio-libs
+pulseaudio-libs-glib2
+pulseaudio-module-bluetooth
+pulseaudio-module-x11
+pulseaudio-utils
+python2
+python2-libs
+python2-pip
+python2-setuptools
+python2-talloc
+python3
+python3-abrt
+python3-abrt-addon
+python3-asn1crypto
+python3-augeas
+python3-beaker
+python3-bind
+python3-blivet
+python3-blockdev
+python3-brlapi
+python3-bytesize
+python3-cairo
+python3-caribou
+python3-cffi
+python3-chardet
+python3-coverage
+python3-cryptography
+python3-cups
+python3-dbus
+python3-decorator
+python3-dmidecode
+python3-dnf
+python3-dnf-plugins-core
+python3-enchant
+python3-firewall
+python3-gobject
+python3-gobject-base
+python3-gpg
+python3-hawkey
+python3-humanize
+python3-idna
+python3-iniparse
+python3-inotify
+python3-IPy
+python3-iscsi-initiator-utils
+python3-kickstart
+python3-libcomps
+python3-librepo
+python3-libs
+python3-libxml2
+python3-louis
+python3-mako
+python3-markupsafe
+python3-meh
+python3-meh-gui
+python3-ntplib
+python3-olefile
+python3-ordered-set
+python3-pid
+python3-pillow
+python3-pip
+python3-ply
+python3-pwquality
+python3-pyatspi
+python3-pycparser
+python3-pycurl
+python3-pydbus
+python3-pyOpenSSL
+python3-pyparted
+python3-pysocks
+python3-pytz
+python3-pyudev
+python3-pyxdg
+python3-requests
+python3-requests-file
+python3-requests-ftp
+python3-rpm
+python3-setuptools
+python3-simpleline
+python3-six
+python3-slip
+python3-slip-dbus
+python3-speechd
+python3-sssdconfig
+python3-systemd
+python3-urllib3
+python3-wrapt
+python-systemd-doc
+qemu-block-curl
+qemu-block-dmg
+qemu-block-gluster
+qemu-block-iscsi
+qemu-block-nfs
+qemu-block-rbd
+qemu-block-ssh
+qemu-common
+qemu-guest-agent
+qemu-img
+qemu-kvm
+qemu-system-x86
+qemu-system-x86-core
+qgnomeplatform
+qpdf-libs
+qrencode-libs
+qt
+qt5-qtbase
+qt5-qtbase-common
+qt5-qtbase-gui
+qt5-qtdeclarative
+qt5-qtxmlpatterns
+qt-common
+qt-settings
+qt-x11
+quota
+quota-nls
+radvd
+raptor2
+rasqal
+rdist
+rdma-core
+readline
+realmd
+redhat-menus
+redland
+rest
+rhythmbox
+rng-tools
+rootfiles
+rpcbind
+rpm
+rpm-build-libs
+rpm-libs
+rpm-plugin-selinux
+rpm-plugin-systemd-inhibit
+rp-pppoe
+rsync
+rtkit
+rygel
+samba-client
+samba-client-libs
+samba-common
+samba-common-libs
+samba-dc-libs
+samba-libs
+sane-backends
+sane-backends-drivers-cameras
+sane-backends-drivers-scanners
+sane-backends-libs
+satyr
+sbc
+scl-utils
+SDL2
+seabios-bin
+seavgabios-bin
+sed
+selinux-policy
+selinux-policy-targeted
+setools-python3
+setroubleshoot
+setroubleshoot-plugins
+setroubleshoot-server
+setup
+setuptool
+sg3_utils-libs
+sgabios-bin
+sgpio
+shadow-utils
+shared-mime-info
+sheepdog
+shim-ia32
+shim-x64
+shotwell
+sil-abyssinica-fonts
+sil-mingzat-fonts
+sil-nuosu-fonts
+sil-padauk-fonts
+simple-scan
+skkdic
+slang
+smc-fonts-common
+smc-meera-fonts
+snappy
+sni-qt
+sos
+sound-theme-freedesktop
+soundtouch
+soxr
+speech-dispatcher
+speech-dispatcher-espeak
+speex
+speexdsp
+spice-glib
+spice-gtk3
+spice-server
+spice-vdagent
+sqlite-libs
+sshpass
+sssd
+sssd-ad
+sssd-client
+sssd-common
+sssd-common-pac
+sssd-ipa
+sssd-kcm
+sssd-krb5
+sssd-krb5-common
+sssd-ldap
+sssd-nfs-idmap
+sssd-proxy
+startup-notification
+stix-fonts
+stoken-libs
+sudo
+sushi
+switcheroo-control
+symlinks
+syslinux
+syslinux-extlinux
+syslinux-extlinux-nonlinux
+syslinux-nonlinux
+system-config-printer-libs
+system-config-printer-udev
+systemd
+systemd-bootchart
+systemd-container
+systemd-libs
+systemd-pam
+systemd-udev
+tabish-eeyek-fonts
+taglib
+tar
+tcl
+tcpdump
+tcp_wrappers
+tcp_wrappers-libs
+teamd
+telepathy-filesystem
+telepathy-glib
+telepathy-logger
+telnet
+thai-scalable-fonts-common
+thai-scalable-waree-fonts
+tigervnc-license
+tigervnc-server-minimal
+time
+timedatex
+totem
+totem-nautilus
+totem-pl-parser
+traceroute
+tracker
+tracker-miners
+tree
+trousers
+trousers-lib
+tzdata
+tzdata-java
+udisks2
+unicode-ucd
+unique
+unoconv
+unzip
+upower
+urw-fonts
+usb_modeswitch
+usb_modeswitch-data
+usbmuxd
+usbredir
+usbutils
+usermode
+userspace-rcu
+util-linux
+vconfig
+vim-minimal
+vino
+virglrenderer
+vlgothic-fonts
+volume_key-libs
+vpnc
+vpnc-script
+vte291
+vte-profile
+wavpack
+web-assets-filesystem
+webkitgtk4
+webkitgtk4-jsc
+webkitgtk4-plugin-process-gtk2
+webrtc-audio-processing
+wget
+which
+wireless-tools
+words
+wpa_supplicant
+wvdial
+xcb-util
+xcb-util-image
+xcb-util-keysyms
+xcb-util-renderutil
+xcb-util-wm
+xdg-desktop-portal
+xdg-desktop-portal-gtk
+xdg-user-dirs
+xdg-user-dirs-gtk
+xdg-utils
+xen-libs
+xen-licenses
+xfsprogs
+xkeyboard-config
+xml-common
+xmlrpc-c
+xmlrpc-c-client
+xmlsec1
+xmlsec1-openssl
+xorg-x11-drv-ati
+xorg-x11-drv-evdev
+xorg-x11-drv-fbdev
+xorg-x11-drv-intel
+xorg-x11-drv-libinput
+xorg-x11-drv-nouveau
+xorg-x11-drv-openchrome
+xorg-x11-drv-qxl
+xorg-x11-drv-vesa
+xorg-x11-drv-vmware
+xorg-x11-drv-wacom
+xorg-x11-font-utils
+xorg-x11-server-common
+xorg-x11-server-utils
+xorg-x11-server-Xorg
+xorg-x11-server-Xwayland
+xorg-x11-utils
+xorg-x11-xauth
+xorg-x11-xinit
+xorg-x11-xkb-utils
+xz
+xz-libs
+yajl
+yelp
+yelp-libs
+yelp-xsl
+zd1211-firmware
+zenity
+zfs-fuse
+zip
+zlib
diff --git a/f26-flatpak-runtime.packages b/f26-flatpak-runtime.packages
deleted file mode 100644
index 538ff24..0000000
--- a/f26-flatpak-runtime.packages
+++ /dev/null
@@ -1,204 +0,0 @@
-abattis-cantarell-fonts
-acl
-adwaita-cursor-theme
-adwaita-gtk2-theme
-adwaita-icon-theme
-at-spi2-atk
-at-spi2-core
-atk
-audit-libs
-avahi-libs
-basesystem
-bash
-bzip2-libs
-ca-certificates
-cairo
-cairo-gobject
-chkconfig
-colord-libs
-coreutils
-coreutils-common
-cracklib
-crypto-policies
-cryptsetup-libs
-cups-libs
-dbus
-dbus-libs
-device-mapper
-device-mapper-libs
-elfutils-default-yama-scope
-elfutils-libelf
-elfutils-libs
-emacs-filesystem
-enchant
-expat
-fedora-modular-release
-fedora-modular-repos
-filesystem
-flatpak-runtime-config
-fontconfig
-fontpackages-filesystem
-freetype
-gawk
-gdbm
-gdk-pixbuf2
-gdk-pixbuf2-modules
-glib-networking
-glib2
-glibc
-glibc-all-langpacks
-glibc-common
-gmp
-gnome-desktop3
-gnome-themes-standard
-gnutls
-gobject-introspection
-graphite2
-grep
-gsettings-desktop-schemas
-gtk-update-icon-cache
-gtk2
-gtk3
-gvfs-client
-gzip
-harfbuzz
-hicolor-icon-theme
-hunspell
-hunspell-en-GB
-hunspell-en-US
-hwdata
-info
-iptables-libs
-jasper-libs
-jbigkit-libs
-json-glib
-keyutils-libs
-kmod-libs
-krb5-libs
-lcms2
-libX11
-libX11-common
-libXau
-libXcomposite
-libXcursor
-libXdamage
-libXext
-libXfixes
-libXft
-libXi
-libXinerama
-libXrandr
-libXrender
-libXtst
-libXxf86vm
-libacl
-libappstream-glib
-libarchive
-libattr
-libblkid
-libcap
-libcap-ng
-libcom_err
-libcroco
-libcrypt
-libdatrie
-libdb
-libdrm
-libepoxy
-libfdisk
-libffi
-libgcab1
-libgcc
-libgcrypt
-libglvnd
-libglvnd-egl
-libglvnd-glx
-libgpg-error
-libgusb
-libidn
-libidn2
-libjpeg-turbo
-libmodman
-libmount
-libnotify
-libpcap
-libpciaccess
-libpng
-libproxy
-libpwquality
-librsvg2
-libseccomp
-libselinux
-libsemanage
-libsepol
-libsigsegv
-libsmartcols
-libsoup
-libstdc++
-libstemmer
-libtasn1
-libthai
-libtiff
-libunistring
-libusbx
-libutempter
-libuuid
-libverto
-libwayland-client
-libwayland-cursor
-libwayland-server
-libxcb
-libxkbcommon
-libxml2
-libxshmfence
-lz4-libs
-lzo
-mesa-libEGL
-mesa-libGL
-mesa-libgbm
-mesa-libglapi
-mesa-libwayland-egl
-mpfr
-ncurses
-ncurses-base
-ncurses-libs
-nettle
-openssl-libs
-p11-kit
-p11-kit-trust
-pam
-pango
-pcre
-pixman
-popt
-python3
-python3-appdirs
-python3-cairo
-python3-gobject
-python3-gobject-base
-python3-libs
-python3-packaging
-python3-pip
-python3-pyparsing
-python3-setuptools
-python3-six
-qrencode-libs
-readline
-rest
-sed
-setup
-shadow-utils
-shared-mime-info
-sqlite-libs
-system-python
-system-python-libs
-systemd
-systemd-libs
-systemd-pam
-tzdata
-ustr
-util-linux
-xkeyboard-config
-xz-libs
-zenity
-zlib
diff --git a/f27-live.packages b/f27-live.packages
deleted file mode 100644
index 0d2f5ef..0000000
--- a/f27-live.packages
+++ /dev/null
@@ -1,1561 +0,0 @@
-aajohan-comfortaa-fonts
-abattis-cantarell-fonts
-abrt
-abrt-addon-ccpp
-abrt-addon-coredump-helper
-abrt-addon-kerneloops
-abrt-addon-pstoreoops
-abrt-addon-vmcore
-abrt-addon-xorg
-abrt-cli
-abrt-dbus
-abrt-desktop
-abrt-gui
-abrt-gui-libs
-abrt-java-connector
-abrt-libs
-abrt-plugin-bodhi
-abrt-retrace-client
-abrt-tui
-accountsservice
-accountsservice-libs
-acl
-adcli
-adobe-source-han-sans-cn-fonts
-adobe-source-han-sans-tw-fonts
-adobe-source-han-serif-cn-fonts
-adobe-source-han-serif-tw-fonts
-adwaita-cursor-theme
-adwaita-gtk2-theme
-adwaita-icon-theme
-adwaita-qt4
-adwaita-qt5
-alsa-lib
-alsa-plugins-pulseaudio
-alsa-ucm
-alsa-utils
-anaconda
-anaconda-core
-anaconda-gui
-anaconda-tui
-anaconda-user-help
-anaconda-widgets
-appstream-data
-apr
-apr-util
-argyllcms
-atk
-atkmm
-atmel-firmware
-at-spi2-atk
-at-spi2-core
-attr
-audit
-audit-libs
-audit-libs-python3
-augeas-libs
-authconfig
-autocorr-en
-avahi
-avahi-glib
-avahi-libs
-b43-fwcutter
-b43-openfwwf
-baobab
-basesystem
-bash
-bash-completion
-bc
-bcache-tools
-bind99-libs
-bind99-license
-bind-libs
-bind-libs-lite
-bind-license
-bind-utils
-blivet-gui-runtime
-bluez
-bluez-cups
-bluez-libs
-bluez-obexd
-boost-date-time
-boost-filesystem
-boost-iostreams
-boost-system
-brasero-libs
-bridge-utils
-brlapi
-brltty
-btrfs-progs
-bubblewrap
-bzip2
-bzip2-libs
-ca-certificates
-cairo
-cairo-gobject
-cairomm
-c-ares
-caribou
-caribou-gtk2-module
-caribou-gtk3-module
-cdparanoia-libs
-celt051
-checkpolicy
-cheese
-cheese-libs
-chkconfig
-chrony
-cifs-utils
-cldr-emoji-annotation
-clucene-contribs-lib
-clucene-core
-clutter
-clutter-gst2
-clutter-gst3
-clutter-gtk
-cogl
-colord
-colord-gtk
-colord-libs
-color-filesystem
-compat-openssl10
-comps-extras
-control-center
-control-center-filesystem
-copy-jdk-configs
-coreutils
-coreutils-common
-corosync
-corosynclib
-cpio
-cracklib
-cracklib-dicts
-crda
-createrepo_c
-createrepo_c-libs
-cronie
-cronie-anacron
-crontabs
-crypto-policies
-cryptsetup
-cryptsetup-libs
-cups
-cups-client
-cups-filesystem
-cups-filters
-cups-filters-libs
-cups-libs
-cups-pk-helper
-curl
-cyrus-sasl
-cyrus-sasl-gssapi
-cyrus-sasl-lib
-cyrus-sasl-plain
-dbus
-dbus-glib
-dbus-libs
-dbusmenu-qt
-dbus-x11
-dbxtool
-dconf
-dejavu-fonts-common
-dejavu-sans-fonts
-dejavu-sans-mono-fonts
-dejavu-serif-fonts
-deltarpm
-desktop-backgrounds-gnome
-desktop-file-utils
-device-mapper
-device-mapper-event
-device-mapper-event-libs
-device-mapper-libs
-device-mapper-multipath
-device-mapper-multipath-libs
-device-mapper-persistent-data
-dhcp-client
-dhcp-common
-dhcp-libs
-diffutils
-djvulibre-libs
-dleyna-connector-dbus
-dleyna-core
-dleyna-server
-dmidecode
-dmraid
-dmraid-events
-dnf
-dnf-conf
-dnf-plugins-core
-dnf-yum
-dnsmasq
-dos2unix
-dosfstools
-dotconf
-dracut
-dracut-config-rescue
-dracut-live
-dracut-network
-drpm
-e2fsprogs
-e2fsprogs-libs
-ebtables
-edk2-ovmf
-efibootmgr
-efivar
-efivar-libs
-elfutils
-elfutils-default-yama-scope
-elfutils-libelf
-elfutils-libs
-emacs-filesystem
-enca
-enchant
-eog
-epiphany-runtime
-espeak
-ethtool
-evince
-evince-djvu
-evince-libs
-evince-nautilus
-evolution
-evolution-data-server
-evolution-data-server-langpacks
-evolution-ews
-evolution-ews-langpacks
-evolution-help
-evolution-langpacks
-exempi
-exiv2
-exiv2-libs
-expat
-f27-backgrounds-base
-f27-backgrounds-gnome
-fcoe-utils
-fedora-bookmarks
-fedora-logos
-fedora-logos-httpd
-fedora-productimg-workstation
-fedora-release
-fedora-release-workstation
-fedora-repos
-fedora-repos-rawhide
-fedora-user-agent-chrome
-fedora-workstation-backgrounds
-file
-file-libs
-file-roller
-file-roller-nautilus
-filesystem
-findutils
-fipscheck
-fipscheck-lib
-firefox
-firewalld
-firewalld-filesystem
-flac-libs
-flatpak
-flatpak-libs
-folks
-fontconfig
-fontpackages-filesystem
-foomatic
-foomatic-db
-foomatic-db-filesystem
-foomatic-db-ppds
-fpaste
-fprintd
-fprintd-pam
-freetype
-frei0r-plugins
-fros
-fros-gnome
-fuse
-fuse-common
-fuse-libs
-fwupd
-fwupdate-efi
-fwupdate-libs
-fwupd-labels
-gavl
-gawk
-gc
-GConf2
-gcr
-gd
-gdb-headless
-gdbm
-gdisk
-gdk-pixbuf2
-gdk-pixbuf2-modules
-gdm
-gdouros-symbola-fonts
-gedit
-genisoimage
-geoclue2
-geoclue2-libs
-geocode-glib
-GeoIP
-GeoIP-GeoLite-data
-gettext
-gettext-libs
-gfbgraph
-ghostscript
-ghostscript-core
-ghostscript-fonts
-ghostscript-x11
-giflib
-git
-git-core
-git-core-doc
-gjs
-glade-libs
-glib2
-glibc
-glibc-all-langpacks
-glibc-common
-glibc-langpack-en
-glibmm24
-glib-networking
-glusterfs
-glusterfs-api
-glusterfs-cli
-glusterfs-client-xlators
-glusterfs-fuse
-glusterfs-libs
-glx-utils
-gmime30
-gmp
-gnome-abrt
-gnome-autoar
-gnome-backgrounds
-gnome-bluetooth
-gnome-bluetooth-libs
-gnome-boxes
-gnome-calculator
-gnome-calendar
-gnome-characters
-gnome-classic-session
-gnome-clocks
-gnome-color-manager
-gnome-contacts
-gnome-desktop3
-gnome-disk-utility
-gnome-documents
-gnome-documents-libs
-gnome-font-viewer
-gnome-getting-started-docs
-gnome-initial-setup
-gnome-keyring
-gnome-keyring-pam
-gnome-logs
-gnome-maps
-gnome-menus
-gnome-online-accounts
-gnome-online-miners
-gnome-screenshot
-gnome-session
-gnome-session-wayland-session
-gnome-session-xsession
-gnome-settings-daemon
-gnome-shell
-gnome-shell-extension-alternate-tab
-gnome-shell-extension-apps-menu
-gnome-shell-extension-background-logo
-gnome-shell-extension-common
-gnome-shell-extension-launch-new-instance
-gnome-shell-extension-places-menu
-gnome-shell-extension-window-list
-gnome-software
-gnome-system-monitor
-gnome-terminal
-gnome-terminal-nautilus
-gnome-themes-standard
-gnome-todo
-gnome-user-docs
-gnome-user-share
-gnome-video-effects
-gnome-weather
-gnu-free-fonts-common
-gnu-free-mono-fonts
-gnu-free-sans-fonts
-gnu-free-serif-fonts
-gnupg
-gnupg2
-gnupg2-smime
-gnutls
-gobject-introspection
-gom
-google-android-emoji-fonts
-google-crosextra-caladea-fonts
-google-crosextra-carlito-fonts
-google-noto-emoji-fonts
-google-noto-fonts-common
-google-noto-sans-lisu-fonts
-google-noto-sans-mandaic-fonts
-google-noto-sans-meetei-mayek-fonts
-google-noto-sans-sinhala-fonts
-google-noto-sans-tagalog-fonts
-google-noto-sans-tai-tham-fonts
-google-noto-sans-tai-viet-fonts
-gperftools-libs
-gpgme
-gpgmepp
-gpg-pubkey
-graphite2
-grep
-grilo
-grilo-plugins
-groff-base
-grub2-common
-grub2-efi-ia32
-grub2-efi-ia32-cdboot
-grub2-efi-x64
-grub2-efi-x64-cdboot
-grub2-pc
-grub2-pc-modules
-grub2-tools
-grub2-tools-efi
-grub2-tools-extra
-grub2-tools-minimal
-grubby
-gsettings-desktop-schemas
-gsm
-gsound
-gspell
-gssdp
-gssproxy
-gstreamer1
-gstreamer1-plugins-bad-free
-gstreamer1-plugins-bad-free-gtk
-gstreamer1-plugins-base
-gstreamer1-plugins-good
-gstreamer1-plugins-ugly-free
-gtk2
-gtk3
-gtkmm24
-gtkmm30
-gtksourceview3
-gtkspell3
-gtk-update-icon-cache
-gtk-vnc2
-guile
-gupnp
-gupnp-av
-gupnp-dlna
-gutenprint
-gutenprint-cups
-gutenprint-libs
-gvfs
-gvfs-afc
-gvfs-afp
-gvfs-archive
-gvfs-client
-gvfs-fuse
-gvfs-goa
-gvfs-gphoto2
-gvfs-mtp
-gvfs-smb
-gvnc
-gzip
-hardlink
-harfbuzz
-harfbuzz-icu
-hfsplus-tools
-hicolor-icon-theme
-highlight
-hostname
-hplip
-hplip-common
-hplip-libs
-httpd
-httpd-filesystem
-httpd-tools
-http-parser
-hunspell
-hunspell-en
-hunspell-en-GB
-hunspell-en-US
-hwdata
-hyperv-daemons
-hyperv-daemons-license
-hypervfcopyd
-hypervkvpd
-hypervvssd
-hyphen
-hyphen-en
-ibus
-ibus-gtk2
-ibus-gtk3
-ibus-hangul
-ibus-kkc
-ibus-libpinyin
-ibus-libs
-ibus-libzhuyin
-ibus-m17n
-ibus-qt
-ibus-rawcode
-ibus-setup
-ibus-typing-booster
-ibus-wayland
-iio-sensor-proxy
-info
-initscripts
-ipcalc
-iproute
-iproute-tc
-ipset
-ipset-libs
-iptables
-iptables-libs
-iptstate
-iputils
-ipw2100-firmware
-ipw2200-firmware
-ipxe-roms-qemu
-iscsi-initiator-utils
-iscsi-initiator-utils-iscsiuio
-isns-utils-libs
-iso-codes
-isomd5sum
-iw
-iwl1000-firmware
-iwl100-firmware
-iwl105-firmware
-iwl135-firmware
-iwl2000-firmware
-iwl2030-firmware
-iwl3160-firmware
-iwl3945-firmware
-iwl4965-firmware
-iwl5000-firmware
-iwl5150-firmware
-iwl6000-firmware
-iwl6000g2a-firmware
-iwl6000g2b-firmware
-iwl6050-firmware
-iwl7260-firmware
-jansson
-jasper-libs
-java-1.8.0-openjdk-headless
-javapackages-tools
-jbigkit-libs
-jimtcl
-jomolhari-fonts
-js-jquery
-json-c
-json-glib
-julietaula-montserrat-fonts
-jwhois
-kbd
-kbd-legacy
-kbd-misc
-kernel
-kernel-core
-kernel-modules
-kernel-modules-extra
-kexec-tools
-kexec-tools-anaconda-addon
-keybinder3
-keyutils
-keyutils-libs
-khmeros-base-fonts
-khmeros-fonts-common
-kmod
-kmod-libs
-kpartx
-krb5-libs
-kyotocabinet-libs
-lame-libs
-langpacks-en
-langtable
-langtable-data
-langtable-python3
-lcms2
-less
-liba52
-libabw
-libacl
-libaio
-libao
-libappstream-glib
-libarchive
-libassuan
-libasyncns
-libatasmart
-libatomic_ops
-libattr
-libavc1394
-libbabeltrace
-libbasicobjects
-libblkid
-libblockdev
-libblockdev-btrfs
-libblockdev-crypto
-libblockdev-dm
-libblockdev-fs
-libblockdev-kbd
-libblockdev-loop
-libblockdev-lvm
-libblockdev-mdraid
-libblockdev-mpath
-libblockdev-part
-libblockdev-plugins-all
-libblockdev-swap
-libblockdev-utils
-libbluray
-libbytesize
-libcacard
-libcanberra
-libcanberra-gtk2
-libcanberra-gtk3
-libcap
-libcap-ng
-libcdio
-libcdio-paranoia
-libcdr
-libcgroup
-libchamplain
-libchamplain-gtk
-libcmis
-libcollection
-libcom_err
-libcomps
-libconfig
-libcroco
-libcrypt-nss
-libcryptui
-libcue
-libcurl
-libdaemon
-libdatrie
-libdb
-libdb-utils
-libdfu
-libdhash
-libdmapsharing
-libdmx
-libdnet
-libdnf
-libdrm
-libdv
-libdvdnav
-libdvdread
-libe-book
-libedit
-libeot
-libepoxy
-liberation-fonts-common
-liberation-mono-fonts
-liberation-sans-fonts
-liberation-serif-fonts
-libertas-usb8388-firmware
-libetonyek
-libev
-libevdev
-libevent
-libexif
-libexttextcat
-libfdisk
-libfdt
-libffi
-libfontenc
-libfprint
-libfreehand
-libgcab1
-libgcc
-libgcrypt
-libgdata
-libgdither
-libgee
-libgepub
-libgexiv2
-libgltf
-libglvnd
-libglvnd-egl
-libglvnd-gles
-libglvnd-glx
-libgnomekbd
-libgnome-keyring
-libgomp
-libgovirt
-libgpg-error
-libgphoto2
-libgpod
-libgrss
-libgsf
-libgtop2
-libgudev
-libgusb
-libgweather
-libgxps
-libhangul
-libibverbs
-libical
-libICE
-libicu
-libidn
-libidn2
-libiec61883
-libieee1284
-libimagequant
-libimobiledevice
-libini_config
-libinput
-libipa_hbac
-libipt
-libiptcdata
-libiscsi
-libjpeg-turbo
-libkadm5
-libkkc
-libkkc-common
-libkkc-data
-libksba
-liblangtag
-liblangtag-data
-libldb
-liblouis
-libmbim
-libmbim-utils
-libmcpp
-libmediaart
-libmetalink
-libmng
-libmnl
-libmodman
-libmount
-libmpc
-libmpcdec
-libmspack
-libmspub
-libmtp
-libmusicbrainz5
-libmwaw
-libmx
-libndp
-libnetfilter_conntrack
-libnfnetlink
-libnfs
-libnfsidmap
-libnghttp2
-libnl3
-libnl3-cli
-libnma
-libnm-gtk
-libnotify
-liboauth
-libodfgen
-libogg
-liborcus
-libosinfo
-libpagemaker
-libpath_utils
-libpcap
-libpciaccess
-libpeas
-libpeas-gtk
-libpeas-loader-python3
-libphodav
-libpinyin
-libpinyin-data
-libpipeline
-libpkgconf
-libplist
-libpng
-libproxy
-libproxy-mozjs
-libpskc
-libpsl
-libpwquality
-libqb
-libqmi
-libqmi-utils
-libquvi
-libquvi-scripts
-librados2
-LibRaw
-libraw1394
-librbd1
-librdmacm
-libref_array
-libreoffice-calc
-libreoffice-core
-libreoffice-data
-libreoffice-draw
-libreoffice-emailmerge
-libreoffice-filters
-libreoffice-graphicfilter
-libreoffice-gtk2
-libreoffice-gtk3
-libreoffice-help-en
-libreoffice-impress
-libreofficekit
-libreoffice-langpack-en
-libreoffice-math
-libreoffice-opensymbol-fonts
-libreoffice-pdfimport
-libreoffice-pyuno
-libreoffice-ure
-libreoffice-ure-common
-libreoffice-writer
-libreoffice-x11
-libreoffice-xsltfilter
-librepo
-libreport
-libreport-anaconda
-libreport-cli
-libreport-fedora
-libreport-filesystem
-libreport-gtk
-libreport-plugin-bugzilla
-libreport-plugin-kerneloops
-libreport-plugin-logger
-libreport-plugin-reportuploader
-libreport-plugin-systemd-journal
-libreport-plugin-ureport
-libreport-python3
-libreport-web
-librevenge
-librsvg2
-libsamplerate
-libsane-hpaio
-libseccomp
-libsecret
-libselinux
-libselinux-python3
-libselinux-utils
-libsemanage
-libsemanage-python3
-libsepol
-libshout
-libsigc++20
-libsigsegv
-libSM
-libsmartcols
-libsmbclient
-libsmbios
-libsndfile
-libsolv
-libsoup
-libspectre
-libsrtp
-libss
-libssh
-libssh2
-libsss_autofs
-libsss_certmap
-libsss_idmap
-libsss_nss_idmap
-libsss_sudo
-libstaroffice
-libstdc++
-libstemmer
-libsysfs
-libtalloc
-libtar
-libtasn1
-libtdb
-libteam
-libtevent
-libthai
-libtheora
-libtiff
-libtimezonemap
-libtirpc
-libtool-ltdl
-libudisks2
-libunistring
-libunwind
-libusal
-libusb
-libusbmuxd
-libusbx
-libuser
-libutempter
-libuuid
-libv4l
-libvdpau
-libverto
-libverto-libev
-libvirt-daemon
-libvirt-daemon-config-network
-libvirt-daemon-driver-interface
-libvirt-daemon-driver-network
-libvirt-daemon-driver-nodedev
-libvirt-daemon-driver-nwfilter
-libvirt-daemon-driver-qemu
-libvirt-daemon-driver-secret
-libvirt-daemon-driver-storage
-libvirt-daemon-driver-storage-core
-libvirt-daemon-driver-storage-disk
-libvirt-daemon-driver-storage-gluster
-libvirt-daemon-driver-storage-iscsi
-libvirt-daemon-driver-storage-logical
-libvirt-daemon-driver-storage-mpath
-libvirt-daemon-driver-storage-rbd
-libvirt-daemon-driver-storage-scsi
-libvirt-daemon-driver-storage-sheepdog
-libvirt-daemon-driver-storage-zfs
-libvirt-daemon-kvm
-libvirt-gconfig
-libvirt-glib
-libvirt-gobject
-libvirt-libs
-libvisio
-libvisual
-libvorbis
-libvpx
-libwacom
-libwacom-data
-libwayland-client
-libwayland-cursor
-libwayland-server
-libwbclient
-libwebp
-libwnck3
-libwpd
-libwpg
-libwps
-libwsman1
-libwvstreams
-libX11
-libX11-common
-libX11-xcb
-libXau
-libxcb
-libXcomposite
-libXcursor
-libXdamage
-libXdmcp
-libXext
-libXfixes
-libXfont
-libXfont2
-libXft
-libXi
-libXinerama
-libxkbcommon
-libxkbcommon-x11
-libxkbfile
-libxklavier
-libxml2
-libXmu
-libXpm
-libXrandr
-libXrender
-libXres
-libxshmfence
-libxslt
-libXt
-libXtst
-libXv
-libXvMC
-libXxf86dga
-libXxf86misc
-libXxf86vm
-libzapojit
-libzhuyin
-libzmf
-linux-atm-libs
-linux-firmware
-lksctp-tools
-lldpad
-llvm-libs
-Lmod
-lockdev
-logrotate
-lohit-assamese-fonts
-lohit-bengali-fonts
-lohit-devanagari-fonts
-lohit-gujarati-fonts
-lohit-gurmukhi-fonts
-lohit-kannada-fonts
-lohit-odia-fonts
-lohit-tamil-fonts
-lohit-telugu-fonts
-lpsolve
-lrzsz
-lsof
-lttng-ust
-lua
-lua-expat
-lua-filesystem
-lua-json
-lua-libs
-lua-lpeg
-lua-posix
-lua-socket
-lua-term
-lvm2
-lvm2-libs
-lxpolkit
-lz4
-lz4-libs
-lzo
-lzop
-m17n-db
-m17n-lib
-mactel-boot
-mailcap
-make
-man-db
-man-pages
-marisa
-mcelog
-mcpp
-mdadm
-media-player-info
-memtest86+
-mesa-dri-drivers
-mesa-filesystem
-mesa-libEGL
-mesa-libgbm
-mesa-libGL
-mesa-libglapi
-mesa-libwayland-egl
-mesa-libxatracker
-microcode_ctl
-mlocate
-mobile-broadband-provider-info
-mod_dnssd
-ModemManager
-ModemManager-glib
-mod_http2
-mokutil
-mousetweaks
-mozilla-filesystem
-mozjs17
-mozjs38
-mozjs52
-mpage
-mpfr
-mpg123-libs
-mtdev
-mtools
-mtr
-mutter
-mythes
-mythes-en
-nautilus
-nautilus-extensions
-nautilus-sendto
-naver-nanum-fonts-common
-naver-nanum-gothic-fonts
-ncurses
-ncurses-base
-ncurses-libs
-neon
-netcf-libs
-net-snmp-libs
-nettle
-net-tools
-NetworkManager
-NetworkManager-adsl
-NetworkManager-bluetooth
-NetworkManager-config-connectivity-fedora
-NetworkManager-glib
-NetworkManager-libnm
-NetworkManager-openconnect
-NetworkManager-openconnect-gnome
-NetworkManager-openvpn
-NetworkManager-openvpn-gnome
-NetworkManager-pptp
-NetworkManager-pptp-gnome
-NetworkManager-ssh
-NetworkManager-ssh-gnome
-NetworkManager-team
-NetworkManager-vpnc
-NetworkManager-vpnc-gnome
-NetworkManager-wifi
-NetworkManager-wwan
-newt
-nfs-utils
-nmap-ncat
-nm-connection-editor
-npth
-nspr
-nss
-nss-mdns
-nss-pem
-nss-softokn
-nss-softokn-freebl
-nss-sysinit
-nss-tools
-nss-util
-ntfs-3g
-ntfsprogs
-numactl-libs
-numad
-opencc
-openCOLLADA
-openconnect
-openjpeg2
-openldap
-openssh
-openssh-clients
-openssh-server
-openssl
-openssl-libs
-open-vm-tools
-open-vm-tools-desktop
-openvpn
-opus
-orc
-orca
-osinfo-db
-osinfo-db-tools
-os-prober
-ostree
-ostree-libs
-p11-kit
-p11-kit-trust
-PackageKit
-PackageKit-command-not-found
-PackageKit-glib
-PackageKit-gstreamer-plugin
-PackageKit-gtk3-module
-pakchois
-paktype-naskh-basic-fonts
-pam
-pam_krb5
-pango
-pangomm
-paps
-paps-libs
-paratype-pt-sans-fonts
-parted
-passwd
-passwdqc
-passwdqc-lib
-pciutils
-pciutils-libs
-pcre
-pcre2
-pcre2-utf16
-pcsc-lite-libs
-perl-Carp
-perl-constant
-perl-Data-Dumper
-perl-Encode
-perl-Errno
-perl-Error
-perl-Exporter
-perl-File-Path
-perl-File-Temp
-perl-Getopt-Long
-perl-Git
-perl-HTTP-Tiny
-perl-interpreter
-perl-IO
-perl-IO-Socket-IP
-perl-IO-Socket-SSL
-perl-libnet
-perl-libs
-perl-macros
-perl-MIME-Base64
-perl-Mozilla-CA
-perl-Net-SSLeay
-perl-parent
-perl-PathTools
-perl-Pod-Escapes
-perl-podlators
-perl-Pod-Perldoc
-perl-Pod-Simple
-perl-Pod-Usage
-perl-Scalar-List-Utils
-perl-Socket
-perl-Storable
-perl-Term-ANSIColor
-perl-Term-Cap
-perl-TermReadKey
-perl-Text-ParseWords
-perl-Text-Tabs+Wrap
-perl-threads
-perl-threads-shared
-perl-Time-Local
-perl-Unicode-Normalize
-perl-URI
-pigz
-pinentry
-pinentry-gnome3
-pinentry-gtk
-pinfo
-pipewire
-pipewire-libs
-pixman
-pkcs11-helper
-pkgconf
-pkgconf-m4
-pkgconf-pkg-config
-plymouth
-plymouth-core-libs
-plymouth-graphics-libs
-plymouth-plugin-label
-plymouth-plugin-two-step
-plymouth-scripts
-plymouth-system-theme
-plymouth-theme-charge
-policycoreutils
-policycoreutils-python3
-policycoreutils-python-utils
-polkit
-polkit-libs
-polkit-pkla-compat
-poppler
-poppler-data
-poppler-glib
-poppler-utils
-popt
-ppp
-pptp
-procps-ng
-psacct
-psmisc
-publicsuffix-list-dafsa
-pulseaudio
-pulseaudio-gdm-hooks
-pulseaudio-libs
-pulseaudio-libs-glib2
-pulseaudio-module-bluetooth
-pulseaudio-module-x11
-pulseaudio-utils
-python2
-python2-libs
-python2-pip
-python2-setuptools
-python2-talloc
-python3
-python3-abrt
-python3-abrt-addon
-python3-asn1crypto
-python3-augeas
-python3-beaker
-python3-bind
-python3-blivet
-python3-blockdev
-python3-brlapi
-python3-bytesize
-python3-cairo
-python3-caribou
-python3-cffi
-python3-chardet
-python3-coverage
-python3-cryptography
-python3-cups
-python3-dbus
-python3-decorator
-python3-dmidecode
-python3-dnf
-python3-dnf-plugins-core
-python3-enchant
-python3-firewall
-python3-gobject
-python3-gobject-base
-python3-gpg
-python3-hawkey
-python3-humanize
-python3-idna
-python3-iniparse
-python3-inotify
-python3-IPy
-python3-iscsi-initiator-utils
-python3-kickstart
-python3-libcomps
-python3-librepo
-python3-libs
-python3-libxml2
-python3-louis
-python3-mako
-python3-markupsafe
-python3-meh
-python3-meh-gui
-python3-ntplib
-python3-olefile
-python3-ordered-set
-python3-pid
-python3-pillow
-python3-pip
-python3-ply
-python3-pwquality
-python3-pyatspi
-python3-pycparser
-python3-pycurl
-python3-pydbus
-python3-pyOpenSSL
-python3-pyparted
-python3-pysocks
-python3-pytz
-python3-pyudev
-python3-pyxdg
-python3-requests
-python3-requests-file
-python3-requests-ftp
-python3-rpm
-python3-setuptools
-python3-simpleline
-python3-six
-python3-slip
-python3-slip-dbus
-python3-speechd
-python3-sssdconfig
-python3-systemd
-python3-urllib3
-python3-wrapt
-python-systemd-doc
-qemu-block-curl
-qemu-block-dmg
-qemu-block-gluster
-qemu-block-iscsi
-qemu-block-nfs
-qemu-block-rbd
-qemu-block-ssh
-qemu-common
-qemu-guest-agent
-qemu-img
-qemu-kvm
-qemu-system-x86
-qemu-system-x86-core
-qgnomeplatform
-qpdf-libs
-qrencode-libs
-qt
-qt5-qtbase
-qt5-qtbase-common
-qt5-qtbase-gui
-qt5-qtdeclarative
-qt5-qtxmlpatterns
-qt-common
-qt-settings
-qt-x11
-quota
-quota-nls
-radvd
-raptor2
-rasqal
-rdist
-rdma-core
-readline
-realmd
-redhat-menus
-redland
-rest
-rhythmbox
-rng-tools
-rootfiles
-rpcbind
-rpm
-rpm-build-libs
-rpm-libs
-rpm-plugin-selinux
-rpm-plugin-systemd-inhibit
-rp-pppoe
-rsync
-rtkit
-rygel
-samba-client
-samba-client-libs
-samba-common
-samba-common-libs
-samba-dc-libs
-samba-libs
-sane-backends
-sane-backends-drivers-cameras
-sane-backends-drivers-scanners
-sane-backends-libs
-satyr
-sbc
-scl-utils
-SDL2
-seabios-bin
-seavgabios-bin
-sed
-selinux-policy
-selinux-policy-targeted
-setools-python3
-setroubleshoot
-setroubleshoot-plugins
-setroubleshoot-server
-setup
-setuptool
-sg3_utils-libs
-sgabios-bin
-sgpio
-shadow-utils
-shared-mime-info
-sheepdog
-shim-ia32
-shim-x64
-shotwell
-sil-abyssinica-fonts
-sil-mingzat-fonts
-sil-nuosu-fonts
-sil-padauk-fonts
-simple-scan
-skkdic
-slang
-smc-fonts-common
-smc-meera-fonts
-snappy
-sni-qt
-sos
-sound-theme-freedesktop
-soundtouch
-soxr
-speech-dispatcher
-speech-dispatcher-espeak
-speex
-speexdsp
-spice-glib
-spice-gtk3
-spice-server
-spice-vdagent
-sqlite-libs
-sshpass
-sssd
-sssd-ad
-sssd-client
-sssd-common
-sssd-common-pac
-sssd-ipa
-sssd-kcm
-sssd-krb5
-sssd-krb5-common
-sssd-ldap
-sssd-nfs-idmap
-sssd-proxy
-startup-notification
-stix-fonts
-stoken-libs
-sudo
-sushi
-switcheroo-control
-symlinks
-syslinux
-syslinux-extlinux
-syslinux-extlinux-nonlinux
-syslinux-nonlinux
-system-config-printer-libs
-system-config-printer-udev
-systemd
-systemd-bootchart
-systemd-container
-systemd-libs
-systemd-pam
-systemd-udev
-tabish-eeyek-fonts
-taglib
-tar
-tcl
-tcpdump
-tcp_wrappers
-tcp_wrappers-libs
-teamd
-telepathy-filesystem
-telepathy-glib
-telepathy-logger
-telnet
-thai-scalable-fonts-common
-thai-scalable-waree-fonts
-tigervnc-license
-tigervnc-server-minimal
-time
-timedatex
-totem
-totem-nautilus
-totem-pl-parser
-traceroute
-tracker
-tracker-miners
-tree
-trousers
-trousers-lib
-tzdata
-tzdata-java
-udisks2
-unicode-ucd
-unique
-unoconv
-unzip
-upower
-urw-fonts
-usb_modeswitch
-usb_modeswitch-data
-usbmuxd
-usbredir
-usbutils
-usermode
-userspace-rcu
-util-linux
-vconfig
-vim-minimal
-vino
-virglrenderer
-vlgothic-fonts
-volume_key-libs
-vpnc
-vpnc-script
-vte291
-vte-profile
-wavpack
-web-assets-filesystem
-webkitgtk4
-webkitgtk4-jsc
-webkitgtk4-plugin-process-gtk2
-webrtc-audio-processing
-wget
-which
-wireless-tools
-words
-wpa_supplicant
-wvdial
-xcb-util
-xcb-util-image
-xcb-util-keysyms
-xcb-util-renderutil
-xcb-util-wm
-xdg-desktop-portal
-xdg-desktop-portal-gtk
-xdg-user-dirs
-xdg-user-dirs-gtk
-xdg-utils
-xen-libs
-xen-licenses
-xfsprogs
-xkeyboard-config
-xml-common
-xmlrpc-c
-xmlrpc-c-client
-xmlsec1
-xmlsec1-openssl
-xorg-x11-drv-ati
-xorg-x11-drv-evdev
-xorg-x11-drv-fbdev
-xorg-x11-drv-intel
-xorg-x11-drv-libinput
-xorg-x11-drv-nouveau
-xorg-x11-drv-openchrome
-xorg-x11-drv-qxl
-xorg-x11-drv-vesa
-xorg-x11-drv-vmware
-xorg-x11-drv-wacom
-xorg-x11-font-utils
-xorg-x11-server-common
-xorg-x11-server-utils
-xorg-x11-server-Xorg
-xorg-x11-server-Xwayland
-xorg-x11-utils
-xorg-x11-xauth
-xorg-x11-xinit
-xorg-x11-xkb-utils
-xz
-xz-libs
-yajl
-yelp
-yelp-libs
-yelp-xsl
-zd1211-firmware
-zenity
-zfs-fuse
-zip
-zlib
diff --git a/generate-files.sh b/generate-files.sh
deleted file mode 100755
index 0219a61..0000000
--- a/generate-files.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-out=$1
-base=$(basename $out)
-
-case $base in
- freedesktop-*)
- ns=org.freedesktop
- version=1.6
- ;;
- gnome-*)
- ns=org.gnome
- version=3.26
- ;;
- *)
- echo 1>&2 "Can't identify runtime for $base"
- exit 1
- ;;
-esac
-
-case $base in
- *-Platform.files)
- sdk=
- type=Platform
- ;;
- *-Sdk.files)
- sdk=--sdk
- type=Sdk
- ;;
- *)
- echo 1>&2 "Can't identify type for $base"
- exit 1
- ;;
-esac
-
-runtime="$ns.$type/x86_64/$version"
-
-echo "$base: listing files in $runtime"
-
-flatpak run --file-forwarding --command=/usr/bin/python3 $runtime @@ list-files.py @@ $sdk > $out
diff --git a/generate-modulemd.py b/generate-modulemd.py
deleted file mode 100755
index b3bb4ef..0000000
--- a/generate-modulemd.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/python3
-import sys
-from yaml_utils import ordered_load, ordered_dump
-
-with open('flatpak-runtime.in.yaml') as f:
- modulemd = ordered_load(f)
-
-def set_profile(profile_name, list_file):
- with open(list_file) as f:
- packages = [l.strip() for l in f]
- print("{}: {} packages".format(profile_name, len(packages)), file=sys.stderr)
- modulemd['data']['profiles'][profile_name] = packages
-
-set_profile('runtime', 'out/runtime.profile')
-set_profile('runtime-base', 'out/runtime-base.profile')
-set_profile('sdk', 'out/sdk.profile')
-set_profile('sdk-base', 'out/sdk-base.profile')
-
-with open('flatpak-runtime.yaml', 'w') as f:
- ordered_dump(modulemd, stream=f, default_flow_style=False, encoding="utf-8")
diff --git a/generate-report.py b/generate-report.py
deleted file mode 100755
index c405d30..0000000
--- a/generate-report.py
+++ /dev/null
@@ -1,401 +0,0 @@
-#!/usr/bin/python3
-
-from jinja2 import Environment, FileSystemLoader, select_autoescape
-import json
-import locale
-import os
-import re
-import subprocess
-import sys
-
-def start(msg):
- print("{}: \033[90m{} ... \033[39m".format(os.path.basename(sys.argv[0]), msg), file=sys.stderr, end="")
- sys.stderr.flush()
-
-def done():
- print("\033[90mdone\033[39m", file=sys.stderr)
-
-def warn(msg):
- print("{}: \033[31m{}\033[39m".format(os.path.basename(sys.argv[0]), msg), file=sys.stderr)
-
-def fedmod_output(args):
- return subprocess.check_output(['pipenv', 'run', 'fedmod'] + args, encoding='utf-8', cwd='/home/otaylor/Source/fedmod')
-
-_nvr_to_name_re = re.compile('^(.*)-[^-]*-[^-]*')
-def nvr_to_name(nvr):
- return _nvr_to_name_re.match(nvr).group(1)
-
-class Package(object):
- def __init__(self, name):
- self.name = name
- self.freedesktop_platform = 0
- self.freedesktop_platform_files = None
- self.freedesktop_platform_required_by = None
- self.gnome_platform = 0
- self.gnome_platform_files = None
- self.gnome_platform_required_by = None
- self.freedesktop_sdk = 0
- self.freedesktop_sdk_files = None
- self.freedesktop_sdk_required_by = None
- self.gnome_sdk = 0
- self.gnome_sdk_files = None
- self.gnome_sdk_required_by = None
- self.live = 0
- self.rf26 = 0
- self.source_package = None
- self.flag = None
- self._note = None
-
- @property
- def runtimes(self):
- return self.freedesktop_platform or self.gnome_platform or self.freedesktop_sdk or self.gnome_sdk
-
- @property
- def klass(self):
- if self.flag == 'F':
- return "flagged"
- elif self.flag == 'F?':
- return "questionable"
- elif self.flag == 'FD':
- return "flagged-dep"
- elif self.flag == 'W':
- return "waived"
- elif self.gnome_platform and not self.live:
- return "questionable"
-
- @property
- def modules(self):
- return package_to_module.get(self.name, "")
-
- @property
- def note(self):
- if self.gnome_platform and not self.live:
- return "platform package not on Live image"
- elif self._note:
- return self._note
- else:
- return ""
-
- def why(self, which):
- files = getattr(self, which + '_files')
- if files is None:
- files_str = ''
- elif len(files) <= 3:
- files_str= 'Files: ' + ' '.join(files)
- else:
- files_str = 'Files: ' + ' '.join(files[:3]) + ' ...'
-
- required_by = getattr(self, which + '_required_by')
- if required_by is None:
- required_by_str = ''
- else:
- required_by_str = '\n'.join('{} ({})'.format(req, provider) for req, provider in required_by)
-
- if files_str and required_by_str:
- return files_str + '\n' + required_by_str
- elif files_str:
- return files_str
- elif required_by_str:
- return required_by_str
- else:
- return ''
-
- @property
- def freedesktop_platform_why(self):
- return self.why('freedesktop_platform')
-
- @property
- def freedesktop_sdk_why(self):
- return self.why('freedesktop_sdk')
-
- @property
- def gnome_platform_why(self):
- return self.why('gnome_platform')
-
- @property
- def gnome_sdk_why(self):
- return self.why('gnome_sdk')
-
- def inclusion(self, which):
- level = getattr(self, which)
- if level == 0:
- return 'absent'
- elif level == 1:
- return 'dep'
- else:
- required_by = getattr(self, which + '_required_by', False)
- if required_by is False:
- return 'present'
- elif required_by is not None and len(required_by) > 0:
- return 'files'
- else:
- return 'root'
-
- @property
- def freedesktop_platform_inclusion(self):
- return self.inclusion('freedesktop_platform')
-
- @property
- def freedesktop_sdk_inclusion(self):
- return self.inclusion('freedesktop_sdk')
-
- @property
- def gnome_platform_inclusion(self):
- return self.inclusion('gnome_platform')
-
- @property
- def gnome_sdk_inclusion(self):
- return self.inclusion('gnome_sdk')
-
- @property
- def live_inclusion(self):
- return self.inclusion('live')
-
- @property
- def rf26_inclusion(self):
- return self.inclusion('rf26')
-
-class SourcePackage(object):
- def __init__(self, name):
- self.name = name
- self.packages = []
-
- @property
- def modules(self):
- old_modules = self.packages[0].modules
- klass = self.klass
- if klass == "build-platform":
- new_module = "desktop-runtime"
- elif klass == "build-sdk":
- new_module = "flatpak-runtime"
- else:
- new_module = None
-
- if old_modules and new_module:
- return old_modules + " ⇒ " + new_module
- elif old_modules:
- return old_modules
- else:
- return new_module
-
- @property
- def sdk_only(self):
- return sdk_only
-
- @property
- def klass(self):
- if self.packages[0].modules in ("", "installer"):
- sdk_only = True
- for package in self.packages:
- if package.freedesktop_platform or package.gnome_platform:
- sdk_only = False
- if sdk_only:
- return "build-sdk"
- else:
- return "build-platform"
- else:
- return ""
-
-class Letter(object):
- def __init__(self, letter):
- self.letter = letter
- self.packages = []
-
-#
-# Get information about packages
-#
-
-packages = dict()
-def add_package(name, which, level, only_if_exists=False, source_package=None):
- pkg = packages.get(name, None)
- if pkg is None:
- if only_if_exists:
- return
- pkg = Package(name)
- packages[name] = pkg
- if getattr(pkg, which) < level:
- setattr(pkg, which, level)
- if source_package is not None:
- pkg.source_package = source_package
-
-def add_packages(filename, which, resolve_deps=False, only_if_exists=False):
- start("Adding packages from {}".format(filename))
- with open(filename) as f:
- pkgs = set(line.strip() for line in f)
-
- if resolve_deps:
- resolved_packages = json.loads(fedmod_output(['resolve-deps', '--json'] + list(pkgs)))
- for package in resolved_packages:
- name = nvr_to_name(package['rpm'])
- srpm_name = nvr_to_name(package['srpm'])
- add_package(name, which, level=(2 if name in pkgs else 1),
- source_package=srpm_name, only_if_exists=only_if_exists)
-
- for package in resolved_packages:
- for req, providers in package['requires'].items():
- provider = nvr_to_name(providers[0])
- provider_package = packages.get(provider, None)
- if provider_package is None: # filtered out of the resolve-deps output - e.g., fedora-release
- continue
- required_by = getattr(provider_package, which + '_required_by')
- if required_by is None:
- required_by = []
- setattr(provider_package, which + '_required_by', required_by)
- required_by.append((nvr_to_name(package['rpm']), req))
- else:
- for package in pkgs:
- add_package(package, which, level=2, only_if_exists=only_if_exists)
-
- done()
-
-def add_package_files(filename, which):
- with open(filename) as f:
- for line in f:
- f, p = line.strip().split()
- f = f[:-1] # strip trailing :
- pkg = packages[p]
- old = getattr(pkg, which + '_files')
- if old is not None:
- old.append(f)
- else:
- setattr(pkg, which + '_files', [f])
-
-add_packages('out/freedesktop-Platform.packages', 'freedesktop_platform', resolve_deps=True)
-add_packages('out/freedesktop-Sdk.packages', 'freedesktop_sdk', resolve_deps=True)
-add_packages('out/gnome-Platform.packages', 'gnome_platform', resolve_deps=True)
-add_packages('out/gnome-Sdk.packages', 'gnome_sdk', resolve_deps=True)
-add_packages('f27-live.packages', 'live', only_if_exists=True)
-add_packages('f26-flatpak-runtime.packages', 'rf26', only_if_exists=True)
-
-add_package_files('out/freedesktop-Platform.matched', 'freedesktop_platform')
-add_package_files('out/freedesktop-Sdk.matched', 'freedesktop_sdk')
-add_package_files('out/gnome-Platform.matched', 'gnome_platform')
-add_package_files('out/gnome-Sdk.matched', 'gnome_sdk')
-
-source_packages = {}
-for package in packages.values():
- source_package = source_packages.get(package.source_package, None)
- if source_package is None:
- source_package = SourcePackage(package.source_package)
- source_packages[source_package.name] = source_package
- source_package.packages.append(package)
-
-letters_map = dict()
-for k, v in source_packages.items():
- v.packages.sort(key=lambda p: locale.strxfrm(p.name))
- l = v.name[0].upper()
- letter = letters_map.get(l, None)
- if letter is None:
- letter = Letter(l)
- letters_map[l] = letter
- letter.packages.append(v)
-
-letters = []
-for k in sorted(letters_map.keys()):
- letter = letters_map[k]
- letter.packages.sort(key=lambda p: locale.strxfrm(p.name))
- letters.append(letter)
-
-start("Loading package to module map")
-package_to_module = dict()
-
-output = fedmod_output(['list-rpms', '--list-modules'])
-for l in output.split('\n'):
- fields = l.strip().split()
- if len(fields) != 2:
- continue
- package_to_module[fields[0]] = fields[1][1:-1]
-done()
-
-start("Loading package notes")
-comment_re = re.compile(r'\s*#.*')
-flag_re = re.compile(r'[A-Z?]+$')
-package_re = re.compile(r'\S+')
-
-with open("package-notes.txt") as f:
- for line in f:
- line = comment_re.sub('', line)
- line = line.strip()
- if line == '':
- continue
- parts = line.split(":", 2)
- name = parts[0].strip()
- if not re.match(package_re, name):
- warn("Can't parse package note: {}".format(line))
- continue
- if len(parts) == 1:
- flag = note = None
- elif len(parts) == 2:
- x = parts[1].strip()
- if flag_re.match(x):
- flag = x
- note = None
- else:
- note = x
- flag = None
- elif len(parts) == 3:
- x = parts[1].strip()
- if flag_re.match(x):
- flag = x
- note = parts[2].strip()
- else:
- flag = None
- note = parts[1] + ':' + parts[2]
-
- pkg = packages.get(name, None)
- if pkg is None:
- warn("Package note for missing package: {}".format(name))
- continue
-
- if flag is not None:
- pkg.flag = flag
- if note is not None:
- pkg._note = note
-done()
-
-#
-# Get summary information for unmatched files
-#
-
-def count_lines(fname):
- with open(fname) as f:
- return len(list(f))
-
-unmatched_counts = {
- 'freedesktop_platform': count_lines('out/freedesktop-Platform.unmatched'),
- 'gnome_platform': count_lines('out/gnome-Platform.unmatched'),
- 'freedesktop_sdk': count_lines('out/freedesktop-Sdk.unmatched'),
- 'gnome_sdk': count_lines('out/gnome-Sdk.unmatched'),
-}
-
-#
-# Generate the profiles
-#
-def generate_profile(outfile, which):
- with open(outfile, 'w') as f:
- for letter in letters:
- for src in letter.packages:
- for pkg in src.packages:
- if getattr(pkg, which) != 0:
- print(pkg.name, file=f)
-
-generate_profile('out/runtime-base.profile', 'freedesktop_platform')
-generate_profile('out/sdk-base.profile', 'freedesktop_sdk')
-generate_profile('out/runtime.profile', 'gnome_platform')
-generate_profile('out/sdk.profile', 'gnome_sdk')
-
-#
-# Generate the report
-#
-
-env = Environment(
- loader=FileSystemLoader('.'),
- autoescape=select_autoescape(['html', 'xml']),
- trim_blocks=True,
- lstrip_blocks=True
-)
-
-template = env.get_template('report-template.html')
-
-with open('report.html', 'w') as f:
- f.write(template.render(letters=letters, unmatched=unmatched_counts, package_to_module=package_to_module))
diff --git a/list-files.py b/list-files.py
deleted file mode 100755
index 3e95058..0000000
--- a/list-files.py
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/python3
-
-import os
-import re
-import sys
-
-sdk = len(sys.argv) > 1 and sys.argv[1] == '--sdk'
-
-def output_dir(d):
- for f in sorted(os.listdir(d)):
- full = os.path.join(d, f)
- if not os.path.isdir(full):
- print(os.path.join(d, f))
-
-def output_dir_recurse(d):
- for dirName, subdirs, files in os.walk(d):
- for f in sorted(files):
- print(os.path.join(dirName, f))
-
-output_dir('/usr/bin')
-
-for f in os.listdir('/usr/lib'):
- full = os.path.join('/usr/lib', f)
- if (re.match(r'^.*\.so\.\d+$', f) is not None or
- re.match(r'^.*\.so$', f) is not None and not os.path.islink(full)):
- print(full)
-
-output_dir_recurse('/usr/share/fonts')
-
-if sdk:
- output_dir_recurse('/usr/include')
- output_dir('/usr/lib/pkgconfig')
- output_dir('/usr/share/pkgconfig')
-
-# import pkgutil
-# for f in pkgutil.iter_modules():
-# try:
-# path = f[0].path
-# if path.find('site-packages') < 0:
-# continue
-# except AttributeError:
-# continue
-# if not(f[1].startswith('_')):
-# print(f, 'python3dist({})'.format(f[1]))
-
diff --git a/resolve-files.py b/resolve-files.py
deleted file mode 100755
index de5631f..0000000
--- a/resolve-files.py
+++ /dev/null
@@ -1,531 +0,0 @@
-#!/usr/bin/python3
-
-from functools import cmp_to_key
-import gzip
-import hashlib
-import os
-import pickle
-import re
-import rpm
-import sys
-import xml.etree.ElementTree as ET
-import xml.sax
-
-XDG_CACHE_HOME = os.environ.get("XDG_CACHE_HOME") or os.path.expanduser("~/.cache")
-
-# This needs to be in sync with fedmod
-REPOS = [
- "f28-packages"
-]
-
-ignore = set()
-rename = dict()
-
-bin_ignore = [
- # A bunch of binaries built as part of nss. A few of these are
- # in /usr/lib64/nss/unsupported-tools/ as part of nss-tools, the rest are not considered
- # worth installing at all (test utilities, etc.)
- 'addbuiltin', 'atob', 'baddbdir', 'bltest', 'btoa', 'certcgi', 'chktest', 'conflict',
- 'crmftest', 'dbtest', 'derdump', 'dertimetest', 'digest', 'ecperf', 'encodeinttest',
- 'fipstest', 'httpserv', 'listsuites', 'makepqg', 'mangle', 'multinit', 'nonspr10',
- 'ocspclnt', 'ocspresp', 'oidcalc', 'p7content', 'p7env', 'p7sign', 'p7verify',
- 'pk11gcmtest', 'pk11mode', 'pk1sign', 'pkix-errcodes', 'pp', 'pwdecrypt', 'remtest',
- 'rsaperf', 'sdrtest', 'secmodtest', 'selfserv', 'shlibsign', 'signtool', 'strsclnt',
- 'symkeyutil', 'tstclnt', 'vfychain', 'vfyserv',
-
- # Script added into nss by openembedded
- 'signlibs.sh',
-
- # /usr/share/doc/aspell/aspell-import in Fedora
- 'aspell-import',
-
- # Removed in perl-5.27
- 'c2ph',
-
- # Removed - https://lists.fedorahosted.org/archives/list/elfutils-devel@lists.fedorahosted.org/thread/22LIIMXI6EDGCOIO6QFSBUO2KHEXIGSJ/
- 'eu-ld',
-
- # compatibility perl script in zenity for something quite old, not packaged in fedora
- 'gdialog',
-
- # An openembedded thing
- # "Tool that installs the GNU config.guess / config.sub into a directory tree"
- 'gnu-configize',
-
- # GPG test program (https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=tree;f=tests)
- 'gpgscm',
-
- # An implementation of tar for cross-platform compatibility, disabled in gnupg2.spec
- 'gpgtar',
-
- # Removed from gtk-doc
- # https://git.gnome.org/browse/gtk-doc/commit/?id=46df4354abed5724697fd5e39630c5bbc6637cc4
- 'gtkdoc-mktmpl',
-
- # Versioned python-3.5 binaries
- 'idle3.5', 'pydoc3.5', 'python3.5', 'python3.5-config', 'python3.5m', 'python3.5m-config', '2to3-3.5',
-
- # installed in openembedded with a coreutils suffix along with the more normal version
- 'kill.coreutils', 'uptime.coreutils',
-
- # nettle utilities not currently packaged in fedora
- # (https://src.fedoraproject.org/rpms/nettle/c/2ec204e2de17006b566c9ff7d90ec65ca1680ed5?branch=master)
- 'nettle-hash', 'nettle-lfib-stream', 'nettle-pbkdf2', 'pkcs1-conv', 'sexp-conv',
-
- # Not built by default as of util-linux-2.29
- '/usr/bin/pg',
-
- # These are installed as <name>-64 in Fedora, we just ignore them because they will be
- # pulled in by the corresponding library
- 'gdk-pixbuf-query-loaders', 'gtk-query-immodules-2.0',
- 'gio-querymodules', 'gtk-query-immodules-3.0',
-
- # Removed in krb5-1.13 (https://web.mit.edu/kerberos/krb5-1.13/README-1.13.5.txt)
- 'krb5-send-pr',
-
- # Removed in util-linux-2.30'
- 'tailf',
-
- # OpenEmbedded uses Debian's ca-certificates, Fedora is different
- 'update-ca-certificates',
-
- #########################################################################
- # In the freedesktop runtime for some reason, doesn't seem useful
- 'bsdcat',
-
- # Same as 'openssl rehash', but as a perl script (openssl-perl)
- 'c_rehash',
-
- # From pulseaudio, wrapper script to start a pulseaudio server as if it was ESD (pulseaudio-esound-compat)
- 'esdcompat',
-
- # Just need the library (gcab)
- 'gcab',
-
- # Probably not useful in the runtime or the SDK (gstreamer-plugins-base-tools)
- 'gst-device-monitor-1.0', 'gst-discoverer-1.0', 'gst-play-1.0',
-
- # Python utilities (python2-tools)
- 'idle', 'smtpd.py',
-
- # Python3 utilities (python3-tools)
- 'idle3', '2to3',
-
- # A binary from cups, we just need the libraries (cups-libs)
- 'ipptool',
-
- # Minimal profiler (glibc-utils)
- 'pcprofiledump',
-
- # (pcre-tools)
- 'pcre2grep', 'pcre2test',
-
- # Random test program from libproxy (libproxy-bin)
- 'proxy',
-
- # Tools from libvpx (libvpx-utils)
- 'vpxdec', 'vpxenc',
-]
-ignore.update('/usr/bin/' + x for x in bin_ignore)
-
-bin_rename = {
- # lcms2 compiled with --program-suffix=2 in Fedora, even though there are no actual
- # conflicts between lcms and lcms2 - jpegicc was renamed to jpgicc, etc.
- 'jpgicc': 'jpgicc2',
- 'linkicc': 'linkicc2',
- 'psicc': 'psicc2',
- 'tificc': 'tificc2',
- 'transicc': 'transicc2',
-}
-rename.update({ '/usr/bin/' + k: '/usr/bin/' + v for k, v in bin_rename.items() })
-
-lib_ignore = [
- # Symlink created in freedesktop.org flatpak runtime, not standard
- 'libEGL_indirect.so.0',
-
- # Removed in gpgme-1.9.0
- 'libgpgme-pthread.so.11',
-
- # Not enabled in fedora (consider fixing)
- 'libharfbuzz-gobject.so.0',
-
- # Part of glibc
- 'libssp.so.0',
-]
-ignore.update('/usr/lib64/' + x for x in lib_ignore)
-
-fonts_ignore = {
- # Added in 2.36
- 'dejavu/DejaVuMathTeXGyre.ttf',
-}
-ignore.update('/usr/share/fonts/' + x for x in fonts_ignore)
-
-lib_rename = {
- # Newer in Fedora
- 'libhunspell-1.3.so.0': 'libhunspell-1.5.so.0',
- 'libwebp.so.6': 'libwebp.so.7',
- 'libwebpmux.so.2': 'libwebpmux.so.3',
- 'libpcre2-posix.so.1': 'libpcre2-posix.so.2',
- 'libvpx.so.3': 'libvpx.so.4',
- 'libkadm5clnt_mit.so.9': 'libkadm5clnt_mit.so.11',
- 'libkadm5srv_mit.so.9': 'libkadm5srv_mit.so.11',
-
- # Newer in Flatpak runtime
- 'libprocps.so.6': 'libprocps.so.4', # procps-3.10 vs. procps-3.12
- 'libgif.so.7': 'libgif.so.4', # giflib 4 vs giflib-5 - https://bugzilla.redhat.com/show_bug.cgi?id=822844
-
- # Fedora arch-handling
- 'ld-linux.so.2': 'ld-linux-x86-64.so.2',
-}
-rename.update({ '/usr/lib64/' + k: '/usr/lib64/' + v for k, v in lib_rename.items() })
-
-include_ignore = {
- # https://git.gnome.org/browse/at-spi2-core/commit/?id=1eb223bb48464d707290ef540581e9763b0ceee8
- 'at-spi-2.0/atspi/atspi-gmain.c',
-
- # Removed in 7.55 https://github.com/curl/curl/commit/73a2fcea0b4adea6ba342cd7ed1149782c214ae3
- 'curl/curlbuild-64.h', 'curl/curlbuild.h', 'curl/curlrules.h',
-
- # Not enabled on Fedora
- 'harfbuzz/hb-gobject-enums.h',
- 'harfbuzz/hb-gobject-structs.h',
- 'harfbuzz/hb-gobject.h',
-
- # https://github.com/hunspell/hunspell/commit/99675e791d123cbe1be914b1a49dd83062134301
- 'hunspell/affentry.hxx', 'hunspell/affixmgr.hxx', 'hunspell/baseaffix.hxx', 'hunspell/dictmgr.hxx',
- 'hunspell/filemgr.hxx','hunspell/hashmgr.hxx','hunspell/hunzip.hxx','hunspell/langnum.hxx',
- 'hunspell/phonet.hxx','hunspell/replist.hxx','hunspell/suggestmgr.hxx',
-
- # Removed in openssl-1.1
- 'openssl/des_old.h', 'openssl/dso.h', 'openssl/krb5_asn.h', 'openssl/kssl.h', 'openssl/pqueue.h',
- 'openssl/ssl23.h', 'openssl/ui_compat.h',
-}
-ignore.update('/usr/include/' + x for x in include_ignore)
-
-include_rename = {
- 'assuan.h': 'libassuan2/assuan.h',
- 'nss3/nssck.api': 'nss3/templates/nssck.api',
-}
-rename.update({ '/usr/include/' + k: '/usr/include/' + v for k, v in include_rename.items() })
-
-nspr_include = [
- 'nspr.h', 'plarena.h', 'plarenas.h', 'plbase64.h', 'plerror.h', 'plgetopt.h', 'plhash.h',
- 'plstr.h', 'pratom.h', 'prbit.h', 'prclist.h', 'prcmon.h', 'prcountr.h', 'prcpucfg.h',
- 'prcvar.h', 'prdtoa.h', 'prenv.h', 'prerr.h', 'prerror.h', 'prinet.h', 'prinit.h',
- 'prinrval.h', 'prio.h', 'pripcsem.h', 'private/pprio.h', 'private/pprthred.h', 'private/prpriv.h',
- 'prlink.h', 'prlock.h', 'prlog.h', 'prlong.h', 'prmem.h', 'prmon.h', 'prmwait.h', 'prnetdb.h',
- 'prolock.h', 'prpdce.h', 'prprf.h', 'prproces.h', 'prrng.h', 'prrwlock.h', 'prshm.h', 'prshma.h',
- 'prsystem.h', 'prthread.h', 'prtime.h', 'prtpool.h', 'prtrace.h', 'prtypes.h', 'prvrsion.h',
- 'prwin16.h', 'stropts.h', 'obsolete/pralarm.h', 'obsolete/probslet.h', 'obsolete/protypes.h', 'obsolete/prsem.h'
-]
-rename.update({ '/usr/include/' + x: '/usr/include/nspr4/' + x for x in nspr_include })
-
-pc_ignore = {
- # Not enabled on Fedora
- 'harfbuzz-gobject.pc',
-
- # https://github.com/ostroproject/ostro-os/blob/master/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch
- 'libassuan.pc',
-
- # http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch
- 'gpg-error.pc',
-
- # http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libgcrypt/files/0001-Add-and-use-pkg-config-for-libgcrypt-instead-of-conf.patch
- 'libgcrypt.pc',
-}
-ignore.update('/usr/lib64/pkgconfig/' + x for x in pc_ignore)
-
-pc_rename = {
- 'python-3.5.pc': 'python-3.6.pc',
- 'python-3.5m.pc': 'python-3.6m.pc',
-}
-rename.update({ '/usr/lib64/pkgconfig/' + k: '/usr/lib64/pkgconfig/' + v for k, v in pc_rename.items() })
-rename.update({ '/usr/share/pkgconfig/' + k: '/usr/share/pkgconfig/' + v for k, v in pc_rename.items() })
-
-ignore_patterns = [
- # Flatpak runtime has a versioned gawk-4.1.3
- r'/usr/bin/gawk-.*',
-
- # Architecture specific aliases for gcc, binutils, etc
- r'^/usr/bin/x86_64-unknown-linux-.*',
-
- # From NSPR, intentionally not installed on Fedora
- r'/usr/include/md/.*',
-
- # .install files litter the include directories of openembedded
- r'.*/\.install$'
-]
-ignore_compiled = [re.compile(x) for x in ignore_patterns]
-
-rename_patterns = [
- (r'^/usr/include/c\+\+/6.2.0/(.*)', r'/usr/include/c++/7/\1'),
- (r'^/usr/include/c\+\+/7/x86_64-unknown-linux/(.*)', r'/usr/include/c++/7/x86_64-redhat-linux/\1'),
- (r'^/usr/include/python3.5m/(.*)', r'/usr/include/python3.6m/\1'),
- (r'^/usr/lib64/pkgconfig/(.*proto.pc)', r'/usr/share/pkgconfig/\1'),
- (r'^/usr/share/fonts/liberation-fonts/(.*)', r'/usr/share/fonts/liberation/\1'),
-]
-rename_compiled = [(re.compile(a), b) for a, b in rename_patterns]
-
-platform_package_ignore_patterns = [
- "^.*-devel$",
- "^libappstream-glib-builder$", # may not need in the sdk either
- "^gtk-doc$",
- "^icu$", # may not need in the sdk either
- '^llvm$',
- '^sqlite$',
-]
-platform_package_ignore_compiled = [re.compile(p) for p in platform_package_ignore_patterns]
-
-
-# We need to look up a lot of file dependencies. dnf/libsolv is not fast at doing
-# this (at least when we look up files one-by-one) so we create a hash table that
-# maps from *all* files in the distribution to the "best" package that provides
-# the file. To further speed this up, we pickle the result and store it, and only
-# recreate it when the DNF metadata changes. We gzip the pickle to save space
-# (70M instead of 700M), this slows things down by about 2 seconds.
-#
-
-def package_cmp(p1, p2):
- n1, e1, v1, r1, a1 = p1
- n2, e2, v2, r2, a2 = p2
-
- if a1 == 'i686' and a2 != 'i686':
- return 1
- if a1 != 'i686' and a2 == 'i686':
- return -1
-
- if n1.startswith('compat-') and not n2.startswith('compat-'):
- return 1
- elif n2.startswith('compat-') and not n1.startswith('compat-'):
- return -1
-
- if n1 < n2:
- return -1
- elif n1 > n2:
- return 1
-
- if e1 is None:
- e1 = '0'
- if e2 is None:
- e2 = '0'
-
- return - rpm.labelCompare((e1, v1, r1), (e2, v2, r2))
-
-class FilesMapHandler(xml.sax.handler.ContentHandler):
- def __init__(self, files_map):
- self.files_map = files_map
- self.name = None
- self.arch = None
- self.epoch = None
- self.version = None
- self.release = None
- self.file = None
-
- def startElement(self, name, attrs):
- if name == 'package':
- self.name = attrs['name']
- self.arch = attrs['arch']
- elif name == 'version':
- if self.name is not None:
- self.epoch = attrs['epoch']
- self.version = attrs['ver']
- self.release = attrs['rel']
- elif name == 'file':
- self.file = ''
-
- def endElement(self, name):
- if name == 'package':
- self.name = None
- elif name == 'file':
- package = (self.name, self.epoch, self.version, self.release, self.arch)
- old = self.files_map.get(self.file)
- if old is None or package_cmp(package, old) < 0:
- self.files_map[self.file] = package
-
- self.file = None
-
- def characters(self, content):
- if self.file is not None:
- self.file += content
-
-def scan_filelists(filelists_path, files_map):
- handler = FilesMapHandler(files_map)
- with gzip.open(filelists_path, 'rb') as f:
- xml.sax.parse(f, handler)
-
-
-def make_files_map(repo_info):
- files_map = {}
-
- for repo in REPOS:
- start("Scanning files for {}".format(repo))
- repo_dir, repomd_contents = repo_info[repo]
- root = ET.fromstring(repomd_contents)
-
- ns = {'repo': 'http://linux.duke.edu/metadata/repo'}
- filelists_location = root.find("./repo:data[@type='filelists']/repo:location", ns).attrib['href']
- filelists_path = os.path.join(repo_dir, filelists_location)
- if os.path.commonprefix([filelists_path, repo_dir]) != repo_dir:
- done()
- error("{}: filelists directory is outside of repository".format(repo_dir))
-
- scan_filelists(filelists_path, files_map)
- done()
-
- start("Finalizing files map")
- for k in files_map:
- files_map[k] = files_map[k][0]
- done()
-
- return files_map
-
-
-def get_files_map():
- hash_text = ''
- repos_dir = os.path.join(XDG_CACHE_HOME, "fedmod/repos")
- repo_info = {}
- for repo in REPOS:
- repo_dir = os.path.join(repos_dir, repo, 'x86_64')
- repomd_path = os.path.join(repo_dir, 'repodata/repomd.xml')
- try:
- with open(repomd_path, 'rb') as f:
- repomd_contents = f.read()
- except (OSError, IOError):
- print("Cannot read {}, try 'fedmod fetch-metadata'".format(repomd_path), file=sys.stderr)
- sys.exit(1)
-
- repo_info[repo] = (repo_dir, repomd_contents)
- hash_text += '{}|{}\n'.format(repo, hashlib.sha256(repomd_contents).hexdigest())
-
- repo_hash = hashlib.sha256(hash_text.encode("UTF-8")).hexdigest()
-
- files_map_path = os.path.join(XDG_CACHE_HOME, "fedmod/flatpak-runtime-files-map.gz")
-
- try:
- with gzip.open(files_map_path, 'rb') as f:
- old_repo_hash = f.read(64).decode('utf-8')
- if old_repo_hash == repo_hash:
- start("Reading cached file map")
- files_map = pickle.load(f)
- done()
-
- return files_map
- except FileNotFoundError:
- pass
-
- files_map = make_files_map(repo_info)
-
- start("Writing file map to cache")
- with gzip.open(files_map_path, 'wb') as f:
- f.write(repo_hash.encode('utf-8'))
- pickle.dump(files_map, f)
- done()
-
- return files_map
-
-if len(sys.argv) != 2:
- print("Usage: resolve-files.py INFILE", file=sys.stderr)
- sys.exit(1)
-
-inpath = sys.argv[1]
-if not inpath.endswith('.files'):
- print("INFILE must have .files suffix", file=sys.stderr)
- sys.exit(1)
-
-base_path = inpath[:-len('.files')]
-is_platform = "-Platform" in base_path
-is_sdk = "-Sdk" in base_path
-
-def warn(msg):
- print("{}: \033[31m{}\033[39m".format(inpath, msg), file=sys.stderr)
-
-def error(msg):
- print("{}: \033[31m{}\033[39m".format(inpath, msg), file=sys.stderr)
- sys.exit(1)
-
-def start(msg):
- print("{}: \033[90m{} ... \033[39m".format(inpath, msg), file=sys.stderr, end="")
- sys.stderr.flush()
-
-def done():
- print("\033[90mdone\033[39m", file=sys.stderr)
-
-start("Reading file list")
-
-to_resolve = []
-with open(inpath) as f:
- for l in f:
- r = l.rstrip()
- if r.startswith('/usr/lib/'):
- r = '/usr/lib64/' + r[len('/usr/lib/'):]
- to_resolve.append(r)
-
-to_resolve.sort()
-
-done()
-
-files_map = get_files_map()
-found_packages = set()
-
-start("Resolving files to packages")
-
-matched_file = open(base_path + '.matched', 'w')
-unmatched_file = open(base_path + '.unmatched', 'w')
-unmatched_count = 0
-
-for r in to_resolve:
- if r in ignore:
- continue
-
- skip = False
- for p in ignore_compiled:
- if p.match(r) is not None:
- skip = True
- if skip:
- continue
-
- if r in rename:
- r = rename[r]
-
- for p, replacement in rename_compiled:
- if p.match(r) is not None:
- r = p.sub(replacement, r)
-
- if r.startswith('/usr/lib64/'):
- search = [r, '/lib64/' + os.path.basename(r)]
- elif r.startswith('/usr/bin/'):
- search = [r, '/bin/' + os.path.basename(r), '/usr/sbin/' + os.path.basename(r), '/sbin/' + os.path.basename(r)]
- else:
- search = [r]
-
- if r.startswith('/usr/lib64/libLLVM'):
- # freedesktop SDK builds "split" LLVM libraries
- found_packages.add('llvm-libs')
- continue
-
- for s in search:
- providing = files_map.get(s, None)
- if providing is not None:
- break
-
- if providing is None:
- print(r, file=unmatched_file)
- unmatched_count += 1
- else:
- if is_platform and any(p.match(providing) is not None for p in platform_package_ignore_compiled):
- continue
-
- found_packages.add(providing)
- print("{}: {}".format(r, providing), file=matched_file)
-
-unmatched_file.close()
-matched_file.close()
-
-with open(base_path + '.packages', 'w') as f:
- for p in sorted(found_packages):
- print(p, file=f)
-
-done()
-
-if unmatched_count > 0:
- warn("{} unmatched files, see {}".format(unmatched_count, base_path + ".unmatched"))
diff --git a/tools/generate-files.sh b/tools/generate-files.sh
new file mode 100755
index 0000000..24be4e3
--- /dev/null
+++ b/tools/generate-files.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+out=$1
+base=$(basename $out)
+
+case $base in
+ freedesktop-*)
+ ns=org.freedesktop
+ version=1.6
+ ;;
+ gnome-*)
+ ns=org.gnome
+ version=3.26
+ ;;
+ *)
+ echo 1>&2 "Can't identify runtime for $base"
+ exit 1
+ ;;
+esac
+
+case $base in
+ *-Platform.files)
+ sdk=
+ type=Platform
+ ;;
+ *-Sdk.files)
+ sdk=--sdk
+ type=Sdk
+ ;;
+ *)
+ echo 1>&2 "Can't identify type for $base"
+ exit 1
+ ;;
+esac
+
+runtime="$ns.$type/x86_64/$version"
+
+echo "$base: listing files in $runtime"
+
+flatpak run --file-forwarding --command=/usr/bin/python3 $runtime @@ tools/list-files.py @@ $sdk > $out
diff --git a/tools/generate-modulemd.py b/tools/generate-modulemd.py
new file mode 100755
index 0000000..b3bb4ef
--- /dev/null
+++ b/tools/generate-modulemd.py
@@ -0,0 +1,20 @@
+#!/usr/bin/python3
+import sys
+from yaml_utils import ordered_load, ordered_dump
+
+with open('flatpak-runtime.in.yaml') as f:
+ modulemd = ordered_load(f)
+
+def set_profile(profile_name, list_file):
+ with open(list_file) as f:
+ packages = [l.strip() for l in f]
+ print("{}: {} packages".format(profile_name, len(packages)), file=sys.stderr)
+ modulemd['data']['profiles'][profile_name] = packages
+
+set_profile('runtime', 'out/runtime.profile')
+set_profile('runtime-base', 'out/runtime-base.profile')
+set_profile('sdk', 'out/sdk.profile')
+set_profile('sdk-base', 'out/sdk-base.profile')
+
+with open('flatpak-runtime.yaml', 'w') as f:
+ ordered_dump(modulemd, stream=f, default_flow_style=False, encoding="utf-8")
diff --git a/tools/generate-report.py b/tools/generate-report.py
new file mode 100755
index 0000000..a64a008
--- /dev/null
+++ b/tools/generate-report.py
@@ -0,0 +1,401 @@
+#!/usr/bin/python3
+
+from jinja2 import Environment, FileSystemLoader, select_autoescape
+import json
+import locale
+import os
+import re
+import subprocess
+import sys
+
+def start(msg):
+ print("{}: \033[90m{} ... \033[39m".format(os.path.basename(sys.argv[0]), msg), file=sys.stderr, end="")
+ sys.stderr.flush()
+
+def done():
+ print("\033[90mdone\033[39m", file=sys.stderr)
+
+def warn(msg):
+ print("{}: \033[31m{}\033[39m".format(os.path.basename(sys.argv[0]), msg), file=sys.stderr)
+
+def fedmod_output(args):
+ return subprocess.check_output(['pipenv', 'run', 'fedmod'] + args, encoding='utf-8', cwd='/home/otaylor/Source/fedmod')
+
+_nvr_to_name_re = re.compile('^(.*)-[^-]*-[^-]*')
+def nvr_to_name(nvr):
+ return _nvr_to_name_re.match(nvr).group(1)
+
+class Package(object):
+ def __init__(self, name):
+ self.name = name
+ self.freedesktop_platform = 0
+ self.freedesktop_platform_files = None
+ self.freedesktop_platform_required_by = None
+ self.gnome_platform = 0
+ self.gnome_platform_files = None
+ self.gnome_platform_required_by = None
+ self.freedesktop_sdk = 0
+ self.freedesktop_sdk_files = None
+ self.freedesktop_sdk_required_by = None
+ self.gnome_sdk = 0
+ self.gnome_sdk_files = None
+ self.gnome_sdk_required_by = None
+ self.live = 0
+ self.rf26 = 0
+ self.source_package = None
+ self.flag = None
+ self._note = None
+
+ @property
+ def runtimes(self):
+ return self.freedesktop_platform or self.gnome_platform or self.freedesktop_sdk or self.gnome_sdk
+
+ @property
+ def klass(self):
+ if self.flag == 'F':
+ return "flagged"
+ elif self.flag == 'F?':
+ return "questionable"
+ elif self.flag == 'FD':
+ return "flagged-dep"
+ elif self.flag == 'W':
+ return "waived"
+ elif self.gnome_platform and not self.live:
+ return "questionable"
+
+ @property
+ def modules(self):
+ return package_to_module.get(self.name, "")
+
+ @property
+ def note(self):
+ if self.gnome_platform and not self.live:
+ return "platform package not on Live image"
+ elif self._note:
+ return self._note
+ else:
+ return ""
+
+ def why(self, which):
+ files = getattr(self, which + '_files')
+ if files is None:
+ files_str = ''
+ elif len(files) <= 3:
+ files_str= 'Files: ' + ' '.join(files)
+ else:
+ files_str = 'Files: ' + ' '.join(files[:3]) + ' ...'
+
+ required_by = getattr(self, which + '_required_by')
+ if required_by is None:
+ required_by_str = ''
+ else:
+ required_by_str = '\n'.join('{} ({})'.format(req, provider) for req, provider in required_by)
+
+ if files_str and required_by_str:
+ return files_str + '\n' + required_by_str
+ elif files_str:
+ return files_str
+ elif required_by_str:
+ return required_by_str
+ else:
+ return ''
+
+ @property
+ def freedesktop_platform_why(self):
+ return self.why('freedesktop_platform')
+
+ @property
+ def freedesktop_sdk_why(self):
+ return self.why('freedesktop_sdk')
+
+ @property
+ def gnome_platform_why(self):
+ return self.why('gnome_platform')
+
+ @property
+ def gnome_sdk_why(self):
+ return self.why('gnome_sdk')
+
+ def inclusion(self, which):
+ level = getattr(self, which)
+ if level == 0:
+ return 'absent'
+ elif level == 1:
+ return 'dep'
+ else:
+ required_by = getattr(self, which + '_required_by', False)
+ if required_by is False:
+ return 'present'
+ elif required_by is not None and len(required_by) > 0:
+ return 'files'
+ else:
+ return 'root'
+
+ @property
+ def freedesktop_platform_inclusion(self):
+ return self.inclusion('freedesktop_platform')
+
+ @property
+ def freedesktop_sdk_inclusion(self):
+ return self.inclusion('freedesktop_sdk')
+
+ @property
+ def gnome_platform_inclusion(self):
+ return self.inclusion('gnome_platform')
+
+ @property
+ def gnome_sdk_inclusion(self):
+ return self.inclusion('gnome_sdk')
+
+ @property
+ def live_inclusion(self):
+ return self.inclusion('live')
+
+ @property
+ def rf26_inclusion(self):
+ return self.inclusion('rf26')
+
+class SourcePackage(object):
+ def __init__(self, name):
+ self.name = name
+ self.packages = []
+
+ @property
+ def modules(self):
+ old_modules = self.packages[0].modules
+ klass = self.klass
+ if klass == "build-platform":
+ new_module = "desktop-runtime"
+ elif klass == "build-sdk":
+ new_module = "flatpak-runtime"
+ else:
+ new_module = None
+
+ if old_modules and new_module:
+ return old_modules + " ⇒ " + new_module
+ elif old_modules:
+ return old_modules
+ else:
+ return new_module
+
+ @property
+ def sdk_only(self):
+ return sdk_only
+
+ @property
+ def klass(self):
+ if self.packages[0].modules in ("", "installer"):
+ sdk_only = True
+ for package in self.packages:
+ if package.freedesktop_platform or package.gnome_platform:
+ sdk_only = False
+ if sdk_only:
+ return "build-sdk"
+ else:
+ return "build-platform"
+ else:
+ return ""
+
+class Letter(object):
+ def __init__(self, letter):
+ self.letter = letter
+ self.packages = []
+
+#
+# Get information about packages
+#
+
+packages = dict()
+def add_package(name, which, level, only_if_exists=False, source_package=None):
+ pkg = packages.get(name, None)
+ if pkg is None:
+ if only_if_exists:
+ return
+ pkg = Package(name)
+ packages[name] = pkg
+ if getattr(pkg, which) < level:
+ setattr(pkg, which, level)
+ if source_package is not None:
+ pkg.source_package = source_package
+
+def add_packages(filename, which, resolve_deps=False, only_if_exists=False):
+ start("Adding packages from {}".format(filename))
+ with open(filename) as f:
+ pkgs = set(line.strip() for line in f)
+
+ if resolve_deps:
+ resolved_packages = json.loads(fedmod_output(['resolve-deps', '--json'] + list(pkgs)))
+ for package in resolved_packages:
+ name = nvr_to_name(package['rpm'])
+ srpm_name = nvr_to_name(package['srpm'])
+ add_package(name, which, level=(2 if name in pkgs else 1),
+ source_package=srpm_name, only_if_exists=only_if_exists)
+
+ for package in resolved_packages:
+ for req, providers in package['requires'].items():
+ provider = nvr_to_name(providers[0])
+ provider_package = packages.get(provider, None)
+ if provider_package is None: # filtered out of the resolve-deps output - e.g., fedora-release
+ continue
+ required_by = getattr(provider_package, which + '_required_by')
+ if required_by is None:
+ required_by = []
+ setattr(provider_package, which + '_required_by', required_by)
+ required_by.append((nvr_to_name(package['rpm']), req))
+ else:
+ for package in pkgs:
+ add_package(package, which, level=2, only_if_exists=only_if_exists)
+
+ done()
+
+def add_package_files(filename, which):
+ with open(filename) as f:
+ for line in f:
+ f, p = line.strip().split()
+ f = f[:-1] # strip trailing :
+ pkg = packages[p]
+ old = getattr(pkg, which + '_files')
+ if old is not None:
+ old.append(f)
+ else:
+ setattr(pkg, which + '_files', [f])
+
+add_packages('out/freedesktop-Platform.packages', 'freedesktop_platform', resolve_deps=True)
+add_packages('out/freedesktop-Sdk.packages', 'freedesktop_sdk', resolve_deps=True)
+add_packages('out/gnome-Platform.packages', 'gnome_platform', resolve_deps=True)
+add_packages('out/gnome-Sdk.packages', 'gnome_sdk', resolve_deps=True)
+add_packages('data/f27-live.packages', 'live', only_if_exists=True)
+add_packages('data/f26-flatpak-runtime.packages', 'rf26', only_if_exists=True)
+
+add_package_files('out/freedesktop-Platform.matched', 'freedesktop_platform')
+add_package_files('out/freedesktop-Sdk.matched', 'freedesktop_sdk')
+add_package_files('out/gnome-Platform.matched', 'gnome_platform')
+add_package_files('out/gnome-Sdk.matched', 'gnome_sdk')
+
+source_packages = {}
+for package in packages.values():
+ source_package = source_packages.get(package.source_package, None)
+ if source_package is None:
+ source_package = SourcePackage(package.source_package)
+ source_packages[source_package.name] = source_package
+ source_package.packages.append(package)
+
+letters_map = dict()
+for k, v in source_packages.items():
+ v.packages.sort(key=lambda p: locale.strxfrm(p.name))
+ l = v.name[0].upper()
+ letter = letters_map.get(l, None)
+ if letter is None:
+ letter = Letter(l)
+ letters_map[l] = letter
+ letter.packages.append(v)
+
+letters = []
+for k in sorted(letters_map.keys()):
+ letter = letters_map[k]
+ letter.packages.sort(key=lambda p: locale.strxfrm(p.name))
+ letters.append(letter)
+
+start("Loading package to module map")
+package_to_module = dict()
+
+output = fedmod_output(['list-rpms', '--list-modules'])
+for l in output.split('\n'):
+ fields = l.strip().split()
+ if len(fields) != 2:
+ continue
+ package_to_module[fields[0]] = fields[1][1:-1]
+done()
+
+start("Loading package notes")
+comment_re = re.compile(r'\s*#.*')
+flag_re = re.compile(r'[A-Z?]+$')
+package_re = re.compile(r'\S+')
+
+with open("package-notes.txt") as f:
+ for line in f:
+ line = comment_re.sub('', line)
+ line = line.strip()
+ if line == '':
+ continue
+ parts = line.split(":", 2)
+ name = parts[0].strip()
+ if not re.match(package_re, name):
+ warn("Can't parse package note: {}".format(line))
+ continue
+ if len(parts) == 1:
+ flag = note = None
+ elif len(parts) == 2:
+ x = parts[1].strip()
+ if flag_re.match(x):
+ flag = x
+ note = None
+ else:
+ note = x
+ flag = None
+ elif len(parts) == 3:
+ x = parts[1].strip()
+ if flag_re.match(x):
+ flag = x
+ note = parts[2].strip()
+ else:
+ flag = None
+ note = parts[1] + ':' + parts[2]
+
+ pkg = packages.get(name, None)
+ if pkg is None:
+ warn("Package note for missing package: {}".format(name))
+ continue
+
+ if flag is not None:
+ pkg.flag = flag
+ if note is not None:
+ pkg._note = note
+done()
+
+#
+# Get summary information for unmatched files
+#
+
+def count_lines(fname):
+ with open(fname) as f:
+ return len(list(f))
+
+unmatched_counts = {
+ 'freedesktop_platform': count_lines('out/freedesktop-Platform.unmatched'),
+ 'gnome_platform': count_lines('out/gnome-Platform.unmatched'),
+ 'freedesktop_sdk': count_lines('out/freedesktop-Sdk.unmatched'),
+ 'gnome_sdk': count_lines('out/gnome-Sdk.unmatched'),
+}
+
+#
+# Generate the profiles
+#
+def generate_profile(outfile, which):
+ with open(outfile, 'w') as f:
+ for letter in letters:
+ for src in letter.packages:
+ for pkg in src.packages:
+ if getattr(pkg, which) != 0:
+ print(pkg.name, file=f)
+
+generate_profile('out/runtime-base.profile', 'freedesktop_platform')
+generate_profile('out/sdk-base.profile', 'freedesktop_sdk')
+generate_profile('out/runtime.profile', 'gnome_platform')
+generate_profile('out/sdk.profile', 'gnome_sdk')
+
+#
+# Generate the report
+#
+
+env = Environment(
+ loader=FileSystemLoader('.'),
+ autoescape=select_autoescape(['html', 'xml']),
+ trim_blocks=True,
+ lstrip_blocks=True
+)
+
+template = env.get_template('report-template.html')
+
+with open('report.html', 'w') as f:
+ f.write(template.render(letters=letters, unmatched=unmatched_counts, package_to_module=package_to_module))
diff --git a/tools/list-files.py b/tools/list-files.py
new file mode 100755
index 0000000..3e95058
--- /dev/null
+++ b/tools/list-files.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python3
+
+import os
+import re
+import sys
+
+sdk = len(sys.argv) > 1 and sys.argv[1] == '--sdk'
+
+def output_dir(d):
+ for f in sorted(os.listdir(d)):
+ full = os.path.join(d, f)
+ if not os.path.isdir(full):
+ print(os.path.join(d, f))
+
+def output_dir_recurse(d):
+ for dirName, subdirs, files in os.walk(d):
+ for f in sorted(files):
+ print(os.path.join(dirName, f))
+
+output_dir('/usr/bin')
+
+for f in os.listdir('/usr/lib'):
+ full = os.path.join('/usr/lib', f)
+ if (re.match(r'^.*\.so\.\d+$', f) is not None or
+ re.match(r'^.*\.so$', f) is not None and not os.path.islink(full)):
+ print(full)
+
+output_dir_recurse('/usr/share/fonts')
+
+if sdk:
+ output_dir_recurse('/usr/include')
+ output_dir('/usr/lib/pkgconfig')
+ output_dir('/usr/share/pkgconfig')
+
+# import pkgutil
+# for f in pkgutil.iter_modules():
+# try:
+# path = f[0].path
+# if path.find('site-packages') < 0:
+# continue
+# except AttributeError:
+# continue
+# if not(f[1].startswith('_')):
+# print(f, 'python3dist({})'.format(f[1]))
+
diff --git a/tools/resolve-files.py b/tools/resolve-files.py
new file mode 100755
index 0000000..de5631f
--- /dev/null
+++ b/tools/resolve-files.py
@@ -0,0 +1,531 @@
+#!/usr/bin/python3
+
+from functools import cmp_to_key
+import gzip
+import hashlib
+import os
+import pickle
+import re
+import rpm
+import sys
+import xml.etree.ElementTree as ET
+import xml.sax
+
+XDG_CACHE_HOME = os.environ.get("XDG_CACHE_HOME") or os.path.expanduser("~/.cache")
+
+# This needs to be in sync with fedmod
+REPOS = [
+ "f28-packages"
+]
+
+ignore = set()
+rename = dict()
+
+bin_ignore = [
+ # A bunch of binaries built as part of nss. A few of these are
+ # in /usr/lib64/nss/unsupported-tools/ as part of nss-tools, the rest are not considered
+ # worth installing at all (test utilities, etc.)
+ 'addbuiltin', 'atob', 'baddbdir', 'bltest', 'btoa', 'certcgi', 'chktest', 'conflict',
+ 'crmftest', 'dbtest', 'derdump', 'dertimetest', 'digest', 'ecperf', 'encodeinttest',
+ 'fipstest', 'httpserv', 'listsuites', 'makepqg', 'mangle', 'multinit', 'nonspr10',
+ 'ocspclnt', 'ocspresp', 'oidcalc', 'p7content', 'p7env', 'p7sign', 'p7verify',
+ 'pk11gcmtest', 'pk11mode', 'pk1sign', 'pkix-errcodes', 'pp', 'pwdecrypt', 'remtest',
+ 'rsaperf', 'sdrtest', 'secmodtest', 'selfserv', 'shlibsign', 'signtool', 'strsclnt',
+ 'symkeyutil', 'tstclnt', 'vfychain', 'vfyserv',
+
+ # Script added into nss by openembedded
+ 'signlibs.sh',
+
+ # /usr/share/doc/aspell/aspell-import in Fedora
+ 'aspell-import',
+
+ # Removed in perl-5.27
+ 'c2ph',
+
+ # Removed - https://lists.fedorahosted.org/archives/list/elfutils-devel@lists.fedorahosted.org/thread/22LIIMXI6EDGCOIO6QFSBUO2KHEXIGSJ/
+ 'eu-ld',
+
+ # compatibility perl script in zenity for something quite old, not packaged in fedora
+ 'gdialog',
+
+ # An openembedded thing
+ # "Tool that installs the GNU config.guess / config.sub into a directory tree"
+ 'gnu-configize',
+
+ # GPG test program (https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=tree;f=tests)
+ 'gpgscm',
+
+ # An implementation of tar for cross-platform compatibility, disabled in gnupg2.spec
+ 'gpgtar',
+
+ # Removed from gtk-doc
+ # https://git.gnome.org/browse/gtk-doc/commit/?id=46df4354abed5724697fd5e39630c5bbc6637cc4
+ 'gtkdoc-mktmpl',
+
+ # Versioned python-3.5 binaries
+ 'idle3.5', 'pydoc3.5', 'python3.5', 'python3.5-config', 'python3.5m', 'python3.5m-config', '2to3-3.5',
+
+ # installed in openembedded with a coreutils suffix along with the more normal version
+ 'kill.coreutils', 'uptime.coreutils',
+
+ # nettle utilities not currently packaged in fedora
+ # (https://src.fedoraproject.org/rpms/nettle/c/2ec204e2de17006b566c9ff7d90ec65ca1680ed5?branch=master)
+ 'nettle-hash', 'nettle-lfib-stream', 'nettle-pbkdf2', 'pkcs1-conv', 'sexp-conv',
+
+ # Not built by default as of util-linux-2.29
+ '/usr/bin/pg',
+
+ # These are installed as <name>-64 in Fedora, we just ignore them because they will be
+ # pulled in by the corresponding library
+ 'gdk-pixbuf-query-loaders', 'gtk-query-immodules-2.0',
+ 'gio-querymodules', 'gtk-query-immodules-3.0',
+
+ # Removed in krb5-1.13 (https://web.mit.edu/kerberos/krb5-1.13/README-1.13.5.txt)
+ 'krb5-send-pr',
+
+ # Removed in util-linux-2.30'
+ 'tailf',
+
+ # OpenEmbedded uses Debian's ca-certificates, Fedora is different
+ 'update-ca-certificates',
+
+ #########################################################################
+ # In the freedesktop runtime for some reason, doesn't seem useful
+ 'bsdcat',
+
+ # Same as 'openssl rehash', but as a perl script (openssl-perl)
+ 'c_rehash',
+
+ # From pulseaudio, wrapper script to start a pulseaudio server as if it was ESD (pulseaudio-esound-compat)
+ 'esdcompat',
+
+ # Just need the library (gcab)
+ 'gcab',
+
+ # Probably not useful in the runtime or the SDK (gstreamer-plugins-base-tools)
+ 'gst-device-monitor-1.0', 'gst-discoverer-1.0', 'gst-play-1.0',
+
+ # Python utilities (python2-tools)
+ 'idle', 'smtpd.py',
+
+ # Python3 utilities (python3-tools)
+ 'idle3', '2to3',
+
+ # A binary from cups, we just need the libraries (cups-libs)
+ 'ipptool',
+
+ # Minimal profiler (glibc-utils)
+ 'pcprofiledump',
+
+ # (pcre-tools)
+ 'pcre2grep', 'pcre2test',
+
+ # Random test program from libproxy (libproxy-bin)
+ 'proxy',
+
+ # Tools from libvpx (libvpx-utils)
+ 'vpxdec', 'vpxenc',
+]
+ignore.update('/usr/bin/' + x for x in bin_ignore)
+
+bin_rename = {
+ # lcms2 compiled with --program-suffix=2 in Fedora, even though there are no actual
+ # conflicts between lcms and lcms2 - jpegicc was renamed to jpgicc, etc.
+ 'jpgicc': 'jpgicc2',
+ 'linkicc': 'linkicc2',
+ 'psicc': 'psicc2',
+ 'tificc': 'tificc2',
+ 'transicc': 'transicc2',
+}
+rename.update({ '/usr/bin/' + k: '/usr/bin/' + v for k, v in bin_rename.items() })
+
+lib_ignore = [
+ # Symlink created in freedesktop.org flatpak runtime, not standard
+ 'libEGL_indirect.so.0',
+
+ # Removed in gpgme-1.9.0
+ 'libgpgme-pthread.so.11',
+
+ # Not enabled in fedora (consider fixing)
+ 'libharfbuzz-gobject.so.0',
+
+ # Part of glibc
+ 'libssp.so.0',
+]
+ignore.update('/usr/lib64/' + x for x in lib_ignore)
+
+fonts_ignore = {
+ # Added in 2.36
+ 'dejavu/DejaVuMathTeXGyre.ttf',
+}
+ignore.update('/usr/share/fonts/' + x for x in fonts_ignore)
+
+lib_rename = {
+ # Newer in Fedora
+ 'libhunspell-1.3.so.0': 'libhunspell-1.5.so.0',
+ 'libwebp.so.6': 'libwebp.so.7',
+ 'libwebpmux.so.2': 'libwebpmux.so.3',
+ 'libpcre2-posix.so.1': 'libpcre2-posix.so.2',
+ 'libvpx.so.3': 'libvpx.so.4',
+ 'libkadm5clnt_mit.so.9': 'libkadm5clnt_mit.so.11',
+ 'libkadm5srv_mit.so.9': 'libkadm5srv_mit.so.11',
+
+ # Newer in Flatpak runtime
+ 'libprocps.so.6': 'libprocps.so.4', # procps-3.10 vs. procps-3.12
+ 'libgif.so.7': 'libgif.so.4', # giflib 4 vs giflib-5 - https://bugzilla.redhat.com/show_bug.cgi?id=822844
+
+ # Fedora arch-handling
+ 'ld-linux.so.2': 'ld-linux-x86-64.so.2',
+}
+rename.update({ '/usr/lib64/' + k: '/usr/lib64/' + v for k, v in lib_rename.items() })
+
+include_ignore = {
+ # https://git.gnome.org/browse/at-spi2-core/commit/?id=1eb223bb48464d707290ef540581e9763b0ceee8
+ 'at-spi-2.0/atspi/atspi-gmain.c',
+
+ # Removed in 7.55 https://github.com/curl/curl/commit/73a2fcea0b4adea6ba342cd7ed1149782c214ae3
+ 'curl/curlbuild-64.h', 'curl/curlbuild.h', 'curl/curlrules.h',
+
+ # Not enabled on Fedora
+ 'harfbuzz/hb-gobject-enums.h',
+ 'harfbuzz/hb-gobject-structs.h',
+ 'harfbuzz/hb-gobject.h',
+
+ # https://github.com/hunspell/hunspell/commit/99675e791d123cbe1be914b1a49dd83062134301
+ 'hunspell/affentry.hxx', 'hunspell/affixmgr.hxx', 'hunspell/baseaffix.hxx', 'hunspell/dictmgr.hxx',
+ 'hunspell/filemgr.hxx','hunspell/hashmgr.hxx','hunspell/hunzip.hxx','hunspell/langnum.hxx',
+ 'hunspell/phonet.hxx','hunspell/replist.hxx','hunspell/suggestmgr.hxx',
+
+ # Removed in openssl-1.1
+ 'openssl/des_old.h', 'openssl/dso.h', 'openssl/krb5_asn.h', 'openssl/kssl.h', 'openssl/pqueue.h',
+ 'openssl/ssl23.h', 'openssl/ui_compat.h',
+}
+ignore.update('/usr/include/' + x for x in include_ignore)
+
+include_rename = {
+ 'assuan.h': 'libassuan2/assuan.h',
+ 'nss3/nssck.api': 'nss3/templates/nssck.api',
+}
+rename.update({ '/usr/include/' + k: '/usr/include/' + v for k, v in include_rename.items() })
+
+nspr_include = [
+ 'nspr.h', 'plarena.h', 'plarenas.h', 'plbase64.h', 'plerror.h', 'plgetopt.h', 'plhash.h',
+ 'plstr.h', 'pratom.h', 'prbit.h', 'prclist.h', 'prcmon.h', 'prcountr.h', 'prcpucfg.h',
+ 'prcvar.h', 'prdtoa.h', 'prenv.h', 'prerr.h', 'prerror.h', 'prinet.h', 'prinit.h',
+ 'prinrval.h', 'prio.h', 'pripcsem.h', 'private/pprio.h', 'private/pprthred.h', 'private/prpriv.h',
+ 'prlink.h', 'prlock.h', 'prlog.h', 'prlong.h', 'prmem.h', 'prmon.h', 'prmwait.h', 'prnetdb.h',
+ 'prolock.h', 'prpdce.h', 'prprf.h', 'prproces.h', 'prrng.h', 'prrwlock.h', 'prshm.h', 'prshma.h',
+ 'prsystem.h', 'prthread.h', 'prtime.h', 'prtpool.h', 'prtrace.h', 'prtypes.h', 'prvrsion.h',
+ 'prwin16.h', 'stropts.h', 'obsolete/pralarm.h', 'obsolete/probslet.h', 'obsolete/protypes.h', 'obsolete/prsem.h'
+]
+rename.update({ '/usr/include/' + x: '/usr/include/nspr4/' + x for x in nspr_include })
+
+pc_ignore = {
+ # Not enabled on Fedora
+ 'harfbuzz-gobject.pc',
+
+ # https://github.com/ostroproject/ostro-os/blob/master/meta/recipes-support/libassuan/libassuan/libassuan-add-pkgconfig-support.patch
+ 'libassuan.pc',
+
+ # http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libgpg-error/libgpg-error/pkgconfig.patch
+ 'gpg-error.pc',
+
+ # http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-support/libgcrypt/files/0001-Add-and-use-pkg-config-for-libgcrypt-instead-of-conf.patch
+ 'libgcrypt.pc',
+}
+ignore.update('/usr/lib64/pkgconfig/' + x for x in pc_ignore)
+
+pc_rename = {
+ 'python-3.5.pc': 'python-3.6.pc',
+ 'python-3.5m.pc': 'python-3.6m.pc',
+}
+rename.update({ '/usr/lib64/pkgconfig/' + k: '/usr/lib64/pkgconfig/' + v for k, v in pc_rename.items() })
+rename.update({ '/usr/share/pkgconfig/' + k: '/usr/share/pkgconfig/' + v for k, v in pc_rename.items() })
+
+ignore_patterns = [
+ # Flatpak runtime has a versioned gawk-4.1.3
+ r'/usr/bin/gawk-.*',
+
+ # Architecture specific aliases for gcc, binutils, etc
+ r'^/usr/bin/x86_64-unknown-linux-.*',
+
+ # From NSPR, intentionally not installed on Fedora
+ r'/usr/include/md/.*',
+
+ # .install files litter the include directories of openembedded
+ r'.*/\.install$'
+]
+ignore_compiled = [re.compile(x) for x in ignore_patterns]
+
+rename_patterns = [
+ (r'^/usr/include/c\+\+/6.2.0/(.*)', r'/usr/include/c++/7/\1'),
+ (r'^/usr/include/c\+\+/7/x86_64-unknown-linux/(.*)', r'/usr/include/c++/7/x86_64-redhat-linux/\1'),
+ (r'^/usr/include/python3.5m/(.*)', r'/usr/include/python3.6m/\1'),
+ (r'^/usr/lib64/pkgconfig/(.*proto.pc)', r'/usr/share/pkgconfig/\1'),
+ (r'^/usr/share/fonts/liberation-fonts/(.*)', r'/usr/share/fonts/liberation/\1'),
+]
+rename_compiled = [(re.compile(a), b) for a, b in rename_patterns]
+
+platform_package_ignore_patterns = [
+ "^.*-devel$",
+ "^libappstream-glib-builder$", # may not need in the sdk either
+ "^gtk-doc$",
+ "^icu$", # may not need in the sdk either
+ '^llvm$',
+ '^sqlite$',
+]
+platform_package_ignore_compiled = [re.compile(p) for p in platform_package_ignore_patterns]
+
+
+# We need to look up a lot of file dependencies. dnf/libsolv is not fast at doing
+# this (at least when we look up files one-by-one) so we create a hash table that
+# maps from *all* files in the distribution to the "best" package that provides
+# the file. To further speed this up, we pickle the result and store it, and only
+# recreate it when the DNF metadata changes. We gzip the pickle to save space
+# (70M instead of 700M), this slows things down by about 2 seconds.
+#
+
+def package_cmp(p1, p2):
+ n1, e1, v1, r1, a1 = p1
+ n2, e2, v2, r2, a2 = p2
+
+ if a1 == 'i686' and a2 != 'i686':
+ return 1
+ if a1 != 'i686' and a2 == 'i686':
+ return -1
+
+ if n1.startswith('compat-') and not n2.startswith('compat-'):
+ return 1
+ elif n2.startswith('compat-') and not n1.startswith('compat-'):
+ return -1
+
+ if n1 < n2:
+ return -1
+ elif n1 > n2:
+ return 1
+
+ if e1 is None:
+ e1 = '0'
+ if e2 is None:
+ e2 = '0'
+
+ return - rpm.labelCompare((e1, v1, r1), (e2, v2, r2))
+
+class FilesMapHandler(xml.sax.handler.ContentHandler):
+ def __init__(self, files_map):
+ self.files_map = files_map
+ self.name = None
+ self.arch = None
+ self.epoch = None
+ self.version = None
+ self.release = None
+ self.file = None
+
+ def startElement(self, name, attrs):
+ if name == 'package':
+ self.name = attrs['name']
+ self.arch = attrs['arch']
+ elif name == 'version':
+ if self.name is not None:
+ self.epoch = attrs['epoch']
+ self.version = attrs['ver']
+ self.release = attrs['rel']
+ elif name == 'file':
+ self.file = ''
+
+ def endElement(self, name):
+ if name == 'package':
+ self.name = None
+ elif name == 'file':
+ package = (self.name, self.epoch, self.version, self.release, self.arch)
+ old = self.files_map.get(self.file)
+ if old is None or package_cmp(package, old) < 0:
+ self.files_map[self.file] = package
+
+ self.file = None
+
+ def characters(self, content):
+ if self.file is not None:
+ self.file += content
+
+def scan_filelists(filelists_path, files_map):
+ handler = FilesMapHandler(files_map)
+ with gzip.open(filelists_path, 'rb') as f:
+ xml.sax.parse(f, handler)
+
+
+def make_files_map(repo_info):
+ files_map = {}
+
+ for repo in REPOS:
+ start("Scanning files for {}".format(repo))
+ repo_dir, repomd_contents = repo_info[repo]
+ root = ET.fromstring(repomd_contents)
+
+ ns = {'repo': 'http://linux.duke.edu/metadata/repo'}
+ filelists_location = root.find("./repo:data[@type='filelists']/repo:location", ns).attrib['href']
+ filelists_path = os.path.join(repo_dir, filelists_location)
+ if os.path.commonprefix([filelists_path, repo_dir]) != repo_dir:
+ done()
+ error("{}: filelists directory is outside of repository".format(repo_dir))
+
+ scan_filelists(filelists_path, files_map)
+ done()
+
+ start("Finalizing files map")
+ for k in files_map:
+ files_map[k] = files_map[k][0]
+ done()
+
+ return files_map
+
+
+def get_files_map():
+ hash_text = ''
+ repos_dir = os.path.join(XDG_CACHE_HOME, "fedmod/repos")
+ repo_info = {}
+ for repo in REPOS:
+ repo_dir = os.path.join(repos_dir, repo, 'x86_64')
+ repomd_path = os.path.join(repo_dir, 'repodata/repomd.xml')
+ try:
+ with open(repomd_path, 'rb') as f:
+ repomd_contents = f.read()
+ except (OSError, IOError):
+ print("Cannot read {}, try 'fedmod fetch-metadata'".format(repomd_path), file=sys.stderr)
+ sys.exit(1)
+
+ repo_info[repo] = (repo_dir, repomd_contents)
+ hash_text += '{}|{}\n'.format(repo, hashlib.sha256(repomd_contents).hexdigest())
+
+ repo_hash = hashlib.sha256(hash_text.encode("UTF-8")).hexdigest()
+
+ files_map_path = os.path.join(XDG_CACHE_HOME, "fedmod/flatpak-runtime-files-map.gz")
+
+ try:
+ with gzip.open(files_map_path, 'rb') as f:
+ old_repo_hash = f.read(64).decode('utf-8')
+ if old_repo_hash == repo_hash:
+ start("Reading cached file map")
+ files_map = pickle.load(f)
+ done()
+
+ return files_map
+ except FileNotFoundError:
+ pass
+
+ files_map = make_files_map(repo_info)
+
+ start("Writing file map to cache")
+ with gzip.open(files_map_path, 'wb') as f:
+ f.write(repo_hash.encode('utf-8'))
+ pickle.dump(files_map, f)
+ done()
+
+ return files_map
+
+if len(sys.argv) != 2:
+ print("Usage: resolve-files.py INFILE", file=sys.stderr)
+ sys.exit(1)
+
+inpath = sys.argv[1]
+if not inpath.endswith('.files'):
+ print("INFILE must have .files suffix", file=sys.stderr)
+ sys.exit(1)
+
+base_path = inpath[:-len('.files')]
+is_platform = "-Platform" in base_path
+is_sdk = "-Sdk" in base_path
+
+def warn(msg):
+ print("{}: \033[31m{}\033[39m".format(inpath, msg), file=sys.stderr)
+
+def error(msg):
+ print("{}: \033[31m{}\033[39m".format(inpath, msg), file=sys.stderr)
+ sys.exit(1)
+
+def start(msg):
+ print("{}: \033[90m{} ... \033[39m".format(inpath, msg), file=sys.stderr, end="")
+ sys.stderr.flush()
+
+def done():
+ print("\033[90mdone\033[39m", file=sys.stderr)
+
+start("Reading file list")
+
+to_resolve = []
+with open(inpath) as f:
+ for l in f:
+ r = l.rstrip()
+ if r.startswith('/usr/lib/'):
+ r = '/usr/lib64/' + r[len('/usr/lib/'):]
+ to_resolve.append(r)
+
+to_resolve.sort()
+
+done()
+
+files_map = get_files_map()
+found_packages = set()
+
+start("Resolving files to packages")
+
+matched_file = open(base_path + '.matched', 'w')
+unmatched_file = open(base_path + '.unmatched', 'w')
+unmatched_count = 0
+
+for r in to_resolve:
+ if r in ignore:
+ continue
+
+ skip = False
+ for p in ignore_compiled:
+ if p.match(r) is not None:
+ skip = True
+ if skip:
+ continue
+
+ if r in rename:
+ r = rename[r]
+
+ for p, replacement in rename_compiled:
+ if p.match(r) is not None:
+ r = p.sub(replacement, r)
+
+ if r.startswith('/usr/lib64/'):
+ search = [r, '/lib64/' + os.path.basename(r)]
+ elif r.startswith('/usr/bin/'):
+ search = [r, '/bin/' + os.path.basename(r), '/usr/sbin/' + os.path.basename(r), '/sbin/' + os.path.basename(r)]
+ else:
+ search = [r]
+
+ if r.startswith('/usr/lib64/libLLVM'):
+ # freedesktop SDK builds "split" LLVM libraries
+ found_packages.add('llvm-libs')
+ continue
+
+ for s in search:
+ providing = files_map.get(s, None)
+ if providing is not None:
+ break
+
+ if providing is None:
+ print(r, file=unmatched_file)
+ unmatched_count += 1
+ else:
+ if is_platform and any(p.match(providing) is not None for p in platform_package_ignore_compiled):
+ continue
+
+ found_packages.add(providing)
+ print("{}: {}".format(r, providing), file=matched_file)
+
+unmatched_file.close()
+matched_file.close()
+
+with open(base_path + '.packages', 'w') as f:
+ for p in sorted(found_packages):
+ print(p, file=f)
+
+done()
+
+if unmatched_count > 0:
+ warn("{} unmatched files, see {}".format(unmatched_count, base_path + ".unmatched"))
diff --git a/tools/yaml_utils.py b/tools/yaml_utils.py
new file mode 100644
index 0000000..1272836
--- /dev/null
+++ b/tools/yaml_utils.py
@@ -0,0 +1,25 @@
+import yaml
+# https://stackoverflow.com/questions/5121931/in-python-how-can-you-load-yaml-mappings-as-ordereddicts
+
+from collections import OrderedDict
+
+def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict):
+ class OrderedLoader(Loader):
+ pass
+ def construct_mapping(loader, node):
+ loader.flatten_mapping(node)
+ return object_pairs_hook(loader.construct_pairs(node))
+ OrderedLoader.add_constructor(
+ yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
+ construct_mapping)
+ return yaml.load(stream, OrderedLoader)
+
+def ordered_dump(data, stream=None, Dumper=yaml.SafeDumper, **kwds):
+ class OrderedDumper(Dumper):
+ pass
+ def _dict_representer(dumper, data):
+ return dumper.represent_mapping(
+ yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
+ data.items())
+ OrderedDumper.add_representer(OrderedDict, _dict_representer)
+ return yaml.dump(data, stream, OrderedDumper, **kwds)
diff --git a/yaml_utils.py b/yaml_utils.py
deleted file mode 100644
index 1272836..0000000
--- a/yaml_utils.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import yaml
-# https://stackoverflow.com/questions/5121931/in-python-how-can-you-load-yaml-mappings-as-ordereddicts
-
-from collections import OrderedDict
-
-def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict):
- class OrderedLoader(Loader):
- pass
- def construct_mapping(loader, node):
- loader.flatten_mapping(node)
- return object_pairs_hook(loader.construct_pairs(node))
- OrderedLoader.add_constructor(
- yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
- construct_mapping)
- return yaml.load(stream, OrderedLoader)
-
-def ordered_dump(data, stream=None, Dumper=yaml.SafeDumper, **kwds):
- class OrderedDumper(Dumper):
- pass
- def _dict_representer(dumper, data):
- return dumper.represent_mapping(
- yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
- data.items())
- OrderedDumper.add_representer(OrderedDict, _dict_representer)
- return yaml.dump(data, stream, OrderedDumper, **kwds)
reply other threads:[~2026-09-11 14:40 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=178913761293.1.7372116763432216545.flatpaks-flatpak-runtime-db33c7e13940@fedoraproject.org \
--to=otaylor@fishsoup.net \
--cc=git-commits@fedoraproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox