You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
4.8 KiB
197 lines
4.8 KiB
# Copyright 1999-2016 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
EAPI=5
|
|
|
|
inherit eutils fortran-2 toolchain-funcs
|
|
|
|
MY_P="${PN/lib/}dc_${PV}"
|
|
|
|
DESCRIPTION="ECMWF BUFR library - includes both C and Fortran example utilities"
|
|
HOMEPAGE="https://software.ecmwf.int/wiki/display/BUFR/BUFRDC+Home"
|
|
SRC_URI="https://software.ecmwf.int/wiki/download/attachments/35752466/${MY_P}.tar.gz"
|
|
|
|
LICENSE="LGPL-3"
|
|
SLOT="0"
|
|
KEYWORDS="~amd64 ~ppc ~ppc64 ~x86"
|
|
# needs someone to test on these: ~alpha ~hppa ~ia64 ~sparc etc ...
|
|
|
|
IUSE="debug doc examples"
|
|
|
|
RDEPEND="
|
|
virtual/fortran
|
|
"
|
|
|
|
DEPEND="sys-apps/findutils"
|
|
|
|
S=${WORKDIR}/${MY_P}
|
|
|
|
pkg_setup() {
|
|
fortran-2_pkg_setup
|
|
case "$(tc-getFC)" in
|
|
*gfortran)
|
|
export CNAME="_gfortran"
|
|
;;
|
|
*g77)
|
|
export CNAME="_gnu"
|
|
;;
|
|
*pgf90|*pgf77)
|
|
export CNAME=""
|
|
;;
|
|
ifc|ifort)
|
|
export CNAME="_intel"
|
|
;;
|
|
esac
|
|
|
|
elog "Note non-GNU compilers are not currently supported on non-x86"
|
|
elog "architectures. If you need it, please submit a patch..."
|
|
|
|
export target="linux"
|
|
export A64=""
|
|
export R64=""
|
|
case "${ARCH}" in
|
|
amd64)
|
|
export R64="R64"
|
|
export A64="A64"
|
|
;;
|
|
ppc64)
|
|
export target="ppc_G5"
|
|
;;
|
|
ppc)
|
|
export target="ppc"
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
}
|
|
|
|
src_prepare() {
|
|
update_configs
|
|
epatch "${FILESDIR}"/${P}-makefile.patch
|
|
|
|
local config="config/config.$target$CNAME$R64$A64"
|
|
|
|
if [[ "${ARCH}" == "ppc" ]] ; then
|
|
sed -i -e "s|= -mcpu=G4 -mtune=G4|= |" ${config}
|
|
elif [[ "${ARCH}" == "ppc64" ]] ; then
|
|
sed -i -e "s|= -mcpu=G5 -mtune=G5|= |" \
|
|
-e "s|-fdefault-real-8|-fdefault-real-8 -fdefault-double-8|" \
|
|
${config}
|
|
elif [[ "${ARCH}" == "amd64" ]] ; then
|
|
cp ${config}.in ${config}
|
|
sed -i -e "s|-fdefault-real-8|-fdefault-real-8 -fdefault-double-8|" \
|
|
${config}
|
|
else
|
|
cp ${config}.in ${config} || die "Error updating config!"
|
|
fi
|
|
|
|
sed -i -e "s:DEBUG = -O2:DEBUG = -g:g" ${config}
|
|
use debug || sed -i -e "s:DEBUG = -g:DEBUG =:g" ${config}
|
|
|
|
# add local CFLAGS to build flags
|
|
sed -i -e "s|\$(DEBUG)|${CFLAGS} \$(DEBUG) -fPIC|" \
|
|
-e 's|emos|/usr/share/bufrtables|g' ${config}
|
|
|
|
# add local LDFLAGS to bins
|
|
sed -i \
|
|
-e "s|-o|${LDFLAGS} -fPIC -o|" \
|
|
examples/Makefile \
|
|
bufrtables/Makefile
|
|
}
|
|
|
|
src_compile() {
|
|
export BUFR_TABLES="${S}"/bufrtables
|
|
EBUILD_ARCH="${ARCH}"
|
|
EBUILD_CFLAGS="${CFLAGS}"
|
|
unset ARCH CFLAGS
|
|
|
|
tc-export CC FC AR NM RANLIB
|
|
export STRIP="/bin/true"
|
|
TC_FLAGS="CC=$CC FC=$FC AR=$AR RANLIB=$RANLIB"
|
|
ARFLAGS="rv"
|
|
|
|
# emake won't work with this fossil...
|
|
BUFRFLAGS="ARCH=$target R64=$R64 CNAME=$CNAME"
|
|
make $TC_FLAGS ARFLAGS="${ARFLAGS}" $BUFRFLAGS || die "make failed"
|
|
|
|
generate_files
|
|
|
|
ARCH="${EBUILD_ARCH}"
|
|
CFLAGS="${EBUILD_CFLAGS}"
|
|
}
|
|
|
|
src_test() {
|
|
unset ARCH CFLAGS
|
|
BUFRFLAGS="ARCH=$target R64=$R64 CNAME=$CNAME"
|
|
make $BUFRFLAGS test || die "make test failed"
|
|
|
|
ARCH="${EBUILD_ARCH}"
|
|
CFLAGS="${EBUILD_CFLAGS}"
|
|
}
|
|
|
|
src_install() {
|
|
# install library
|
|
dolib.a libbufr$R64.a
|
|
|
|
dosbin bufrtables/{bufr2txt_tables,bufr_split_tables,txt2bufr_tables}
|
|
dobin examples/{bufr_decode_all,create_bufr,decode_bufr,decode_bufr_image,tdexp}
|
|
|
|
keepdir /usr/share/bufrtables
|
|
insinto /usr/share/bufrtables
|
|
doins -r bufrtables/{B,C,D}*.*
|
|
|
|
# files generated above
|
|
doenvd 20${PN}
|
|
|
|
dodoc README
|
|
if use doc ; then
|
|
insinto /usr/share/doc/${PF}
|
|
doins doc/*.pdf
|
|
fi
|
|
|
|
if use examples ; then
|
|
newdoc examples/README README.examples
|
|
insinto /usr/share/doc/${PF}/examples
|
|
doins examples/{*.F,*.c,Makefile}
|
|
fi
|
|
}
|
|
|
|
pkg_postinst() {
|
|
elog
|
|
elog "This is the only GPL'd BUFR decoder library written in C/Fortran"
|
|
elog "but the build system is an old kluge that pre-dates the discovery"
|
|
elog "of fire. File bugs as usual if you have build/runtime problems."
|
|
elog ""
|
|
elog "The default BUFR tables are stored in /usr/share/bufrtables, so"
|
|
elog "add your local tables there if needed. Only a static lib is"
|
|
elog "installed currently, as shared lib support is incomplete (feel"
|
|
elog "free to submit a patch :)"
|
|
elog ""
|
|
elog "The installed user-land bufr utilities are just the examples;"
|
|
elog "the main library is really all there is (and there are no man"
|
|
elog "pages either). Install the examples and use the source, Luke..."
|
|
elog
|
|
}
|
|
|
|
generate_files() {
|
|
## Do not remove blank lines from the response file
|
|
cat <<-EOF > 20${PN}
|
|
BUFR_TABLES="/usr/share/bufrtables"
|
|
EOF
|
|
}
|
|
|
|
update_configs() {
|
|
find . -type f -name \*.distinct -o -name \*.f -o -name \*.in \
|
|
| xargs chmod -x
|
|
cp options/options_linux options/options_ppc
|
|
cp options/options_linux options/options_ppc_G5
|
|
cp pbio/sources.linux pbio/sources.ppc
|
|
cp pbio/sources.linux pbio/sources.ppc_G5
|
|
pushd config > /dev/null
|
|
cp config.ppc_gfortran.in config.ppc_gfortran
|
|
cp config.ppc_gfortranR64.in config.ppc_gfortranR64
|
|
cp config.ppc_gfortran_G5.in config.ppc_gfortran_G5
|
|
cp config.ppc_gfortranR64_G5.in config.ppc_gfortranR64_G5
|
|
popd > /dev/null
|
|
}
|