diff --git a/scripts/gen-license.py b/scripts/gen-license.py index 621dd52ac9..af56025d06 100755 --- a/scripts/gen-license.py +++ b/scripts/gen-license.py @@ -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()