diff --git a/src/outpost/barbican/config.py b/src/outpost/barbican/config.py index e062c55..22eeb07 100644 --- a/src/outpost/barbican/config.py +++ b/src/outpost/barbican/config.py @@ -60,7 +60,14 @@ "type": "object", "properties": { "scm": { "$ref": "urn:barbican:scm" }, - "config": { "type": "string" } + "config": { "type": "string" }, + "build": { + "type": "object", + "properties": { + "options": { "$ref": "urn:barbican:build#/properties/options" } + }, + "required": [ "options" ] + } }, "required": [ "scm", "config" ], "additionalProperties": false @@ -77,7 +84,14 @@ "type": "object", "properties": { "scm": { "$ref": "urn:barbican:scm" }, - "config": { "type": "string" } + "config": { "type": "string" }, + "build": { + "type": "object", + "properties": { + "options": { "$ref": "urn:barbican:build#/properties/options" } + }, + "required": [ "options" ] + } }, "required": [ "scm", "config" ], "additionalProperties": false diff --git a/src/outpost/barbican/package/meson.py b/src/outpost/barbican/package/meson.py index 1c5e936..a479fe9 100644 --- a/src/outpost/barbican/package/meson.py +++ b/src/outpost/barbican/package/meson.py @@ -18,7 +18,7 @@ def build_options(self) -> list[str]: opts.append("--pkgconfig.relocatable") opts.append(f"--pkg-config-path={self.pkgconfig_dir}") opts.append(f"-Dconfig={str(self._dotconfig)}") - opts.extend(self._config["build_opts"] if "build_opts" in self._config else list()) + opts.extend([f"-D{k}={str(v)}" for k, v in self._extra_build_opts.items()]) return opts @working_directory_attr("src_dir") diff --git a/src/outpost/barbican/package/package.py b/src/outpost/barbican/package/package.py index 6032e26..a19c0a7 100644 --- a/src/outpost/barbican/package/package.py +++ b/src/outpost/barbican/package/package.py @@ -50,6 +50,10 @@ def __getitem__(self, key): class Package(ABC): __backend_factories: T.ClassVar[BackendFactoryMap] = BackendFactoryMap() + __built_in_options: T.ClassVar[list[str]] = [ + "static_pie", + ] + @unique class Type(StrEnum): """Package type enumerate.""" @@ -103,6 +107,19 @@ def __init__( # XXX: Enforce path rel to project configs dir self._dotconfig = (Path(self._parent.path.project_dir) / dotconfig).resolve(strict=True) + self._built_in_build_opts = dict() + self._extra_build_opts = dict() + if "build" in self._config: + build_opts = ( + self._config["build"]["options"] if "options" in self._config["build"] else dict() + ) + self._built_in_build_opts = dict( + filter(lambda key: key in self.__built_in_options, build_opts.items()) + ) + self._extra_build_opts = dict( + filter(lambda key: key not in self.__built_in_options, build_opts.items()) + ) + @property def name(self) -> str: return self._name