# -*- 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 107771 2013-07-05 15:01:31Z stromnov@macports.org $

PortSystem                      1.0
PortGroup                       cmake 1.0
PortGroup                       compiler_blacklist_versions 1.0

name                            opencv
version                         2.4.6
revision                        0
categories                      graphics science
platforms                       darwin
license                         BSD
maintainers                     stromnov openmaintainer

description                     Intel(R) Open Source Computer Vision Library

long_description                opencv is a library that is mainly aimed at real time \
                                computer vision. Some example areas would be \
                                Human-Computer Interaction (HCI), Object Identification, \
                                Segmentation and Recognition, Face Recognition, Gesture \
                                Recognition, Motion Tracking, Ego Motion, Motion \
                                Understanding, Structure From Motion (SFM), and Mobile \
                                Robotics.

homepage                        http://opencv.org
master_sites                    sourceforge:project/opencvlibrary/opencv-unix/${version}

distname                        opencv-${version}
worksrcdir                      ${name}-${version}

checksums                       rmd160  a95e4a316f49eec4c89d3d05cedfd261ed1aa169 \
                                sha256  5a9bcadf9c114ca81e206f4171091676b69019a4032b9621e5df29f88157b0b1

depends_build-append            port:pkgconfig

depends_lib-append              port:zlib \
                                port:bzip2 \
                                port:libpng \
                                port:jpeg \
                                port:jasper \
                                port:tiff \
                                port:ilmbase \
                                port:openexr \
                                path:lib/libavcodec.dylib:ffmpeg

patchfiles                      patch-fix_dirname_case.diff \
                                patch-install_name.diff \
                                patch-CMakeLists.txt.diff \
                                patch-cmake_OpenCVFindLibsPerf.cmake.diff \
                                patch-modules_java_CMakeLists.txt.diff \
                                patch-modules_python_CMakeLists.txt.diff \
                                patch-modules_core_src_parallel.cpp.diff

configure.args-append           -DWITH_1394=OFF \
                                -DWITH_CARBON=OFF \
                                -DWITH_CUBLAS=OFF \
                                -DWITH_CUDA=OFF \
                                -DWITH_CUFFT=OFF \
                                -DWITH_EIGEN=OFF \
                                -DWITH_FFMPEG=ON \
                                -DWITH_GSTREAMER=OFF \
                                -DWITH_GTK=OFF \
                                -DWITH_IMAGEIO=OFF \
                                -DWITH_IPP=OFF \
                                -DWITH_JASPER=ON \
                                -DWITH_JPEG=ON \
                                -DWITH_OPENEXR=ON \
                                -DWITH_OPENGL=ON \
                                -DWITH_OPENNI=OFF \
                                -DWITH_PNG=ON \
                                -DWITH_PVAPI=OFF \
                                -DWITH_GIGEAPI=OFF \
                                -DWITH_QT=OFF \
                                -DWITH_QUICKTIME=OFF \
                                -DWITH_TBB=OFF \
                                -DWITH_GCD=ON \
                                -DWITH_CSTRIPES=OFF \
                                -DWITH_TIFF=ON \
                                -DWITH_UNICAP=OFF \
                                -DWITH_V4L=OFF \
                                -DWITH_VIDEOINPUT=OFF \
                                -DWITH_XIMEA=OFF \
                                -DWITH_XINE=OFF \
                                -DWITH_OPENCL=OFF \
                                -DWITH_OPENCLAMDFFT=OFF \
                                -DWITH_OPENCLAMDBLAS=OFF \
                                -DBUILD_SHARED_LIBS=ON \
                                -DBUILD_DOCS=OFF \
                                -DBUILD_EXAMPLES=OFF \
                                -DBUILD_PERF_TESTS=OFF \
                                -DBUILD_TESTS=OFF \
                                -DBUILD_ZLIB=OFF \
                                -DBUILD_TIFF=OFF \
                                -DBUILD_JASPER=OFF \
                                -DBUILD_JPEG=OFF \
                                -DBUILD_PNG=OFF \
                                -DBUILD_OPENEXR=OFF \
                                -DPYTHON_EXECUTABLE=OFF \
                                -DINSTALL_C_EXAMPLES=OFF \
                                -DINSTALL_PYTHON_EXAMPLES=OFF \
                                -DENABLE_PRECOMPILED_HEADERS=ON \
                                -DCMAKE_VERBOSE=ON \
                                -DZLIB_LIBRARY=${prefix}/lib/libz.dylib \
                                -DBZIP2_LIBRARIES=${prefix}/lib/libbz2.dylib

set opencv_linker_libs {"-Wl,-headerpad_max_install_names"}

# gcc-4.0 exits with a bus error
compiler.blacklist-append   gcc-4.0

# llvm-gcc-4.2 appears to be broken on old XCode (#35368)
compiler.blacklist-append   {llvm-gcc-4.2 < 2336.11}

# Older clang also don't work (#36956)
compiler.blacklist-append   {clang < 318}

# TODO: base should do this: http://trac.macports.org/ticket/32542
if {[info exists portconfigure::compiler_name_map(${configure.compiler})]} {
    depends_build-append port:$portconfigure::compiler_name_map(${configure.compiler})

    # base 2.1.x ignores the argument and just use ${configure.compiler}
    if {[portconfigure::arch_flag_supported ${configure.compiler}]} {
        depends_skip_archcheck-append $portconfigure::compiler_name_map(${configure.compiler})
    }

    if {[string match macports-gcc* ${configure.compiler}]} {
        depends_lib-append port:$portconfigure::compiler_name_map(${configure.compiler})
    }
}

# PCH broken when universal
if {[variant_isset universal]} {
    configure.args-delete       -DENABLE_PRECOMPILED_HEADERS=ON
    configure.args-append       -DENABLE_PRECOMPILED_HEADERS=OFF
}

# Video Decode Acceleration Framework is not available
if {${os.major} <= 9} {
    patchfiles-append           patch-highgui_CMakeLists.txt.diff
}

# GCD is not available
if {${os.major} <= 11} {
    configure.args-delete       -DWITH_GCD=ON
    configure.args-append       -DWITH_GCD=OFF
}

post-destroot {
    xinstall -d ${destroot}${prefix}/lib/cmake
    move ${destroot}${prefix}/share/OpenCV/OpenCVConfig-version.cmake \
        ${destroot}${prefix}/share/OpenCV/OpenCVConfig.cmake \
        ${destroot}${prefix}/lib/cmake/
}

variant eigen description {Enable eigen support.} {
    depends_lib-append          port:eigen3
    configure.args-delete       -DWITH_EIGEN=OFF
    configure.args-append       -DWITH_EIGEN=ON \
                                -DEIGEN_INCLUDE_PATH=${prefix}/include/eigen3
}

variant opencl description {Enable OpenCL support.} {
    pre-configure {
        if {${os.platform} == "darwin" && ${os.major} < 11} {
            ui_error "The OpenCL variant only works with OS X 10.7 Lion or later."
            return -code error "incompatible OS X version"
        }
    }
    configure.args-delete       -DWITH_OPENCL=OFF
    configure.args-append       -DWITH_OPENCL=ON
}

variant openni description {Enable OpenNI support.} {
    depends_lib-append          port:openni
    patchfiles-append           patch-cmake_OpenCVFindOpenNI.cmake.diff
    configure.args-delete       -DWITH_OPENNI=OFF
    configure.args-append       -DWITH_OPENNI=ON

    post-patch {
         reinplace "s,@@PREFIX@@,${prefix},g" ${worksrcpath}/cmake/OpenCVFindOpenNI.cmake
    }
}

variant dc1394 description {Use libdc1394 for FireWire camera. Breaks compatibility with Apple iSight FireWire camera.} {
    depends_lib-append          port:libdc1394
    configure.args-delete       -DWITH_1394=OFF
    configure.args-append       -DWITH_1394=ON \
                                -DHAVE_DC1394_2=ON
}

variant qt4 description {Build with Qt Backend support.} {
    PortGroup                   qt4 1.0
    configure.args-delete       -DWITH_QT=OFF
    configure.args-append       -DWITH_QT=ON
}

variant java description {Add Java bindings.} {
    depends_build-append        port:apache-ant
    patchfiles-delete           patch-modules_java_CMakeLists.txt.diff
}

if {[variant_isset java] && ![variant_isset python26] && ![variant_isset python27]} {
    configure.args-delete       -DPYTHON_EXECUTABLE=OFF
    configure.args-append       -DPYTHON_EXECUTABLE=/usr/bin/python
}

variant python26 conflicts python27 description {Add Python 2.6 bindings.} {
    depends_lib-append          port:python26 \
                                port:py26-numpy
    patchfiles-delete           patch-modules_python_CMakeLists.txt.diff
    configure.args-delete       -DINSTALL_PYTHON_EXAMPLES=OFF \
                                -DPYTHON_EXECUTABLE=OFF
    configure.args-append       -DINSTALL_PYTHON_EXAMPLES=ON \
                                -DPYTHON_EXECUTABLE=${prefix}/bin/python2.6 \
                                -DPYTHON_LIBRARY=${prefix}/lib/libpython2.6.dylib \
                                -DPYTHON_INCLUDE_DIR=${frameworks_dir}/Python.framework/Versions/2.6/Headers \
                                -DPYTHON_PACKAGES_PATH=${frameworks_dir}/Python.framework/Versions/2.6/lib/python2.6/site-packages
}

variant python27 conflicts python26 description {Add Python 2.7 bindings.} {
    depends_lib-append          port:python27 \
                                port:py27-numpy
    patchfiles-delete           patch-modules_python_CMakeLists.txt.diff
    configure.args-delete       -DINSTALL_PYTHON_EXAMPLES=OFF \
                                -DPYTHON_EXECUTABLE=OFF
    configure.args-append       -DINSTALL_PYTHON_EXAMPLES=ON \
                                -DPYTHON_EXECUTABLE=${prefix}/bin/python2.7 \
                                -DPYTHON_LIBRARY=${prefix}/lib/libpython2.7.dylib \
                                -DPYTHON_INCLUDE_DIR=${frameworks_dir}/Python.framework/Versions/2.7/Headers \
                                -DPYTHON_PACKAGES_PATH=${frameworks_dir}/Python.framework/Versions/2.7/lib/python2.7/site-packages
}

variant tbb description {Use Intel TBB.} {
    depends_lib-append          port:tbb
    configure.args-delete       -DWITH_TBB=OFF
    configure.args-append       -DWITH_TBB=ON \
                                -DHAVE_TBB=ON \
                                -DTBB_INCLUDE_DIRS=${prefix}/include
    lappend opencv_linker_libs "-ltbb" "-ltbbmalloc"
}

pre-configure {
    configure.args-append       -DOPENCV_LINKER_LIBS=\"[join ${opencv_linker_libs} " "]\"
}

livecheck.type                  sourceforge
livecheck.name                  opencvlibrary
livecheck.regex                 /\[Oo\]pen\[Cc\]\[Vv\]-(\[0-9.\]+)\[a-z\]?\.t
