builder.py: builder_cls should be associated to spack.pkg module (#47269)
This commit is contained in:
parent
f81ca0cd89
commit
962115b386
@ -722,9 +722,8 @@ def _ensure_env_methods_are_ported_to_builders(pkgs, error_cls):
|
|||||||
)
|
)
|
||||||
builder_cls_names = [spack.builder.BUILDER_CLS[x].__name__ for x in build_system_names]
|
builder_cls_names = [spack.builder.BUILDER_CLS[x].__name__ for x in build_system_names]
|
||||||
|
|
||||||
module = pkg_cls.module
|
|
||||||
has_builders_in_package_py = any(
|
has_builders_in_package_py = any(
|
||||||
getattr(module, name, False) for name in builder_cls_names
|
spack.builder.get_builder_class(pkg_cls, name) for name in builder_cls_names
|
||||||
)
|
)
|
||||||
if not has_builders_in_package_py:
|
if not has_builders_in_package_py:
|
||||||
continue
|
continue
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
import spack.error
|
import spack.error
|
||||||
import spack.multimethod
|
import spack.multimethod
|
||||||
|
import spack.repo
|
||||||
|
|
||||||
#: Builder classes, as registered by the "builder" decorator
|
#: Builder classes, as registered by the "builder" decorator
|
||||||
BUILDER_CLS = {}
|
BUILDER_CLS = {}
|
||||||
@ -74,6 +75,14 @@ def __call__(self, spec, prefix):
|
|||||||
return self.phase_fn(self.builder.pkg, spec, prefix)
|
return self.phase_fn(self.builder.pkg, spec, prefix)
|
||||||
|
|
||||||
|
|
||||||
|
def get_builder_class(pkg, name: str) -> Optional[type]:
|
||||||
|
"""Return the builder class if a package module defines it."""
|
||||||
|
cls = getattr(pkg.module, name, None)
|
||||||
|
if cls and cls.__module__.startswith(spack.repo.ROOT_PYTHON_NAMESPACE):
|
||||||
|
return cls
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def _create(pkg):
|
def _create(pkg):
|
||||||
"""Return a new builder object for the package object being passed as argument.
|
"""Return a new builder object for the package object being passed as argument.
|
||||||
|
|
||||||
@ -99,9 +108,10 @@ class hierarchy (look at AspellDictPackage for an example of that)
|
|||||||
package_buildsystem = buildsystem_name(pkg)
|
package_buildsystem = buildsystem_name(pkg)
|
||||||
default_builder_cls = BUILDER_CLS[package_buildsystem]
|
default_builder_cls = BUILDER_CLS[package_buildsystem]
|
||||||
builder_cls_name = default_builder_cls.__name__
|
builder_cls_name = default_builder_cls.__name__
|
||||||
builder_cls = getattr(pkg.module, builder_cls_name, None)
|
builder_class = get_builder_class(pkg, builder_cls_name)
|
||||||
if builder_cls:
|
|
||||||
return builder_cls(pkg)
|
if builder_class:
|
||||||
|
return builder_class(pkg)
|
||||||
|
|
||||||
# Specialized version of a given buildsystem can subclass some
|
# Specialized version of a given buildsystem can subclass some
|
||||||
# base classes and specialize certain phases or methods or attributes.
|
# base classes and specialize certain phases or methods or attributes.
|
||||||
|
Loading…
Reference in New Issue
Block a user