Skip to content
Snippets Groups Projects

Generate mock sysroots programmatically

Merged Simon McVittie requested to merge wip/programmatic-mock-sysroots into master
1 file
+ 313
0
Compare changes
  • Side-by-side
  • Inline
+ 313
0
 
#!/usr/bin/env python3
 
#
 
# Copyright © 2020 Collabora Ltd.
 
#
 
# SPDX-License-Identifier: MIT
 
#
 
# Permission is hereby granted, free of charge, to any person obtaining
 
# a copy of this software and associated documentation files (the
 
# "Software"), to deal in the Software without restriction, including
 
# without limitation the rights to use, copy, modify, merge, publish,
 
# distribute, sublicense, and/or sell copies of the Software, and to
 
# permit persons to whom the Software is furnished to do so, subject to
 
# the following conditions:
 
#
 
# The above copyright notice and this permission notice shall be included
 
# in all copies or substantial portions of the Software.
 
#
 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 
import os
 
import argparse
 
 
parser = argparse.ArgumentParser()
 
parser.add_argument("path")
 
parser.add_argument('-i', '--install', action='store_true',
 
help='Install the sysroot in the provided [path], using $MESON_INSTALL_DESTDIR_PREFIX as a prefix')
 
args = parser.parse_args()
 
 
if args.install:
 
full_path = os.path.join(os.environ['MESON_INSTALL_DESTDIR_PREFIX'], args.path.lstrip("/"))
 
else:
 
full_path = args.path
 
 
# If the chosen destination 'sysroot' is not yet available we create it
 
os.makedirs(full_path, mode=0o755, exist_ok=True)
 
os.chdir(full_path)
 
 
# Only the leaf directories need to be listed here.
 
for name in '''
 
debian10/usr/lib/i386-linux-gnu/dri
 
debian10/usr/lib/i386-linux-gnu/vdpau
 
debian10/usr/lib/x86_64-linux-gnu/dri
 
debian10/usr/lib/x86_64-linux-gnu/vdpau
 
debian10/run/systemd
 
debian-unstable/etc
 
fedora/usr/lib/dri
 
fedora/usr/lib/vdpau
 
fedora/usr/lib64/dri
 
fedora/usr/lib64/vdpau
 
fedora/run/systemd
 
flatpak-example/usr/lib/dri
 
flatpak-example/usr/lib/mock-abi/GL/lib/dri
 
flatpak-example/usr/lib/mock-abi/dri
 
flatpak-example/usr/lib/mock-abi/dri/intel-vaapi-driver
 
flatpak-example/usr/lib/mock-abi/vdpau
 
flatpak-example/run/host
 
invalid-os-release/usr/lib
 
invalid-os-release/run/host
 
no-os-release/custom_path32/dri
 
no-os-release/custom_path32/va
 
no-os-release/custom_path32/vdpau
 
no-os-release/custom_path32_2/dri
 
no-os-release/custom_path32_2/va
 
no-os-release/custom_path64/dri
 
no-os-release/custom_path64/va
 
no-os-release/usr/lib/dri
 
no-os-release/usr/lib/vdpau
 
steamrt/etc
 
steamrt/overrides/bin
 
steamrt/overrides/lib/x86_64-linux-gnu
 
steamrt/overrides/lib/i386-linux-gnu
 
steamrt/usr/lib
 
steamrt/run/pressure-vessel
 
steamrt-overrides-issues/etc
 
steamrt-overrides-issues/overrides/bin
 
steamrt-overrides-issues/overrides/lib/i386-linux-gnu
 
steamrt-overrides-issues/overrides/lib/x86_64-linux-gnu
 
steamrt-overrides-issues/usr/lib
 
steamrt-unofficial/etc
 
steamrt-unofficial/usr/lib
 
steamrt-unofficial/proc/1
 
ubuntu16/usr/lib/dri
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/dri
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/mesa
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/vdpau
 
'''.split():
 
os.makedirs(name, mode=0o755, exist_ok=True)
 
 
for name in '''
 
debian10/usr/lib/i386-linux-gnu/dri/i965_dri.so
 
debian10/usr/lib/i386-linux-gnu/dri/r300_dri.so
 
debian10/usr/lib/i386-linux-gnu/dri/r600_drv_video.so
 
debian10/usr/lib/i386-linux-gnu/dri/radeonsi_dri.so
 
debian10/usr/lib/i386-linux-gnu/libEGL_mesa.so.0
 
debian10/usr/lib/i386-linux-gnu/libva.so.2
 
debian10/usr/lib/i386-linux-gnu/libvdpau.so.1
 
debian10/usr/lib/i386-linux-gnu/vdpau/libvdpau_r600.so
 
debian10/usr/lib/i386-linux-gnu/vdpau/libvdpau_radeonsi.so.1.0.0
 
debian10/usr/lib/x86_64-linux-gnu/dri/i965_dri.so
 
debian10/usr/lib/x86_64-linux-gnu/dri/r600_dri.so
 
debian10/usr/lib/x86_64-linux-gnu/dri/r600_drv_video.so
 
debian10/usr/lib/x86_64-linux-gnu/dri/radeon_dri.so
 
debian10/usr/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so
 
debian10/usr/lib/x86_64-linux-gnu/libEGL_mesa.so.0
 
debian10/usr/lib/x86_64-linux-gnu/libGL.so.1
 
debian10/usr/lib/x86_64-linux-gnu/libva.so.2
 
debian10/usr/lib/x86_64-linux-gnu/libvdpau.so.1
 
debian10/usr/lib/x86_64-linux-gnu/vdpau/libvdpau_r600.so.1.0.0
 
debian10/usr/lib/x86_64-linux-gnu/vdpau/libvdpau_radeonsi.so.1.0.0
 
debian-unstable/.dockerenv
 
fedora/usr/lib/dri/i965_dri.so
 
fedora/usr/lib/dri/r300_dri.so
 
fedora/usr/lib/dri/r600_drv_video.so
 
fedora/usr/lib/dri/radeonsi_dri.so
 
fedora/usr/lib/libEGL_mesa.so.0
 
fedora/usr/lib/libGL.so.1
 
fedora/usr/lib/libva.so.1
 
fedora/usr/lib/libvdpau.so.1
 
fedora/usr/lib/vdpau/libvdpau_nouveau.so.1
 
fedora/usr/lib/vdpau/libvdpau_r600.so
 
fedora/usr/lib/vdpau/libvdpau_radeonsi.so.1.0.0
 
fedora/usr/lib64/dri/i965_dri.so
 
fedora/usr/lib64/dri/r600_dri.so
 
fedora/usr/lib64/dri/r600_drv_video.so
 
fedora/usr/lib64/dri/radeon_dri.so
 
fedora/usr/lib64/dri/radeonsi_drv_video.so
 
fedora/usr/lib64/libEGL_mesa.so.0
 
fedora/usr/lib64/libva.so.2
 
fedora/usr/lib64/libvdpau.so.1
 
fedora/usr/lib64/vdpau/libvdpau_r300.so
 
fedora/usr/lib64/vdpau/libvdpau_radeonsi.so
 
flatpak-example/.flatpak-info
 
flatpak-example/usr/lib/dri/r300_dri.so
 
flatpak-example/usr/lib/dri/r600_drv_video.so
 
flatpak-example/usr/lib/mock-abi/GL/lib/dri/i965_dri.so
 
flatpak-example/usr/lib/mock-abi/GL/lib/dri/r600_drv_video.so
 
flatpak-example/usr/lib/mock-abi/dri/intel-vaapi-driver/i965_drv_video.so
 
flatpak-example/usr/lib/mock-abi/dri/radeonsi_drv_video.so
 
flatpak-example/usr/lib/mock-abi/libEGL_mesa.so.0
 
flatpak-example/usr/lib/mock-abi/libva.so.2
 
flatpak-example/usr/lib/mock-abi/libvdpau.so.1
 
flatpak-example/usr/lib/mock-abi/vdpau/libvdpau_radeonsi.so.1
 
flatpak-example/run/host/.exists
 
invalid-os-release/run/host/.exists
 
no-os-release/custom_path32/dri/r600_dri.so
 
no-os-release/custom_path32/dri/radeon_dri.so
 
no-os-release/custom_path32/va/r600_drv_video.so
 
no-os-release/custom_path32/va/radeonsi_drv_video.so
 
no-os-release/custom_path32/vdpau/libvdpau_r600.so.1
 
no-os-release/custom_path32/vdpau/libvdpau_radeonsi.so.1
 
no-os-release/custom_path32_2/dri/r300_dri.so
 
no-os-release/custom_path32_2/va/nouveau_drv_video.so
 
no-os-release/custom_path64/dri/i965_dri.so
 
no-os-release/custom_path64/va/radeonsi_drv_video.so
 
no-os-release/usr/lib/dri/i965_dri.so
 
no-os-release/usr/lib/dri/r600_drv_video.so
 
no-os-release/usr/lib/dri/radeonsi_dri.so
 
no-os-release/usr/lib/libGL.so.1
 
no-os-release/usr/lib/libva.so.1
 
no-os-release/usr/lib/libvdpau.so.1
 
no-os-release/usr/lib/vdpau/libvdpau_nouveau.so.1
 
steamrt/overrides/bin/.keep
 
steamrt/overrides/lib/x86_64-linux-gnu/libGLX_custom.so.0
 
steamrt/overrides/lib/x86_64-linux-gnu/libGLX_mesa.so.0
 
steamrt/overrides/lib/i386-linux-gnu/libGLX_nvidia.so.0
 
steamrt/run/pressure-vessel/.exists
 
steamrt-overrides-issues/overrides/bin/.keep
 
steamrt-overrides-issues/overrides/lib/i386-linux-gnu/.keep
 
ubuntu16/usr/lib/dri/radeonsi_dri.so
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/dri/i965_dri.so
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/dri/radeon_dri.so
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/dri/radeonsi_drv_video.so
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/libva.so.1
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/mesa/libGL.so.1
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/vdpau/libvdpau_r600.so.1.0.0
 
ubuntu16/usr/lib/mock-ubuntu-64-bit/vdpau/libvdpau_radeonsi.so.1.0.0
 
'''.split():
 
os.makedirs(os.path.dirname(name), mode=0o755, exist_ok=True)
 
open(name, 'w').close()
 
 
for name, target in {
 
'debian10/usr/lib/i386-linux-gnu/vdpau/libvdpau_radeonsi.so':
 
'libvdpau_radeonsi.so.1.0.0',
 
'debian10/usr/lib/i386-linux-gnu/vdpau/libvdpau_radeonsi.so.1':
 
'libvdpau_radeonsi.so.1.0.0',
 
'debian10/usr/lib/x86_64-linux-gnu/vdpau/libvdpau_r600.so.1':
 
'libvdpau_r600.so.1.0.0',
 
'debian10/usr/lib/x86_64-linux-gnu/vdpau/libvdpau_radeonsi.so':
 
'libvdpau_radeonsi.so.1.0.0',
 
'debian10/usr/lib/x86_64-linux-gnu/vdpau/libvdpau_radeonsi.so.1':
 
'libvdpau_radeonsi.so.1.0.0',
 
'fedora/usr/lib/vdpau/libvdpau_radeonsi.so':
 
'libvdpau_radeonsi.so.1.0.0',
 
'fedora/usr/lib/vdpau/libvdpau_radeonsi.so.1':
 
'libvdpau_radeonsi.so.1.0.0',
 
'fedora/usr/lib/vdpau/libvdpau_radeonsi.so.1.0':
 
'libvdpau_radeonsi.so.1.0.0',
 
'fedora/usr/lib64/vdpau/libvdpau_r300.so.1':
 
'libvdpau_r300.so',
 
'fedora/usr/lib64/vdpau/libvdpau_radeonsi.so.1':
 
'libvdpau_radeonsi.so',
 
'steamrt/etc/os-release':
 
'../usr/lib/os-release',
 
'steamrt/overrides/lib/x86_64-linux-gnu/libgcc_s.so.1':
 
'/run/host/usr/lib/libgcc_s.so.1',
 
'steamrt-overrides-issues/etc/os-release':
 
'../usr/lib/os-release',
 
'steamrt-overrides-issues/overrides/lib/x86_64-linux-gnu/libgcc_s.so.1':
 
'/run/host/usr/lib/libgcc_s.so.1',
 
'steamrt-unofficial/etc/os-release':
 
'../usr/lib/os-release',
 
'ubuntu16/usr/lib/mock-ubuntu-64-bit/vdpau/libvdpau_r600.so.1':
 
'libvdpau_r600.so.1.0.0',
 
'ubuntu16/usr/lib/mock-ubuntu-64-bit/vdpau/libvdpau_radeonsi.so':
 
'libvdpau_radeonsi.so.1.0.0',
 
'ubuntu16/usr/lib/mock-ubuntu-64-bit/vdpau/libvdpau_radeonsi.so.1':
 
'libvdpau_radeonsi.so.1.0.0',
 
}.items():
 
os.makedirs(os.path.dirname(name), mode=0o755, exist_ok=True)
 
try:
 
os.symlink(target, name)
 
except FileExistsError:
 
pass
 
 
with open('debian10/usr/lib/os-release', 'w') as writer:
 
writer.write('''\
 
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
 
NAME="Debian GNU/Linux"
 
VERSION_ID="10"
 
VERSION="10 (buster)"
 
VERSION_CODENAME=buster
 
ID=debian
 
HOME_URL="https://www.debian.org/"
 
SUPPORT_URL="https://www.debian.org/support"
 
BUG_REPORT_URL="https://bugs.debian.org/"
 
''')
 
 
with open('debian10/run/systemd/container', 'w') as writer:
 
writer.write('whatever\n')
 
 
with open('debian-unstable/etc/os-release', 'w') as writer:
 
writer.write('''\
 
PRETTY_NAME="Debian GNU/Linux bullseye/sid"
 
NAME="Debian GNU/Linux"
 
ID=debian
 
HOME_URL="https://www.debian.org/"
 
SUPPORT_URL="https://www.debian.org/support"
 
BUG_REPORT_URL="https://bugs.debian.org/"
 
''')
 
 
with open('fedora/run/systemd/container', 'w') as writer:
 
writer.write('docker\n')
 
 
with open('invalid-os-release/usr/lib/os-release', 'w') as writer:
 
writer.write('''\
 
ID=steamrt
 
PRETTY_NAME="The first name"
 
VERSION_CODENAME
 
VERSION_ID="foo
 
PRETTY_NAME="The second name"
 
NAME="This file does not end with a newline"''')
 
 
for name in (
 
'steamrt/usr/lib/os-release',
 
'steamrt-overrides-issues/usr/lib/os-release',
 
):
 
with open(name, 'w') as writer:
 
writer.write('''\
 
NAME="Steam Runtime"
 
VERSION="1 (scout)"
 
ID=steamrt
 
ID_LIKE=ubuntu
 
PRETTY_NAME="Steam Runtime 1 (scout)"
 
VERSION_ID="1"
 
BUILD_ID="0.20190924.0"
 
VARIANT=Platform
 
VARIANT_ID="com.valvesoftware.steamruntime.platform-amd64_i386-scout"
 
''')
 
 
with open('steamrt-unofficial/usr/lib/os-release', 'w') as writer:
 
writer.write('''\
 
NAME="Steam Runtime"
 
VERSION="1 (scout)"
 
ID=steamrt
 
ID_LIKE=ubuntu
 
PRETTY_NAME="Steam Runtime 1 (scout)"
 
VERSION_ID="1"
 
BUILD_ID="unofficial-0.20190924.0"
 
VARIANT=Platform
 
VARIANT_ID="com.valvesoftware.steamruntime.platform-amd64_i386-scout"
 
''')
 
 
with open('steamrt-unofficial/proc/1/cgroup', 'w') as writer:
 
writer.write('''\
 
11:perf_event:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
10:freezer:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
9:memory:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
8:rdma:/
 
7:devices:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
6:blkio:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
5:net_cls,net_prio:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
4:cpu,cpuacct:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
3:cpuset:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
2:pids:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
1:name=systemd:/docker/9999999999999999999999999999999999999999999999999999999999999999
 
0::/system.slice/docker.service
 
''')
Loading