Source code for spack_repo.builtin.build_systems.r
# Copyright Spack Project Developers. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from typing import List, Optional, Tuple
from spack.package import ClassProperty, classproperty, depends_on, extends, mkdirp
from .generic import GenericBuilder, Package
[docs]
class RBuilder(GenericBuilder):
"""The R builder provides a single phase that can be overridden:
1. :py:meth:`~.RBuilder.install`
It has sensible defaults, and for many packages the only thing
necessary will be to add dependencies.
"""
#: Names associated with package methods in the old build-system format
package_methods: Tuple[str, ...] = (
"configure_args",
"configure_vars",
) + GenericBuilder.package_methods
[docs]
def install(self, pkg, spec, prefix):
"""Installs an R package."""
mkdirp(pkg.module.r_lib_dir)
config_args = self.configure_args()
config_vars = self.configure_vars()
args = ["--vanilla", "CMD", "INSTALL"]
if config_args:
args.append(f"--configure-args={' '.join(config_args)}")
if config_vars:
args.append(f"--configure-vars={' '.join(config_vars)}")
args.extend([f"--library={pkg.module.r_lib_dir}", self.stage.source_path])
pkg.module.R(*args)
def _homepage(cls: "RPackage") -> Optional[str]:
if cls.cran:
return f"https://cloud.r-project.org/package={cls.cran}"
elif cls.bioc:
return f"https://bioconductor.org/packages/{cls.bioc}"
return None
def _urls(cls: "RPackage") -> List[str]:
if cls.cran:
return [
f"https://cran.r-project.org/src/contrib/{cls.cran}_{str(list(cls.versions)[0])}.tar.gz",
f"https://cran.r-project.org/src/contrib/Archive/{cls.cran}/{cls.cran}_{str(list(cls.versions)[0])}.tar.gz",
]
return []
def _list_url(cls: "RPackage") -> Optional[str]:
if cls.cran:
return f"https://cran.r-project.org/src/contrib/Archive/{cls.cran}/"
return None
def _git(cls: "RPackage") -> Optional[str]:
if cls.bioc:
return f"https://git.bioconductor.org/packages/{cls.bioc}"
return None
[docs]
class RPackage(Package):
"""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
"""
# package attributes that can be expanded to set the homepage, url,
# list_url, and git values
# For CRAN packages
cran: Optional[str] = None
# For Bioconductor packages
bioc: Optional[str] = None
GenericBuilder = RBuilder
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = "RPackage"
extends("r")
# needed for packages that need compiling
depends_on("gmake", type="build", when="%c")
depends_on("gmake", type="build", when="%cxx")
depends_on("gmake", type="build", when="%fortran")
homepage: ClassProperty[Optional[str]] = classproperty(_homepage)
urls: ClassProperty[List[str]] = classproperty(_urls)
list_url: ClassProperty[Optional[str]] = classproperty(_list_url)
git: ClassProperty[Optional[str]] = classproperty(_git)