From a226e79c9fe4ee1337b013fea5726fa04878adaa Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Thu, 26 Mar 2020 15:24:01 +0000
Subject: [PATCH] tests: Add a script to generate the mock sysroots

Signed-off-by: Simon McVittie <smcv@collabora.com>
Co-authored-by: Ludovico de Nittis <ludovico.denittis@collabora.com>
---
 tests/generate-sysroots.py | 313 +++++++++++++++++++++++++++++++++++++
 1 file changed, 313 insertions(+)
 create mode 100755 tests/generate-sysroots.py

diff --git a/tests/generate-sysroots.py b/tests/generate-sysroots.py
new file mode 100755
index 000000000..179d6f318
--- /dev/null
+++ b/tests/generate-sysroots.py
@@ -0,0 +1,313 @@
+#!/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
+''')
-- 
GitLab