Source code for spack.build_systems.r

# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import inspect
from typing import Optional, Tuple

import llnl.util.lang as lang

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.""" config_args = self.configure_args() config_vars = self.configure_vars() args = ["--vanilla", "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.pkg.module.r_lib_dir), self.stage.source_path]) inspect.getmodule(self.pkg).R(*args)
[docs]class RPackage(Package): """Specialized class for packages that are built using R. For more information on the R build system, see: """ # 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 maintainers = ["glennpj"] #: 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 "" + cls.cran elif cls.bioc: return "" + cls.bioc @lang.classproperty def url(cls): if cls.cran: return ( "" + cls.cran + "_" + str(list(cls.versions)[0]) + ".tar.gz" ) @lang.classproperty def list_url(cls): if cls.cran: return "" + cls.cran + "/" @property def git(self): if self.bioc: return "" + self.bioc