# -*- 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 117454 2014-02-27 07:40:08Z takeshi@macports.org $

PortSystem      1.0
PortGroup       wxWidgets 1.0

name            plplot
version         5.9.9
revision        20
platforms       darwin
maintainers     takeshi openmaintainer
categories      science
license         LGPL
description     Scientific plotting package, double precision version
master_sites    sourceforge
checksums           md5     9f2c8536a58875d97ab6b29bbed67d26 \
                    sha1    3df8fc21723e14af62fea4098e4ef019e1b52a54 \
                    rmd160  403d56896714336e6f8d65ef51563e7c28c7e588
homepage        http://plplot.sourceforge.net/
set description_base "PLplot is a cross-platform software package for \
creating scientific plots. To help accomplish that task it is organized as a \
core C library, language bindings for that library, and device drivers which \
control how the plots are presented in non-interactive and interactive \
plotting contexts."

long_description    ${description_base} This port uses double precision.

depends_build   port:cmake \
                port:pkgconfig
depends_lib     port:qhull \
                port:fontconfig \
                port:freefont-ttf \
                port:freetype \
                port:libLASi \
                port:swig-tcl \
                port:tcl

post-patch {
    reinplace "s|-ObjC|-ObjC -framework AquaTerm|" ${worksrcpath}/cmake/modules/aqt.cmake
    reinplace "s|-framework AquaTerm|-F${frameworks_dir} -framework AquaTerm|" ${worksrcpath}/cmake/modules/aqt.cmake
    if {[variant_isset python26]} {
        reinplace "s|\${CMAKE_INSTALL_EXEC_PREFIX}|${frameworks_dir}/Python.framework/Versions/2.6|" \
                            ${worksrcpath}/cmake/modules/python.cmake
    } elseif {[variant_isset python27]} {
        reinplace "s|\${CMAKE_INSTALL_EXEC_PREFIX}|${frameworks_dir}/Python.framework/Versions/2.7|" \
                            ${worksrcpath}/cmake/modules/python.cmake
    }
}

configure.cppflags-append   -DUSE_INTERP_RESULT \
                            -DTcl_Import_TCL_DECLARED
if {[variant_isset universal]} {
    set cflags "${configure.cppflags} ${configure.cflags} ${configure.universal_cflags}"
    set cxxflags "${configure.cppflags} ${configure.cxxflags} ${configure.universal_cxxflags}"
} else {
    set cflags "${configure.cppflags} ${configure.cflags}"
    set cxxflags "${configure.cppflags} ${configure.cxxflags}"
}

configure.dir           ${workpath}/build
configure.cmd           cmake
configure.env           HOME=${workpath}
configure.pre_args      -DCMAKE_INSTALL_PREFIX=${prefix}
configure.args          -DCMAKE_VERBOSE_MAKEFILE=ON \
                        -DCMAKE_C_COMPILER=${configure.cc} \
                        -DCMAKE_C_FLAGS=\"${cflags}\" \
                        -DCMAKE_CXX_COMPILER=${configure.cxx} \
                        -DCMAKE_CXX_FLAGS=\"${cxxflags}\" \
                        -DCMAKE_INCLUDE_PATH=${prefix}/include \
                        -DCMAKE_LIBRARY_PATH=${prefix}/lib \
                        -DTCL_INCLUDE_PATH=${prefix}/include \
                        -DTCL_LIBRARY=${prefix}/lib/libtcl.dylib \
                        -DFREETYPE_INCLUDE_DIR=${prefix}/include/freetype2 \
                        -DFREETYPE_LIBRARY=${prefix}/lib/libfreetype.dylib \
                        -DPL_FREETYPE_FONT_PATH=${prefix}/share/fonts/freefont-ttf \
                        -DWITH_FREETYPE=ON \
                        -DQHULL_INCLUDE_DIR=${prefix}/include \
                        -DPLD_aqt=OFF \
                        -DPLD_extcairo=ON \
                        -DPLD_memcairo=ON \
                        -DPLD_ps=ON \
                        -DPLD_psttf=ON \
                        -DPLD_pscairo=ON  \
                        -DPLD_pdfcairo=ON \
                        -DPLD_pngcairo=ON \
                        -DPLD_svgcairo=ON \
                        -DPLD_tk=OFF \
                        -DPLD_wxwidgets=OFF \
                        -DPLD_wxpng=OFF \
                        -DPLD_xcairo=OFF  \
                        -DPLD_xwin=OFF \
                        -DPLD_xfig=OFF \
                        -DPLD_tkwin=OFF \
                        -DPLD_bmpqt=OFF \
                        -DPLD_jpgqt=OFF \
                        -DPLD_pngqt=OFF \
                        -DPLD_ppmqt=OFF \
                        -DPLD_epsqt=OFF \
                        -DPLD_pdfqt=OFF \
                        -DPLD_tiffqt=OFF \
                        -DPLD_qtwidget=OFF \
                        -DPLD_svgqt=OFF \
                        -DPLD_extqt=OFF \
                        -DPLD_memqt=OFF \
                        -DPLD_qtwidget=OFF \
                        -DENABLE_ada=OFF \
                        -DENABLE_d=OFF \
                        -DENABLE_f77=OFF \
                        -DENABLE_f95=OFF \
                        -DENABLE_itcl=OFF \
                        -DENABLE_itk=OFF \
                        -DENABLE_java=OFF \
                        -DENABLE_lua=OFF \
                        -DENABLE_ocaml=OFF \
                        -DENABLE_octave=OFF \
                        -DENABLE_pdl=OFF \
                        -DENABLE_pyqt4=OFF \
                        -DENABLE_python=OFF \
                        -DENABLE_qt=OFF \
                        -DENABLE_tcl=ON \
                        -DENABLE_tk=OFF \
                        -DENABLE_wxwidgets=OFF \
                        -DBUILD_TEST=OFF \
                        -DHAVE_AGG=OFF \
                        -DSWIG_DIR=${prefix}/bin
configure.post_args     ../${distname}

pre-configure {
    file mkdir ${workpath}/build
}

if {[variant_isset universal]} {
    configure.args-append -DCMAKE_OSX_ARCHITECTURES=\"[strsed ${configure.universal_archs} "g| |;|"]\" -DENABLE_f77:BOOL=OFF -DENABLE_f95:BOOL=OFF
} else {
# Adhoc fix
# cmake passes -arch to Fortran compiler
# g95 ignores -arch but gfortran fails with it
    if {[variant_isset g95]} {
        configure.args-append -DCMAKE_OSX_ARCHITECTURES=\"[strsed ${build_arch} "g| |;|"]\"
    }
}

build.dir               ${workpath}/build

pre-destroot {
    set mods "${workpath}/build/bindings/f95/plplot.mod
              ${workpath}/build/bindings/f95/plplotp.mod
              ${workpath}/build/bindings/f95/plplot_flt.mod"
    foreach m $mods {
        if {[file exists $m]} {
            file copy $m ${workpath}/build/
        }
    }
}

#platform i386 {
#    configure.args-append   -DCMAKE_MODULE_LINKER_FLAGS=\"-undefined dynamic_lookup\" \
#                            -DCMAKE_EXE_LINKER_FLAGS=\"-undefined dynamic_lookup\"
#}

if {${os.platform} eq "darwin"} {
    default_variants    +aquaterm
}
default_variants-append +x11

subport ${name}-single {
    description     Scientific plotting package, single precision version
    long_description    ${description_base} This port uses single precision.

    configure.pre_args      -DCMAKE_INSTALL_PREFIX=${prefix}/lib/${subport}
    configure.args-append   -DPL_DOUBLE=OFF
}

if {[variant_isset py25_pyqt4] || [variant_isset py26_pyqt4] ||  [variant_isset py27_pyqt4]} {
    default_variants +qt4
}

# variant gcw is deleted since it has been deprecated
# gd driver (gif, jpeg, png, svg) has been deprecated

# Fortran notes:
# * In build/language_tests/Fortran, FC and LDFLAGS are used.
# * CMAKE_Fortran_COMPILER is used later in build.
# * To avoid -arch ${build_arch} to be passed configure.ld_archflags is unset.

set gcc_versions {4.3 4.4 4.5 4.6 4.7 4.8 4.9}
set g95_conflicts {}

foreach ver ${gcc_versions} {
    set ver_no_dot [join [split ${ver} "."] ""]

    set variant_line {variant gcc${ver_no_dot} description "build with gfortran from gcc${ver_no_dot}" conflicts g95}

    foreach over ${gcc_versions} {
        if {${ver} == ${over}} {
            continue
        }

        set over_no_dot [join [split ${over} "."] ""]
        append variant_line " conflicts gcc${over_no_dot}"
    }
    append variant_line { {}}

    eval $variant_line

    append g95_conflicts " conflicts gcc${ver_no_dot}"
}

eval [concat {variant g95 description {build with g95}} $g95_conflicts {{}}]

foreach ver ${gcc_versions} {
    set ver_no_dot [join [split ${ver} "."] ""]

    if {[variant_isset gcc${ver_no_dot}]} {
        depends_lib-append path:lib/libgcc/libgcc_s.1.dylib:libgcc
        depends_build-append port:gcc${ver_no_dot}

        configure.fc  ${prefix}/bin/gfortran-mp-${ver}
        configure.f77 ${prefix}/bin/gfortran-mp-${ver}
        configure.f90 ${prefix}/bin/gfortran-mp-${ver}
        configure.ld_archflags  ""
        configure.args-delete   -DENABLE_f77=OFF \
                                -DENABLE_f95=OFF
        configure.args-append   -DCMAKE_Fortran_COMPILER=\"${configure.fc}\" \
                                -DCMAKE_Fortran_FLAGS=\"${configure.fflags}\"
    }
}

if {[variant_isset g95]} {
    depends_lib-append path:lib/libgcc/libgcc_s.1.dylib:libgcc
    depends_build-append port:g95

    configure.fc ${prefix}/bin/g95
    configure.f77 ${prefix}/bin/g95
    configure.f90 ${prefix}/bin/g95
# Ad hoc fix to enable build of f95 binding by disabling some features
    if {${os.major}<10} {
        patchfiles-append       patch-sfstubsf95.f90.diff
    }
    configure.ld_archflags  ""
    configure.args-delete   -DENABLE_f77=OFF \
                            -DENABLE_f95=OFF
    configure.args-append   -DCMAKE_OSX_DEPLOYMENT_TARGET=\"\" \
                            -DCMAKE_Fortran_FLAGS=\"${configure.fflags} -fno-second-underscore\"
}

variant octave description {Add support for Octave} {
    depends_lib-append       port:swig-octave
    configure.args-delete   -DENABLE_octave=OFF
    configure.args-append   -DENABLE_octave=ON
    license-append  GPL-2+
}

variant java description {Add support for Java} {
    depends_lib-append       port:swig-java
    configure.args-delete   -DENABLE_java=OFF
    configure.args-append   -DENABLE_java=ON
}

variant python25 conflicts python26 python27 description {Add support for python25} {
    depends_lib-append      port:python25 \
                            port:py25-numpy \
                            port:swig-python
    configure.args-delete   -DENABLE_python=OFF
    configure.args-append   -DENABLE_python=ON \
                            -DHAVE_NUMPY:BOOL=ON \
                            -DPYTHON_INCLUDE_PATH=${prefix}/include/python2.5
}
variant python26 conflicts python25 python27 description {Add support for python26} {
    depends_lib-append      port:python26 \
                            port:py26-numpy \
                            port:swig-python
    configure.args-delete   -DENABLE_python=OFF
    configure.args-append   -DENABLE_python=ON \
                            -DHAVE_NUMPY:BOOL=ON \
                            -DPYTHON_INCLUDE_PATH=${frameworks_dir}/Python.framework/Versions/2.6/Headers
}
variant python27 conflicts python25 python26 description {Add support for python27} {
    depends_lib-append      port:python27 \
                            port:py27-numpy \
                            port:swig-python
    configure.args-delete   -DENABLE_python=OFF
    configure.args-append   -DENABLE_python=ON \
                            -DHAVE_NUMPY:BOOL=ON \
                            -DPYTHON_INCLUDE_PATH=${frameworks_dir}/Python.framework/Versions/2.7/Headers
}

variant py25_pyqt4 requires python25 description {Add support for pyQT4 using python25} {
    # Can use either py*-pyqt4 or py*-pyqt4-devel.
    depends_lib-append     path:share/py25-sip/PyQt4:py25-pyqt4
    configure.args-delete   -DENABLE_pyqt4=OFF
    configure.args-append   -DENABLE_pyqt4=ON
}
variant py26_pyqt4 requires python26 description {Add support for pyQT4 using python26} {
    # Can use either py*-pyqt4 or py*-pyqt4-devel.
    depends_lib-append     path:share/py26-sip/PyQt4:py26-pyqt4
    configure.args-delete   -DENABLE_pyqt4=OFF
    configure.args-append   -DENABLE_pyqt4=ON
}
variant py27_pyqt4 requires python27 description {Add support for pyQT4 using python27} {
    # Can use either py*-pyqt4 or py*-pyqt4-devel.
    depends_lib-append     path:share/py27-sip/PyQt4:py27-pyqt4
    configure.args-delete   -DENABLE_pyqt4=OFF
    configure.args-append   -DENABLE_pyqt4=ON
}

variant gdc description {Add support for D} {
    depends_lib-append      port:gdc
    configure.args-delete   -DENABLE_d=OFF
    configure.args-append   -DENABLE_d=ON
}

variant aquaterm description {Add support for Aquaterm} {
    depends_lib-append      port:aquaterm
    configure.args-delete   -DPLD_aqt=OFF
    configure.args-append   -DPLD_aqt=ON \
                            -DAQT_FRAMEWORK=${frameworks_dir}/AquaTerm.framework
}

variant qt4 description {Add support for Qt4} {
    depends_lib-append      bin:qmake:qt4-mac
    configure.args-delete   -DENABLE_qt=OFF \
                            -DPLD_bmpqt=OFF \
                            -DPLD_jpgqt=OFF \
                            -DPLD_pngqt=OFF \
                            -DPLD_ppmqt=OFF \
                            -DPLD_epsqt=OFF \
                            -DPLD_pdfqt=OFF \
                            -DPLD_tiffqt=OFF \
                            -DPLD_qtwidget=OFF \
                            -DPLD_svgqt=OFF \
                            -DPLD_extqt=OFF \
                            -DPLD_memqt=OFF \
                            -DPLD_qtwidget=OFF
    configure.args-append   -DENABLE_qt=ON \
                            -DPLD_bmpqt=ON \
                            -DPLD_jpgqt=ON \
                            -DPLD_pngqt=ON \
                            -DPLD_ppmqt=ON \
                            -DPLD_epsqt=ON \
                            -DPLD_pdfqt=ON \
                            -DPLD_tiffqt=ON \
                            -DPLD_qtwidget=ON \
                            -DPLD_svgqt=ON \
                            -DPLD_extqt=ON \
                            -DPLD_memqt=ON \
                            -DPLD_qtwidget=ON
}

variant wxwidgets description {Add support for wxWidgets} {
    wxWidgets.use           wxWidgets-3.0
    depends_lib-append      port:${wxWidgets.port}
    configure.args-delete   -DPLD_wxwidgets=OFF \
                            -DPLD_wxpng=OFF \
                            -DENABLE_wxwidgets=OFF
    configure.args-append   -DPLD_wxwidgets=ON \
                            -DPLD_wxpng=ON \
                            -DENABLE_wxwidgets=ON \
                            -DwxWidgets_CONFIG_EXECUTABLE=${wxWidgets.wxconfig} \
                            -DwxWidgets_wxrc_EXECUTABLE=${wxWidgets.wxrc}
}


variant x11 {
    depends_lib-append      path:lib/pkgconfig/pango.pc:pango \
                            port:tk
    configure.args-append   -DPLD_xcairo=ON  \
                            -DPLD_xwin=ON \
                            -DPLD_xfig=ON \
                            -DPLD_tk=ON \
                            -DENABLE_tk=ON \
                            -DTK_INCLUDE_PATH=${prefix}/include \
                            -DTK_LIBRARY=${prefix}/lib/libtk.dylib
    configure.args-delete   -DPLD_xcairo=OFF \
                            -DPLD_xwin=OFF \
                            -DPLD_xfig=OFF \
                            -DENABLE_tk=OFF
}

livecheck.type              regex
livecheck.url               http://sourceforge.net/p/${name}/news/
livecheck.regex             {PLplot Release.* .*([0-9]+\.[0-9]+\.[0-9]+)}
