diff options
Diffstat (limited to 'sci-libs/libbufr')
-rw-r--r-- | sci-libs/libbufr/Manifest | 1 | ||||
-rw-r--r-- | sci-libs/libbufr/files/libbufr-000405-makefile.patch | 80 | ||||
-rw-r--r-- | sci-libs/libbufr/libbufr-000405.ebuild | 206 | ||||
-rw-r--r-- | sci-libs/libbufr/metadata.xml | 17 |
4 files changed, 304 insertions, 0 deletions
diff --git a/sci-libs/libbufr/Manifest b/sci-libs/libbufr/Manifest new file mode 100644 index 00000000000..e0171be9484 --- /dev/null +++ b/sci-libs/libbufr/Manifest @@ -0,0 +1 @@ +DIST bufrdc_000405.tar.gz 11873311 SHA256 0c3ab33bdb3eea600c5af6f1e4064a000ec143f4c96a14b72ca09666ca3c3775 SHA512 3355d6bac54ef152f9feb13ae13f3c94f4e01a665a4b9bc7f85f0c98f9aa37411170668ba9adfb6b62c2fe906d0dff67b03a708cdf1acd21a0037e327c7c6169 WHIRLPOOL f97662c240e40086be2e2f7d33d446280576dd79ff119374d54d02af05bd51c9176a6592d965765baf549043ee80e8bb9e824e3149d4ce85599db1f5e3f42e10 diff --git a/sci-libs/libbufr/files/libbufr-000405-makefile.patch b/sci-libs/libbufr/files/libbufr-000405-makefile.patch new file mode 100644 index 00000000000..08b30ded8d7 --- /dev/null +++ b/sci-libs/libbufr/files/libbufr-000405-makefile.patch @@ -0,0 +1,80 @@ +--- Makefile.orig 2016-01-04 13:09:58.661150785 -0800 ++++ Makefile 2016-01-04 13:17:12.707621825 -0800 +@@ -1,7 +1,7 @@ + # Makefile for libbufrex + # + R64 = R64 +-TARGETS = all clean ++TARGETS = all clean test + LIBRARY = libbufr$(R64).a + SHELL=/bin/sh + SUBDIRS = fortranC bufrdc pbio bufrtables examples +@@ -11,12 +11,14 @@ + ( echo "*************************"; \ + echo "*** Make in $$name "; \ + echo "*************************"; \ +- cd $$name ; make ; ) done ++ $(MAKE) -C $$name LIB=bufr ; ) done ++ ++test : + ./test.sh + tables_tools/check_tables.sh bufrtables + + clean : + @for name in $(SUBDIRS); do\ +- ( echo "*** Clean in $$name ***" ;cd $$name ; make clean ); \ ++ ( echo "*** Clean in $$name ***" ;$(MAKE) -C $$name clean ); \ + done + rm -f $(LIBRARY) +--- examples/Makefile.in.orig 2016-01-04 13:42:39.790648703 -0800 ++++ examples/Makefile.in 2016-01-04 13:45:02.384967830 -0800 +@@ -16,19 +16,19 @@ + # + # + TARGETS = all clean +-EXECS = decode_bufr decode_bufr_image bufr_decode_all tdexp tdexp create_bufr ++EXECS = decode_bufr decode_bufr_image bufr_decode_all bufr_compress tdexp create_bufr + # + # + all :$(EXECS) + +-decode_bufr: decode_bufr.o ++decode_bufr: decode_bufr.o + $(FC) $(FFLAGS) -o $@ decode_bufr.o -L$(PLACE) -l$(LIB)$(R64) + +-bufr_decode_all: bufr_decode_all.o +- $(FC) $(FFLAGS) -o $@ bufr_decode_all.o -L$(PLACE) -l$(LIB)$(R64) ++bufr_decode_all: bufr_decode_all.o ++ $(FC) $(FFLAGS) -o $@ bufr_decode_all.o -L$(PLACE) -l$(LIB)$(R64) + +-bufr_compress: bufr_compress.o +- $(FC) $(FFLAGS) -o $@ bufr_compress.o -L$(PLACE) -l$(LIB)$(R64) ++bufr_compress: bufr_compress.o ++ $(FC) $(FFLAGS) -o $@ bufr_compress.o -L$(PLACE) -l$(LIB)$(R64) + + bufr2crex : bufr2crex.o + $(FC) $(FFLAGS) -o $@ bufr2crex.o -L$(PLACE) -l$(LIB)$(R64) -lcrex$(R64) +@@ -48,4 +48,4 @@ + clean : + @for name in $(EXECS); do\ + (rm -f $$name *.o ); \ +- done ++ done +--- bufrtables/Makefile.orig 2016-01-04 14:03:47.292850644 -0800 ++++ bufrtables/Makefile 2016-01-04 14:05:22.242500485 -0800 +@@ -25,11 +25,14 @@ + OBJECTS = $(OBJECTS.F) $(OBJECTS.c) + # + # +-all: links ++all: pgms links + + links: + ./clean.sh + ./links.sh ++ ++pgms: bufr2txt_tables bufr_split_tables txt2bufr_tables ++ + bufr2txt_tables: bufr2txt_tables.f + $(FC) $(FFLAGS) -o bufr2txt_tables bufr2txt_tables.f $(LIBRARY) + bufr_split_tables: bufr_split_tables.f diff --git a/sci-libs/libbufr/libbufr-000405.ebuild b/sci-libs/libbufr/libbufr-000405.ebuild new file mode 100644 index 00000000000..982dbca2c8c --- /dev/null +++ b/sci-libs/libbufr/libbufr-000405.ebuild @@ -0,0 +1,206 @@ +# 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|= |" \ + -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" + + 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 +} diff --git a/sci-libs/libbufr/metadata.xml b/sci-libs/libbufr/metadata.xml new file mode 100644 index 00000000000..2acd0555c4c --- /dev/null +++ b/sci-libs/libbufr/metadata.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person"> + <email>nerdboy@gentoo.org</email> + </maintainer> + <longdescription lang="en"> + This is the only useable open source BUFR library (from ECMWF) + and comes with a few example tools (some of which are built + and installed). + </longdescription> + <use> + <flag name="lto"> + Use gold linker and -flto (requires existing env setup) + </flag> + </use> +</pkgmetadata> |