Compare commits

..
Author SHA1 Message Date
sisungo 0ada9d32fb feat: add support of zip source archives
Signed-off-by: sisungo <[email protected]>
2026-08-17 17:43:54 +08:00
3 changed files with 43 additions and 58 deletions
+42 -10
View File
@@ -4,6 +4,7 @@ import sys
import tarfile
import urllib.parse
import urllib.request
import zipfile
def filename(url):
@@ -128,6 +129,25 @@ def tar_common_root(tar: tarfile.TarFile) -> str | None:
return root
def zip_common_root(zip_file: zipfile.ZipFile) -> str | None:
members = zip_file.infolist()
if not members:
return None
root = None
for member in members:
path = member.filename.replace('\\', '/').lstrip('./').lstrip('/')
if not path:
continue
this_root = path.split('/')[0]
if this_root in ('', '.', '..'):
continue
if root is None:
root = this_root
elif this_root != root:
return None
return root
def sources_dir_name() -> str:
with open("./target/sources.tag") as file:
return file.read()
@@ -139,16 +159,28 @@ def source_url(url: str):
download_path = f"./target/{filename(url)}"
download(url, download_path)
with tarfile.open(download_path, "r") as tar:
common_root = tar_common_root(tar)
extract_dir = "./target"
sources_dir = f"./target/{common_root}"
if common_root in ["", ".", "None"]:
extract_dir = "./target/sources"
sources_dir = "./target/sources"
tar.extractall(extract_dir)
with open("./target/sources.tag", "wt+") as file:
file.write(sources_dir)
if download_path.endswith(".zip"):
with zipfile.ZipFile(download_path, "r") as zip:
common_root = zip_common_root(zip)
else:
with tarfile.open(download_path, "r") as tar:
common_root = tar_common_root(tar)
extract_dir = "./target"
sources_dir = f"./target/{common_root}"
if common_root in ["", ".", None]:
extract_dir = "./target/sources"
sources_dir = "./target/sources"
if download_path.endswith(".zip"):
with zipfile.ZipFile(download_path, "r") as zip:
zip.extractall(extract_dir)
else:
with tarfile.open(download_path, "r") as tar:
tar.extractall(extract_dir)
with open("./target/sources.tag", "wt+") as file:
file.write(sources_dir)
def _git_repo_name(url: str) -> str:
-48
View File
@@ -1,48 +0,0 @@
from lib import cpp
from lib.make import *
version("2.18.3")
description("a library for configuring and customizing font access")
maintainer("sisungo <[email protected]>")
source_git("https://gitlab.freedesktop.org/fontconfig/fontconfig.git", "2.18.3")
builddep("shortcut/c")
builddep("shortcut/meson")
builddep("gettext")
builddep("pkgconf")
builddep("gperf")
builddep(f"libintl-dev @{arch.get_target()}")
builddep(f"libfreetype-dev @{arch.get_target()}")
builddep(f"libexpat-dev @{arch.get_target()}")
builddep(f"libpng-dev @{arch.get_target()}")
def build():
cpp.meson_setup([
f"--datadir={get_prefix('libfontconfig')}/share",
"--sysconfdir=/var/config",
"-Dnls=enabled",
"-Dtools=enabled",
"-Dcache-build=disabled",
"-Dxml-backend=expat",
"-Ddefault-fonts-dirs=/share/fonts",
])
cpp.meson_compile()
cpp.meson_install()
on_build(build)
package("libfontconfig")
dep("libexpat @same-arch")
dep("libfreetype @same-arch")
cpp.use_auto_pack(["lib"])
package("fontconfig")
dep("libfontconfig (same)")
cpp.use_auto_pack(["bin"])
package("libfontconfig-dev")
dep("libfontconfig (same)")
cpp.use_auto_pack(["dev"])
+1
View File
@@ -119,6 +119,7 @@ def cmd_build_package(package: str):
"version": pkgver,
"arch": pkgarch,
"description": pkginfo[lib.make._key_description],
"maintainers": pkginfo[lib.make._key_maintainers],
"dependencies": pkginfo[lib.make._key_dependencies],
"provides": pkginfo[lib.make._key_provides],
"recommendations": pkginfo[lib.make._key_recommendations],