From: Jason Zaman <perfinion@gentoo.org>
To: gentoo-dev@lists.gentoo.org
Cc: Jason Zaman <perfinion@gentoo.org>
Subject: [gentoo-dev] [PATCH 2/3] cuda.eclass: update to EAPI7, remove 0-4
Date: Tue, 18 Sep 2018 14:38:16 +0800 [thread overview]
Message-ID: <20180918063817.19338-2-perfinion@gentoo.org> (raw)
In-Reply-To: <20180918063817.19338-1-perfinion@gentoo.org>
cuda.eclass is only used from EAPI5,6 currently so remove support for
older EAPIs.
Updating to EAPI7 means removing versionator. It was only used to sort
the cuda versions. Instead first try the current GCC version, if that
fails try best_version, if that still fails just pick the last in
the list that works. They are already sorted and hopefully stay that
way so version_sort is not required.
Signed-off-by: Jason Zaman <perfinion@gentoo.org>
---
eclass/cuda.eclass | 81 +++++++++++++++++++++++++++++++-----------------------
1 file changed, 47 insertions(+), 34 deletions(-)
diff --git a/eclass/cuda.eclass b/eclass/cuda.eclass
index 688251f3a30..3a6fc3a31d1 100644
--- a/eclass/cuda.eclass
+++ b/eclass/cuda.eclass
@@ -1,12 +1,21 @@
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-inherit flag-o-matic toolchain-funcs versionator
+case "${EAPI:-0}" in
+ 0|1|2|3|4)
+ die "Unsupported EAPI=${EAPI:-0} (too old) for ${ECLASS}"
+ ;;
+ 5|6|7)
+ ;;
+ *)
+ die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}"
+ ;;
+esac
# @ECLASS: cuda.eclass
# @MAINTAINER:
# Justin Lecher <jlec@gentoo.org>
-# @SUPPORTED_EAPIS: 0 1 2 3 4 5 6
+# @SUPPORTED_EAPIS: 5 6 7
# @BLURB: Common functions for cuda packages
# @DESCRIPTION:
# This eclass contains functions to be used with cuda package. Currently it is
@@ -18,6 +27,9 @@ inherit flag-o-matic toolchain-funcs versionator
if [[ -z ${_CUDA_ECLASS} ]]; then
+inherit flag-o-matic toolchain-funcs
+[[ ${EAPI} == [56] ]] && inherit eapi7-ver
+
# @ECLASS-VARIABLE: NVCCFLAGS
# @DESCRIPTION:
# nvcc compiler flags (see nvcc --help), which should be used like
@@ -44,15 +56,15 @@ if [[ -z ${_CUDA_ECLASS} ]]; then
cuda_gccdir() {
debug-print-function ${FUNCNAME} "$@"
- local gcc_bindir ver args="" flag ret
+ local dirs gcc_bindir ver vers="" flag
# Currently we only support the gnu compiler suite
- if ! tc-is-gcc ; then
+ if ! tc-is-gcc ; then
ewarn "Currently we only support the gnu compiler suite"
return 2
fi
- while [ "$1" ]; do
+ while [[ "$1" ]]; do
case $1 in
-f)
flag="--compiler-bindir "
@@ -63,34 +75,50 @@ cuda_gccdir() {
shift
done
- if ! args=$(cuda-config -s); then
+ if ! vers="$(cuda-config -s)"; then
eerror "Could not execute cuda-config"
eerror "Make sure >=dev-util/nvidia-cuda-toolkit-4.2.9-r1 is installed"
die "cuda-config not found"
- else
- args=$(version_sort ${args})
- if [[ -z ${args} ]]; then
- die "Could not determine supported gcc versions from cuda-config"
+ fi
+ if [[ -z ${vers} ]]; then
+ die "Could not determine supported gcc versions from cuda-config"
+ fi
+
+ # Try the current gcc version first
+ ver=$(gcc-version)
+ if [[ -n "${ver}" ]] && [[ ${vers} =~ ${ver} ]]; then
+ dirs=( ${EPREFIX}/usr/*pc-linux-gnu/gcc-bin/${ver}*/ )
+ gcc_bindir="${dirs[${#dirs[@]}-1]}"
+ fi
+
+ if [[ -z ${gcc_bindir} ]]; then
+ ver=$(best_version "sys-devel/gcc")
+ ver=$(ver_cut 1-2 "${ver##*sys-devel/gcc-}")
+
+ if [[ -n "${ver}" ]] && [[ ${vers} =~ ${ver} ]]; then
+ dirs=( ${EPREFIX}/usr/*pc-linux-gnu/gcc-bin/${ver}*/ )
+ gcc_bindir="${dirs[${#dirs[@]}-1]}"
fi
fi
- for ver in ${args}; do
- has_version "=sys-devel/gcc-${ver}*" && \
- gcc_bindir="$(ls -d ${EPREFIX}/usr/*pc-linux-gnu/gcc-bin/${ver}* | tail -n 1)"
+ for ver in ${vers}; do
+ if has_version "=sys-devel/gcc-${ver}*"; then
+ dirs=( ${EPREFIX}/usr/*pc-linux-gnu/gcc-bin/${ver}*/ )
+ gcc_bindir="${dirs[${#dirs[@]}-1]}"
+ fi
done
if [[ -n ${gcc_bindir} ]]; then
if [[ -n ${flag} ]]; then
- ret="${flag}\"${gcc_bindir}\""
+ echo "${flag}\"${gcc_bindir%/}\""
else
- ret="${gcc_bindir}"
+ echo "${gcc_bindir%/}"
fi
- echo ${ret}
return 0
else
- eerror "Only gcc version(s) ${args} are supported,"
+ eerror "Only gcc version(s) ${vers} are supported,"
eerror "of which none is installed"
- die "Only gcc version(s) ${args} are supported"
+ die "Only gcc version(s) ${vers} are supported"
return 1
fi
}
@@ -116,15 +144,6 @@ cuda_sanitize() {
export NVCCFLAGS
}
-# @FUNCTION: cuda_pkg_setup
-# @DESCRIPTION:
-# Call cuda_src_prepare for EAPIs not supporting src_prepare
-cuda_pkg_setup() {
- debug-print-function ${FUNCNAME} "$@"
-
- cuda_src_prepare
-}
-
# @FUNCTION: cuda_src_prepare
# @DESCRIPTION:
# Sanitise and export NVCCFLAGS by default
@@ -134,13 +153,7 @@ cuda_src_prepare() {
cuda_sanitize
}
-case "${EAPI:-0}" in
- 0|1)
- EXPORT_FUNCTIONS pkg_setup ;;
- 2|3|4|5|6)
- EXPORT_FUNCTIONS src_prepare ;;
- *) die "EAPI=${EAPI} is not supported" ;;
-esac
+EXPORT_FUNCTIONS src_prepare
_CUDA_ECLASS=1
fi
--
2.16.4
next prev parent reply other threads:[~2018-09-18 6:39 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-18 6:38 [gentoo-dev] [PATCH 1/3] check-reqs.eclass: update to EAPI7 Jason Zaman
2018-09-18 6:38 ` Jason Zaman [this message]
2018-09-18 6:38 ` [gentoo-dev] [PATCH 3/3] cuda.eclass: Add version and sandbox helper methods Jason Zaman
2018-09-21 16:07 ` [gentoo-dev] [PATCH 1/3] check-reqs.eclass: update to EAPI7 Jason Zaman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180918063817.19338-2-perfinion@gentoo.org \
--to=perfinion@gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox