# -*- 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 108177 2013-07-15 07:32:33Z takeshi@macports.org $

PortSystem      1.0

name            plplot
version         5.9.9
revision        13
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 \
                path:bin/pkg-config:pkgconfig
depends_lib     port:expat \
                port:qhull \
                port:fontconfig \
                port:freefont-ttf \
                port:freetype \
                port:libiconv \
                port:libLASi \
                port:libpng \
                path:lib/pkgconfig/pango.pc:pango \
                port:swig-tcl \
                port:tcl \
                port:tk \
                port:zlib

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 \
                        -DTK_INCLUDE_PATH=${prefix}/include \
                        -DTK_LIBRARY=${prefix}/lib/libtk.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=ON \
                        -DPLD_wxwidgets=OFF \
                        -DPLD_xcairo=OFF  \
                        -DPLD_xwin=OFF \
                        -DPLD_xfig=OFF \
                        -DPLD_tkwin=OFF \
                        -DPLD_bmpqt=OFF \
                        -DPLD_pngqt=OFF \
                        -DPLD_ppmqt=OFF \
                        -DPLD_epsqt=OFF \
                        -DPLD_pdfqt=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=ON \
                        -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}=="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.

variant gcc43 conflicts g95 gcc44 gcc45 gcc46 gcc47 universal description {Add support for fortran using gfortran-mp-4.3} {
    depends_lib-append      port:gcc43
    configure.ld_archflags  ""
    configure.fc            ${prefix}/bin/gfortran-mp-4.3
    configure.args-delete   -DENABLE_f77=OFF \
                            -DENABLE_f95=OFF
    configure.args-append   -DCMAKE_Fortran_COMPILER=\"${configure.fc}\" \
                            -DCMAKE_Fortran_FLAGS=\"${configure.fflags}\"
}
variant gcc44 conflicts g95 gcc43 gcc45 gcc46 gcc47 universal description {Add support for fortran using gfortran-mp-4.4} {
    depends_lib-append      port:gcc44
    configure.fc            ${prefix}/bin/gfortran-mp-4.4
    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}\"
}
variant gcc45 conflicts g95 gcc43 gcc44 gcc46 gcc47 universal description {Add support for fortran using gfortran-mp-4.5} {
    depends_lib-append      port:gcc45
    configure.fc            ${prefix}/bin/gfortran-mp-4.5
    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}\"
}
variant gcc46 conflicts g95 gcc43 gcc44 gcc45 gcc47 universal description {Add support for fortran using gfortran-mp-4.6} {
    depends_lib-append      port:gcc46
    configure.ld_archflags  ""
    configure.fc            ${prefix}/bin/gfortran-mp-4.6
    configure.args-delete   -DENABLE_f77=OFF \
                            -DENABLE_f95=OFF
    configure.args-append   -DCMAKE_Fortran_COMPILER=\"${configure.fc}\" \
                            -DCMAKE_Fortran_FLAGS=\"${configure.fflags}\"
}
variant gcc47 conflicts g95 gcc43 gcc44 gcc45 gcc46 universal description {Add support for fortran using gfortran-mp-4.7} {
    depends_lib-append      port:gcc47
    configure.fc            ${prefix}/bin/gfortran-mp-4.7
    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}\"
}
variant g95 conflicts gcc43 gcc44 gcc45 gcc46 gcc47 universal description {Add support for fortran using g95} {
    depends_lib-append      port:g95
    configure.fc            ${prefix}/bin/g95
    configure.ld_archflags  ""
    configure.args-delete   -DENABLE_f77=OFF \
                            -DENABLE_f95=OFF
    configure.args-append   -DCMAKE_Fortran_COMPILER=\"${configure.fc}\" \
                            -DCMAKE_OSX_DEPLOYMENT_TARGET=\"\" \
                            -DCMAKE_Fortran_FLAGS=\"${configure.fflags} -fno-second-underscore\"
# Ad hoc fix to enable build of f95 binding by disabling some features
    if {${os.major}<10} {
        patchfiles-append       patch-sfstubsf95.f90.diff
    }
}

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} {
    depends_lib-append     port: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} {
    depends_lib-append     port: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} {
    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_pngqt=OFF \
                            -DPLD_ppmqt=OFF \
                            -DPLD_epsqt=OFF \
                            -DPLD_pdfqt=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_pngqt=ON \
                            -DPLD_ppmqt=ON \
                            -DPLD_epsqt=ON \
                            -DPLD_pdfqt=ON \
                            -DPLD_qtwidget=ON \
                            -DPLD_svgqt=ON \
                            -DPLD_extqt=ON \
                            -DPLD_memqt=ON \
                            -DPLD_qtwidget=ON
}

variant no_x11 conflicts x11 description {Deprecated dummy variant} {
}

variant x11 conflicts no_x11 {
    configure.args-append   -DPLD_xcairo=ON  \
                            -DPLD_xwin=ON \
                            -DPLD_xfig=ON
    configure.args-delete   -DPLD_xcairo=OFF \
                            -DPLD_xwin=OFF \
                            -DPLD_xfig=OFF
}
