223 lines
5.4 KiB
Bash
223 lines
5.4 KiB
Bash
|
# Copyright 1999-2004 Gentoo Foundation
|
||
|
# Distributed under the terms of the GNU General Public License v2
|
||
|
# $Header: /var/cvsroot/gentoo-x86/eclass/fortran.eclass,v 1.21 2009/03/07 10:02:33 maekke Exp $
|
||
|
#
|
||
|
# Author: Danny van Dyk <kugelfang@gentoo.org>
|
||
|
#
|
||
|
|
||
|
inherit eutils autotools
|
||
|
|
||
|
DESCRIPTION="Based on the ${ECLASS} eclass"
|
||
|
|
||
|
IUSE="debug"
|
||
|
|
||
|
#DEPEND="virtual/fortran" # Let's aim for this...
|
||
|
|
||
|
# Which Fortran Compiler has been selected ?
|
||
|
export FORTRANC
|
||
|
|
||
|
# These are the options to ./configure / econf that enable the usage
|
||
|
# of a specific Fortran Compiler. If your package uses a different
|
||
|
# option that the one listed here, overwrite it in your ebuild.
|
||
|
g77_CONF="--with-f77"
|
||
|
f2c_CONF="--with-f2c"
|
||
|
|
||
|
# This function prints the necessary options for the currently selected
|
||
|
# Fortran Compiler.
|
||
|
fortran_conf() {
|
||
|
echo $(eval echo \${$(echo -n ${FORTRANC})_CONF})
|
||
|
}
|
||
|
|
||
|
# need_fortran(<profiles>):
|
||
|
# profiles = <profile> ... <profile>
|
||
|
#
|
||
|
# profile:
|
||
|
# * gfortran - GCC Fortran 95
|
||
|
# * g77 - GCC Fortran 77
|
||
|
# * f2c - Fortran 2 C Translator
|
||
|
# * ifc - Intel Fortran Compiler
|
||
|
# * f95 - Sun Studio Fortran Compiler
|
||
|
#
|
||
|
# Checks if at least one of <profiles> is installed.
|
||
|
# Checks also if F77 (the fortran compiler to use) is available
|
||
|
# on the System.
|
||
|
need_fortran() {
|
||
|
if [ -z "$*" ]; then
|
||
|
eerror "Call need_fortran with at least one argument !"
|
||
|
fi
|
||
|
local AVAILABLE
|
||
|
local PROFILE
|
||
|
for PROFILE in $@; do
|
||
|
case ${PROFILE} in
|
||
|
gfortran)
|
||
|
if [ -x "$(type -P gfortran 2> /dev/null)" ]; then
|
||
|
AVAILABLE="${AVAILABLE} gfortran"
|
||
|
fi
|
||
|
;;
|
||
|
g77)
|
||
|
if [ -x "$(type -P g77 2> /dev/null)" ]; then
|
||
|
AVAILABLE="${AVAILABLE} g77"
|
||
|
fi
|
||
|
;;
|
||
|
f2c)
|
||
|
if [ -x "$(type -P f2c 2> /dev/null)" ]; then
|
||
|
AVAILABLE="${AVAILABLE} f2c"
|
||
|
fi
|
||
|
;;
|
||
|
ifc)
|
||
|
case ${ARCH} in
|
||
|
x86|ia64|amd64)
|
||
|
if [ -x "$(type -P ifort 2> /dev/null)" ]; then
|
||
|
AVAILABLE="${AVAILABLE} ifort"
|
||
|
elif [ -x "$(type -P ifc 2> /dev/null)" ]; then
|
||
|
AVAILABLE="${AVAILABLE} ifc"
|
||
|
fi
|
||
|
;;
|
||
|
*)
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
f95)
|
||
|
case ${ARCH} in
|
||
|
x86|amd64)
|
||
|
if [ -x "$(type -P f95 2> /dev/null)" ]; then
|
||
|
AVAILABLE="${AVAILABLE} f95"
|
||
|
fi
|
||
|
;;
|
||
|
*)
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
# add the ${CHOST} variants so that one may do FC=$(potageq envvar CHOST)-gfortran
|
||
|
for A in ${AVAILABLE}; do
|
||
|
AVAILABLE="${AVAILABLE} ${CHOST}-${A}"
|
||
|
done
|
||
|
|
||
|
AVAILABLE="${AVAILABLE/^[[:space:]]}"
|
||
|
use debug && echo ${AVAILABLE}
|
||
|
if [ -z "${AVAILABLE}" ]; then
|
||
|
eerror "None of the needed Fortran Compilers ($@) is installed."
|
||
|
eerror "To install one of these, choose one of the following steps:"
|
||
|
i=1
|
||
|
for PROFILE in $@; do
|
||
|
case ${PROFILE} in
|
||
|
gfortran)
|
||
|
eerror "[${i}] USE=\"fortran\" emerge =sys-devel/gcc-4*"
|
||
|
;;
|
||
|
g77)
|
||
|
eerror "[${i}] USE=\"fortran\" emerge =sys-devel/gcc-3*"
|
||
|
;;
|
||
|
f2c)
|
||
|
eerror "[${i}] emerge dev-lang/f2c"
|
||
|
;;
|
||
|
ifc)
|
||
|
case ${ARCH} in
|
||
|
x86|ia64)
|
||
|
eerror "[${i}] emerge dev-lang/ifc"
|
||
|
;;
|
||
|
*)
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
f95)
|
||
|
case ${ARCH} in
|
||
|
x86|amd64)
|
||
|
eerror "[${i}] emerge dev-lang/sunstudio"
|
||
|
;;
|
||
|
*)
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
esac
|
||
|
i=$((i + 1))
|
||
|
done
|
||
|
die "Install a Fortran Compiler !"
|
||
|
else
|
||
|
einfo "You need one of these Fortran Compilers: $@"
|
||
|
einfo "Installed are: ${AVAILABLE}"
|
||
|
if [ -n "${F77}" -o -n "${FC}" -o -n "${F2C}" ]; then
|
||
|
if [ -n "${F77}" ]; then
|
||
|
FC="${F77}" # F77 overwrites FC
|
||
|
fi
|
||
|
if [ -n "${FC}" -a -n "${F2C}" ]; then
|
||
|
ewarn "Using ${FC} and f2c is impossible. Disabling F2C !"
|
||
|
F2C="" # Disabling f2c
|
||
|
MY_FORTRAN="$(basename ${FC})" # set MY_FORTRAN to filename of
|
||
|
# the Fortran Compiler
|
||
|
else
|
||
|
if [ -n "${F2C}" ]; then
|
||
|
MY_FORTRAN="$(basename ${F2C})"
|
||
|
elif [ -n "${FC}" ]; then
|
||
|
MY_FORTRAN="$(basename ${FC})"
|
||
|
else
|
||
|
MY_FORTRAN="$(basename ${F77})"
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# default to gfortran if available, g77 if not
|
||
|
use debug && echo "MY_FORTRAN: \"${MY_FORTRAN}\""
|
||
|
if hasq gfortran ${AVAILABLE}; then
|
||
|
MY_FORTRAN=${MY_FORTRAN:=gfortran}
|
||
|
elif hasq g77 ${AVAILABLE}; then
|
||
|
MY_FORTRAN=${MY_FORTRAN:=g77}
|
||
|
else
|
||
|
# Default to the first valid Fortran compiler
|
||
|
for i in ${AVAILABLE}; do
|
||
|
MY_FORTRAN=$i
|
||
|
break
|
||
|
done
|
||
|
fi
|
||
|
use debug && echo "MY_FORTRAN: \"${MY_FORTRAN}\""
|
||
|
|
||
|
if ! hasq ${MY_FORTRAN} ${AVAILABLE}; then
|
||
|
eerror "Current Fortran Compiler is set to ${MY_FORTRAN}, which is not usable with this package !"
|
||
|
die "Wrong Fortran Compiler !"
|
||
|
fi
|
||
|
|
||
|
case ${MY_FORTRAN/${CHOST}-} in
|
||
|
gfortran|g77|ifc|ifort|f2c|f95)
|
||
|
FORTRANC="${MY_FORTRAN}"
|
||
|
esac
|
||
|
fi
|
||
|
use debug && echo "FORTRANC: \"${FORTRANC}\""
|
||
|
}
|
||
|
|
||
|
# patch_fortran():
|
||
|
# Apply necessary patches for ${FORTRANC}
|
||
|
patch_fortran() {
|
||
|
if [[ -z "${FORTRANC}" || ! -d "${FILESDIR}" ]]; then
|
||
|
return
|
||
|
fi
|
||
|
local PATCHES=$(find ${FILESDIR} -name "${P}-${FORTRANC/${CHOST}-}-*")
|
||
|
einfo "Applying patches for selected FORTRAN compiler: ${FORTRANC} (${FORTRANC/${CHOST}-})"
|
||
|
local PATCH
|
||
|
if [ -n "${PATCHES}" ]; then
|
||
|
for PATCH in ${PATCHES}; do
|
||
|
epatch ${PATCH}
|
||
|
done
|
||
|
eautoreconf
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# fortran_pkg_setup():
|
||
|
# Set FORTRAN to indicate the list of Fortran Compiler that
|
||
|
# can be used for the ebuild.
|
||
|
# If not set in ebuild, FORTRAN will default to f77
|
||
|
fortran_pkg_setup() {
|
||
|
need_fortran ${FORTRAN:="gfortran g77"}
|
||
|
}
|
||
|
|
||
|
# fortran_src_unpack():
|
||
|
# Run patch_fortran if no new src_unpack() is defined.
|
||
|
fortran_src_unpack() {
|
||
|
unpack ${A}
|
||
|
cd "${S}"
|
||
|
patch_fortran
|
||
|
}
|
||
|
|
||
|
EXPORT_FUNCTIONS pkg_setup src_unpack
|