diff options
-rw-r--r-- | lib/spack/spack/build_systems/r.py | 36 | ||||
-rw-r--r-- | lib/spack/spack/cmd/create.py | 6 | ||||
-rw-r--r-- | var/spack/repos/builtin/packages/r-rmpi/package.py | 33 |
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), + ] |