From e749a4f1f98560c98580685fb63724cf7188c295 Mon Sep 17 00:00:00 2001 From: sisungo Date: Sat, 27 Jun 2026 10:46:20 +0800 Subject: [PATCH] feat: add package python Signed-off-by: sisungo --- packages/python/pkgbuild.py | 100 ++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 packages/python/pkgbuild.py diff --git a/packages/python/pkgbuild.py b/packages/python/pkgbuild.py new file mode 100644 index 0000000..0368cde --- /dev/null +++ b/packages/python/pkgbuild.py @@ -0,0 +1,100 @@ +import os +import shutil +import subprocess + +from lib import arch, cpp +from lib.make import * + +VERSION_BASE = "3.14" +VERSION_APPEND = "6" + +VERSION_FULL = f"{VERSION_BASE}.{VERSION_APPEND}" + +version(VERSION_FULL) +source_url( + f"https://www.python.org/ftp/python/{VERSION_FULL}/Python-{VERSION_FULL}.tar.xz" +) + + +def build(): + cpp.configure( + [ + "--prefix=/", + f"--with-platlibdir=lib/{arch.get_target()}", + "--enable-shared", + "--enable-safety", + "--enable-optimizations", + "--enable-loadable-sqlite-extensions", + "--enable-ipv6", + "--with-lto=thin", + "--with-tzpath=/share/zoneinfo", + "--with-system-expat", + "--with-system-libmpdec", + "--with-readline=editline", + "--with-tail-call-interp", + "--without-ensurepip", + ] + ) + cpp.make() + try: + shutil.rmtree("../cpp_install") + except: + pass + cpp.make_install() + os.rename( + f"lib/{arch.get_target()}/python{VERSION_BASE}", f"lib/python{VERSION_BASE}" + ) + os.rmdir(f"lib/{arch.get_target()}") + + +on_build(build) + + +def python_config_target(): + return arch.get_target().replace("-semios-linux", "-linux-musl") + + +def pack_libpython(composer): + # Pack the standard library + pystdpath = f"{composer.workdir}/bundle/lib/python{VERSION_BASE}" + composer.makedir("lib") + composer.add_dir(f"lib/python{VERSION_BASE}", f"lib/python{VERSION_BASE}") + shutil.rmtree(f"{pystdpath}/test") + os.remove( + f"{pystdpath}/config-{VERSION_BASE}-{python_config_target()}/libpython{VERSION_BASE}.a" + ) + os.remove(f"{pystdpath}/config-{VERSION_BASE}-{python_config_target()}/python.o") + + # Pack native libraries + composer.addfile( + f"lib/libpython{VERSION_BASE}.so", f"lib/libpython{VERSION_BASE}.so" + ) + composer.addfile( + f"lib/libpython{VERSION_BASE}.so.1.0", f"lib/libpython{VERSION_BASE}.so.1.0" + ) + composer.addfile("lib/libpython3.so", "lib/libpython3.so") + + +package("libpython") +dep("semi-libc @same-arch") +on_pack(pack_libpython) + +package("python") +dep("libpython (same)") +cpp.use_auto_pack(["bin"]) +link(f"bin/python{VERSION_BASE}", "/bin/python3") +link(f"bin/python{VERSION_BASE}", "/bin/python") + +package("libpython-dev") +dep("libpython (same)") +cpp.use_auto_pack(["dev"]) + + +def pack_test(composer): + composer.makedirs(f"lib/python{VERSION_BASE}") + composer.add_dir(f"lib/python{VERSION_BASE}/test", f"lib/python{VERSION_BASE}/test") + + +package("python-test") +dep("libpython (same)") +on_pack(pack_test)