From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-dev@lists.gentoo.org
Subject: Re: [gentoo-dev] [PATCH] fortran-2.eclass: support EAPI 7
Date: Tue, 30 Oct 2018 08:18:58 +0100 [thread overview]
Message-ID: <1540883938.1250.6.camel@gentoo.org> (raw)
In-Reply-To: <20181029035705.59f926ed6e7e604baa84de0c@gentoo.org>
[-- Attachment #1: Type: text/plain, Size: 9446 bytes --]
On Mon, 2018-10-29 at 03:57 +0300, Andrew Savchenko wrote:
> On Sun, 28 Oct 2018 19:29:28 +0100 Michał Górny wrote:
> > On Sun, 2018-10-28 at 01:38 +0300, Andrew Savchenko wrote:
> > > Hi all!
> > >
> > > The only blocker for EAPI 7 update is eutils inheritance, but it
> > > seems to be not used within the current eclass code, probably a
> > > remnant from older days. So it is removed.
> > >
> > > Looks like no other EAPI 7 specific changes needed.
> > >
> >
> > Please use -U99999 to include more context to the patches.
I'm going to include a few 'easy cleanup' comments since EAPI 7
is a good opportunity to improve the eclass. I'm going to skip horribly
bad design decisions since I suppose nobody cares.
> diff --git a/eclass/fortran-2.eclass b/eclass/fortran-2.eclass
> index 820cbbcb49bd..1baf776e368a 100644
> --- a/eclass/fortran-2.eclass
> +++ b/eclass/fortran-2.eclass
> @@ -1,285 +1,285 @@
> -# Copyright 1999-2017 Gentoo Foundation
> +# Copyright 1999-2018 Gentoo Authors
> # Distributed under the terms of the GNU General Public License v2
>
> # @ECLASS: fortran-2.eclass
> # @MAINTAINER:
> # jlec@gentoo.org
> # sci@gentoo.org
> # @AUTHOR:
> # Author Justin Lecher <jlec@gentoo.org>
> # Test functions provided by Sebastien Fabbro and Kacper Kowalik
> -# @SUPPORTED_EAPIS: 4 5 6
> +# @SUPPORTED_EAPIS: 4 5 6 7
> # @BLURB: Simplify fortran compiler management
> # @DESCRIPTION:
> # If you need a fortran compiler, then you should be inheriting this eclass.
> # In case you only need optional support, please export FORTRAN_NEEDED before
> # inheriting the eclass.
> #
> # The eclass tests for working fortran compilers
> # and exports the variables FC and F77.
> # Optionally, it checks for extended capabilities based on
> # the variable options selected in the ebuild
> # The only phase function exported is fortran-2_pkg_setup.
> # @EXAMPLE:
> # FORTRAN_NEEDED="lapack fortran"
> #
> # inherit fortran-2
> #
> # FORTRAN_NEED_OPENMP=1
>
> -inherit eutils toolchain-funcs
> +inherit toolchain-funcs
>
> case ${EAPI:-0} in
> - 4|5|6) EXPORT_FUNCTIONS pkg_setup ;;
> + 4|5|6|7) EXPORT_FUNCTIONS pkg_setup ;;
> *) die "EAPI=${EAPI} is not supported" ;;
> esac
>
> if [[ ! ${_FORTRAN_2_CLASS} ]]; then
>
> # @ECLASS-VARIABLE: FORTRAN_NEED_OPENMP
> # @DESCRIPTION:
> # Set to "1" in order to automatically have the eclass abort if the fortran
> # compiler lacks openmp support.
> : ${FORTRAN_NEED_OPENMP:=0}
>
> # @ECLASS-VARIABLE: FORTRAN_STANDARD
> # @DESCRIPTION:
> # Set this, if a special dialect needs to be supported.
> # Generally not needed as default is sufficient.
> #
> # Valid settings are any combination of: 77 90 95 2003
> : ${FORTRAN_STANDARD:=77}
>
> # @ECLASS-VARIABLE: FORTRAN_NEEDED
> # @DESCRIPTION:
> # If your package has an optional fortran support, set this variable
> # to the space separated list of USE triggering the fortran
> # dependency.
> #
> # e.g. FORTRAN_NEEDED=lapack would result in
> #
> # DEPEND="lapack? ( virtual/fortran )"
> #
> # If unset, we always depend on virtual/fortran.
> : ${FORTRAN_NEEDED:=always}
>
> for _f_use in ${FORTRAN_NEEDED}; do
> case ${_f_use} in
> always)
> DEPEND+=" virtual/fortran"
> RDEPEND+=" virtual/fortran"
> break
> ;;
> no)
> break
> ;;
> test)
> DEPEND+=" ${_f_use}? ( virtual/fortran )"
> ;;
> *)
> DEPEND+=" ${_f_use}? ( virtual/fortran )"
> RDEPEND+=" ${_f_use}? ( virtual/fortran )"
> ;;
> esac
> done
> unset _f_use
>
> # @FUNCTION: fortran_int64_abi_fflags
> # @DESCRIPTION:
> # Return the Fortran compiler flag to enable 64 bit integers for
> # array indices
> # @CODE
> fortran_int64_abi_fflags() {
> debug-print-function ${FUNCNAME} "${@}"
>
> _FC=$(tc-getFC)
Any reason not to make it local?
> if [[ ${_FC} == *gfortran* ]]; then
> echo "-fdefault-integer-8"
> elif [[ ${_FC} == ifort ]]; then
> echo "-integer-size 64"
> else
> die "Compiler flag for 64bit interger for ${_FC} unknown"
> fi
> }
>
> # @FUNCTION: _fortran_write_testsuite
> # @INTERNAL
> # @DESCRIPTION:
> # writes fortran test code
> _fortran_write_testsuite() {
> debug-print-function ${FUNCNAME} "${@}"
>
> local filebase=${T}/test-fortran
>
> # f77 code
> cat <<- EOF > "${filebase}.f"
|| die
> end
> EOF
>
> # f90/95 code
> cat <<- EOF > "${filebase}.f90"
|| die
> end
Also, why different indentation?
> EOF
>
> # f2003 code
> cat <<- EOF > "${filebase}.f03"
|| die
> procedure(), pointer :: p
> end
> EOF
> }
>
> # @FUNCTION: _fortran_compile_test
> # @USAGE: <compiler> [dialect]
> # @INTERNAL
> # @DESCRIPTION:
> # Takes fortran compiler as first argument and dialect as second.
> # Checks whether the passed fortran compiler speaks the fortran dialect
> _fortran_compile_test() {
> debug-print-function ${FUNCNAME} "${@}"
>
> local filebase=${T}/test-fortran
> local fcomp=${1}
> local fdia=${2}
> local fcode=${filebase}.f${fdia}
> local ret
>
> [[ $# -lt 1 ]] && \
> die "_fortran_compile_test() needs at least one argument"
>
> [[ -f ${fcode} ]] || _fortran_write_testsuite
>
> ${fcomp} "${fcode}" -o "${fcode}.x" \
> >> "${T}"/_fortran_compile_test.log 2>&1
> ret=$?
>
> rm -f "${fcode}.x"
> return ${ret}
> }
>
> # @FUNCTION: _fortran-has-openmp
> # @RETURN: return code of the compiler
> # @INTERNAL
> # @DESCRIPTION:
> # See if the fortran supports OpenMP.
> _fortran-has-openmp() {
> debug-print-function ${FUNCNAME} "${@}"
>
> local flag
> local filebase=${T}/test-fc-openmp
> local fcode=${filebase}.f
> local ret
> local _fc=$(tc-getFC)
>
> cat <<- EOF > "${fcode}"
|| die
> call omp_get_num_threads
> end
> EOF
>
> for flag in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp; do
> ${_fc} ${flag} "${fcode}" -o "${fcode}.x" \
> &>> "${T}"/_fortran_compile_test.log
> ret=$?
> (( ${ret} )) || break
This (( ... )) is unreadable at best; please replace it with clear
condition.
> done
>
> rm -f "${fcode}.x"
> return ${ret}
> }
>
> # @FUNCTION: _fortran_die_msg
> # @INTERNAL
> # @DESCRIPTION:
> # Detailed description how to handle fortran support
> _fortran_die_msg() {
> debug-print-function ${FUNCNAME} "${@}"
>
> echo
Don't mix echo with eerror.
> eerror "Please install currently selected gcc version with USE=fortran."
> eerror "If you intend to use a different compiler then gfortran, please"
> eerror "set FC variable accordingly and take care that the necessary"
> eerror "fortran dialects are supported."
> echo
> die "Currently no working fortran compiler is available (see ${T}/_fortran_compile_test.log for information)"
> }
>
> # @FUNCTION: _fortran_test_function
> # @INTERNAL
> # @DESCRIPTION:
> # Internal test function for working fortran compiler.
> # It is called in fortran-2_pkg_setup.
> _fortran_test_function() {
> debug-print-function ${FUNCNAME} "${@}"
>
> local dialect
>
> : ${F77:=$(tc-getFC)}
>
> : ${FORTRAN_STANDARD:=77}
> for dialect in ${FORTRAN_STANDARD}; do
> case ${dialect} in
> 77) _fortran_compile_test $(tc-getF77) || \
> _fortran_die_msg ;;
> 90|95) _fortran_compile_test $(tc-getFC) 90 || \
> _fortran_die_msg ;;
> 2003) _fortran_compile_test $(tc-getFC) 03 || \
> _fortran_die_msg ;;
> 2008) die "Future" ;;
> *) die "${dialect} is not a Fortran dialect." ;;
> esac
> done
>
> tc-export F77 FC
> einfo "Using following Fortran compiler:"
> einfo " F77: ${F77}"
> einfo " FC: ${FC}"
>
> if [[ ${FORTRAN_NEED_OPENMP} == 1 ]]; then
> if _fortran-has-openmp; then
> einfo "${FC} has OPENMP support"
> else
> die "Please install current gcc with USE=openmp or set the FC variable to a compiler that supports OpenMP"
> fi
> fi
> }
>
> # @FUNCTION: _fortran-2_pkg_setup
> # @INTERNAL
> # @DESCRIPTION:
> # _The_ fortran-2_pkg_setup() code
> _fortran-2_pkg_setup() {
> for _f_use in ${FORTRAN_NEEDED}; do
> case ${_f_use} in
> always)
> _fortran_test_function && break
> ;;
> no)
> einfo "Forcing fortran support off"
> break
> ;;
> *)
> if use ${_f_use}; then
> _fortran_test_function && break
> else
> unset FC
> unset F77
> fi
This contradicts the dependency atoms.
If FORTRAN_NEEDED="foo bar", you'll get:
DEP="foo? ( virtual/fortran ) bar? ( virtual/fortran )"
However, with USE="foo -bar" this will first set the compiler
for USE=foo, then reset it for USE=bar.
> ;;
> esac
> done
> }
>
>
> # @FUNCTION: fortran-2_pkg_setup
> # @DESCRIPTION:
> # Setup functionality,
> # checks for a valid fortran compiler and optionally for its openmp support.
> fortran-2_pkg_setup() {
> debug-print-function ${FUNCNAME} "${@}"
>
> if [[ ${MERGE_TYPE} != binary ]]; then
> _fortran-2_pkg_setup
> fi
> }
>
> _FORTRAN_2_ECLASS=1
> fi
--
Best regards,
Michał Górny
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 963 bytes --]
next prev parent reply other threads:[~2018-10-30 7:19 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-27 22:38 [gentoo-dev] [PATCH] fortran-2.eclass: support EAPI 7 Andrew Savchenko
2018-10-28 18:29 ` Michał Górny
2018-10-29 0:57 ` Andrew Savchenko
2018-10-30 7:18 ` Michał Górny [this message]
2018-11-01 22:27 ` Andrew Savchenko
2018-11-02 0:47 ` Michael Orlitzky
2018-11-02 14:20 ` Michał Górny
2018-11-05 15:37 ` Andrew Savchenko
2018-10-29 22:52 ` Andreas K. Huettel
2018-11-01 22:26 ` Andrew Savchenko
2018-11-01 22:25 ` [gentoo-dev] [PATCH v2] " Andrew Savchenko
2018-11-02 10:27 ` Ulrich Mueller
2018-11-05 14:30 ` Andrew Savchenko
2018-11-05 15:37 ` [gentoo-dev] [PATCH v3 2/2] " Andrew Savchenko
2018-11-17 11:38 ` Andrew Savchenko
2018-11-05 15:38 ` [gentoo-dev] [PATCH v3 1/2] " Andrew Savchenko
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=1540883938.1250.6.camel@gentoo.org \
--to=mgorny@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