Add build-release.py updates from satellite libraries

[ci skip]
This commit is contained in:
Anonymous Maarten 2024-12-08 03:39:20 +01:00
parent 9c821dc21c
commit fc2fd42197

View file

@ -328,6 +328,10 @@ def configure_text(text: str, context: dict[str, str]) -> str:
return text return text
def configure_text_list(text_list: list[str], context: dict[str, str]) -> list[str]:
return [configure_text(text=e, context=context) for e in text_list]
class ArchiveFileTree: class ArchiveFileTree:
def __init__(self): def __init__(self):
self._tree: dict[str, NodeInArchive] = {} self._tree: dict[str, NodeInArchive] = {}
@ -349,7 +353,6 @@ class ArchiveFileTree:
target = dest_dir + s.symtarget target = dest_dir + s.symtarget
while True: while True:
new_target, n = re.subn(r"([^/]+/+[.]{2}/)", "", target) new_target, n = re.subn(r"([^/]+/+[.]{2}/)", "", target)
print(f"{target=} {new_target=}")
target = new_target target = new_target
if not n: if not n:
break break
@ -357,13 +360,14 @@ class ArchiveFileTree:
# Add files in first pass # Add files in first pass
for arcpath, node in self._tree.items(): for arcpath, node in self._tree.items():
assert node is not None, f"{arcpath} -> node"
if node.data is not None: if node.data is not None:
archiver.add_file_data(arcpath=arc_join(archive_base, arcpath), data=node.data, time=node.time, mode=node.mode) archiver.add_file_data(arcpath=arc_join(archive_base, arcpath), data=node.data, time=node.time, mode=node.mode)
assert node.arcpath is not None, f"{node=} has arcpath=None" assert node.arcpath is not None, f"{node=}"
added_files[node.arcpath] = node added_files[node.arcpath] = node
elif node.path is not None: elif node.path is not None:
archiver.add_file_path(arcpath=arc_join(archive_base, arcpath), path=node.path) archiver.add_file_path(arcpath=arc_join(archive_base, arcpath), path=node.path)
assert node.arcpath is not None, f"{node=} has arcpath=None" assert node.arcpath is not None, f"{node=}"
added_files[node.arcpath] = node added_files[node.arcpath] = node
elif node.symtarget is not None: elif node.symtarget is not None:
remaining_symlinks.add(node) remaining_symlinks.add(node)
@ -372,6 +376,8 @@ class ArchiveFileTree:
else: else:
raise ValueError(f"Invalid Archive Node: {repr(node)}") raise ValueError(f"Invalid Archive Node: {repr(node)}")
assert None not in added_files
# Resolve symlinks in second pass: zipfile does not support symlinks, so add files to zip archive # Resolve symlinks in second pass: zipfile does not support symlinks, so add files to zip archive
while True: while True:
if not remaining_symlinks: if not remaining_symlinks:
@ -547,6 +553,7 @@ class Releaser:
"PROJECT_VERSION": self.version, "PROJECT_VERSION": self.version,
"PROJECT_COMMIT": self.commit, "PROJECT_COMMIT": self.commit,
"PROJECT_REVISION": self.revision, "PROJECT_REVISION": self.revision,
"PROJECT_ROOT": str(self.root),
} }
if extra_context: if extra_context:
ctx.update(extra_context) ctx.update(extra_context)
@ -743,15 +750,21 @@ class Releaser:
install_path = build_parent_dir / f"install-{triplet}" install_path = build_parent_dir / f"install-{triplet}"
shutil.rmtree(install_path, ignore_errors=True) shutil.rmtree(install_path, ignore_errors=True)
build_path.mkdir(parents=True, exist_ok=True) build_path.mkdir(parents=True, exist_ok=True)
context = self.get_context({
"ARCH": arch,
"DEP_PREFIX": str(mingw_deps_path / triplet),
})
extra_args = configure_text_list(text_list=self.release_info["mingw"]["autotools"]["args"], context=context)
with self.section_printer.group(f"Configuring MinGW {triplet} (autotools)"): with self.section_printer.group(f"Configuring MinGW {triplet} (autotools)"):
extra_args = [arg.replace("@DEP_PREFIX@", str(mingw_deps_path / triplet)) for arg in self.release_info["mingw"]["autotools"]["args"]]
assert "@" not in " ".join(extra_args), f"@ should not be present in extra arguments ({extra_args})" assert "@" not in " ".join(extra_args), f"@ should not be present in extra arguments ({extra_args})"
self.executer.run([ self.executer.run([
self.root / "configure", self.root / "configure",
f"--prefix={install_path}", f"--prefix={install_path}",
f"--includedir={install_path}/include", f"--includedir=${{prefix}}/include",
f"--libdir={install_path}/lib", f"--libdir=${{prefix}}/lib",
f"--bindir={install_path}/bin", f"--bindir=${{prefix}}/bin",
f"--exec-prefix=${{prefix}}/bin",
f"--host={triplet}", f"--host={triplet}",
f"--build=x86_64-none-linux-gnu", f"--build=x86_64-none-linux-gnu",
] + extra_args, cwd=build_path, env=new_env) ] + extra_args, cwd=build_path, env=new_env)
@ -778,6 +791,12 @@ class Releaser:
assert arch not in mingw_archs assert arch not in mingw_archs
mingw_archs.add(arch) mingw_archs.add(arch)
context = self.get_context({
"ARCH": arch,
"DEP_PREFIX": str(mingw_deps_path / triplet),
})
extra_args = configure_text_list(text_list=self.release_info["mingw"]["cmake"]["args"], context=context)
build_path = build_parent_dir / f"build-{triplet}" build_path = build_parent_dir / f"build-{triplet}"
install_path = build_parent_dir / f"install-{triplet}" install_path = build_parent_dir / f"install-{triplet}"
shutil.rmtree(install_path, ignore_errors=True) shutil.rmtree(install_path, ignore_errors=True)
@ -788,7 +807,6 @@ class Releaser:
args_for_shared_static = (["-DBUILD_SHARED_LIBS=ON"], ["-DBUILD_SHARED_LIBS=OFF"]) args_for_shared_static = (["-DBUILD_SHARED_LIBS=ON"], ["-DBUILD_SHARED_LIBS=OFF"])
for arg_for_shared_static in args_for_shared_static: for arg_for_shared_static in args_for_shared_static:
with self.section_printer.group(f"Configuring MinGW {triplet} (CMake)"): with self.section_printer.group(f"Configuring MinGW {triplet} (CMake)"):
extra_args = [arg.replace("@DEP_PREFIX@", str(mingw_deps_path / triplet)) for arg in self.release_info["mingw"]["cmake"]["args"]]
assert "@" not in " ".join(extra_args), f"@ should not be present in extra arguments ({extra_args})" assert "@" not in " ".join(extra_args), f"@ should not be present in extra arguments ({extra_args})"
self.executer.run([ self.executer.run([
f"cmake", f"cmake",
@ -1246,6 +1264,10 @@ class Releaser:
zip_path = self.dist_path / f"{self.project}-devel-{self.version}-VC.zip" zip_path = self.dist_path / f"{self.project}-devel-{self.version}-VC.zip"
arc_root = f"{self.project}-{self.version}" arc_root = f"{self.project}-{self.version}"
def copy_files_devel(ctx):
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["files-devel"], file_mapping_root=self.root, context=ctx, time=self.arc_time)
logger.info("Collecting files...") logger.info("Collecting files...")
archive_file_tree = ArchiveFileTree() archive_file_tree = ArchiveFileTree()
if "msbuild" in self.release_info["msvc"]: if "msbuild" in self.release_info["msvc"]:
@ -1253,12 +1275,13 @@ class Releaser:
arch_platform = self._arch_to_vs_platform(arch=arch) arch_platform = self._arch_to_vs_platform(arch=arch)
platform_context = self.get_context(arch_platform.extra_context()) platform_context = self.get_context(arch_platform.extra_context())
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["msbuild"]["files-devel"], file_mapping_root=self.root, context=platform_context, time=self.arc_time) archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["msbuild"]["files-devel"], file_mapping_root=self.root, context=platform_context, time=self.arc_time)
copy_files_devel(ctx=platform_context)
if "cmake" in self.release_info["msvc"]: if "cmake" in self.release_info["msvc"]:
for arch in self.release_info["msvc"]["cmake"]["archs"]: for arch in self.release_info["msvc"]["cmake"]["archs"]:
arch_platform = self._arch_to_vs_platform(arch=arch) arch_platform = self._arch_to_vs_platform(arch=arch)
platform_context = self.get_context(arch_platform.extra_context()) platform_context = self.get_context(arch_platform.extra_context())
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["cmake"]["files-devel"], file_mapping_root=self._arch_platform_to_install_path(arch_platform), context=platform_context, time=self.arc_time) archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["cmake"]["files-devel"], file_mapping_root=self._arch_platform_to_install_path(arch_platform), context=platform_context, time=self.arc_time)
archive_file_tree.add_file_mapping(arc_dir=arc_root, file_mapping=self.release_info["msvc"]["files-devel"], file_mapping_root=self.root, context=self.get_context(), time=self.arc_time) copy_files_devel(ctx=platform_context)
with Archiver(zip_path=zip_path) as archiver: with Archiver(zip_path=zip_path) as archiver:
archive_file_tree.add_to_archiver(archive_base="", archiver=archiver) archive_file_tree.add_to_archiver(archive_base="", archiver=archiver)