summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralalazo <massimiliano.culpo@googlemail.com>2016-07-12 21:28:09 +0200
committeralalazo <massimiliano.culpo@googlemail.com>2016-07-13 09:27:09 +0200
commit97c2224cd6445c0e5395b4ae30a9f4d3bf5670e0 (patch)
tree505191f67b42f27d0f7c0610faf359e10d1f509b
parent813cb032c47b7b8507fba28a3629bec0d2b244cd (diff)
downloadspack-97c2224cd6445c0e5395b4ae30a9f4d3bf5670e0.tar.gz
spack-97c2224cd6445c0e5395b4ae30a9f4d3bf5670e0.tar.bz2
spack-97c2224cd6445c0e5395b4ae30a9f4d3bf5670e0.tar.xz
spack-97c2224cd6445c0e5395b4ae30a9f4d3bf5670e0.zip
package.py : extra arguments, fixed inheritance issue
- added attribute to hold extra arguments in PackageBase instances - fixed registration from within packages - examples : hdf5, lzo
-rw-r--r--lib/spack/spack/package.py16
-rw-r--r--var/spack/repos/builtin/packages/hdf5/package.py31
-rw-r--r--var/spack/repos/builtin/packages/lzo/package.py16
3 files changed, 41 insertions, 22 deletions
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index 5ceb1ce2a2..c61f8262f7 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -40,6 +40,8 @@ import textwrap
import time
import functools
import inspect
+import copy
+
from StringIO import StringIO
from urlparse import urlparse
@@ -135,7 +137,17 @@ class PackageMeta(type):
checks = getattr(meta, attr_name)
if checks:
for phase_name, funcs in checks.items():
- phase = attr_dict.get(PackageMeta.phase_fmt.format(phase_name))
+ try:
+ # Search for the phase in the attribute dictionary
+ phase = attr_dict[PackageMeta.phase_fmt.format(phase_name)]
+ except KeyError:
+ # If it is not there it's in the bases
+ # and we added a check. We need to copy
+ # and extend
+ for base in bases:
+ phase = getattr(base, PackageMeta.phase_fmt.format(phase_name), None)
+ attr_dict[PackageMeta.phase_fmt.format(phase_name)] = copy.deepcopy(phase)
+ phase = attr_dict[PackageMeta.phase_fmt.format(phase_name)]
getattr(phase, check_name).extend(funcs)
# Clear the attribute for the next class
setattr(meta, attr_name, {})
@@ -511,6 +523,8 @@ class PackageBase(object):
if self.is_extension:
spack.repo.get(self.extendee_spec)._check_extendable()
+ self.extra_args = {}
+
@property
def package_dir(self):
"""Return the directory where the package.py file lives."""
diff --git a/var/spack/repos/builtin/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py
index 51a5823aa5..54c74901f0 100644
--- a/var/spack/repos/builtin/packages/hdf5/package.py
+++ b/var/spack/repos/builtin/packages/hdf5/package.py
@@ -27,7 +27,7 @@ from spack import *
import shutil
-class Hdf5(Package):
+class Hdf5(AutotoolsPackage):
"""HDF5 is a data model, library, and file format for storing and managing
data. It supports an unlimited variety of datatypes, and is designed for
flexible and efficient I/O and for high volume and complex data.
@@ -58,13 +58,15 @@ class Hdf5(Package):
depends_on("szip", when='+szip')
depends_on("zlib")
- def validate(self, spec):
+ @AutotoolsPackage.precondition('configure')
+ def validate(self):
"""
Checks if incompatible variants have been activated at the same time
:param spec: spec of the package
:raises RuntimeError: in case of inconsistencies
"""
+ spec = self.spec
if '+fortran' in spec and not self.compiler.fc:
msg = 'cannot build a fortran variant without a fortran compiler'
raise RuntimeError(msg)
@@ -73,8 +75,8 @@ class Hdf5(Package):
msg = 'cannot use variant +threadsafe with either +cxx or +fortran'
raise RuntimeError(msg)
- def install(self, spec, prefix):
- self.validate(spec)
+ def configure_args(self):
+ spec = self.spec
# Handle compilation after spec validation
extra_args = []
@@ -137,16 +139,19 @@ class Hdf5(Package):
'--disable-hl',
])
- configure(
- "--prefix=%s" % prefix,
- "--with-zlib=%s" % spec['zlib'].prefix,
- *extra_args)
- make()
- make("install")
- self.check_install(spec)
-
- def check_install(self, spec):
+ return ["--with-zlib=%s" % spec['zlib'].prefix] + extra_args
+ #configure(
+ # "--prefix=%s" % prefix,
+ # "--with-zlib=%s" % spec['zlib'].prefix,
+ # *extra_args)
+ #make()
+ #make("install")
+ #self.check_install(spec)
+
+ @AutotoolsPackage.sanity_check('install')
+ def check_install(self):
"Build and run a small program to test the installed HDF5 library"
+ spec = self.spec
print "Checking HDF5 installation..."
checkdir = "spack-check"
with working_dir(checkdir, create=True):
diff --git a/var/spack/repos/builtin/packages/lzo/package.py b/var/spack/repos/builtin/packages/lzo/package.py
index 0961bbb58c..edf6dc1d4c 100644
--- a/var/spack/repos/builtin/packages/lzo/package.py
+++ b/var/spack/repos/builtin/packages/lzo/package.py
@@ -25,7 +25,7 @@
from spack import *
-class Lzo(Package):
+class Lzo(AutotoolsPackage):
"""Real-time data compression library"""
homepage = 'https://www.oberhumer.com/opensource/lzo/'
@@ -37,13 +37,13 @@ class Lzo(Package):
version('2.06', '95380bd4081f85ef08c5209f4107e9f8')
version('2.05', 'c67cda5fa191bab761c7cb06fe091e36')
- def install(self, spec, prefix):
- configure_args = [
- '--prefix={0}'.format(prefix),
+ def configure_args(self):
+ return [
'--disable-dependency-tracking',
'--enable-shared'
]
- configure(*configure_args)
- make()
- make('check')
- make('install')
+
+ @AutotoolsPackage.sanity_check('build')
+ def check(self):
+ if self.extra_args.get('build-tests', False):
+ make('check')