forked from semios/semios-packages
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f9dba39603 | ||
|
|
91226580aa | ||
|
|
e8c3ebafc7 | ||
|
|
d159cd0b5b | ||
|
|
d8007af248 | ||
|
|
bf52025629 |
+6
-1
@@ -1,9 +1,14 @@
|
||||
from typing import Callable, TypeAlias
|
||||
|
||||
from . import autostrip
|
||||
from . import autopatch, autostrip
|
||||
|
||||
PreBuild: TypeAlias = Callable[[], None]
|
||||
PostBuild: TypeAlias = Callable[[], None]
|
||||
|
||||
pre_build: dict[str, PreBuild] = {
|
||||
"autopatch": autopatch.autopatch,
|
||||
}
|
||||
|
||||
post_build: dict[str, PostBuild] = {
|
||||
"autostrip": autostrip.autostrip,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
import lib.sources as sources
|
||||
|
||||
|
||||
def autopatch():
|
||||
if not os.path.exists("patches"):
|
||||
return
|
||||
|
||||
target_dir = os.getcwd() + "/target"
|
||||
source_dir = sources.sources_dir_name()
|
||||
patches_tag_file = f"{target_dir}/patches.tag"
|
||||
|
||||
patches_dir = os.getcwd() + "/patches"
|
||||
patches = os.listdir(patches_dir)
|
||||
patches.sort()
|
||||
|
||||
os.chdir(source_dir)
|
||||
if not os.path.exists(patches_tag_file):
|
||||
open(patches_tag_file, "+w").close()
|
||||
for i in patches:
|
||||
with open(patches_tag_file, "r") as file:
|
||||
if i + "\n" in file.readlines():
|
||||
continue
|
||||
with open(f"{patches_dir}/{i}", "r") as file:
|
||||
subprocess.run(["patch", "-p1"], stdin=file)
|
||||
with open(patches_tag_file, "+a") as file:
|
||||
file.write(i + "\n")
|
||||
@@ -0,0 +1,21 @@
|
||||
import os
|
||||
import types
|
||||
|
||||
|
||||
def _wrap_treedir_entry(ent, prefix=""):
|
||||
wrapped = types.SimpleNamespace()
|
||||
wrapped.name = f"{prefix}/{ent.name}" if prefix else ent.name
|
||||
wrapped.path = ent.path
|
||||
wrapped.is_dir = ent.is_dir
|
||||
wrapped.is_file = ent.is_file
|
||||
wrapped.is_symlink = ent.is_symlink
|
||||
return wrapped
|
||||
|
||||
|
||||
def treedir(root: str, prefix: str = ""):
|
||||
with os.scandir(root) as entries:
|
||||
for ent in entries:
|
||||
wrapped = _wrap_treedir_entry(ent, prefix)
|
||||
yield wrapped
|
||||
if wrapped.is_dir(follow_symlinks=False):
|
||||
yield from treedir(ent.path, wrapped.name)
|
||||
+58
-17
@@ -1,6 +1,8 @@
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
from lib.common import treedir
|
||||
|
||||
from . import make as libmake
|
||||
from . import pkgcomposer
|
||||
|
||||
@@ -9,6 +11,23 @@ def configure(rem: list[str] = []):
|
||||
subprocess.run(["./configure"] + rem, check=True)
|
||||
|
||||
|
||||
def cmake(rem: list[str] = []):
|
||||
source_dir = os.getcwd()
|
||||
os.makedirs("../cmake_build", exist_ok=True)
|
||||
os.chdir("../cmake_build")
|
||||
subprocess.run(
|
||||
[
|
||||
"cmake",
|
||||
"-GNinja",
|
||||
"-DCMAKE_BUILD_TYPE=Release",
|
||||
"-DCMAKE_INSTALL_PREFIX=/",
|
||||
source_dir,
|
||||
]
|
||||
+ rem,
|
||||
check=True,
|
||||
)
|
||||
|
||||
|
||||
def make(rem: list[str] = []):
|
||||
subprocess.run(["make", f"-j{os.cpu_count()}"] + rem, check=True)
|
||||
|
||||
@@ -20,33 +39,55 @@ def make_install(rem: list[str] | None = None, chdir: bool = True):
|
||||
os.chdir("../cpp_install")
|
||||
|
||||
|
||||
def ninja(rem: list[str] = []):
|
||||
subprocess.run(["ninja"] + rem, check=True)
|
||||
|
||||
|
||||
def ninja_install(rem: list[str] = [], chdir: bool = True):
|
||||
if chdir:
|
||||
os.environ["DESTDIR"] = os.getcwd() + "/../cpp_install"
|
||||
subprocess.run(["ninja", "install"] + rem, check=True)
|
||||
if chdir:
|
||||
os.chdir(os.environ["DESTDIR"])
|
||||
|
||||
|
||||
def _do_auto_pack(pc: pkgcomposer.PkgComposer, srcdir: str, dstdir: str, filter):
|
||||
pc.makedir(dstdir)
|
||||
with os.scandir(srcdir) as entries:
|
||||
for ent in entries:
|
||||
if filter(ent):
|
||||
if ent.is_dir(follow_symlinks=False):
|
||||
pc.makedir(f"{dstdir}/{ent.name}")
|
||||
elif ent.is_file(follow_symlinks=False):
|
||||
pc.addfile(ent.path, f"{dstdir}/{ent.name}")
|
||||
elif ent.is_symlink() and not os.path.isabs(os.readlink(ent.path)):
|
||||
pc.addfile(ent.path, f"{dstdir}/{ent.name}")
|
||||
if not os.path.exists(srcdir):
|
||||
return
|
||||
try:
|
||||
pc.makedir(dstdir)
|
||||
except Exception:
|
||||
pass
|
||||
for ent in treedir(srcdir):
|
||||
if filter(ent):
|
||||
if ent.is_file(follow_symlinks=False):
|
||||
pc.makedirs(os.path.dirname(f"{dstdir}/{ent.name}"))
|
||||
pc.addfile(ent.path, f"{dstdir}/{ent.name}")
|
||||
elif ent.is_symlink() and not os.path.isabs(os.readlink(ent.path)):
|
||||
pc.addfile(ent.path, f"{dstdir}/{ent.name}")
|
||||
|
||||
|
||||
def _is_dev_file(ent) -> bool:
|
||||
return (
|
||||
ent.name.endswith(".o")
|
||||
or ent.name.endswith(".a")
|
||||
or ent.name.endswith(".la")
|
||||
or ent.name.endswith(".pc")
|
||||
or ent.name.endswith(".h")
|
||||
or ent.name.endswith(".cmake")
|
||||
)
|
||||
|
||||
|
||||
def _autopack_filter_lib(ent) -> bool:
|
||||
if ent.name.endswith(".o") or ent.name.endswith(".a"):
|
||||
return False
|
||||
return True
|
||||
return not _is_dev_file(ent)
|
||||
|
||||
|
||||
def _autopack_filter_bin(ent) -> bool:
|
||||
return True
|
||||
return os.access(ent.path, os.X_OK) and ent.is_file(follow_symlinks=False)
|
||||
|
||||
|
||||
def _autopack_filter_dev(ent):
|
||||
if ".so" in ent.name:
|
||||
return False
|
||||
return True
|
||||
return _is_dev_file(ent)
|
||||
|
||||
|
||||
def _auto_pack(profiles: list[str], pc: pkgcomposer.PkgComposer):
|
||||
|
||||
@@ -32,6 +32,9 @@ class PkgComposer:
|
||||
def makedir(self, name: str):
|
||||
os.mkdir(f"{self.workdir}/bundle/{name}")
|
||||
|
||||
def makedirs(self, name: str):
|
||||
os.makedirs(f"{self.workdir}/bundle/{name}", exist_ok=True)
|
||||
|
||||
def addfile(self, src: str, dst: str):
|
||||
shutil.copy2(src, f"{self.workdir}/bundle/{dst}", follow_symlinks=False)
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
import os
|
||||
|
||||
import lib.cpp as cpp
|
||||
from lib.make import *
|
||||
|
||||
version("5.0.0")
|
||||
source_url("https://github.com/aws/aws-lc/archive/refs/tags/v5.0.0.tar.gz")
|
||||
|
||||
|
||||
def build():
|
||||
cpp.cmake(["-DBUILD_SHARED_LIBS=1"])
|
||||
cpp.ninja()
|
||||
cpp.ninja_install()
|
||||
os.chdir("usr")
|
||||
|
||||
|
||||
on_build(build)
|
||||
|
||||
package("aws-lc")
|
||||
cpp.use_auto_pack(["lib"])
|
||||
|
||||
package("aws-lc-bin")
|
||||
cpp.use_auto_pack(["bin"])
|
||||
|
||||
package("aws-lc-dev")
|
||||
cpp.use_auto_pack(["dev"])
|
||||
@@ -0,0 +1,23 @@
|
||||
import os
|
||||
|
||||
import lib.cpp as cpp
|
||||
from lib.make import *
|
||||
|
||||
version("1.13.2")
|
||||
source_url("https://github.com/ninja-build/ninja/archive/refs/tags/v1.13.2.tar.gz")
|
||||
|
||||
|
||||
def build():
|
||||
os.system("./configure.py --bootstrap")
|
||||
|
||||
|
||||
on_build(build)
|
||||
|
||||
|
||||
def pack_ninja(composer):
|
||||
composer.makedir("bin")
|
||||
composer.addfile("ninja", "bin/ninja")
|
||||
|
||||
|
||||
package("ninja")
|
||||
on_pack(pack_ninja)
|
||||
@@ -46,6 +46,13 @@ def run_build_package(package: str):
|
||||
print(f"Architecture {lib.arch.get_target()} is not supported for this package")
|
||||
exit(1)
|
||||
|
||||
# Run `pre_build` hooks
|
||||
for n in hooks.pre_build.keys():
|
||||
if n in lib.make._blocked_hooks:
|
||||
continue
|
||||
hooks.pre_build[n]()
|
||||
os.chdir(package_dir)
|
||||
|
||||
# Build the package
|
||||
if lib.make._on_build:
|
||||
os.chdir(lib.sources.sources_dir_name())
|
||||
@@ -54,10 +61,12 @@ def run_build_package(package: str):
|
||||
print("on_build(): Not defined")
|
||||
|
||||
# Run `post_build` hooks
|
||||
post_build_dir = os.getcwd()
|
||||
for n in hooks.post_build.keys():
|
||||
if n in lib.make._blocked_hooks:
|
||||
continue
|
||||
hooks.post_build[n]()
|
||||
os.chdir(post_build_dir)
|
||||
|
||||
# Pack packages
|
||||
for pkgname in lib.make._pkginfo.keys():
|
||||
|
||||
Reference in New Issue
Block a user