feat (lib): add autolink and autostrip
Signed-off-by: sisungo <[email protected]>
This commit is contained in:
+8
-1
@@ -1,9 +1,12 @@
|
||||
from typing import Callable, TypeAlias
|
||||
|
||||
from . import autopatch, autostrip
|
||||
from lib import pkgcomposer
|
||||
|
||||
from . import autolink, autopatch, autostrip
|
||||
|
||||
PreBuild: TypeAlias = Callable[[], None]
|
||||
PostBuild: TypeAlias = Callable[[], None]
|
||||
PostPack: TypeAlias = Callable[[pkgcomposer.PkgComposer], None]
|
||||
|
||||
pre_build: dict[str, PreBuild] = {
|
||||
"autopatch": autopatch.autopatch,
|
||||
@@ -12,3 +15,7 @@ pre_build: dict[str, PreBuild] = {
|
||||
post_build: dict[str, PostBuild] = {
|
||||
"autostrip": autostrip.autostrip,
|
||||
}
|
||||
|
||||
post_pack: dict[str, PostPack] = {
|
||||
"autolink": autolink.autolink,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import os
|
||||
|
||||
from lib import arch, common, make, pkgcomposer
|
||||
|
||||
|
||||
def autolink(composer: pkgcomposer.PkgComposer):
|
||||
os.chdir(composer.workdir + "/bundle/")
|
||||
|
||||
try:
|
||||
for i in common.treedir("bin"):
|
||||
if i.is_file():
|
||||
make.link(f"bin/{i.name}", "/bin/" + i.name)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
for i in common.treedir("lib"):
|
||||
if i.is_file():
|
||||
make.link(f"lib/{i.name}", "/lib/" + arch.get_target() + "/" + i.name)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
for i in common.treedir("include"):
|
||||
if i.is_file():
|
||||
make.link(
|
||||
f"include/{i.name}",
|
||||
"/lib/" + arch.get_target() + "/include/" + i.name,
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
+21
-1
@@ -1,2 +1,22 @@
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
from lib import common
|
||||
|
||||
strip = os.environ.get("STRIP", "strip")
|
||||
|
||||
|
||||
def _is_elf(filepath):
|
||||
with open(filepath, "rb") as f:
|
||||
return f.read(4) == b"\x7fELF"
|
||||
|
||||
|
||||
def autostrip():
|
||||
pass
|
||||
for ent in common.treedir("."):
|
||||
if not ent.is_file(follow_symlinks=False):
|
||||
continue
|
||||
if not (os.access(ent.path, os.X_OK) or ".so" in ent.name):
|
||||
continue
|
||||
if not _is_elf(ent.path):
|
||||
continue
|
||||
subprocess.run([strip, ent.path], check=True)
|
||||
|
||||
+14
-1
@@ -7,10 +7,13 @@ _key_version = "version"
|
||||
_key_description = "description"
|
||||
_key_on_pack = "on_pack"
|
||||
_key_arch_any = "arch_any"
|
||||
_key_links = "links"
|
||||
|
||||
_current_pkgname: str = _key_global
|
||||
_pkginfo: dict[str, dict[str, typing.Any]] = {
|
||||
_key_global: {},
|
||||
_key_global: {
|
||||
_key_links: [],
|
||||
},
|
||||
}
|
||||
_supported_arch: typing.Callable[[str], bool] = lambda x: True
|
||||
_on_build: typing.Callable[[], None] | None = None
|
||||
@@ -36,6 +39,16 @@ def arch_any():
|
||||
_pkginfo[_current_pkgname][_key_arch_any] = True
|
||||
|
||||
|
||||
def link(src: str, dst: str, default: bool = True):
|
||||
_pkginfo[_current_pkgname][_key_links] += [
|
||||
{
|
||||
"from": src,
|
||||
"to": dst,
|
||||
"default": default,
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
def supported_arch(s: list[str] | typing.Callable[[str], bool]):
|
||||
global _supported_arch
|
||||
if isinstance(s, list):
|
||||
|
||||
@@ -3,6 +3,7 @@ import importlib
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import typing
|
||||
|
||||
import hooks
|
||||
import lib.arch
|
||||
@@ -29,6 +30,18 @@ else:
|
||||
lib.arch.set_target(lib.arch.get_target())
|
||||
|
||||
|
||||
def run_hooks(map, arg: typing.Any = None):
|
||||
current_dir = os.getcwd()
|
||||
for n in map.keys():
|
||||
if n in lib.make._blocked_hooks:
|
||||
continue
|
||||
if arg:
|
||||
map[n](arg)
|
||||
else:
|
||||
map[n]()
|
||||
os.chdir(current_dir)
|
||||
|
||||
|
||||
def run_build_package(package: str):
|
||||
try:
|
||||
os.chdir(f"packages/{package}")
|
||||
@@ -47,11 +60,7 @@ def run_build_package(package: str):
|
||||
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)
|
||||
run_hooks(hooks.pre_build)
|
||||
|
||||
# Build the package
|
||||
if lib.make._on_build:
|
||||
@@ -61,12 +70,7 @@ 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)
|
||||
run_hooks(hooks.post_build)
|
||||
|
||||
# Pack packages
|
||||
for pkgname in lib.make._pkginfo.keys():
|
||||
@@ -89,10 +93,14 @@ def run_build_package(package: str):
|
||||
|
||||
pkginfo[lib.make._key_on_pack](composer)
|
||||
|
||||
# Run post_pack hooks
|
||||
run_hooks(hooks.post_pack, composer)
|
||||
|
||||
manifest = {
|
||||
"name": pkgname,
|
||||
"version": pkgver,
|
||||
"arch": pkgarch,
|
||||
"links": pkginfo[lib.make._key_links],
|
||||
}
|
||||
composer.write_manifest(manifest)
|
||||
composer.compose()
|
||||
|
||||
Reference in New Issue
Block a user