Source code for spack.build_systems.r

# Copyright Spack Project Developers. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from typing import Optional, Tuple

import llnl.util.lang as lang
from llnl.util.filesystem import mkdirp

from spack.directives import extends

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 legacy_methods: Tuple[str, ...] = ( "configure_args", "configure_vars", ) + GenericBuilder.legacy_methods
[docs] def configure_args(self): """Arguments to pass to install via ``--configure-args``.""" return []
[docs] def configure_vars(self): """Arguments to pass to install via ``--configure-vars``.""" return []
[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)
[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") @lang.classproperty def homepage(cls): if cls.cran: return f"https://cloud.r-project.org/package={cls.cran}" elif cls.bioc: return f"https://bioconductor.org/packages/{cls.bioc}" @lang.classproperty def url(cls): if cls.cran: return f"https://cloud.r-project.org/src/contrib/{cls.cran}_{str(list(cls.versions)[0])}.tar.gz" @lang.classproperty def list_url(cls): if cls.cran: return f"https://cloud.r-project.org/src/contrib/Archive/{cls.cran}/" @lang.classproperty def git(cls): if cls.bioc: return f"https://git.bioconductor.org/packages/{cls.bioc}"