# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:et:sw=4:ts=4:sts=4
# $Id: Portfile 91459 2012-04-02 17:07:43Z jeremyhu@macports.org $

PortSystem              1.0
PortGroup               python 1.0

name                    py-numpy
version                 1.6.1
# Revbump to try to clear build-bot error with py26-numpy
revision                1

categories              python math
license                 BSD
platforms               darwin
maintainers             dh ram openmaintainer
description             The core utilities for the scientific library scipy for Python
long_description        ${description}

homepage                http://numpy.scipy.org/
master_sites            sourceforge:project/numpy/NumPy/${version}/
distname                numpy-${version}

checksums               md5 2bce18c08fc4fce461656f0f4dd9103e \
                        sha1 3f73ff9231a1c15e28e6e259ef5cc35a72b34059 \
                        rmd160 e4619fd5860c85a9c00bce0d0cb8dd9bb07a56f5

python.versions         24 25 26 27 31 32

if {${subport} != ${name}} {

patchfiles              patch-f2py_setup.py.diff \
                        patch-system_info.py.diff \
                        patch-fcompiler_g95.diff

depends_lib-append      port:fftw-3 \
                        port:py${python.version}-nose

if {[variant_isset universal] && ![variant_isset atlas]} {
    build.env-append    ARCHFLAGS="${configure.universal_ldflags}"
    destroot.env-append ARCHFLAGS="${configure.universal_ldflags}"
} else {
    build.env-append    ARCHFLAGS="${configure.ld_archflags}"
    destroot.env-append ARCHFLAGS="${configure.ld_archflags}"
}

variant atlas \
description {Use the MacPorts' ATLAS libraries \
             instead of Apple's Accelerate framework} {
    build.env-append    ATLAS=${prefix}/lib \
                        LAPACK=${prefix}/lib \
                        BLAS=${prefix}/lib
    destroot.env-append ATLAS=${prefix}/lib \
                        LAPACK=${prefix}/lib \
                        BLAS=${prefix}/lib
    depends_lib-append  port:atlas
}

# when using ATLAS (whether by default or specified by the user via
# the +atlas variant) ...
set gcc_version ""
if {[variant_isset atlas]} {

    # see if the user has set -gcc4X to disable using MacPorts'
    # compiler; if not, either use what the user set (as +gcc4X) or
    # default to gcc44.

    variant gcc43 conflicts gcc44 gcc45 gcc46 \
    description {Use the gcc43 compiler (enables fortran linking)} {
        configure.compiler  macports-gcc-4.3
    }

    variant gcc44 conflicts gcc43 gcc45 gcc46 \
    description {Use the gcc44 compiler (enables fortran linking)} {
        configure.compiler  macports-gcc-4.4
    }

    variant gcc45 conflicts gcc43 gcc44 gcc46 \
    description {Use the gcc45 compiler (enables fortran linking)} {
        configure.compiler  macports-gcc-4.5
    }

    variant gcc46 conflicts gcc43 gcc44 gcc45 \
    description {Use the gcc46 compiler (enables fortran linking)} {
        configure.compiler  macports-gcc-4.6
    }


    if {![variant_isset gcc43] && ![variant_isset gcc45] && ![variant_isset gcc46]} {
        default_variants +gcc44
    }
    if {[variant_isset gcc43]} {
        set gcc_version "4.3"
    } elseif {[variant_isset gcc44]} {
        set gcc_version "4.4"
    } elseif {[variant_isset gcc45]} {
        set gcc_version "4.5"
    } elseif {[variant_isset gcc46]} {
        set gcc_version "4.6"
    }


    # when using non-Apple GCC for universal install, it can
    # create binaries only for the native OS architecture, at
    # either 32 or 64 bits.  Restrict the supported archs
    # accordingly.
    if {${os.arch} == "i386"} {
        supported_archs i386 x86_64
    } elseif {${os.arch} == "powerpc"} {
        supported_archs ppc ppc64
    }

    # include all the correct GCC4X port
    depends_lib-append port:gcc[join [split ${gcc_version} "."] ""]

    # force LDFLAGS for correct linking of the linalg module
    # for non-Apple GCC compilers
    patchfiles-append  patch-numpy_linalg_setup.py.diff

    if {${gcc_version} == ""} {
        # user specified -gcc4X but +atlas (either as default or
        # explicitly); do not allow since it might lead to
        # undetermined runtime execution.
        return -code error \
"\n\nWhen using the +atlas variant (either as the default or setting
explicitly), one of the +gcc4X variants must be selected.\n"
    }
} else {
    variant universal {
        patchfiles-append   patch-setup.py.diff
    }
}

post-patch {
    reinplace "s|@@MPORTS_PYTHON@@|${python.bin}|" \
        ${worksrcpath}/numpy/f2py/setup.py

    if {[variant_isset universal] && [variant_isset atlas]} {
        # Prepare wrappers
        file copy -force ${filespath}/wrapper-template \
            ${worksrcpath}/c-wrapper
        file copy -force ${filespath}/wrapper-template \
            ${worksrcpath}/f-wrapper
        file copy -force ${filespath}/wrapper-template \
            ${worksrcpath}/cxx-wrapper

        reinplace   "s|@@@|${configure.cc}|" ${worksrcpath}/c-wrapper
        reinplace   "s|---|\\\\.c|" ${worksrcpath}/c-wrapper
        reinplace   "s|&&&|${prefix}|" ${worksrcpath}/c-wrapper

        reinplace   "s|@@@|${configure.cxx}|" ${worksrcpath}/cxx-wrapper
        reinplace   "s#---#(\\\\.C|\\\\.cpp|\\\\.cc)#" \
            ${worksrcpath}/cxx-wrapper
        reinplace   "s|&&&|${prefix}|" ${worksrcpath}/cxx-wrapper

        reinplace   "s|@@@|${configure.f90}|" ${worksrcpath}/f-wrapper
        reinplace   "s|---|\\\\.f|" ${worksrcpath}/f-wrapper
        reinplace   "s|&&&|${prefix}|" ${worksrcpath}/f-wrapper

        configure.cc  ${worksrcpath}/c-wrapper
        configure.cxx ${worksrcpath}/cxx-wrapper
        configure.f77 ${worksrcpath}/f-wrapper
        configure.f90 ${worksrcpath}/f-wrapper

        build.env-append    CC="${worksrcpath}/c-wrapper" \
                            CXX="${worksrcpath}/cxx-wrapper" \
                            F77="${worksrcpath}/f-wrapper" \
                            F90="${worksrcpath}/f-wrapper"

        destroot.env-append CC="${worksrcpath}/c-wrapper" \
                            CXX="${worksrcpath}/cxx-wrapper" \
                            F77="${worksrcpath}/f-wrapper" \
                            F90="${worksrcpath}/f-wrapper"
    }
}

}

if {${name} == ${subport}} {
    livecheck.type        regex
    livecheck.url         http://www.scipy.org
    livecheck.regex       {NumPy (\d+(\.\d+)*) released}
} else {
    livecheck.type        none
}
