summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/package.py26
-rw-r--r--var/spack/repos/builtin/packages/libelf/package.py3
2 files changed, 27 insertions, 2 deletions
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index 696adaf896..02fb3e5834 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -318,6 +318,17 @@ class Package(object):
"""Most packages are NOT extendable. Set to True if you want extensions."""
extendable = False
+ """List of prefix-relative file paths. If these do not exist after
+ install, or if they exist but are not files, sanity checks fail.
+ """
+ sanity_check_files = []
+
+ """List of prefix-relative directory paths. If these do not exist
+ after install, or if they exist but are not directories, sanity
+ checks will fail.
+ """
+ sanity_check_dirs = []
+
def __init__(self, spec):
# this determines how the package should be built.
@@ -909,7 +920,7 @@ class Package(object):
raise e
# Ensure that something was actually installed.
- self._sanity_check_install()
+ self.sanity_check_prefix()
# Copy provenance into the install directory on success
log_install_path = spack.install_layout.build_log_path(self.spec)
@@ -952,7 +963,18 @@ class Package(object):
spack.hooks.post_install(self)
- def _sanity_check_install(self):
+ def sanity_check_prefix(self):
+ """This function checks whether install succeeded."""
+ def check_paths(path_list, filetype, predicate):
+ for path in path_list:
+ abs_path = os.path.join(self.prefix, path)
+ if not predicate(abs_path):
+ raise InstallError("Install failed for %s. No such %s in prefix: %s"
+ % (self.name, filetype, path))
+
+ check_paths(self.sanity_check_files, 'file', os.path.isfile)
+ check_paths(self.sanity_check_dirs, 'directory', os.path.isdir)
+
installed = set(os.listdir(self.prefix))
installed.difference_update(spack.install_layout.hidden_file_paths)
if not installed:
diff --git a/var/spack/repos/builtin/packages/libelf/package.py b/var/spack/repos/builtin/packages/libelf/package.py
index 29bc21b65c..0fcb56c164 100644
--- a/var/spack/repos/builtin/packages/libelf/package.py
+++ b/var/spack/repos/builtin/packages/libelf/package.py
@@ -38,6 +38,9 @@ class Libelf(Package):
provides('elf')
+ sanity_check_files = ['include/libelf.h']
+ sanity_check_dirs = ['lib']
+
def install(self, spec, prefix):
configure("--prefix=" + prefix,
"--enable-shared",