summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorGlenn Johnson <glenn-johnson@uiowa.edu>2016-04-06 16:44:22 -0500
committerGlenn Johnson <glenn-johnson@uiowa.edu>2016-04-06 16:44:22 -0500
commitfbabfc593d10a7fc35944e72e2eb8b1ebf4818eb (patch)
treeb7437c674bcd89eb2174bbbe66d5ab7081085db0 /var
parent8ef9d685427e60ce5af660be5f27d36683ea8845 (diff)
downloadspack-fbabfc593d10a7fc35944e72e2eb8b1ebf4818eb.tar.gz
spack-fbabfc593d10a7fc35944e72e2eb8b1ebf4818eb.tar.bz2
spack-fbabfc593d10a7fc35944e72e2eb8b1ebf4818eb.tar.xz
spack-fbabfc593d10a7fc35944e72e2eb8b1ebf4818eb.zip
Make R extensable and add a couple of packages for verification.
Added R as a build system so that the create template will have the correct configure line. Added a regex for version parsing as the R URLs are a little odd.
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/R/package.py54
-rw-r--r--var/spack/repos/builtin/packages/r-abind/package.py15
-rw-r--r--var/spack/repos/builtin/packages/r-magic/package.py15
3 files changed, 84 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/R/package.py b/var/spack/repos/builtin/packages/R/package.py
index 2471dff09b..3a76416f27 100644
--- a/var/spack/repos/builtin/packages/R/package.py
+++ b/var/spack/repos/builtin/packages/R/package.py
@@ -1,4 +1,14 @@
+import functools
+import glob
+import inspect
+import os
+import re
+from contextlib import closing
+
+import spack
+from llnl.util.lang import match_predicate
from spack import *
+from spack.util.environment import *
class R(Package):
@@ -9,6 +19,8 @@ class R(Package):
"""
homepage = "https://www.r-project.org"
url = "http://cran.cnr.berkeley.edu/src/base/R-3/R-3.1.2.tar.gz"
+
+ extendable = True
version('3.2.3', '1ba3dac113efab69e706902810cc2970')
version('3.2.2', '57cef5c2e210a5454da1979562a10e5b')
@@ -47,3 +59,45 @@ class R(Package):
configure(*options)
make()
make('install')
+
+ # ========================================================================
+ # Set up environment to make install easy for R extensions.
+ # ========================================================================
+
+ @property
+ def r_lib_dir(self):
+ return os.path.join('lib64', 'R', 'library')
+
+ def setup_dependent_environment(self, spack_env, run_env, extension_spec):
+ # Set R_LIBS to include the library dir for the
+ # extension and any other R extensions it depends on.
+ r_libs_path = []
+ for d in extension_spec.traverse():
+ if d.package.extends(self.spec):
+ r_libs_path.append(os.path.join(d.prefix, self.r_lib_dir))
+
+ r_libs_path = ':'.join(r_libs_path)
+ spack_env.set('R_LIBS', r_libs_path)
+
+ # For run time environment set only the path for extension_spec and prepend it to R_LIBS
+ if extension_spec.package.extends(self.spec):
+ run_env.prepend_path('R_LIBS', os.path.join(extension_spec.prefix, self.r_lib_dir))
+
+
+ def setup_dependent_package(self, module, ext_spec):
+ """
+ Called before R modules' install() methods.
+
+ In most cases, extensions will only need to have one line::
+
+ R('CMD', 'INSTALL', '--library=%s' % self.module.r_lib_dir, '%s' % self.stage.archive_file)
+ """
+ # R extension builds can have a global R executable function
+ module.R = Executable(join_path(self.spec.prefix.bin, 'R'))
+
+ # Add variable for library directry
+ module.r_lib_dir = os.path.join(ext_spec.prefix, self.r_lib_dir)
+
+ # Make the site packages directory for extensions, if it does not exist already.
+ if ext_spec.package.is_extension:
+ mkdirp(module.r_lib_dir)
diff --git a/var/spack/repos/builtin/packages/r-abind/package.py b/var/spack/repos/builtin/packages/r-abind/package.py
new file mode 100644
index 0000000000..54d399c432
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-abind/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class RAbind(Package):
+ """Combine multidimensional arrays into a single array. This is a generalization of 'cbind' and 'rbind'. Works with vectors, matrices, and higher-dimensional arrays. Also provides functions 'adrop', 'asub', and 'afill' for manipulating, extracting and replacing data in arrays."""
+
+ homepage = "https://cran.r-project.org/"
+ url = "https://cran.r-project.org/src/contrib/abind_1.4-3.tar.gz"
+
+ version('1.4-3', '10fcf80c677b991bf263d38be35a1fc5', expand=False)
+
+ extends('R')
+
+ def install(self, spec, prefix):
+
+ R('CMD', 'INSTALL', '--library=%s' % self.module.r_lib_dir, '%s' % self.stage.archive_file)
diff --git a/var/spack/repos/builtin/packages/r-magic/package.py b/var/spack/repos/builtin/packages/r-magic/package.py
new file mode 100644
index 0000000000..5f25b2a162
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-magic/package.py
@@ -0,0 +1,15 @@
+from spack import *
+
+class RMagic(Package):
+ """A collection of efficient, vectorized algorithms for the creation and investigation of magic squares and hypercubes, including a variety of functions for the manipulation and analysis of arbitrarily dimensioned arrays."""
+ homepage = "https://cran.r-project.org/"
+ url = "https://cran.r-project.org/src/contrib/magic_1.5-6.tar.gz"
+
+ version('1.5-6', 'a68e5ced253b2196af842e1fc84fd029', expand=False)
+
+ extends('R')
+
+ depends_on('r-abind')
+
+ def install(self, spec, prefix):
+ R('CMD', 'INSTALL', '--library=%s' % self.module.r_lib_dir, '%s' % self.stage.archive_file)