diff options
-rw-r--r-- | lib/spack/spack/packages.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/spack/spack/packages.py b/lib/spack/spack/packages.py index 00834c95d5..4f9f606c89 100644 --- a/lib/spack/spack/packages.py +++ b/lib/spack/spack/packages.py @@ -69,7 +69,10 @@ class PackageDB(object): if not spec in self.instances: package_class = self.get_class_for_package_name(spec.name) - self.instances[spec.name] = package_class(spec) + try: + self.instances[spec.name] = package_class(spec) + except Exception, e: + raise FailedConstructorError(spec.name, e) return self.instances[spec.name] @@ -227,3 +230,12 @@ class UnknownPackageError(spack.error.SpackError): def __init__(self, name): super(UnknownPackageError, self).__init__("Package %s not found." % name) self.name = name + + +class FailedConstructorError(spack.error.SpackError): + """Raised when a package's class constructor fails.""" + def __init__(self, name, reason): + super(FailedConstructorError, self).__init__( + "Class constructor failed for package '%s'." % name, + str(reason)) + self.name = name |