mirror of
https://github.com/0O0o0oOoO00/Alas.git
synced 2026-05-14 17:19:25 +08:00
74 lines
1.9 KiB
Python
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
|