Skip to content

Commit

Permalink
sci-libs/libbufr: re-add and version bump to latest upstream (405)
Browse files Browse the repository at this point in the history
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
  • Loading branch information
sarnold committed Mar 5, 2016
1 parent 61eead5 commit 61bdaf1
Show file tree
Hide file tree
Showing 4 changed files with 304 additions and 0 deletions.
1 change: 1 addition & 0 deletions sci-libs/libbufr/Manifest
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DIST bufrdc_000405.tar.gz 11873311 SHA256 0c3ab33bdb3eea600c5af6f1e4064a000ec143f4c96a14b72ca09666ca3c3775 SHA512 3355d6bac54ef152f9feb13ae13f3c94f4e01a665a4b9bc7f85f0c98f9aa37411170668ba9adfb6b62c2fe906d0dff67b03a708cdf1acd21a0037e327c7c6169 WHIRLPOOL f97662c240e40086be2e2f7d33d446280576dd79ff119374d54d02af05bd51c9176a6592d965765baf549043ee80e8bb9e824e3149d4ce85599db1f5e3f42e10
80 changes: 80 additions & 0 deletions sci-libs/libbufr/files/libbufr-000405-makefile.patch
Original file line number Diff line number Diff line change
@@ -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
206 changes: 206 additions & 0 deletions sci-libs/libbufr/libbufr-000405.ebuild
Original file line number Diff line number Diff line change
@@ -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
}
17 changes: 17 additions & 0 deletions sci-libs/libbufr/metadata.xml
Original file line number Diff line number Diff line change
@@ -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>[email protected]</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>

0 comments on commit 61bdaf1

Please sign in to comment.