summaryrefslogtreecommitdiff
path: root/sci-libs/libbufr
diff options
context:
space:
mode:
authorStephen L Arnold <nerdboy@gentoo.org>2016-03-05 13:10:26 -0800
committerStephen L Arnold <nerdboy@gentoo.org>2016-03-05 13:10:26 -0800
commit61bdaf1182902438d3b045e5921eb8894126a377 (patch)
treec413688236d3ddd3d54cedf22ae08a4957e46cf7 /sci-libs/libbufr
parent61eead56cf37cf8a88ea71dc9edb8dba98deaa70 (diff)
downloadgentoo-61bdaf1182902438d3b045e5921eb8894126a377.tar.gz
gentoo-61bdaf1182902438d3b045e5921eb8894126a377.tar.xz
sci-libs/libbufr: re-add and version bump to latest upstream (405)
This also adds build fixes and an lto USE flag for checking the linker and massaging the AR flags for the linker plugin (note this requies an existing -flto configuration). Package-Manager: portage-2.2.27
Diffstat (limited to 'sci-libs/libbufr')
-rw-r--r--sci-libs/libbufr/Manifest1
-rw-r--r--sci-libs/libbufr/files/libbufr-000405-makefile.patch80
-rw-r--r--sci-libs/libbufr/libbufr-000405.ebuild206
-rw-r--r--sci-libs/libbufr/metadata.xml17
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>