[+] update packaging
1. update cli and cli_bootstrap; 1.1. use /meson and /pyproject build dirs to fix collision for install step;
This commit is contained in:
parent
ea63c67280
commit
1626974759
2
deps/com.github.aiortc.aiortc
vendored
2
deps/com.github.aiortc.aiortc
vendored
@ -1 +1 @@
|
||||
Subproject commit 64d8fecc5740fb77dcd40ef45a8b3c74c2187ba0
|
||||
Subproject commit 857be4a1fb1c07e2a239b61ce49b34cdd1698467
|
@ -1,6 +1,7 @@
|
||||
import dataclasses
|
||||
import io
|
||||
import glob
|
||||
import os
|
||||
import pathlib
|
||||
import logging
|
||||
import sys
|
||||
@ -13,6 +14,7 @@ from .os import shutil_which
|
||||
from typing import (
|
||||
Optional,
|
||||
Literal,
|
||||
Any,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@ -130,6 +132,7 @@ class CLI(abc.ABC):
|
||||
argv: Optional[list[str]] = None,
|
||||
output_dir: Optional[pathlib.Path] = None,
|
||||
force: Optional[bool] = None,
|
||||
env: Optional[dict[str, str]] = None,
|
||||
) -> None:
|
||||
project = self.projects[project_name]
|
||||
|
||||
@ -147,12 +150,16 @@ class CLI(abc.ABC):
|
||||
force=force,
|
||||
)
|
||||
|
||||
if env is None:
|
||||
env = dict()
|
||||
|
||||
cmd = [
|
||||
sys.executable,
|
||||
'-m',
|
||||
'build',
|
||||
'-w', '-n',
|
||||
'-Csetup-args=-Dmodes=pyproject',
|
||||
'-Cbuild-dir=%s' % str(project.build_dir / 'pyproject'),
|
||||
'-Csetup-args=-Dinstall_path=%s' % str(project.dest_dir),
|
||||
# '-Cbuild-dir=%s' % str(project.build_dir),
|
||||
str(project.source_dir),
|
||||
@ -161,7 +168,12 @@ class CLI(abc.ABC):
|
||||
if not output_dir is None:
|
||||
cmd.extend(['-o', str(output_dir)])
|
||||
|
||||
subprocess.check_call(cmd)
|
||||
logger.info(dict(env=env))
|
||||
|
||||
subprocess.check_call(
|
||||
cmd,
|
||||
env=dict(list(os.environ.items())) | env,
|
||||
)
|
||||
|
||||
def meson_install(
|
||||
self,
|
||||
@ -184,7 +196,7 @@ class CLI(abc.ABC):
|
||||
shutil_which('meson', True,),
|
||||
'install',
|
||||
'-C',
|
||||
project.build_dir,
|
||||
project.build_dir / 'meson',
|
||||
'--destdir', project.dest_dir,
|
||||
*argv,
|
||||
])
|
||||
@ -218,7 +230,7 @@ class CLI(abc.ABC):
|
||||
subprocess.check_call([
|
||||
shutil_which('ninja', True),
|
||||
'-C',
|
||||
str(project.build_dir),
|
||||
str(project.build_dir / 'meson'),
|
||||
*argv,
|
||||
])
|
||||
|
||||
@ -236,7 +248,7 @@ class CLI(abc.ABC):
|
||||
shutil_which('meson', True,),
|
||||
'compile',
|
||||
'-C',
|
||||
project.build_dir,
|
||||
project.build_dir / 'meson',
|
||||
*argv,
|
||||
])
|
||||
|
||||
@ -252,15 +264,15 @@ class CLI(abc.ABC):
|
||||
argv = []
|
||||
|
||||
if force:
|
||||
if project.build_dir.exists():
|
||||
logger.info(dict(action='removing build dir', path=project.build_dir))
|
||||
shutil.rmtree(project.build_dir)
|
||||
if (project.build_dir / 'meson').exists():
|
||||
logger.info(dict(action='removing build dir', path=project.build_dir / 'meson'))
|
||||
shutil.rmtree(project.build_dir / 'meson')
|
||||
|
||||
cmd = [
|
||||
shutil_which('meson', True,),
|
||||
'setup',
|
||||
str(project.source_dir),
|
||||
str(project.build_dir),
|
||||
str(project.build_dir / 'meson'),
|
||||
'-Dmodes=["meson"]',
|
||||
# '-Dpkgconfig.relocatable=true',
|
||||
'-Dprefix=/',
|
||||
|
@ -1,17 +1,43 @@
|
||||
#!/usr/bin/env python3
|
||||
import glob
|
||||
import dataclasses
|
||||
import pathlib
|
||||
import sys
|
||||
import subprocess
|
||||
import os
|
||||
import logging
|
||||
|
||||
env_path = pathlib.Path(__file__).parent / '.venv'
|
||||
from typing import (Self, Optional,)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class BootstrapSettings:
|
||||
env_path: pathlib.Path
|
||||
python_path: pathlib.Path
|
||||
|
||||
@classmethod
|
||||
def get(
|
||||
cls,
|
||||
base_dir: Optional[pathlib.Path] = None,
|
||||
) -> Self:
|
||||
if base_dir is None:
|
||||
base_dir = pathlib.Path.cwd()
|
||||
|
||||
env_path = base_dir / '.venv'
|
||||
python_path = env_path / 'bin' / 'python3'
|
||||
|
||||
if not env_path.exists():
|
||||
return cls(
|
||||
env_path=env_path,
|
||||
python_path=python_path,
|
||||
)
|
||||
|
||||
def env_bootstrap() -> None:
|
||||
bootstrap_settings = BootstrapSettings.get()
|
||||
|
||||
subprocess.check_call([
|
||||
'uv', 'venv', '--seed', '--offline',
|
||||
str(env_path)
|
||||
str(bootstrap_settings.env_path)
|
||||
])
|
||||
|
||||
subprocess.check_call([
|
||||
@ -19,13 +45,13 @@ if not env_path.exists():
|
||||
'pip',
|
||||
'install',
|
||||
'-p',
|
||||
python_path,
|
||||
bootstrap_settings.python_path,
|
||||
'--offline',
|
||||
'uv',
|
||||
])
|
||||
|
||||
subprocess.check_call([
|
||||
python_path,
|
||||
bootstrap_settings.python_path,
|
||||
'-m',
|
||||
'uv', 'pip', 'install',
|
||||
'--offline',
|
||||
@ -39,29 +65,50 @@ if not env_path.exists():
|
||||
)
|
||||
if len(early_wheels) > 0:
|
||||
subprocess.check_call([
|
||||
python_path,
|
||||
bootstrap_settings.python_path,
|
||||
'-m',
|
||||
'uv', 'pip', 'install',
|
||||
'--offline',
|
||||
*early_wheels,
|
||||
])
|
||||
|
||||
def paths_equal(
|
||||
a: pathlib.Path | str,
|
||||
b: pathlib.Path | str
|
||||
) -> bool:
|
||||
return (
|
||||
os.path.abspath(str(a)) ==
|
||||
os.path.abspath(str(b))
|
||||
)
|
||||
|
||||
if __name__ == '__main__':
|
||||
if pathlib.Path(sys.executable).absolute() != python_path.absolute():
|
||||
def run() -> None:
|
||||
bootstrap_settings = BootstrapSettings.get()
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
if not bootstrap_settings.env_path.exists():
|
||||
env_bootstrap()
|
||||
|
||||
logger.info([sys.executable, sys.argv, bootstrap_settings.python_path])
|
||||
|
||||
if not paths_equal(sys.executable, bootstrap_settings.python_path):
|
||||
os.execv(
|
||||
str(python_path),
|
||||
str(bootstrap_settings.python_path),
|
||||
[
|
||||
str(python_path),
|
||||
str(bootstrap_settings.python_path),
|
||||
*sys.argv,
|
||||
]
|
||||
)
|
||||
|
||||
os.execv(
|
||||
str(python_path),
|
||||
str(bootstrap_settings.python_path),
|
||||
[
|
||||
str(python_path),
|
||||
str(bootstrap_settings.python_path),
|
||||
pathlib.Path(__file__).parent / 'cli.py',
|
||||
*sys.argv[1:],
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
run()
|
Loading…
Reference in New Issue
Block a user