Skip to content
Snippets Groups Projects
Commit ebe0c1d8 authored by Todd Gamblin's avatar Todd Gamblin
Browse files

New "extends" relation adds another special list to the package class.

parent 88afad3e
No related branches found
No related tags found
No related merge requests found
......@@ -314,6 +314,9 @@ class SomePackage(Package):
"""Specs of virtual packages provided by this package, keyed by name."""
provided = {}
"""Specs of packages this one extends, keyed by name."""
extendees = {}
"""Specs of conflicting packages, keyed by name. """
conflicted = {}
......
......@@ -107,8 +107,9 @@ def depends_on(*specs):
"""Adds a dependencies local variable in the locals of
the calling class, based on args. """
pkg = get_calling_package_name()
clocals = caller_locals()
dependencies = clocals.setdefault('dependencies', {})
dependencies = caller_locals().setdefault('dependencies', {})
for string in specs:
for spec in spack.spec.parse(string):
if pkg == spec.name:
......@@ -116,6 +117,29 @@ def depends_on(*specs):
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):
"""Allows packages to provide a virtual dependency. If a package provides
'mpi', other packages can declare that they depend on "mpi", and spack
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment