# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
# $Id: Portfile 90820 2012-03-15 03:13:40Z jmr@macports.org $

PortSystem          1.0

name                emos
version             000382
revision            3
platforms           darwin
maintainers         takeshi
license             LGPL
categories          science
description         Interpolation library
homepage            http://www.ecmwf.int/products/data/software/interpolation.html
master_sites        http://www.ecmwf.int/products/data/software/download/software_files/
distname            ${name}_${version}
checksums           md5     cfca587da4dda8b615dfdc3d0fdac080 \
                    sha1    450bd27956a7496740a6ef4349f44e015d6525fa \
                    rmd160  892cf38b1d207caea53e495c9f84c94bae989613
long_description \
    The Interpolation library (EMOSLIB) includes Interpolation software \
    and GRIB, BUFR, CREX encoding/decoding routines.

depends_build       port:grib_api

post-patch {
    reinplace "s:^void \\*memcpy://void *memcpy:" ${worksrcpath}/gribex/gdecode.h
    reinplace "s: | O_LARGEFILE::" ${worksrcpath}/interpolation/sharedlib.c
    reinplace "s:`cat .list/bufrtables`:bufrtables/*.TXT:" ${worksrcpath}/install
    reinplace "s:xf:xpf:" ${worksrcpath}/install
}

if {${os.endian}=="little"} {
    set fendian -DLITTLE_ENDIAN
} else {
    set fendian ""
}
configure {
    set f [open ${worksrcpath}/config/config.site w]
    puts $f "#
AR      = ar
ARFLAGS = rv
CC      = ${configure.cc}
CFLAGS  = ${configure.cflags} ${fendian} ${configure.cc_archflags}
FCASTFLAGS = \$(CFLAGS)
FC      = ${configure.fc}
FFLAGS  = ${configure.fflags} ${fendian}
VECTFFLAGS =\$(FFLAGS)
RANLIB  = /usr/bin/ranlib"
    close $f
    file copy -force ${worksrcpath}/Makefile.in ${worksrcpath}/Makefile
    reinplace "s:reals:R64:" ${worksrcpath}/Makefile
    reinplace "s:glue:grib_api_merging:" ${worksrcpath}/Makefile
    foreach d {gribex pbio bufrdc bufrtables crexdc interpolation fft grib_api_merging} {
        file copy -force ${worksrcpath}/${d}/Makefile.in ${worksrcpath}/${d}/Makefile
        reinplace "s:reals:R64:" ${worksrcpath}/${d}/Makefile
        reinplace "s:arch:linux:" ${worksrcpath}/${d}/Makefile
        reinplace "s:depl:${name}:" ${worksrcpath}/${d}/Makefile
        reinplace "s:\$(ARCH)\$(CNAME)\$(R64)\$(A64):site:" ${worksrcpath}/${d}/Makefile
    }
    reinplace "s:I\$(GRIB_API_PATH):I${prefix}:" ${worksrcpath}/grib_api_merging/Makefile
    reinplace "s:`cat -s .r64`:R64:" ${worksrcpath}/install
    reinplace "s:`cat -s .emos`:${destroot}${prefix}/lib/${name}:" ${worksrcpath}/install
}

post-build {
    reinplace "s:R64 = R64:R64 =:" ${worksrcpath}/Makefile
    foreach d {gribex pbio bufrdc bufrtables crexdc interpolation fft} {
        reinplace "s:R64 = R64:R64 =:" ${worksrcpath}/${d}/Makefile
    }
    if {[variant_isset gcc43] || [variant_isset gcc44] || [variant_isset gcc45]} {
        reinplace "s:-fdefault-real-8 -fdefault-double-8 ::" ${worksrcpath}/config/config.site
    } else {
        reinplace "s:-r8 ::" ${worksrcpath}/config/config.site
    }
    system "cd ${worksrcpath}; make clean; make"
}

destroot {
    xinstall -m 755 -d ${destroot}${prefix}/lib/${name}
    xinstall -m 755 -d ${destroot}${prefix}/lib/${name}/bin
    system "cd ${worksrcpath}; ./install"
    xinstall -m 644 ${worksrcpath}/lib${name}.a ${destroot}${prefix}/lib/${name}
    foreach f {bufr2txt_tables bufr_split_tables txt2bufr_tables} {
      xinstall -m 755 ${worksrcpath}/bufrtables/${f} ${destroot}${prefix}/lib/${name}/bin
    }
    system "ln -s ${name}/lib${name}R64.a ${destroot}${prefix}/lib/lib${name}R64.a"
    system "ln -s ${name}/lib${name}.a ${destroot}${prefix}/lib/lib${name}.a"
    system "cd ${destroot}${prefix}/lib/${name}; \
        for d in bufrtables crextables gribtables gribtemplates land_sea_mask; do \
            chmod 755 \$d; \
            find \$d -type f -print | xargs chmod 644; \
        done; \
        find gribtables -type d -print | xargs chmod 755"
}

use_parallel_build  no
if {![variant_isset gcc43] && ![variant_isset gcc44] && ![variant_isset g95]} {
    default_variants    +gcc45
}
universal_variant   no

variant gcc43 conflicts gcc44 gcc45 g95 description {builds fortran interface with gfortran 4.3} {
    depends_build-append    port:gcc43
    configure.compiler      macports-gcc-4.3
    configure.fflags-append -fdefault-real-8 -fdefault-double-8 -fcray-pointer -fno-second-underscore -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -Dgfortran
    configure.cflags-append -DPOINTER_64 -DINTEGER_IS_INT
}

variant gcc44 conflicts gcc43 gcc45 g95 description {builds fortran interface with gfortran 4.4} {
    depends_build-append    port:gcc44
    configure.compiler      macports-gcc-4.4
    configure.fflags-append -fdefault-real-8 -fdefault-double-8 -fcray-pointer -fno-second-underscore -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -Dgfortran
    configure.cflags-append -DPOINTER_64 -DINTEGER_IS_INT
}

variant gcc45 conflicts gcc43 gcc44 g95 description {builds fortran interface with gfortran 4.5} {
    depends_build-append    port:gcc45
    configure.compiler      macports-gcc-4.5
    configure.fflags-append -fdefault-real-8 -fdefault-double-8 -fcray-pointer -fno-second-underscore -DPOINTER_64 -DINTEGER_IS_INT -Dlinux -Dgfortran
    configure.cflags-append -DPOINTER_64 -DINTEGER_IS_INT
}

variant g95 conflicts gcc43 gcc44 gcc45 universal description {builds fortran interface with g95} {
    depends_build-append    port:g95
    configure.fc            ${prefix}/bin/g95
    configure.fflags-append -r8 -fsloppy-char -fno-second-underscore -DUSE_NO_POINTERS -DINTEGER_IS_INT -Dlinux
    configure.cflags-append -DPOINTER_64 -DINTEGER_IS_INT
}

livecheck.type      regex
livecheck.url       ${homepage}
livecheck.regex     {([0-9][0-9][0-9][0-9][0-9][0-9]),}
