scripts/gen-license.py: Run black formatter

This commit is contained in:
Matt Borgerson 2025-07-10 13:38:16 -07:00 committed by mborgerson
parent c832e0d0dd
commit 967f35444c
1 changed files with 502 additions and 354 deletions

View File

@ -13,367 +13,509 @@ import os.path
import re
import sys
gplv2 = 'gplv2'
mit = 'mit'
bsd = 'bsd'
bsd_2clause = 'bsd-2clause'
bsd_3clause = 'bsd-3clause'
zlib = 'zlib'
lgplv2_1 = 'lgplv2_1'
apache2 = 'apache2'
unlicense = 'unlicense'
multi = 'multi'
gplv2 = "gplv2"
mit = "mit"
bsd = "bsd"
bsd_2clause = "bsd-2clause"
bsd_3clause = "bsd-3clause"
zlib = "zlib"
lgplv2_1 = "lgplv2_1"
apache2 = "apache2"
unlicense = "unlicense"
multi = "multi"
windows = 'windows'
macos = 'darwin'
linux = 'linux'
all_platforms = { windows, macos, linux }
windows = "windows"
macos = "darwin"
linux = "linux"
all_platforms = {windows, macos, linux}
current_platform = linux
versions = {}
def banner(s):
space = 1
width = 80
mid_len = 2*space+len(s)
left_dashes = (width-mid_len)//2
right_dashes = width-mid_len-left_dashes
return '-'*left_dashes + ' ' + s + ' ' + '-'*right_dashes
space = 1
width = 80
mid_len = 2 * space + len(s)
left_dashes = (width - mid_len) // 2
right_dashes = width - mid_len - left_dashes
return "-" * left_dashes + " " + s + " " + "-" * right_dashes
class Lib:
def __init__(self, name, url,
license, license_url=None, license_path=None, license_lines=None,
submodule=None,
version=None,
ships_static=set(), ships_dynamic=set(),
platform=all_platforms, pkgconfig=None,
pkg_win=None, pkg_mac=None, pkg_ubuntu=None):
self.name = name
self.url = url
self.license = license
self.license_url = license_url
self.license_path = license_path or os.path.join('licenses', self.name + '.license.txt')
self.license_lines = license_lines
self.submodule = submodule
self._version = version
self.ships_static = ships_static
self.ships_dynamic = ships_dynamic
self.platform = platform
self.pkgconfig = pkgconfig
self.pkg_win = pkg_win
self.pkg_mac = pkg_mac
self.pkg_ubuntu = pkg_ubuntu
def __init__(
self,
name,
url,
license,
license_url=None,
license_path=None,
license_lines=None,
submodule=None,
version=None,
ships_static=set(),
ships_dynamic=set(),
platform=all_platforms,
pkgconfig=None,
pkg_win=None,
pkg_mac=None,
pkg_ubuntu=None,
):
self.name = name
self.url = url
self.license = license
self.license_url = license_url
self.license_path = license_path or os.path.join(
"licenses", self.name + ".license.txt"
)
self.license_lines = license_lines
self.submodule = submodule
self._version = version
self.ships_static = ships_static
self.ships_dynamic = ships_dynamic
self.platform = platform
self.pkgconfig = pkgconfig
self.pkg_win = pkg_win
self.pkg_mac = pkg_mac
self.pkg_ubuntu = pkg_ubuntu
@property
def version(self):
if self._version:
return self._version
@property
def version(self):
if self._version:
return self._version
if self.submodule:
self._version = self.submodule.head
return self._version
if self.submodule:
self._version = self.submodule.head
return self._version
if self.pkgconfig:
self._version = self.pkgconfig.modversion
return self._version
if self.pkgconfig:
self._version = self.pkgconfig.modversion
return self._version
if current_platform == windows and self.pkg_win:
self._version = subprocess.run(r"grep -e '_VERSION\s*:=' /opt/mxe/src/" + self.pkg_win + ".mk | cut -d'=' -f2",
capture_output=True, shell=True,
check=True).stdout.decode('utf-8').strip()
return self._version
elif current_platform == macos and self.pkg_mac:
self._version = versions[self.pkg_mac]
return self._version
elif current_platform == linux and self.pkg_ubuntu:
self._version = subprocess.run(r"dpkg -s " + self.pkg_ubuntu + " | grep Version | cut -d: -f2",
capture_output=True, shell=True,
check=True).stdout.decode('utf-8').strip()
return self._version
if current_platform == windows and self.pkg_win:
self._version = (
subprocess.run(
r"grep -e '_VERSION\s*:=' /opt/mxe/src/"
+ self.pkg_win
+ ".mk | cut -d'=' -f2",
capture_output=True,
shell=True,
check=True,
)
.stdout.decode("utf-8")
.strip()
)
return self._version
elif current_platform == macos and self.pkg_mac:
self._version = versions[self.pkg_mac]
return self._version
elif current_platform == linux and self.pkg_ubuntu:
self._version = (
subprocess.run(
r"dpkg -s " + self.pkg_ubuntu + " | grep Version | cut -d: -f2",
capture_output=True,
shell=True,
check=True,
)
.stdout.decode("utf-8")
.strip()
)
return self._version
assert False, 'Failed to get version info for ' + self.name
assert False, "Failed to get version info for " + self.name
@property
def license_text(self):
if os.path.exists(self.license_path):
with open(self.license_path, 'r', encoding='utf-8') as f:
return f.read()
import requests
d = requests.get(self.license_url).content.decode('utf-8')
if self.license_lines:
start, end = self.license_lines
d = '\n'.join(d.splitlines()[start-1:end+1])
with open(fname, 'w') as f:
f.write(d)
return d
@property
def license_text(self):
if os.path.exists(self.license_path):
with open(self.license_path, "r", encoding="utf-8") as f:
return f.read()
import requests
@property
def is_active(self):
return current_platform in self.platform
d = requests.get(self.license_url).content.decode("utf-8")
if self.license_lines:
start, end = self.license_lines
d = "\n".join(d.splitlines()[start - 1 : end + 1])
with open(fname, "w") as f:
f.write(d)
return d
@property
def does_ship_static(self):
return current_platform in self.ships_static
@property
def is_active(self):
return current_platform in self.platform
@property
def does_ship_dynamic(self):
return current_platform in self.ships_dynamic
@property
def does_ship_static(self):
return current_platform in self.ships_static
@property
def does_ship(self):
return self.is_active and (self.does_ship_static or self.does_ship_dynamic)
@property
def does_ship_dynamic(self):
return current_platform in self.ships_dynamic
@property
def does_ship(self):
return self.is_active and (self.does_ship_static or self.does_ship_dynamic)
class PkgConfig:
def __init__(self, name):
self.name = name
def __init__(self, name):
self.name = name
@property
def modversion(self):
pkg_config = {
linux: "pkg-config",
windows: "x86_64-w64-mingw32.static-pkg-config",
macos: "pkg-config",
}[current_platform]
ver = subprocess.run(
[pkg_config, "--modversion", self.name], capture_output=True, check=True
)
return ver.stdout.decode("utf-8").strip()
@property
def modversion(self):
pkg_config = {
linux: 'pkg-config',
windows: 'x86_64-w64-mingw32.static-pkg-config',
macos: 'pkg-config',
}[current_platform]
ver = subprocess.run([pkg_config, '--modversion', self.name],
capture_output=True, check=True)
return ver.stdout.decode('utf-8').strip()
class Submodule:
def __init__(self, path):
self.path = path
def __init__(self, path):
self.path = path
@property
def head(self):
if self.path.endswith(".wrap"):
with open(self.path, "r", encoding="utf-8") as file:
contents = file.read()
revision = re.search(r"^revision\s*=\s*(.*)", contents, re.MULTILINE)
if revision:
return revision.group(1)
wrapdb_version = re.search(r"^wrapdb_version\s*=\s*([^-]*)", contents, re.MULTILINE)
if wrapdb_version:
return wrapdb_version.group(1)
assert False, "revision not found for subproject"
@property
def head(self):
if self.path.endswith(".wrap"):
with open(self.path, "r", encoding="utf-8") as file:
contents = file.read()
revision = re.search(r"^revision\s*=\s*(.*)", contents, re.MULTILINE)
if revision:
return revision.group(1)
wrapdb_version = re.search(
r"^wrapdb_version\s*=\s*([^-]*)", contents, re.MULTILINE
)
if wrapdb_version:
return wrapdb_version.group(1)
assert False, "revision not found for subproject"
try:
return subprocess.run(['git', 'rev-parse', 'HEAD'],
cwd=self.path, capture_output=True,
check=True).stdout.decode('utf-8').strip()
except subprocess.CalledProcessError:
pass
try:
return (
subprocess.run(
["git", "rev-parse", "HEAD"],
cwd=self.path,
capture_output=True,
check=True,
)
.stdout.decode("utf-8")
.strip()
)
except subprocess.CalledProcessError:
pass
commit_file_path = os.path.join(self.path, 'HEAD')
if os.path.exists(commit_file_path):
return open(commit_file_path).read().strip()
commit_file_path = os.path.join(self.path, "HEAD")
if os.path.exists(commit_file_path):
return open(commit_file_path).read().strip()
raise Exception("Failed to determine submodule revision")
return ""
raise Exception('Failed to determine submodule revision')
return ''
LIBS = [
Lib('qemu', 'https://www.qemu.org/',
gplv2, 'https://raw.githubusercontent.com/xemu-project/xemu/master/LICENSE',
version='6.0.0'
),
#
# Built from source with xemu
#
Lib('slirp', 'https://gitlab.freedesktop.org/slirp',
bsd_3clause, 'https://gitlab.freedesktop.org/slirp/libslirp/-/raw/master/COPYRIGHT', license_lines=(16,39),
ships_static=all_platforms,
pkgconfig=PkgConfig('slirp'), pkg_win='libslirp', pkg_mac='libslirp', pkg_ubuntu='libslirp-dev'
),
Lib('imgui', 'https://github.com/ocornut/imgui',
mit, 'https://raw.githubusercontent.com/ocornut/imgui/master/LICENSE.txt',
ships_static=all_platforms,
submodule=Submodule('subprojects/imgui.wrap')
),
Lib('implot', 'https://github.com/epezent/implot',
mit, 'https://raw.githubusercontent.com/epezent/implot/master/LICENSE',
ships_static=all_platforms,
submodule=Submodule('subprojects/implot.wrap')
),
Lib('noc', 'https://github.com/guillaumechereau/noc/blob/master/noc_file_dialog.h',
mit, 'https://raw.githubusercontent.com/xemu-project/xemu/master/ui/noc_file_dialog.h', license_lines=(1,22),
ships_static=all_platforms,
version='78b2e7b22506429dd1755ffff197c7da11507fd9'
),
Lib('stb_image', 'https://github.com/nothings/stb',
mit, 'https://raw.githubusercontent.com/nothings/stb/master/LICENSE', license_lines=(4,19),
ships_static=all_platforms,
version='2.25'
),
Lib('tomlplusplus', 'https://github.com/marzer/tomlplusplus',
mit, 'https://raw.githubusercontent.com/marzer/tomlplusplus/master/LICENSE',
ships_static=all_platforms,
submodule=Submodule('subprojects/tomlplusplus.wrap')
),
Lib('xxHash', 'https://github.com/Cyan4973/xxHash.git',
bsd, 'https://raw.githubusercontent.com/Cyan4973/xxHash/dev/LICENSE', license_lines=(1,26),
ships_static=all_platforms,
submodule=Submodule('subprojects/xxhash.wrap')
),
Lib('fpng', 'https://github.com/richgel999/fpng',
unlicense, 'https://github.com/richgel999/fpng/blob/main/README.md',
ships_static=all_platforms,
version='6926f5a0a78f22d42b074a0ab8032e07736babd4'
),
Lib('nv2a_vsh_cpu', 'https://github.com/xemu-project/nv2a_vsh_cpu',
unlicense, 'https://raw.githubusercontent.com/xemu-project/nv2a_vsh_cpu/main/LICENSE',
ships_static=all_platforms,
submodule=Submodule('subprojects/nv2a_vsh_cpu.wrap')
),
Lib('volk', 'https://github.com/zeux/volk',
mit, 'https://raw.githubusercontent.com/zeux/volk/master/LICENSE.md',
ships_static=all_platforms,
submodule=Submodule('subprojects/volk.wrap')
),
Lib('VulkanMemoryAllocator', 'https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator',
mit, 'https://raw.githubusercontent.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/master/LICENSE.txt',
ships_static=all_platforms,
submodule=Submodule('subprojects/VulkanMemoryAllocator.wrap')
),
Lib('SPIRV-Reflect', 'https://github.com/KhronosGroup/SPIRV-Reflect',
apache2, 'https://raw.githubusercontent.com/KhronosGroup/SPIRV-Reflect/main/LICENSE',
ships_static=all_platforms,
submodule=Submodule('subprojects/SPIRV-Reflect.wrap')
),
Lib('glslang', 'https://github.com/KhronosGroup/glslang',
bsd_3clause, 'https://raw.githubusercontent.com/KhronosGroup/glslang/main/LICENSE.txt',
ships_static=all_platforms,
submodule=Submodule('subprojects/glslang.wrap')
),
#
# Data files included with xemu
#
Lib('roboto', 'https://github.com/googlefonts/roboto',
apache2, 'https://raw.githubusercontent.com/googlefonts/roboto/main/LICENSE',
ships_static=all_platforms,
version='2.138'
),
Lib('fontawesome', 'https://fontawesome.com',
multi, '',
ships_static=all_platforms,
version='6.1.1'
),
#
# Libraries either linked statically, dynamically linked & shipped, or dynamically linked with system-installed libraries only
#
Lib('sdl2', 'https://www.libsdl.org/',
zlib, 'https://raw.githubusercontent.com/libsdl-org/SDL/main/LICENSE.txt',
ships_static={windows}, ships_dynamic={macos},
pkgconfig=PkgConfig('sdl2'), pkg_win='sdl2', pkg_mac='sdl2', pkg_ubuntu='libsdl2-dev'
),
Lib('glib-2.0', 'https://gitlab.gnome.org/GNOME/glib',
lgplv2_1, 'https://gitlab.gnome.org/GNOME/glib/-/raw/master/COPYING',
ships_static={windows}, ships_dynamic={macos},
pkgconfig=PkgConfig('glib-2.0'), pkg_win='glib', pkg_mac='glib', pkg_ubuntu='libglib2.0-dev'
),
# glib dep
Lib('pcre', 'http://pcre.org/',
bsd, 'http://www.pcre.org/original/license.txt',
pkgconfig=PkgConfig('libpcre'), pkg_ubuntu='libpcre3-dev'
),
Lib('pcre2', 'http://pcre.org/',
bsd, 'https://www.pcre.org/licence.txt',
ships_static={windows}, ships_dynamic={macos},
pkgconfig=PkgConfig('libpcre2-8'), pkg_win='pcre2', pkg_mac='pcre2', pkg_ubuntu='libpcre2-dev'
),
# glib dep
Lib('gettext', 'https://www.gnu.org/software/gettext/',
lgplv2_1, 'https://git.savannah.gnu.org/gitweb/?p=gettext.git;a=blob_plain;f=gettext-runtime/intl/COPYING.LIB;hb=HEAD',
ships_static={windows}, ships_dynamic={macos},
pkg_win='gettext', pkg_mac='gettext-runtime',
),
# glib dep
Lib('iconv', 'https://www.gnu.org/software/libiconv/',
lgplv2_1, 'https://git.savannah.gnu.org/gitweb/?p=libiconv.git;a=blob_plain;f=COPYING.LIB;hb=HEAD',
ships_static={windows}, ships_dynamic={macos},
pkg_win='libiconv', pkg_mac='libiconv'
),
Lib('libepoxy', 'https://github.com/anholt/libepoxy',
mit, 'https://raw.githubusercontent.com/anholt/libepoxy/master/COPYING',
ships_static={windows}, ships_dynamic={macos},
pkgconfig=PkgConfig('epoxy'), pkg_win='libepoxy', pkg_mac='libepoxy', pkg_ubuntu='libepoxy-dev'
),
Lib('pixman', 'http://www.pixman.org/',
mit, 'https://cgit.freedesktop.org/pixman/plain/COPYING',
ships_static={windows}, ships_dynamic={macos},
pkgconfig=PkgConfig('pixman-1'),
pkg_win='pixman',
pkg_mac='pixman',
pkg_ubuntu='libpixman-1-dev'
),
Lib('libsamplerate', 'https://github.com/libsndfile/libsamplerate',
bsd_2clause, 'https://raw.githubusercontent.com/libsndfile/libsamplerate/master/COPYING',
ships_static={windows}, ships_dynamic={macos},
pkgconfig=PkgConfig('samplerate'),
pkg_win='libsamplerate',
pkg_mac='libsamplerate',
),
Lib('zlib', 'https://zlib.net/',
zlib, 'https://raw.githubusercontent.com/madler/zlib/master/README', license_lines=(87,106),
ships_static={windows}, ships_dynamic={macos},
pkgconfig=PkgConfig('zlib'), pkg_win='zlib', pkg_mac='zlib', pkg_ubuntu='zlib1g-dev'
),
Lib('libmingw32', 'http://mingw-w64.org/',
multi, 'https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/COPYING.MinGW-w64-runtime/COPYING.MinGW-w64-runtime.txt?format=raw',
ships_static={windows}, platform={windows},
pkg_win='mingw-w64',
),
Lib('gtk', 'https://www.gtk.org/',
lgplv2_1, 'https://gitlab.gnome.org/GNOME/gtk/-/raw/master/COPYING',
platform={linux},
pkgconfig=PkgConfig('gtk+-3.0'), pkg_ubuntu='libgtk-3-dev'
),
Lib('miniz', 'https://github.com/richgel999/miniz',
lgplv2_1, 'https://raw.githubusercontent.com/richgel999/miniz/master/LICENSE',
ships_static={windows}, platform={windows},
version='2.1.0'
),
Lib('libcurl', 'https://curl.se/',
mit, 'https://raw.githubusercontent.com/curl/curl/refs/heads/master/COPYING',
ships_static={windows}, platform={windows},
submodule=Submodule('subprojects/curl.wrap')
),
Lib(
"qemu",
"https://www.qemu.org/",
gplv2,
"https://raw.githubusercontent.com/xemu-project/xemu/master/LICENSE",
version="6.0.0",
),
#
# Built from source with xemu
#
Lib(
"slirp",
"https://gitlab.freedesktop.org/slirp",
bsd_3clause,
"https://gitlab.freedesktop.org/slirp/libslirp/-/raw/master/COPYRIGHT",
license_lines=(16, 39),
ships_static=all_platforms,
pkgconfig=PkgConfig("slirp"),
pkg_win="libslirp",
pkg_mac="libslirp",
pkg_ubuntu="libslirp-dev",
),
Lib(
"imgui",
"https://github.com/ocornut/imgui",
mit,
"https://raw.githubusercontent.com/ocornut/imgui/master/LICENSE.txt",
ships_static=all_platforms,
submodule=Submodule("subprojects/imgui.wrap"),
),
Lib(
"implot",
"https://github.com/epezent/implot",
mit,
"https://raw.githubusercontent.com/epezent/implot/master/LICENSE",
ships_static=all_platforms,
submodule=Submodule("subprojects/implot.wrap"),
),
Lib(
"noc",
"https://github.com/guillaumechereau/noc/blob/master/noc_file_dialog.h",
mit,
"https://raw.githubusercontent.com/xemu-project/xemu/master/ui/noc_file_dialog.h",
license_lines=(1, 22),
ships_static=all_platforms,
version="78b2e7b22506429dd1755ffff197c7da11507fd9",
),
Lib(
"stb_image",
"https://github.com/nothings/stb",
mit,
"https://raw.githubusercontent.com/nothings/stb/master/LICENSE",
license_lines=(4, 19),
ships_static=all_platforms,
version="2.25",
),
Lib(
"tomlplusplus",
"https://github.com/marzer/tomlplusplus",
mit,
"https://raw.githubusercontent.com/marzer/tomlplusplus/master/LICENSE",
ships_static=all_platforms,
submodule=Submodule("subprojects/tomlplusplus.wrap"),
),
Lib(
"xxHash",
"https://github.com/Cyan4973/xxHash.git",
bsd,
"https://raw.githubusercontent.com/Cyan4973/xxHash/dev/LICENSE",
license_lines=(1, 26),
ships_static=all_platforms,
submodule=Submodule("subprojects/xxhash.wrap"),
),
Lib(
"fpng",
"https://github.com/richgel999/fpng",
unlicense,
"https://github.com/richgel999/fpng/blob/main/README.md",
ships_static=all_platforms,
version="6926f5a0a78f22d42b074a0ab8032e07736babd4",
),
Lib(
"nv2a_vsh_cpu",
"https://github.com/xemu-project/nv2a_vsh_cpu",
unlicense,
"https://raw.githubusercontent.com/xemu-project/nv2a_vsh_cpu/main/LICENSE",
ships_static=all_platforms,
submodule=Submodule("subprojects/nv2a_vsh_cpu.wrap"),
),
Lib(
"volk",
"https://github.com/zeux/volk",
mit,
"https://raw.githubusercontent.com/zeux/volk/master/LICENSE.md",
ships_static=all_platforms,
submodule=Submodule("subprojects/volk.wrap"),
),
Lib(
"VulkanMemoryAllocator",
"https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator",
mit,
"https://raw.githubusercontent.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/master/LICENSE.txt",
ships_static=all_platforms,
submodule=Submodule("subprojects/VulkanMemoryAllocator.wrap"),
),
Lib(
"SPIRV-Reflect",
"https://github.com/KhronosGroup/SPIRV-Reflect",
apache2,
"https://raw.githubusercontent.com/KhronosGroup/SPIRV-Reflect/main/LICENSE",
ships_static=all_platforms,
submodule=Submodule("subprojects/SPIRV-Reflect.wrap"),
),
Lib(
"glslang",
"https://github.com/KhronosGroup/glslang",
bsd_3clause,
"https://raw.githubusercontent.com/KhronosGroup/glslang/main/LICENSE.txt",
ships_static=all_platforms,
submodule=Submodule("subprojects/glslang.wrap"),
),
#
# Data files included with xemu
#
Lib(
"roboto",
"https://github.com/googlefonts/roboto",
apache2,
"https://raw.githubusercontent.com/googlefonts/roboto/main/LICENSE",
ships_static=all_platforms,
version="2.138",
),
Lib(
"fontawesome",
"https://fontawesome.com",
multi,
"",
ships_static=all_platforms,
version="6.1.1",
),
#
# Libraries either linked statically, dynamically linked & shipped, or dynamically linked with system-installed libraries only
#
Lib(
"sdl2",
"https://www.libsdl.org/",
zlib,
"https://raw.githubusercontent.com/libsdl-org/SDL/main/LICENSE.txt",
ships_static={windows},
ships_dynamic={macos},
pkgconfig=PkgConfig("sdl2"),
pkg_win="sdl2",
pkg_mac="sdl2",
pkg_ubuntu="libsdl2-dev",
),
Lib(
"glib-2.0",
"https://gitlab.gnome.org/GNOME/glib",
lgplv2_1,
"https://gitlab.gnome.org/GNOME/glib/-/raw/master/COPYING",
ships_static={windows},
ships_dynamic={macos},
pkgconfig=PkgConfig("glib-2.0"),
pkg_win="glib",
pkg_mac="glib",
pkg_ubuntu="libglib2.0-dev",
),
# glib dep
Lib(
"pcre",
"http://pcre.org/",
bsd,
"http://www.pcre.org/original/license.txt",
pkgconfig=PkgConfig("libpcre"),
pkg_ubuntu="libpcre3-dev",
),
Lib(
"pcre2",
"http://pcre.org/",
bsd,
"https://www.pcre.org/licence.txt",
ships_static={windows},
ships_dynamic={macos},
pkgconfig=PkgConfig("libpcre2-8"),
pkg_win="pcre2",
pkg_mac="pcre2",
pkg_ubuntu="libpcre2-dev",
),
# glib dep
Lib(
"gettext",
"https://www.gnu.org/software/gettext/",
lgplv2_1,
"https://git.savannah.gnu.org/gitweb/?p=gettext.git;a=blob_plain;f=gettext-runtime/intl/COPYING.LIB;hb=HEAD",
ships_static={windows},
ships_dynamic={macos},
pkg_win="gettext",
pkg_mac="gettext-runtime",
),
# glib dep
Lib(
"iconv",
"https://www.gnu.org/software/libiconv/",
lgplv2_1,
"https://git.savannah.gnu.org/gitweb/?p=libiconv.git;a=blob_plain;f=COPYING.LIB;hb=HEAD",
ships_static={windows},
ships_dynamic={macos},
pkg_win="libiconv",
pkg_mac="libiconv",
),
Lib(
"libepoxy",
"https://github.com/anholt/libepoxy",
mit,
"https://raw.githubusercontent.com/anholt/libepoxy/master/COPYING",
ships_static={windows},
ships_dynamic={macos},
pkgconfig=PkgConfig("epoxy"),
pkg_win="libepoxy",
pkg_mac="libepoxy",
pkg_ubuntu="libepoxy-dev",
),
Lib(
"pixman",
"http://www.pixman.org/",
mit,
"https://cgit.freedesktop.org/pixman/plain/COPYING",
ships_static={windows},
ships_dynamic={macos},
pkgconfig=PkgConfig("pixman-1"),
pkg_win="pixman",
pkg_mac="pixman",
pkg_ubuntu="libpixman-1-dev",
),
Lib(
"libsamplerate",
"https://github.com/libsndfile/libsamplerate",
bsd_2clause,
"https://raw.githubusercontent.com/libsndfile/libsamplerate/master/COPYING",
ships_static={windows},
ships_dynamic={macos},
pkgconfig=PkgConfig("samplerate"),
pkg_win="libsamplerate",
pkg_mac="libsamplerate",
),
Lib(
"zlib",
"https://zlib.net/",
zlib,
"https://raw.githubusercontent.com/madler/zlib/master/README",
license_lines=(87, 106),
ships_static={windows},
ships_dynamic={macos},
pkgconfig=PkgConfig("zlib"),
pkg_win="zlib",
pkg_mac="zlib",
pkg_ubuntu="zlib1g-dev",
),
Lib(
"libmingw32",
"http://mingw-w64.org/",
multi,
"https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/COPYING.MinGW-w64-runtime/COPYING.MinGW-w64-runtime.txt?format=raw",
ships_static={windows},
platform={windows},
pkg_win="mingw-w64",
),
Lib(
"gtk",
"https://www.gtk.org/",
lgplv2_1,
"https://gitlab.gnome.org/GNOME/gtk/-/raw/master/COPYING",
platform={linux},
pkgconfig=PkgConfig("gtk+-3.0"),
pkg_ubuntu="libgtk-3-dev",
),
Lib(
"miniz",
"https://github.com/richgel999/miniz",
lgplv2_1,
"https://raw.githubusercontent.com/richgel999/miniz/master/LICENSE",
ships_static={windows},
platform={windows},
version="2.1.0",
),
Lib(
"libcurl",
"https://curl.se/",
mit,
"https://raw.githubusercontent.com/curl/curl/refs/heads/master/COPYING",
ships_static={windows},
platform={windows},
submodule=Submodule("subprojects/curl.wrap"),
),
]
def gen_license():
print(f'''\
print(
f"""\
xemu is free and open source software. This binary of xemu has been made
available to you under the terms of the GNU General Public License, version 2.
@ -390,36 +532,42 @@ The source code used to build this version of xemu is available at:
xemu depends on several great packages/libraries which are also free and open
source. The respective licenses of these packages are provided below.
''')
for lib in LIBS:
if lib.does_ship:
print(banner(lib.name))
print('')
print('Project URL: ' + lib.url)
print('Version Included: ' + lib.version)
print('Project License:')
"""
)
for lib in LIBS:
if lib.does_ship:
print(banner(lib.name))
print("")
print("Project URL: " + lib.url)
print("Version Included: " + lib.version)
print("Project License:")
print("")
print("\n".join([(" | " + l) for l in lib.license_text.splitlines()]))
print("")
print('')
print('\n'.join([(' | ' + l) for l in lib.license_text.splitlines()]))
print('')
def main():
import argparse
ap = argparse.ArgumentParser()
ap.add_argument('--platform', default='')
ap.add_argument('--version-file', default='')
args = ap.parse_args()
import argparse
if args.platform == '':
args.platform = sys.platform.lower()
global current_platform
current_platform = args.platform
if args.version_file != '':
with open(args.version_file, 'r') as f:
global versions
versions = {pkg: ver
for pkg, ver in map(lambda l: l.strip().split('='), f.readlines())}
gen_license()
ap = argparse.ArgumentParser()
ap.add_argument("--platform", default="")
ap.add_argument("--version-file", default="")
args = ap.parse_args()
if __name__ == '__main__':
main()
if args.platform == "":
args.platform = sys.platform.lower()
global current_platform
current_platform = args.platform
if args.version_file != "":
with open(args.version_file, "r") as f:
global versions
versions = {
pkg: ver
for pkg, ver in map(lambda l: l.strip().split("="), f.readlines())
}
gen_license()
if __name__ == "__main__":
main()