| # Copyright 1999-2016 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Id$ |
| |
| 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 lto" |
| |
| RDEPEND=" |
| virtual/fortran |
| " |
| |
| DEPEND="sys-apps/findutils" |
| |
| S=${WORKDIR}/${MY_P} |
| |
| if use lto; then |
| RESTRICT="strip" |
| fi |
| |
| 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|= |" ${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 STRIP RANLIB |
| TC_FLAGS="CC=$CC FC=$FC AR=$AR RANLIB=$RANLIB" |
| ARFLAGS="rv" |
| |
| if use lto; then |
| PLUGIN_PATH="--plugin=$(gcc -print-prog-name=liblto_plugin.so)" |
| tc-ld-is-gold && ARFLAGS="rv ${PLUGIN_PATH}" |
| fi |
| |
| # 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 |
| } |