# -*- 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 119503 2014-04-28 11:16:02Z stromnov@macports.org $

PortSystem          1.0
PortGroup           cmake 1.0
PortGroup           compiler_blacklist_versions 1.0

name                opencv
version             2.4.9
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}

worksrcdir          ${worksrcdir}/../build
patch.dir           ${workpath}/${distname}

post-extract {
    file mkdir ${worksrcpath}
}

use_zip             yes

checksums           rmd160  1b0b80ecb50270fa7e4b1dea6f075982b5d15d81 \
                    sha256  803010848154988e9cbda8b3fa857fcbb27382c2946ed729e1a7e40600bb4c71

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 ../${distname}/ \
                    -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 ""

# 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: Actually fix this
if {[string match "*clang*" ${configure.compiler}]} {
    post-patch {
        reinplace "/-Werror=sequence-point/d" ${worksrcpath}/../${distname}/cmake/OpenCVCompilerOptions.cmake
    }
}

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

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} eq "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}/../${distname}/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} " "]\"
}

post-destroot {
    # http://trac.macports.org/ticket/42702
    reinplace {/Libs: /s:\${exec_prefix}/lib/libopencv_:-lopencv_:g} ${destroot}${prefix}/lib/pkgconfig/opencv.pc
    reinplace {/Libs: /s:\.a::g} ${destroot}${prefix}/lib/pkgconfig/opencv.pc
    reinplace {/Libs: /s:\.dylib::g} ${destroot}${prefix}/lib/pkgconfig/opencv.pc
    reinplace {s|Libs: |Libs: -L\${exec_prefix}/lib |g} ${destroot}${prefix}/lib/pkgconfig/opencv.pc
}

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