summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGregory Becker <becker33@llnl.gov>2016-03-18 09:35:56 -0700
committerGregory Becker <becker33@llnl.gov>2016-03-18 09:35:56 -0700
commit1fa38689d87480bb0d291af9b9cf0dbcf7557eb5 (patch)
tree355f2a2e0a8471a70f736491891cde47d8e6ac9b /lib
parentb93a2ba1cf2644256fc7b8295f6ce279853975d7 (diff)
downloadspack-1fa38689d87480bb0d291af9b9cf0dbcf7557eb5.tar.gz
spack-1fa38689d87480bb0d291af9b9cf0dbcf7557eb5.tar.bz2
spack-1fa38689d87480bb0d291af9b9cf0dbcf7557eb5.tar.xz
spack-1fa38689d87480bb0d291af9b9cf0dbcf7557eb5.zip
Created flatten_dependencies function that dummy packages can use to create sane install environments.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/directory_layout.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/spack/spack/directory_layout.py b/lib/spack/spack/directory_layout.py
index 242eb1afa0..9f17404062 100644
--- a/lib/spack/spack/directory_layout.py
+++ b/lib/spack/spack/directory_layout.py
@@ -33,6 +33,7 @@ import yaml
import llnl.util.tty as tty
from llnl.util.filesystem import join_path, mkdirp
+from llnl.util.link_tree import *
from spack.spec import Spec
from spack.error import SpackError
@@ -131,6 +132,23 @@ class DirectoryLayout(object):
raise NotImplementedError()
+ def flatten_dependencies(self, spec, flat_dir):
+ """Make each dependency of spec present in dir via symlink."""
+ for dep in spec.traverse(root=False):
+ name = dep.name
+
+ dep_path = self.path_for_spec(dep)
+ dep_files = LinkTree(dep_path)
+
+ os.mkdir(flat_dir+'/'+name)
+
+ conflict = dep_files.find_conflict(flat_dir+'/'+name)
+ if conflict:
+ raise DependencyConflictError(conflict)
+
+ dep_files.merge(flat_dir+'/'+name)
+
+
def path_for_spec(self, spec):
"""Return an absolute path from the root to a directory for the spec."""
_check_concrete(spec)