diff --git a/eclass/R-packages.eclass b/eclass/R-packages.eclass index 6cbf9d7d35..51765af2b4 100644 --- a/eclass/R-packages.eclass +++ b/eclass/R-packages.eclass @@ -1,9 +1,25 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 +# @ECLASS: R-packages.eclass +# @AUTHOR: +# André Erdmann +# Denis Dupeyron +# Benda Xu +# Alessandro Barbieri +# @BLURB: eclass to build R packages +# @MAINTAINER: +# Alessandro Barbieri +# @SUPPORTED_EAPIS: 7 + inherit eutils optfeature toolchain-funcs -EXPORT_FUNCTIONS src_unpack src_prepare src_compile src_install pkg_postinst +case ${EAPI} in + 7) ;; + *) die "${ECLASS}: EAPI ${EAPI} unsupported." +esac + +EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_install pkg_postinst SRC_URI="mirror://cran/src/contrib/${PN}_${PV}.tar.gz" HOMEPAGE="https://cran.r-project.org/package=${PN}" @@ -12,14 +28,24 @@ SLOT="0" DEPEND="dev-lang/R" RDEPEND="${DEPEND}" +BDEPEND="sys-apps/pkgcore" -dodocrm() { +# @FUNCTION: _movelink +# @INTERNAL +# @USAGE: [ ] +# @DESCRIPTION: +# will contain symlinks to everything in +_movelink() { if [ -e "${1}" ]; then - dodoc -r "${1}" - rm -rf "${1}" || die + local rp1="$(realpath ${1})" || die + mv "${rp1}" "${2}" || die + cp -rsf "${2}" "${rp1}" || die fi } +# @FUNCTION: R-packages_src_unpack +# @DESCRIPTION: +# function to unpack R packages into the right folder R-packages_src_unpack() { unpack ${A} if [[ -d "${PN//_/.}" ]] && [[ ! -d "${P}" ]]; then @@ -27,43 +53,91 @@ R-packages_src_unpack() { fi } +# @FUNCTION: R-packages_src_prepare +# @DESCRIPTION: +# function to remove unwanted files from the sources R-packages_src_prepare() { rm -f LICENSE || die default } +# @FUNCTION: R-packages_src_configure +# @DESCRIPTION: +# dummy function to disable configure +R-packages_src_configure() { :; } + +# @FUNCTION: R-packages_src_compile +# @DESCRIPTION: +# function that will pass some environment variables to R and then build/install the package R-packages_src_compile() { - MAKEFLAGS="AR=$(tc-getAR) CFLAGS=${CFLAGS// /\\ } CXXFLAGS=${CXXFLAGS// /\\ } FFLAGS=${FFLAGS// /\\ } FCFLAGS=${FCFLAGS// /\\ } LDFLAGS=${LDFLAGS// /\\ }" R CMD INSTALL . -l "${WORKDIR}" "--byte-compile" || die + MAKEFLAGS=" \ + ${MAKEFLAGS// /\\ } \ + AR=$(tc-getAR) \ + CC=$(tc-getCC) \ + CPP=$(tc-getCPP) \ + CXX=$(tc-getCXX) \ + FC=$(tc-getFC) \ + LD=$(tc-getLD) \ + NM=$(tc-getNM) \ + RANLIB=$(tc-getRANLIB) \ + CFLAGS=${CFLAGS// /\\ } \ + CPPFLAGS=${CPPFLAGS// /\\ } \ + CXXFLAGS=${CXXFLAGS// /\\ } \ + FFLAGS=${FFLAGS// /\\ } \ + FCFLAGS=${FCFLAGS// /\\ } \ + LDFLAGS=${LDFLAGS// /\\ } \ + MAKEOPTS=${MAKEOPTS// /\\ } \ + " \ + R CMD INSTALL . -l "${WORKDIR}" "--byte-compile" || die } + +# @FUNCTION: R-packages_src_install +# @DESCRIPTION: +# function to move the files in the right folders +# documentation and examples to docsdir, symlinked back to R site-library (to allow access from within R) +# everything else to R site-library R-packages_src_install() { - cd "${WORKDIR}/${PN//_/.}" || die + pushd "${WORKDIR}/${PN//_/.}" || die - dodocrm examples || die - #dodocrm DESCRIPTION || die #keep this - dodocrm NEWS.md || die - dodocrm README.md || die - dodocrm html || die + local DOCS_DIR="${ED}/usr/share/doc/${PF}" - if [ -e doc ]; then - if [ -e doc/html ]; then - docinto "${DOCSDIR}/html" - dodoc -r doc/*.html - rm -r doc/*.html || die - docompress -x "${DOCSDIR}/html" - fi + mkdir -p "${DOCS_DIR}" || die - docinto "${DOCSDIR}" - dodoc -r doc/. - rm -r doc || die + for i in NEWS.md README.md DESCRIPTION examples ; do + _movelink "${i}" "${DOCS_DIR}/${i}" || die + done + + if [ -e html ]; then + _movelink html "${DOCS_DIR}/html" || die + docompress -x "${DOCS_DIR}/html" fi + if [ -e doc ]; then + pushd doc || die + for i in * ; do + _movelink "${i}" "${DOCS_DIR}/${i}" || die + done + popd || die + fi + if [ -e doc/html ]; then + docompress -x "${DOCS_DIR}/html" + fi + docompress -x "${DOCS_DIR}" insinto "/usr/$(get_libdir)/R/site-library" doins -r "${WORKDIR}/${PN//_/.}" } +# @FUNCTION: R-packages_pkg_postinst +# @DESCRIPTION: +# function that will prompt to install the suggested packages if they exist R-packages_pkg_postinst() { if [ -v SUGGESTED_PACKAGES ]; then - optfeature "having the upstream suggested packages" "${SUGGESTED_PACKAGES}" + for p in ${SUGGESTED_PACKAGES} ; do + pexist=$(pquery -n1 "${p}" 2>/dev/null) || die + if [ -n "${pexist}" ]; then + optfeature "having the upstream suggested package" "${p}" + fi + done fi }