# -*- 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

PortSystem      1.0
PortGroup       cmake     1.0
PortGroup       compilers 1.0
PortGroup       wxWidgets 1.0

name            plplot510
version         5.10.0
revision        7
platforms       darwin
maintainers     takeshi openmaintainer
categories      science
license         LGPL
description     Scientific plotting package, double precision version
master_sites    sourceforge:plplot
checksums       rmd160  16e353cf410232da700d5f2edd1533006f2dc4c4 \
                sha256  d4e930b8b9d43cd1663408986218d61f166de7cbc9ef5bed111b0bdea934f9d5
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."
distname        plplot-${version}
dist_subdir     plplot

long_description    ${description_base} This port uses double precision.

compilers.choose    fc f90
compilers.setup

depends_build-append \
                port:pkgconfig
depends_lib     port:qhull \
                port:antigraingeometry \
                port:fontconfig \
                port:freefont-ttf \
                port:freetype \
                port:libharu \
                port:libLASi \
                port:shapelib \
                port:swig-tcl \
                port:tcl

patchfiles      patch-CMakeLists.txt.diff \
                patch-plConfig.h.in.diff  \
                patch-cmake-modules-pkg-config.cmake.diff
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
    }
}

cmake.out_of_source yes

configure.cppflags-append   -DUSE_INTERP_RESULT \
                            -DTcl_Import_TCL_DECLARED

configure.env           HOME=${workpath}
configure.pre_args      -DCMAKE_INSTALL_PREFIX=${prefix}/lib/${name}
configure.args-append   -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 \
                        -DQHULL_LIBRARIES=${prefix}/lib/libqhull.dylib \
                        -DSHAPELIB_INCLUDE_DIR=${prefix}/include \
                        -DSHAPELIB_LIBRARY=${prefix}/lib/libshp.dylib \
                        -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_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 \
                        -DENABLE_DYNDRIVERS=OFF \
                        -DBUILD_TEST=OFF \
                        -DHAVE_SHAPELIB=ON \
                        -DHAVE_AGG=ON \
                        -DSWIG_DIR=${prefix}/bin \
                        -Dhpdf_INCLUDE_DIR=${prefix}/include

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

if {[variant_isset universal]} {
    configure.args-append -DCMAKE_OSX_ARCHITECTURES=\"[strsed ${configure.universal_archs} "g| |;|"]\" -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| |;|"]\"
    }
}

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 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.

if {[fortran_variant_isset]} {
    configure.ld_archflags  ""
    configure.args-delete   -DENABLE_f95=OFF
    configure.args-append   -DCMAKE_Fortran_COMPILER=\"${configure.fc}\"
    if {[variant_isset g95]} {
        configure.args-append   -DCMAKE_Fortran_FLAGS=\"${configure.fflags} -fno-second-underscore\"
    } else {
        configure.args-append   -DCMAKE_Fortran_FLAGS=\"${configure.fflags}\"
    }
}

if {[variant_isset 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.args-append   -DCMAKE_OSX_DEPLOYMENT_TARGET=\"\"
}

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 python26 conflicts 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 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 py27_pyqt4 requires python27 description {Add support for pyQT4 using python27} {
    depends_lib-append      port: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} \
                            -Dwxwidgets_LINK_FLAGS=-lplplotd
}


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/plplot/news/
livecheck.regex             {PLplot-([0-9]+\.[0-9]+\.[0-9]+)}