1
0
mirror of https://github.com/0O0o0oOoO00/Alas.git synced 2026-05-14 17:19:25 +08:00
Files
Alas/pydep/tools/cmakebuilder.py
2025-08-10 20:10:37 +08:00

74 lines
1.9 KiB
Python

from copy import deepcopy
from dataclasses import asdict
from .builder import PackageBuilder
from .cmakelists import CMakeLists, CMakeDefine
class CMakePackageBuilder(PackageBuilder):
def __init__(self):
self.cmakelists: CMakeLists = None
def set_options(self, options):
if options is None:
return self
options_dict = asdict(options)
l = []
for k, v in options_dict.items():
if v is None:
continue
if isinstance(v, bool):
l.append(CMakeDefine(k, "ON" if v else "OFF"))
elif isinstance(v, str):
l.append(CMakeDefine(k, v))
else:
l.append(CMakeDefine(k, str(v)))
self.cmakelists.add_option(l)
return self
def set_cmakelists(self, cmakelists):
self.cmakelists = deepcopy(cmakelists)
return self
def get_cmakelists(self):
return self.cmakelists
def set_source_dir(self, source_dir):
if self.cmakelists is None:
self.cmakelists = CMakeLists(source_dir)
else:
self.cmakelists.set_source_dir(source_dir)
return self
def set_build_dir(self, build_dir):
self.cmakelists.set_build_dir(build_dir)
return self
def set_install_dir(self, install_dir):
self.cmakelists.set_install_dir(install_dir)
return self
def set_build_type(self, build_type):
self.cmakelists.set_build_type(build_type)
return self
def add_cmake_option(self, option):
self.cmakelists.add_option(option)
return self
def set_generator(self, generator):
self.cmakelists.set_generator(generator)
return self
def configure(self):
self.cmakelists.configure()
return self
def build(self):
self.cmakelists.build()
return self
def install(self):
self.cmakelists.install()
return self