diff --git a/lib/__init__.py b/lib/__init__.py index 473a0f4..57868f8 100644 --- a/lib/__init__.py +++ b/lib/__init__.py @@ -0,0 +1 @@ +from . import arch, atombuild, make, packie, pkgcomposer, sources, managed_source diff --git a/lib/atombuild.py b/lib/atombuild.py index fa40fd8..db586ed 100644 --- a/lib/atombuild.py +++ b/lib/atombuild.py @@ -92,7 +92,7 @@ def prepare_build_env(root: str, extreq: list[str] = []): def enter_build_env(root: str, cmd: list[str], chdir: str = "/"): - reserve_env = ["https_proxy", "http_proxy", "all_proxy"] + reserve_env = ["https_proxy", "http_proxy", "all_proxy", "SEMIOS_SOURCE_REPO"] reserve_env_args = [] for i in reserve_env: if os.environ.get(i): diff --git a/lib/make.py b/lib/make.py index e794772..34f0189 100644 --- a/lib/make.py +++ b/lib/make.py @@ -4,7 +4,7 @@ import os from lib import arch -from . import pkgcomposer, sources +from . import pkgcomposer, sources, managed_source _key_global = "@global" _key_version = "version" @@ -18,6 +18,9 @@ _key_recommendations = "recommendations" _key_provides = "provides" _key_configure = "configure" +_managed_source_url = None +_managed_source_postprocess = "" + _current_pkgname: str = _key_global _pkginfo: dict[str, dict[str, typing.Any]] = { _key_global: { @@ -32,7 +35,7 @@ _pkginfo: dict[str, dict[str, typing.Any]] = { _supported_arch: typing.Callable[[str], bool] = lambda x: True _on_build: typing.Callable[[], None] | None = None -_in_atombuild = False +_dry_run = False _builddep: list[str] = [] _blocked_hooks: list[str] = [] @@ -155,14 +158,22 @@ def block_hook(hook: str): def source_url(url: str): - if not _in_atombuild: + if not _dry_run: sources.source_url(url) def source_git(url: str, branch: str | None = None): - if not _in_atombuild: + if not _dry_run: sources.source_git(url, branch) +def source_managed(s: str, postprocess: str = ""): + global _managed_source_url, _managed_source_postprocess + _managed_source_url = s + _managed_source_postprocess = postprocess + if not _dry_run: + sources.source_url(managed_source.get_repo_url(s)) + + def in_atomic(): return os.environ.get("SEMIOS_PKGBUILD_IN_ATOMIC", "0") == "1" diff --git a/lib/managed_source.py b/lib/managed_source.py new file mode 100644 index 0000000..b6fa7d0 --- /dev/null +++ b/lib/managed_source.py @@ -0,0 +1,77 @@ +from urllib.parse import urlparse +import os +import subprocess +from . import sources +import glob + + +DEFAULT_REPO="https://mirror2.semilabs.org/semios/srcpkgs" + + +def postprocess_rust(): + subprocess.run(["cargo", "vendor"], check=True) + os.makedirs(".cargo", exist_ok=True) + with open(".cargo/config.toml", "a+") as fd: + fd.write( + "[source.crates-io]\nreplace-with = 'vendored-sources'\n[source.vendored-sources]\ndirectory = 'vendor'\n", + ) + +def postprocess_autotools(): + subprocess.run(["sh", "autogen.sh"], check=True) + subprocess.run(["./configure"], check=False) + subprocess.run(["make", "dist"], check=True) + tarballs = glob.glob("*.tar.gz") + if len(tarballs) != 1: + raise RuntimeError("No dist tarballs found.") + subprocess.run(["tar", "xf", tarballs[0]], check=True) + os.chdir(tarballs[0].replace(".tar.gz", "")) + + +def get_origin_url(s): + url = urlparse(s) + if url.scheme == "github": + return f"https://github.com/{url.hostname}{url.path}/archive/refs/tags/{url.fragment}.tar.gz" + elif url.scheme == "gitea": + return f"https://{url.hostname}{url.path}/archive/{url.fragment}.tar.gz" + else: + raise RuntimeError(f"Unsupported scheme \"{url.scheme}\"") + +def get_updates(s): + url = urlparse(s) + current_version = url.fragment + +def get_repo_filename(s): + url = urlparse(s) + if url.scheme == "github": + ghname = f"{url.hostname}-{url.path.replace('/', '')}" + return f"github-{ghname}-{url.fragment}.tar.zst" + elif url.scheme == "gitea": + gitea_name = url.path.replace('/', '') + gitea_host = url.hostname.split('.')[-2] + return f"{gitea_host}-{gitea_name}-{url.fragment}.tar.zst" + else: + raise RuntimeError(f"Unsupported scheme \"{url.scheme}\"") + +def get_repo_url(s): + url = urlparse(s) + repo_url = os.environ.get("SEMIOS_SOURCE_REPO", DEFAULT_REPO) + return f"{repo_url}/{get_repo_filename(s)}" + +def create_srcpkg(s, postprocess="") -> str: + origin_url = get_origin_url(s) + origin_dir = sources.download_decompress(origin_url) + os.chdir(origin_dir) + for program in postprocess.split(','): + program = program.strip() + if program == "": + continue + elif program == "rust": + postprocess_rust() + elif program == "autotools": + postprocess_autotools() + else: + raise RuntimeError(f"Unknown postprocessor \"{program}\"") + subprocess.run(["tar", "cpf", "../srcpkg.tar", "--numeric-owner", "."], check=True) + os.chdir("../") + subprocess.run(["zstd", "-q", "-f", "-o", get_repo_filename(s), "srcpkg.tar"], check=True) + return os.getcwd() + "/" + get_repo_filename(s) diff --git a/lib/sources.py b/lib/sources.py index b1d85bc..72aa870 100644 --- a/lib/sources.py +++ b/lib/sources.py @@ -52,14 +52,7 @@ def zip_common_root(zip_file: zipfile.ZipFile) -> str | None: return root -def sources_dir_name() -> str: - with open("./target/sources.tag") as file: - return file.read() - - -def source_url(url: str): - if os.path.exists("./target/sources.tag"): - return +def download_decompress(url: str) -> str: download_path = f"./target/{filename(url)}" download(url, download_path) @@ -83,6 +76,18 @@ def source_url(url: str): with tarfile.open(download_path, "r") as tar: tar.extractall(extract_dir) + return sources_dir + + +def sources_dir_name() -> str: + with open("./target/sources.tag") as file: + return file.read() + + +def source_url(url: str): + if os.path.exists("./target/sources.tag"): + return + sources_dir = download_decompress(url) with open("./target/sources.tag", "wt+") as file: file.write(sources_dir) diff --git a/packages/SPIRV-Headers/pkgbuild.py b/packages/SPIRV-Headers/pkgbuild.py index f409abf..20bff47 100644 --- a/packages/SPIRV-Headers/pkgbuild.py +++ b/packages/SPIRV-Headers/pkgbuild.py @@ -1,27 +1,27 @@ from lib.make import * from lib import cpp - - + + version("1.4.357.0") description("SPIR-V headers") maintainer("sisungo <[email protected]>") -source_url("https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/vulkan-sdk-1.4.357.0.tar.gz") +source_managed("github://KhronosGroup/SPIRV-Headers#vulkan-sdk-1.4.357.0") builddep("shortcut/cmake") builddep("shortcut/c") - - + + def build(): cpp.cmake([f"-DCMAKE_INSTALL_PREFIX={get_prefix('spirv-headers')}"]) cpp.ninja() cpp.ninja_install() on_build(build) - + def pack(composer): composer.add_dir("include", "include") composer.add_dir("share", "lib") - + package("spirv-headers") on_pack(pack) diff --git a/packages/SPIRV-LLVM-Translator/pkgbuild.py b/packages/SPIRV-LLVM-Translator/pkgbuild.py index ef46a36..d52e931 100644 --- a/packages/SPIRV-LLVM-Translator/pkgbuild.py +++ b/packages/SPIRV-LLVM-Translator/pkgbuild.py @@ -5,7 +5,7 @@ from lib import cpp, packie version("22.1.5") description("A tool and a library for bi-directional translation between SPIR-V and LLVM IR") maintainer("sisungo ") -source_url("https://github.com/KhronosGroup/SPIRV-LLVM-Translator/archive/refs/tags/v22.1.5.tar.gz") +source_managed("github://KhronosGroup/SPIRV-LLVM-Translator#v22.1.5") builddep("shortcut/cmake") builddep("shortcut/c++") diff --git a/packages/SPIRV-Tools/pkgbuild.py b/packages/SPIRV-Tools/pkgbuild.py index 98bea5a..8285c83 100644 --- a/packages/SPIRV-Tools/pkgbuild.py +++ b/packages/SPIRV-Tools/pkgbuild.py @@ -10,7 +10,7 @@ sdk_version = "1.4.357.0" version(sdk_version) description("an API and commands for processing SPIR-V modules") maintainer("sisungo ") -source_url("https://github.com/KhronosGroup/SPIRV-Tools/archive/refs/tags/vulkan-sdk-1.4.357.0.tar.gz") +source_managed("github://KhronosGroup/SPIRV-Tools#vulkan-sdk-1.4.357.0") builddep("shortcut/cmake") builddep("shortcut/c++") diff --git a/packages/airboot-linux-stage2/pkgbuild.py b/packages/airboot-linux-stage2/pkgbuild.py index f16a96f..64eda4c 100644 --- a/packages/airboot-linux-stage2/pkgbuild.py +++ b/packages/airboot-linux-stage2/pkgbuild.py @@ -7,7 +7,7 @@ from lib.make import * version("0.1.0-alpha.1") description("AirBoot Linux initramfs generator.") maintainer("sisungo ") -source_url("https://gitea.semilabs.org/semios/airboot-linux-stage2/archive/0.1.0-alpha.1.tar.gz") +source_managed("gitea://gitea.semilabs.org/semios/airboot-linux-stage2#0.1.0-alpha.1") def build(): diff --git a/packages/airup/pkgbuild.py b/packages/airup/pkgbuild.py index 5e13bdc..8d45cee 100644 --- a/packages/airup/pkgbuild.py +++ b/packages/airup/pkgbuild.py @@ -7,7 +7,7 @@ from lib.make import * version("0.10.9") description("Modern, portable and fast implementation of service supervisor and the init daemon.") maintainer("sisungo ") -source_url("https://github.com/sisungo/airup/archive/refs/tags/v0.10.9.tar.gz") +source_managed("github://sisungo/airup#v0.10.9", "rust") builddep("shortcut/rust") diff --git a/packages/awk/pkgbuild.py b/packages/awk/pkgbuild.py index 3790376..74eb508 100644 --- a/packages/awk/pkgbuild.py +++ b/packages/awk/pkgbuild.py @@ -6,7 +6,7 @@ from lib.make import * version("2026.4.26") description("The One True Awk programming language") maintainer("sisungo ") -source_url("https://github.com/onetrueawk/awk/archive/refs/tags/20260426.tar.gz") +source_managed("github://onetrueawk/awk#20260426") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/aws-lc/pkgbuild.py b/packages/aws-lc/pkgbuild.py index 9b4ca3b..fd70070 100644 --- a/packages/aws-lc/pkgbuild.py +++ b/packages/aws-lc/pkgbuild.py @@ -6,7 +6,7 @@ from lib.make import * version("5.5.0") description("a general-purpose cryptographic library maintained by the AWS Cryptography team") maintainer("sisungo ") -source_url("https://github.com/aws/aws-lc/archive/refs/tags/v5.5.0.tar.gz") +source_managed("github://aws/aws-lc#v5.5.0") builddep("shortcut/c++") builddep("shortcut/cmake") diff --git a/packages/bc/pkgbuild.py b/packages/bc/pkgbuild.py index a0a6834..32713fb 100644 --- a/packages/bc/pkgbuild.py +++ b/packages/bc/pkgbuild.py @@ -4,7 +4,7 @@ from lib.make import * version("7.0.3") description("An implementation of the POSIX bc calculator with GNU extensions and dc") maintainer("sisungo ") -source_url("https://github.com/gavinhoward/bc/releases/download/7.0.3/bc-7.0.3.tar.gz") +source_managed("github://gavinhoward/bc#7.0.3") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/brotli/pkgbuild.py b/packages/brotli/pkgbuild.py index c74a504..5b39135 100644 --- a/packages/brotli/pkgbuild.py +++ b/packages/brotli/pkgbuild.py @@ -7,7 +7,7 @@ from lib.make import * version("1.2.0") description("Brotli compression format") maintainer("sisungo ") -source_url("https://github.com/google/brotli/archive/refs/tags/v1.2.0.tar.gz") +source_managed("github://google/brotli#v1.2.0") builddep("shortcut/c") builddep("shortcut/cmake") diff --git a/packages/c-ares/pkgbuild.py b/packages/c-ares/pkgbuild.py index 97f9373..d2515a3 100644 --- a/packages/c-ares/pkgbuild.py +++ b/packages/c-ares/pkgbuild.py @@ -4,9 +4,7 @@ from lib.make import * version("1.34.8") description("A C library for asynchronous DNS requests") maintainer("sisungo ") -source_url( - "https://github.com/c-ares/c-ares/releases/download/v1.34.8/c-ares-1.34.8.tar.gz" -) +source_managed("github://c-ares/c-ares#v1.34.8", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/cargo/pkgbuild.py b/packages/cargo/pkgbuild.py index 28299f0..15c5045 100644 --- a/packages/cargo/pkgbuild.py +++ b/packages/cargo/pkgbuild.py @@ -5,7 +5,7 @@ from lib import rust version("0.98.0") description("The Rust package manager") maintainer("sisungo ") -source_url("https://github.com/rust-lang/cargo/archive/refs/tags/0.98.0.tar.gz") +source_managed("github://rust-lang/cargo#0.98.0", "rust") builddep("shortcut/c") builddep("cargo") diff --git a/packages/certutil/pkgbuild.py b/packages/certutil/pkgbuild.py index 94193b5..57c8333 100644 --- a/packages/certutil/pkgbuild.py +++ b/packages/certutil/pkgbuild.py @@ -4,7 +4,7 @@ from lib.make import * version("0.1.0") description("SemiOS certification utility") maintainer("sisungo ") -source_url("https://gitea.semilabs.org/semios/certutil/archive/v0.1.0.tar.gz") +source_managed("gitea://gitea.semilabs.org/semios/certutil#v0.1.0", "rust") builddep("shortcut/rust") diff --git a/packages/coreutils/pkgbuild.py b/packages/coreutils/pkgbuild.py index 058a340..3788009 100644 --- a/packages/coreutils/pkgbuild.py +++ b/packages/coreutils/pkgbuild.py @@ -4,7 +4,8 @@ from lib.make import * version("0.10.0") description("system core utilities") maintainer("sisungo ") -source_url("https://github.com/uutils/coreutils/archive/refs/tags/0.10.0.tar.gz") +source_managed("github://uutils/coreutils#0.10.0", "rust") + block_hook("autolink") builddep("shortcut/rust") diff --git a/packages/dbus-broker/pkgbuild.py b/packages/dbus-broker/pkgbuild.py index 86384f9..69e41e4 100644 --- a/packages/dbus-broker/pkgbuild.py +++ b/packages/dbus-broker/pkgbuild.py @@ -4,7 +4,7 @@ from lib import cpp version("1.37") description("Linux D-Bus Message Broker") maintainer("sisungo ") -source_url("https://github.com/bus1/dbus-broker/releases/download/v37/dbus-broker-37.tar.xz") +source_managed("github://bus1/dbus-broker#v37") supported_arch(lambda arch: "linux" in arch) diff --git a/packages/diffutils/pkgbuild.py b/packages/diffutils/pkgbuild.py index afc3358..ca877e4 100644 --- a/packages/diffutils/pkgbuild.py +++ b/packages/diffutils/pkgbuild.py @@ -4,7 +4,7 @@ from lib.make import * version("0.5.0") description("utility to compute difference between text files") maintainer("sisungo ") -source_url("https://github.com/uutils/diffutils/archive/refs/tags/v0.5.0.tar.gz") +source_managed("github://uutils/diffutils#v0.5.0", "rust") builddep("shortcut/rust") diff --git a/packages/expat/pkgbuild.py b/packages/expat/pkgbuild.py index 62e4769..aa25700 100644 --- a/packages/expat/pkgbuild.py +++ b/packages/expat/pkgbuild.py @@ -7,15 +7,14 @@ from lib.make import * version("2.8.3") description("Fast streaming XML parser written in C99") maintainer("sisungo ") -source_url( - "https://github.com/libexpat/libexpat/releases/download/R_2_8_3/expat-2.8.3.tar.gz" -) +source_managed("github://libexpat/libexpat#R_2_8_3") builddep("shortcut/c") builddep("shortcut/cmake") def build(): + os.chdir("expat") cpp.cmake([ f"-DCMAKE_INSTALL_LIBDIR={get_prefix('libexpat')}/lib", f"-DCMAKE_INSTALL_INCLUDEDIR={get_prefix('libexpat-dev')}/include", diff --git a/packages/file/pkgbuild.py b/packages/file/pkgbuild.py index d649fde..c66ac03 100644 --- a/packages/file/pkgbuild.py +++ b/packages/file/pkgbuild.py @@ -8,7 +8,7 @@ VERSION = "5.48" version(VERSION) description("utility to infer file type and information") maintainer("sisungo ") -source_git("https://github.com/file/file.git", "FILE5_48") +source_managed("github://file/file#FILE5_48", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") @@ -19,7 +19,6 @@ builddep(f"libbzip2-dev @{arch.get_target()}") def build(): - subprocess.run(["autoreconf", "-fiv"], check=True) cpp.configure([ "--prefix=/", f"--libdir={get_prefix('libmagic')}/lib", diff --git a/packages/findutils/pkgbuild.py b/packages/findutils/pkgbuild.py index a884678..43fd067 100644 --- a/packages/findutils/pkgbuild.py +++ b/packages/findutils/pkgbuild.py @@ -4,7 +4,7 @@ from lib.make import * version("0.10.0") description("implementation of the UNIX findutils") maintainer("sisungo ") -source_url("https://github.com/uutils/findutils/archive/refs/tags/0.10.0.tar.gz") +source_managed("github://uutils/findutils#0.10.0", "rust") builddep("shortcut/rust") @@ -12,7 +12,6 @@ builddep("shortcut/rust") def build(): rust.build() - on_build(build) diff --git a/packages/flex/pkgbuild.py b/packages/flex/pkgbuild.py index 90fcfb1..bdb7250 100644 --- a/packages/flex/pkgbuild.py +++ b/packages/flex/pkgbuild.py @@ -4,7 +4,7 @@ from lib.make import * version("2.6.4") description("The Fast Lexical Analyzer - scanner generator for lexing in C and C++") maintainer("sisungo ") -source_url("https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz") +source_managed("github://westes/flex#v2.6.4", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/gettext-tiny/pkgbuild.py b/packages/gettext-tiny/pkgbuild.py index 118422e..56dd54d 100644 --- a/packages/gettext-tiny/pkgbuild.py +++ b/packages/gettext-tiny/pkgbuild.py @@ -6,9 +6,7 @@ from lib.make import * version("0.3.3") description("small implementation of gettext and libintl") maintainer("sisungo ") -source_url( - "https://github.com/sabotage-linux/gettext-tiny/releases/download/v0.3.3/gettext-tiny-0.3.3.tar.xz" -) +source_managed("github://sabotage-linux/gettext-tiny#v0.3.3") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/glslang/pkgbuild.py b/packages/glslang/pkgbuild.py index 767064c..aa42829 100644 --- a/packages/glslang/pkgbuild.py +++ b/packages/glslang/pkgbuild.py @@ -8,7 +8,7 @@ from lib import cpp, arch version("16.5.0") description("Khronos-reference front end for GLSL/ESSL, partial front end for HLSL, and a SPIR-V generator") maintainer("sisungo ") -source_url("https://github.com/KhronosGroup/glslang/archive/refs/tags/16.5.0.tar.gz") +source_managed("github://KhronosGroup/glslang#16.5.0") builddep("shortcut/cmake") builddep("shortcut/c++") diff --git a/packages/graphite/pkgbuild.py b/packages/graphite/pkgbuild.py index 977f31f..f1e8c90 100644 --- a/packages/graphite/pkgbuild.py +++ b/packages/graphite/pkgbuild.py @@ -7,7 +7,7 @@ from lib.make import * version("1.3.15") description("Graphite is a \"smart font\" system developed specifically to handle the complexities of lesser-known languages of the world.") maintainer("sisungo ") -source_url("https://github.com/silnrsi/graphite/releases/download/1.3.15/graphite2-1.3.15.tgz") +source_managed("github://silnrsi/graphite#1.3.15") builddep("shortcut/c++") builddep("shortcut/cmake") diff --git a/packages/grep/pkgbuild.py b/packages/grep/pkgbuild.py index 7e2b8d4..63016bb 100644 --- a/packages/grep/pkgbuild.py +++ b/packages/grep/pkgbuild.py @@ -5,13 +5,13 @@ from lib.make import * version("15.1.3") description("SemiOS file pattern searcher") maintainer("sisungo ") -source_url("https://gitea.semilabs.org/semios/grep/archive/v15.1.3.tar.gz") +source_managed("gitea://gitea.semilabs.org/semios/grep#v15.1.3") builddep("shortcut/c") -builddep(f"libpcre2-dev @{arch.get_target()}") +builddep("libpcre2-dev @target") builddep("pcre2-tools") -builddep(f"libbzip2-dev @{arch.get_target()}") -builddep(f"libz-ng-dev @{arch.get_target()}") +builddep("libbzip2-dev @target") +builddep("libz-ng-dev @target") def build(): diff --git a/packages/htop/pkgbuild.py b/packages/htop/pkgbuild.py index 3129e7a..c3f8a49 100644 --- a/packages/htop/pkgbuild.py +++ b/packages/htop/pkgbuild.py @@ -5,7 +5,7 @@ from lib import cpp version("3.5.2") description("an interactive process viewer") maintainer("sisungo ") -source_url("https://github.com/htop-dev/htop/releases/download/3.5.2/htop-3.5.2.tar.xz") +source_managed("github://htop-dev/htop#3.5.2", "autotools") builddep("shortcut/autotools") builddep("shortcut/c") diff --git a/packages/init-scripts/pkgbuild.py b/packages/init-scripts/pkgbuild.py index 5dc1c9b..0d62b63 100644 --- a/packages/init-scripts/pkgbuild.py +++ b/packages/init-scripts/pkgbuild.py @@ -7,7 +7,7 @@ from lib.make import * version("0.1.0-alpha.1") description("SemiOS init scripts") maintainer("sisungo ") -source_url("https://gitea.semilabs.org/semios/init-scripts/archive/0.1.0-alpha.1.tar.gz") +source_managed("gitea://gitea.semilabs.org/semios/init-scripts#0.1.0-alpha.1") def build(): diff --git a/packages/kmod/pkgbuild.py b/packages/kmod/pkgbuild.py index e9457ae..a834471 100644 --- a/packages/kmod/pkgbuild.py +++ b/packages/kmod/pkgbuild.py @@ -4,7 +4,7 @@ from lib.make import * version("1.34") description("a set of tools to handle common tasks with Linux kernel modules like insert, remove, list, check properties, resolve dependencies and aliases") maintainer("sisungo ") -source_url("https://github.com/kmod-project/kmod/archive/refs/tags/v34.tar.gz") +source_managed("github://kmod-project/kmod#v34") builddep("shortcut/c") builddep("shortcut/meson") diff --git a/packages/libarchive/pkgbuild.py b/packages/libarchive/pkgbuild.py index b319c5a..5bbd401 100644 --- a/packages/libarchive/pkgbuild.py +++ b/packages/libarchive/pkgbuild.py @@ -4,9 +4,7 @@ from lib.make import * version("3.8.9") description("Multi-format archive and compression library") maintainer("sisungo ") -source_url( - "https://github.com/libarchive/libarchive/releases/download/v3.8.9/libarchive-3.8.9.tar.gz" -) +source_managed("github://libarchive/libarchive#v3.8.9", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/libffi/pkgbuild.py b/packages/libffi/pkgbuild.py index 8b18024..d42884f 100644 --- a/packages/libffi/pkgbuild.py +++ b/packages/libffi/pkgbuild.py @@ -4,9 +4,7 @@ from lib.make import * version("3.7.1") description("A portable foreign-function interface library") maintainer("sisungo ") -source_url( - "https://github.com/libffi/libffi/releases/download/v3.7.1/libffi-3.7.1.tar.gz" -) +source_managed("github://libffi/libffi#v3.7.1", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/libgcc-compat/pkgbuild.py b/packages/libgcc-compat/pkgbuild.py index 1805e62..6fc7b3b 100644 --- a/packages/libgcc-compat/pkgbuild.py +++ b/packages/libgcc-compat/pkgbuild.py @@ -7,7 +7,7 @@ from lib.make import * version("0.2.0") description("provides compatibility objects to gcc runtime libraries") maintainer("sisungo ") -source_url("https://gitea.semilabs.org/semios/libgcc-compat/archive/v0.2.0.tar.gz") +source_managed("gitea://gitea.semilabs.org/semios/libgcc-compat#v0.2.0") builddep("shortcut/c") builddep(f"libunwind-dev @{arch.get_target()}") diff --git a/packages/libnl/pkgbuild.py b/packages/libnl/pkgbuild.py index f940198..6b10ba5 100644 --- a/packages/libnl/pkgbuild.py +++ b/packages/libnl/pkgbuild.py @@ -6,6 +6,8 @@ from lib.make import * upstream_version = "3.2.25" version(upstream_version) +description("Netlink protocol library suite") +maintainer("sisungo ") source_url("https://www.infradead.org/~tgr/libnl/files/libnl-3.2.25.tar.gz") builddep("shortcut/c") diff --git a/packages/libpng/pkgbuild.py b/packages/libpng/pkgbuild.py index 655320c..3f9035a 100644 --- a/packages/libpng/pkgbuild.py +++ b/packages/libpng/pkgbuild.py @@ -5,7 +5,7 @@ from lib.make import * version("1.6.58") description("the official PNG reference library") maintainer("sisungo ") -source_url("https://github.com/pnggroup/libpng/archive/refs/tags/v1.6.58.tar.gz") +source_managed("github://pnggroup/libpng#v1.6.58", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/libpsl/pkgbuild.py b/packages/libpsl/pkgbuild.py index dfaa5e2..3f3f7a9 100644 --- a/packages/libpsl/pkgbuild.py +++ b/packages/libpsl/pkgbuild.py @@ -4,9 +4,7 @@ from lib.make import * version("0.23.1") description("C library for the Public Suffix List") maintainer("sisungo ") -source_url( - "https://github.com/rockdaboot/libpsl/releases/download/0.23.1/libpsl-0.23.1.tar.gz" -) +source_managed("github://rockdaboot/libpsl#0.23.1", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/libva/pkgbuild.py b/packages/libva/pkgbuild.py index 75b366f..11343ad 100644 --- a/packages/libva/pkgbuild.py +++ b/packages/libva/pkgbuild.py @@ -5,7 +5,7 @@ from lib import cpp, arch version("2.24.1") description("an implementation for VA-API") maintainer("sisungo ") -source_url("https://github.com/intel/libva/releases/download/2.24.1/libva-2.24.1.tar.bz2") +source_managed("github://intel/libva#2.24.1", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/libwacom/pkgbuild.py b/packages/libwacom/pkgbuild.py index b80c9a8..15c47da 100644 --- a/packages/libwacom/pkgbuild.py +++ b/packages/libwacom/pkgbuild.py @@ -4,7 +4,7 @@ from lib.make import * version("2.19.1") description("libwacom is a tablet description library") maintainer("sisungo ") -source_url("https://github.com/linuxwacom/libwacom/releases/download/libwacom-2.19.1/libwacom-2.19.1.tar.xz") +source_managed("github://linuxwacom/libwacom#libwacom-2.19.1") builddep("shortcut/c") builddep("shortcut/meson") diff --git a/packages/libwebp/pkgbuild.py b/packages/libwebp/pkgbuild.py index ef65388..b18c6aa 100644 --- a/packages/libwebp/pkgbuild.py +++ b/packages/libwebp/pkgbuild.py @@ -8,7 +8,7 @@ from lib import cpp version("1.6.0") description("a library to encode and decode images in WebP format") maintainer("sisungo ") -source_url("https://github.com/webmproject/libwebp/archive/refs/tags/v1.6.0.tar.gz") +source_managed("github://webmproject/libwebp#v1.6.0") builddep("shortcut/c") builddep("shortcut/cmake") diff --git a/packages/linenoise/pkgbuild.py b/packages/linenoise/pkgbuild.py index ea8a43a..d436cdd 100644 --- a/packages/linenoise/pkgbuild.py +++ b/packages/linenoise/pkgbuild.py @@ -3,7 +3,7 @@ from lib.make import * version("2.0") description("A small self-contained alternative to readline and libedit") maintainer("sisungo ") -source_url("https://github.com/antirez/linenoise/archive/refs/tags/2.0.tar.gz") +source_managed("github://antirez/linenoise#2.0") on_build(lambda: None) diff --git a/packages/lxdeviced/pkgbuild.py b/packages/lxdeviced/pkgbuild.py index d49c1b2..3a746db 100644 --- a/packages/lxdeviced/pkgbuild.py +++ b/packages/lxdeviced/pkgbuild.py @@ -7,7 +7,7 @@ from lib.make import * version("0.1.0-alpha.2") description("Linux device userspace daemon.") maintainer("sisungo ") -source_url("https://gitea.semilabs.org/semios/lxdeviced/archive/0.1.0-alpha.2.tar.gz") +source_managed("gitea://gitea.semilabs.org/semios/lxdeviced#0.1.0-alpha.2", "rust") builddep("shortcut/rust") diff --git a/packages/meson/pkgbuild.py b/packages/meson/pkgbuild.py index d9969c6..224e8f1 100644 --- a/packages/meson/pkgbuild.py +++ b/packages/meson/pkgbuild.py @@ -6,7 +6,7 @@ from lib.make import * version("1.12.0") description("The Meson Build System") maintainer("sisungo ") -source_url("https://github.com/mesonbuild/meson/releases/download/1.12.0/meson-1.12.0.tar.gz") +source_managed("github://mesonbuild/meson#1.12.0") builddep("python") diff --git a/packages/mksh/pkgbuild.py b/packages/mksh/pkgbuild.py index b6b2d70..90bcf6e 100644 --- a/packages/mksh/pkgbuild.py +++ b/packages/mksh/pkgbuild.py @@ -5,9 +5,7 @@ from lib.make import * version("1.59.2") description("the MirBSD Korn Shell, a minimal and useful implementation of the POSIX shell with extensions") maintainer("sisungo ") -source_url( - "https://github.com/mirabilos/mksh-cvs2git/archive/refs/tags/mksh-R59c.tar.gz" -) +source_managed("github://mirabilos/mksh-cvs2git#mksh-R59c") builddep("shortcut/c") builddep("gnu-sed") diff --git a/packages/neatvi/pkgbuild.py b/packages/neatvi/pkgbuild.py index 0c8b4ab..7a86e71 100644 --- a/packages/neatvi/pkgbuild.py +++ b/packages/neatvi/pkgbuild.py @@ -6,7 +6,7 @@ from lib.make import * version("19") description("A vi/ex editor for editing UTF-8 text") maintainer("sisungo ") -source_url("https://github.com/aligrudi/neatvi/archive/refs/tags/19.tar.gz") +source_managed("github://aligrudi/neatvi#19") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/nextvi/pkgbuild.py b/packages/nextvi/pkgbuild.py index 319dcc7..125bf93 100644 --- a/packages/nextvi/pkgbuild.py +++ b/packages/nextvi/pkgbuild.py @@ -7,7 +7,7 @@ from lib.make import * version("5.3") description("A small vi/ex terminal text editor (neatvi rewrite)") maintainer("sisungo ") -source_url("https://github.com/kyx0r/nextvi/archive/refs/tags/5.3.tar.gz") +source_managed("github://kyx0r/nextvi#5.3") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/nghttp2/pkgbuild.py b/packages/nghttp2/pkgbuild.py index ffd0fab..ab59f85 100644 --- a/packages/nghttp2/pkgbuild.py +++ b/packages/nghttp2/pkgbuild.py @@ -5,9 +5,7 @@ from lib.make import * version("1.70.0") description("nghttp2 - HTTP/2 C Library and tools") maintainer("sisungo ") -source_url( - "https://github.com/nghttp2/nghttp2/releases/download/v1.70.0/nghttp2-1.70.0.tar.gz" -) +source_managed("github://nghttp2/nghttp2#v1.70.0") builddep("shortcut/c++") builddep("shortcut/cmake") diff --git a/packages/ninja/pkgbuild.py b/packages/ninja/pkgbuild.py index 0e5f09b..fee2c2e 100644 --- a/packages/ninja/pkgbuild.py +++ b/packages/ninja/pkgbuild.py @@ -5,7 +5,7 @@ from lib.make import * version("1.13.2") description("a small build system with a focus on speed") maintainer("sisungo ") -source_url("https://github.com/ninja-build/ninja/archive/refs/tags/v1.13.2.tar.gz") +source_managed("github://ninja-build/ninja#v1.13.2") builddep("shortcut/c++") builddep("sed") diff --git a/packages/packie/pkgbuild.py b/packages/packie/pkgbuild.py index 8c53ebb..0cfa556 100644 --- a/packages/packie/pkgbuild.py +++ b/packages/packie/pkgbuild.py @@ -5,7 +5,7 @@ from lib.make import * version("0.1.0-alpha.1") description("SemiOS package manager") maintainer("sisungo ") -source_url("https://gitea.semilabs.org/semios/packie/archive/0.1.0-alpha.1.tar.gz") +source_managed("gitea://gitea.semilabs.org/semios/packie#0.1.0-alpha.1", "rust") builddep("shortcut/rust") diff --git a/packages/pcre2/pkgbuild.py b/packages/pcre2/pkgbuild.py index 3456e9f..4eaf55a 100644 --- a/packages/pcre2/pkgbuild.py +++ b/packages/pcre2/pkgbuild.py @@ -4,9 +4,7 @@ from lib.make import * version("10.47") description("a set of C functions that implement regular expression pattern matching") maintainer("sisungo ") -source_url( - "https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.47/pcre2-10.47.tar.gz" -) +source_managed("github://PCRE2Project/pcre2#pcre2-10.47", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/rhash/pkgbuild.py b/packages/rhash/pkgbuild.py index 957ee13..44be096 100644 --- a/packages/rhash/pkgbuild.py +++ b/packages/rhash/pkgbuild.py @@ -8,7 +8,7 @@ upstream_version = "1.4.6" version(upstream_version) description("Great utility for computing hash sums") maintainer("sisungo ") -source_url("https://github.com/rhash/RHash/archive/refs/tags/v1.4.6.tar.gz") +source_managed("github://rhash/RHash#v1.4.6", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/ripgrep/pkgbuild.py b/packages/ripgrep/pkgbuild.py index 6e8d09d..e680685 100644 --- a/packages/ripgrep/pkgbuild.py +++ b/packages/ripgrep/pkgbuild.py @@ -4,7 +4,7 @@ from lib.make import * version("15.2.0") description("ripgrep recursively searches directories for a regex pattern while respecting your gitignore") maintainer("sisungo ") -source_url("https://github.com/BurntSushi/ripgrep/archive/refs/tags/15.2.0.tar.gz") +source_managed("github://BurntSushi/ripgrep#15.2.0", "rust") builddep("shortcut/rust") diff --git a/packages/sed/pkgbuild.py b/packages/sed/pkgbuild.py index 2437af6..cbd668c 100644 --- a/packages/sed/pkgbuild.py +++ b/packages/sed/pkgbuild.py @@ -5,7 +5,7 @@ from lib.make import * version("15.1.1") description("SemiOS fork of the UNIX sed utility") maintainer("sisungo ") -source_url("https://gitea.semilabs.org/semios/sed/archive/v15.1.1.tar.gz") +source_managed("gitea://gitea.semilabs.org/semios/sed#v15.1.1") builddep("shortcut/c") builddep(f"libpcre2-dev @{arch.get_target()}") diff --git a/packages/semi-libc/pkgbuild.py b/packages/semi-libc/pkgbuild.py index 5db9722..4d0f00e 100644 --- a/packages/semi-libc/pkgbuild.py +++ b/packages/semi-libc/pkgbuild.py @@ -1,11 +1,11 @@ from lib import arch, cpp from lib.make import * + version("1.2.6+1") description("the SemiOS fork of musl-libc, providing POSIX C standard library and system runtime") maintainer("sisungo ") -source_url("https://gitea.semilabs.org/semios/semi-libc/archive/v1.2.6-1.tar.gz") - +source_managed("gitea://gitea.semilabs.org/semios/semi-libc#v1.2.6-1") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/vim/pkgbuild.py b/packages/vim/pkgbuild.py index f84afe4..0c15cfb 100644 --- a/packages/vim/pkgbuild.py +++ b/packages/vim/pkgbuild.py @@ -6,7 +6,7 @@ upstream_version = "9.2.782" version(upstream_version) description("vim, a greatly improved version of the good old UNIX editor Vi") maintainer("sisungo ") -source_url("https://github.com/vim/vim/archive/refs/tags/v9.2.0782.tar.gz") +source_managed("github://vim/vim#v9.2.0782", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/xz/pkgbuild.py b/packages/xz/pkgbuild.py index 472197b..a9f7ad1 100644 --- a/packages/xz/pkgbuild.py +++ b/packages/xz/pkgbuild.py @@ -6,9 +6,7 @@ from lib.make import * version("5.8.3") description("a general-purpose LZMA data-compression library plus command-line tools") maintainer("sisungo ") -source_url( - "https://github.com/tukaani-project/xz/releases/download/v5.8.3/xz-5.8.3.tar.gz" -) +source_managed("github://tukaani-project/xz#v5.8.3", "autotools") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/packages/zlib-ng/pkgbuild.py b/packages/zlib-ng/pkgbuild.py index e4bc7a7..d004264 100644 --- a/packages/zlib-ng/pkgbuild.py +++ b/packages/zlib-ng/pkgbuild.py @@ -6,7 +6,7 @@ from lib.make import * version("2.3.3") description("zlib replacement with optimizations for next generation systems") maintainer("sisungo ") -source_url("https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.3.3.tar.gz") +source_managed("github://zlib-ng/zlib-ng#2.3.3") builddep("shortcut/c++") diff --git a/packages/zstd/pkgbuild.py b/packages/zstd/pkgbuild.py index 1a75069..f9aa4ab 100644 --- a/packages/zstd/pkgbuild.py +++ b/packages/zstd/pkgbuild.py @@ -7,9 +7,7 @@ from lib.make import * version("1.5.7") description("Zstandard - Fast real-time compression algorithm") maintainer("sisungo ") -source_url( - "https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-1.5.7.tar.gz" -) +source_managed("github://facebook/zstd#v1.5.7") builddep("shortcut/c") builddep("shortcut/autotools") diff --git a/x.py b/x.py index 19cbcc6..d313a81 100644 --- a/x.py +++ b/x.py @@ -6,12 +6,7 @@ import sys import typing import hooks -import lib.arch -import lib.atombuild -import lib.make -import lib.packie -import lib.pkgcomposer -import lib.sources +import lib os.chdir(os.path.dirname(__file__)) sys.path.append(os.path.abspath("lib")) @@ -35,6 +30,9 @@ parser_list.add_argument("ITEM", choices=("all", "built", "new")) parser_repo_push = subparsers.add_parser("repo-push") parser_repo_push.add_argument("REPO_DIR") parser_repo_push.add_argument("REPO_PUSH_PKGNAME", nargs="*") +parser_vendor_src = subparsers.add_parser("vendor-src") +parser_vendor_src.add_argument("REPO_DIR") +parser_vendor_src.add_argument("VENDOR_PKGNAME") args = argparser.parse_args() if args.target: @@ -43,6 +41,22 @@ else: lib.arch.set_target(lib.arch.get_target()) +def load_pkgbuild(pkgname): + # Declare necessary paths + repo_root = os.getcwd() + package_dir = f"{repo_root}/packages/{pkgname}" + target_dir = f"{package_dir}/target" + + try: + os.chdir(package_dir) + os.makedirs(target_dir, exist_ok=True) + except Exception: + print(f"No such package {pkgname}") + exit(1) + importlib.import_module(f"packages.{pkgname}.pkgbuild") + os.chdir(repo_root) + + def run_hooks(map, arg: typing.Any = None): current_dir = os.getcwd() for n in map.keys(): @@ -190,15 +204,8 @@ def cmd_build_atom(pkgname: str): build_env_root = f"{target_dir}/atombuild_root" # Read `pkgbuild.py` of that package - lib.make._in_atombuild = True - try: - os.chdir(package_dir) - os.makedirs(target_dir, exist_ok=True) - except Exception: - print(f"No such package {pkgname}") - exit(1) - importlib.import_module(f"packages.{pkgname}.pkgbuild") - os.chdir(repo_root) + lib.make._dry_run = True + load_pkgbuild(pkgname) # Initialize build environment lib.atombuild.prepare_build_env(build_env_root, lib.make._builddep) @@ -238,6 +245,24 @@ def cmd_repo_push(repo_dir: str, pkgname: list[str]): print(f"error: failed to add '{pkg}': see the output above") +def cmd_vendor_src(repo_dir, pkgname): + package_dir = f"{os.getcwd()}/packages/{pkgname}" + target_dir = f"{package_dir}/target" + lib.make._dry_run = True + load_pkgbuild(pkgname) + if lib.make._managed_source_url is None: + print(f"error: '{pkgname}' declared not managed sources") + exit(1) + os.chdir(package_dir) + from_path = lib.managed_source.create_srcpkg( + lib.make._managed_source_url, + lib.make._managed_source_postprocess, + ) + filename = lib.managed_source.get_repo_filename(lib.make._managed_source_url) + to_path = f"{repo_dir}/{filename}" + shutil.copy2(from_path, to_path) + + if args.subcommand == "build": if args.atombuild: cmd_build_atom(args.BUILD_PKGNAME) @@ -253,6 +278,8 @@ elif args.subcommand == "list": cmd_list(args.ITEM) elif args.subcommand == "repo-push": cmd_repo_push(args.REPO_DIR, args.REPO_PUSH_PKGNAME) +elif args.subcommand == "vendor-src": + cmd_vendor_src(args.REPO_DIR, args.VENDOR_PKGNAME) else: print("error: no action specified", file=sys.stderr) exit(1)