New "extends" relation adds another special list to the package class.
This commit is contained in:
parent
88afad3e46
commit
ebe0c1d83a
@ -314,6 +314,9 @@ class SomePackage(Package):
|
|||||||
"""Specs of virtual packages provided by this package, keyed by name."""
|
"""Specs of virtual packages provided by this package, keyed by name."""
|
||||||
provided = {}
|
provided = {}
|
||||||
|
|
||||||
|
"""Specs of packages this one extends, keyed by name."""
|
||||||
|
extendees = {}
|
||||||
|
|
||||||
"""Specs of conflicting packages, keyed by name. """
|
"""Specs of conflicting packages, keyed by name. """
|
||||||
conflicted = {}
|
conflicted = {}
|
||||||
|
|
||||||
|
@ -107,8 +107,9 @@ def depends_on(*specs):
|
|||||||
"""Adds a dependencies local variable in the locals of
|
"""Adds a dependencies local variable in the locals of
|
||||||
the calling class, based on args. """
|
the calling class, based on args. """
|
||||||
pkg = get_calling_package_name()
|
pkg = get_calling_package_name()
|
||||||
|
clocals = caller_locals()
|
||||||
|
dependencies = clocals.setdefault('dependencies', {})
|
||||||
|
|
||||||
dependencies = caller_locals().setdefault('dependencies', {})
|
|
||||||
for string in specs:
|
for string in specs:
|
||||||
for spec in spack.spec.parse(string):
|
for spec in spack.spec.parse(string):
|
||||||
if pkg == spec.name:
|
if pkg == spec.name:
|
||||||
@ -116,6 +117,29 @@ def depends_on(*specs):
|
|||||||
dependencies[spec.name] = spec
|
dependencies[spec.name] = spec
|
||||||
|
|
||||||
|
|
||||||
|
def extends(*specs):
|
||||||
|
"""Same as depends_on, but dependency is symlinked into parent prefix.
|
||||||
|
|
||||||
|
This is for Python and other language modules where the module
|
||||||
|
needs to be installed into the prefix of the Python installation.
|
||||||
|
Spack handles this by installing modules into their own prefix,
|
||||||
|
but allowing ONE module version to be symlinked into a parent
|
||||||
|
Python install at a time.
|
||||||
|
|
||||||
|
"""
|
||||||
|
pkg = get_calling_package_name()
|
||||||
|
clocals = caller_locals()
|
||||||
|
dependencies = clocals.setdefault('dependencies', {})
|
||||||
|
extendees = clocals.setdefault('extendees', {})
|
||||||
|
|
||||||
|
for string in specs:
|
||||||
|
for spec in spack.spec.parse(string):
|
||||||
|
if pkg == spec.name:
|
||||||
|
raise CircularReferenceError('depends_on', pkg)
|
||||||
|
dependencies[spec.name] = spec
|
||||||
|
extendees[spec.name] = spec
|
||||||
|
|
||||||
|
|
||||||
def provides(*specs, **kwargs):
|
def provides(*specs, **kwargs):
|
||||||
"""Allows packages to provide a virtual dependency. If a package provides
|
"""Allows packages to provide a virtual dependency. If a package provides
|
||||||
'mpi', other packages can declare that they depend on "mpi", and spack
|
'mpi', other packages can declare that they depend on "mpi", and spack
|
||||||
|
Loading…
Reference in New Issue
Block a user