sci-libs/libbufr: re-add and version bump to latest upstream (405)
authorStephen L Arnold <nerdboy@gentoo.org>
Sat, 5 Mar 2016 21:10:26 +0000 (13:10 -0800)
committerStephen L Arnold <nerdboy@gentoo.org>
Sat, 5 Mar 2016 21:10:26 +0000 (13:10 -0800)
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

sci-libs/libbufr/Manifest [new file with mode: 0644]
sci-libs/libbufr/files/libbufr-000405-makefile.patch [new file with mode: 0644]
sci-libs/libbufr/libbufr-000405.ebuild [new file with mode: 0644]
sci-libs/libbufr/metadata.xml [new file with mode: 0644]

diff --git a/sci-libs/libbufr/Manifest b/sci-libs/libbufr/Manifest
new file mode 100644 (file)
index 0000000..e0171be
--- /dev/null
@@ -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 (file)
index 0000000..08b30de
--- /dev/null
@@ -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 (file)
index 0000000..982dbca
--- /dev/null
@@ -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 (file)
index 0000000..2acd055
--- /dev/null
@@ -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>