summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/build_systems/r.py36
-rw-r--r--lib/spack/spack/cmd/create.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rmpi/package.py33
3 files changed, 57 insertions, 18 deletions
diff --git a/lib/spack/spack/build_systems/r.py b/lib/spack/spack/build_systems/r.py
index 618ba398e1..a659f75b98 100644
--- a/lib/spack/spack/build_systems/r.py
+++ b/lib/spack/spack/build_systems/r.py
@@ -30,7 +30,10 @@ from spack.package import PackageBase, run_after
class RPackage(PackageBase):
- """Specialized class for packages that are built using R
+ """Specialized class for packages that are built using R.
+
+ For more information on the R build system, see:
+ https://stat.ethz.ch/R-manual/R-devel/library/utils/html/INSTALL.html
This class provides a single phase that can be overridden:
@@ -49,12 +52,37 @@ class RPackage(PackageBase):
depends_on('r', type=('build', 'run'))
+ def configure_args(self, spec, prefix):
+ """Arguments to pass to install via ``--configure-args``."""
+ return []
+
+ def configure_vars(self, spec, prefix):
+ """Arguments to pass to install via ``--configure-vars``."""
+ return []
+
def install(self, spec, prefix):
"""Installs an R package."""
- inspect.getmodule(self).R(
- 'CMD', 'INSTALL',
+
+ config_args = self.configure_args(spec, prefix)
+ config_vars = self.configure_vars(spec, prefix)
+
+ args = [
+ 'CMD',
+ 'INSTALL'
+ ]
+
+ if config_args:
+ args.append('--configure-args={0}'.format(' '.join(config_args)))
+
+ if config_vars:
+ args.append('--configure-vars={0}'.format(' '.join(config_vars)))
+
+ args.extend([
'--library={0}'.format(self.module.r_lib_dir),
- self.stage.source_path)
+ self.stage.source_path
+ ])
+
+ inspect.getmodule(self).R(*args)
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py
index 89ba050a53..648400e41e 100644
--- a/lib/spack/spack/cmd/create.py
+++ b/lib/spack/spack/cmd/create.py
@@ -265,7 +265,11 @@ class RPackageTemplate(PackageTemplate):
# depends_on('r-foo', type=('build', 'run'))"""
body = """\
- # FIXME: Override install() if necessary."""
+ def configure_args(self, spec, prefix):
+ # FIXME: Add arguments to pass to install via --configure-args
+ # FIXME: If not needed delete this function
+ args = []
+ return args"""
def __init__(self, name, *args):
# If the user provided `--name r-rcpp`, don't rename it r-r-rcpp
diff --git a/var/spack/repos/builtin/packages/r-rmpi/package.py b/var/spack/repos/builtin/packages/r-rmpi/package.py
index 7b955545d8..4ef46791ec 100644
--- a/var/spack/repos/builtin/packages/r-rmpi/package.py
+++ b/var/spack/repos/builtin/packages/r-rmpi/package.py
@@ -38,18 +38,25 @@ class RRmpi(RPackage):
depends_on('mpi')
depends_on('r@2.15.1:')
- def install(self, spec, prefix):
- if 'mpich' in spec:
- Rmpi_type = 'MPICH'
- elif 'mvapich' in spec:
- Rmpi_type = 'MVAPICH'
- else:
+ # The following MPI types are not supported
+ conflicts('^intel-mpi')
+ conflicts('^intel-parallel-studio')
+ conflicts('^mvapich2')
+ conflicts('^spectrum-mpi')
+
+ def configure_args(self, spec, prefix):
+ mpi_name = spec['mpi'].name
+
+ # The type of MPI. Supported values are:
+ # OPENMPI, LAM, MPICH, MPICH2, or CRAY
+ if mpi_name == 'openmpi':
Rmpi_type = 'OPENMPI'
+ elif mpi_name == 'mpich':
+ Rmpi_type = 'MPICH2'
+ else:
+ raise InstallError('Unsupported MPI type')
- my_mpi = spec['mpi']
-
- R('CMD', 'INSTALL',
- '--configure-args=--with-Rmpi-type=%s' % Rmpi_type +
- ' --with-mpi=%s' % my_mpi.prefix,
- '--library={0}'.format(self.module.r_lib_dir),
- self.stage.source_path)
+ return [
+ '--with-Rmpi-type={0}'.format(Rmpi_type),
+ '--with-mpi={0}'.format(spec['mpi'].prefix),
+ ]