#*********************************************************************
#**                Image Component Library (ICL)                    **
#**                                                                 **
#** Copyright (C) 2006-2013 CITEC, University of Bielefeld          **
#**                         Neuroinformatics Group                  **
#** Website: www.iclcv.org and                                      **
#**          http://opensource.cit-ec.de/projects/icl               **
#**                                                                 **
#** File   : ICLFilter/CMakeLists.txt                               **
#** Module : ICLFilter                                              **
#** Authors: Michael Goetting                                       **
#**                                                                 **
#**                                                                 **
#** GNU LESSER GENERAL PUBLIC LICENSE                               **
#** This file may be used under the terms of the GNU Lesser General **
#** Public License version 3.0 as published by the                  **
#**                                                                 **
#** Free Software Foundation and appearing in the file LICENSE.LGPL **
#** included in the packaging of this file.  Please review the      **
#** following information to ensure the license requirements will   **
#** be met: http://www.gnu.org/licenses/lgpl-3.0.txt                **
#**                                                                 **
#** The development of this software was supported by the           **
#** Excellence Cluster EXC 277 Cognitive Interaction Technology.    **
#** The Excellence Cluster EXC 277 is a grant of the Deutsche       **
#** Forschungsgemeinschaft (DFG) in the context of the German       **
#** Excellence Initiative.                                          **
#**                                                                 **
#*********************************************************************

SET(SOURCES src/ICLFilter/AffineOp.cpp
            src/ICLFilter/BinaryArithmeticalOp.cpp
	    src/ICLFilter/BinaryCompareOp.cpp
	    src/ICLFilter/BinaryLogicalOp.cpp
	    src/ICLFilter/BinaryOp.cpp
            src/ICLFilter/CannyOp.cpp
	    src/ICLFilter/ChamferOp.cpp
	    src/ICLFilter/ColorDistanceOp.cpp
	    src/ICLFilter/ColorSegmentationOp.cpp
	    src/ICLFilter/ConvolutionKernel.cpp
	    src/ICLFilter/ConvolutionOp.cpp
	    src/ICLFilter/DynamicConvolutionOp.cpp
	    src/ICLFilter/FFTOp.cpp
	    src/ICLFilter/GaborOp.cpp
	    src/ICLFilter/GradientImage.cpp
	    src/ICLFilter/IFFTOp.cpp
	    src/ICLFilter/ImageSplitter.cpp
	    src/ICLFilter/InplaceArithmeticalOp.cpp
	    src/ICLFilter/InplaceLogicalOp.cpp
	    src/ICLFilter/IntegralImgOp.cpp
	    src/ICLFilter/LUTOp.cpp
	    src/ICLFilter/LUTOp3Channel.cpp
	    src/ICLFilter/LocalThresholdOp.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_8u_true.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_16s_true.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_32s_true.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_32f_true.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_64f_true.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_8u_false.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_16s_false.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_32s_false.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_32f_false.cpp
	    src/ICLFilter/LocalThresholdOpHelpers_64f_false.cpp
	    src/ICLFilter/MedianOp.cpp
	    src/ICLFilter/MirrorOp.cpp
	    src/ICLFilter/MorphologicalOp.cpp
	    src/ICLFilter/MotionSensitiveTemporalSmoothing.cpp
	    src/ICLFilter/NeighborhoodOp.cpp
	    src/ICLFilter/OpROIHandler.cpp
	    src/ICLFilter/ThresholdOp.cpp
	    src/ICLFilter/UnaryArithmeticalOp.cpp
	    src/ICLFilter/UnaryCompareOp.cpp
	    src/ICLFilter/UnaryLogicalOp.cpp
	    src/ICLFilter/UnaryOp.cpp
	    src/ICLFilter/UnaryOpPipe.cpp
	    src/ICLFilter/WarpOp.cpp
	    src/ICLFilter/WeightChannelsOp.cpp
	    src/ICLFilter/WeightedSumOp.cpp
	    src/ICLFilter/ImageRectification.cpp
		src/ICLFilter/DitheringOp.cpp
		src/ICLFilter/BilateralFilterOp.cpp)

SET(HEADERS src/ICLFilter/AffineOp.h
            src/ICLFilter/BaseAffineOp.h
            src/ICLFilter/BinaryArithmeticalOp.h
	    src/ICLFilter/BinaryCompareOp.h
	    src/ICLFilter/BinaryLogicalOp.h
	    src/ICLFilter/BinaryOp.h
            src/ICLFilter/CannyOp.h
	    src/ICLFilter/ChamferOp.h
	    src/ICLFilter/ColorDistanceOp.h
	    src/ICLFilter/ColorSegmentationOp.h
	    src/ICLFilter/ConvolutionKernel.h
	    src/ICLFilter/ConvolutionOp.h
	    src/ICLFilter/DynamicConvolutionOp.h
	    src/ICLFilter/FFTOp.h
	    src/ICLFilter/Filter.h
	    src/ICLFilter/GaborOp.h
	    src/ICLFilter/GradientImage.h
	    src/ICLFilter/IFFTOp.h
	    src/ICLFilter/ImageSplitter.h
	    src/ICLFilter/InplaceArithmeticalOp.h
	    src/ICLFilter/InplaceLogicalOp.h
	    src/ICLFilter/InplaceOp.h
	    src/ICLFilter/IntegralImgOp.h
	    src/ICLFilter/LUT2D.h
	    src/ICLFilter/LUTOp.h
	    src/ICLFilter/LUTOp3Channel.h
	    src/ICLFilter/LocalThresholdOp.h
	    src/ICLFilter/LocalThresholdOpHelpers.h
	    src/ICLFilter/MedianOp.h
	    src/ICLFilter/MirrorOp.h
	    src/ICLFilter/MorphologicalOp.h
	    src/ICLFilter/MotionSensitiveTemporalSmoothing.h
	    src/ICLFilter/NeighborhoodOp.h
	    src/ICLFilter/OpROIHandler.h
	    src/ICLFilter/RotateOp.h
	    src/ICLFilter/ScaleOp.h
	    src/ICLFilter/ThresholdOp.h
	    src/ICLFilter/TranslateOp.h
	    src/ICLFilter/UnaryArithmeticalOp.h
	    src/ICLFilter/UnaryCompareOp.h
	    src/ICLFilter/UnaryLogicalOp.h
	    src/ICLFilter/UnaryOp.h
	    src/ICLFilter/UnaryOpPipe.h
	    src/ICLFilter/UnaryOpWork.h
	    src/ICLFilter/WarpOp.h
	    src/ICLFilter/WeightChannelsOp.h
			src/ICLFilter/WeightedSumOp.h
			src/ICLFilter/ImageRectification.h
			src/ICLFilter/DitheringOp.h
			src/ICLFilter/BilateralFilterOp.h)

# opencl kernel integration
SET(KERNEL )
LIST(APPEND KERNEL src/ICLFilter/OpenCL/BilateralFilterOp.cl)
foreach(kernel_file ${KERNEL})
	get_filename_component(kernel_source_name ${kernel_file} NAME_WE)
	string(REGEX REPLACE ".cl$" "Kernel.h" kernel_header_file "${kernel_file}")
	CREATE_CL_HEADER("${kernel_file}" "${kernel_header_file}" "${kernel_source_name}KernelSource" filter)
	LIST(APPEND HEADERS ${kernel_header_file})
endforeach()

IF(IPP_FOUND)
  LIST(APPEND SOURCES src/ICLFilter/WienerOp.cpp
		      src/ICLFilter/ProximityOp.cpp)

  LIST(APPEND HEADERS src/ICLFilter/WienerOp.h
			  src/ICLFilter/ProximityOp.h)
ENDIF()

# ---- Library build instructions ----
IF(WIN32)
INCLUDE_DIRECTORIES(BEFORE src
                           ${ICL_SOURCE_DIR}/3rdparty/zlib
                           ${ICL_SOURCE_DIR}/3rdparty/libpng
                           ${ICL_SOURCE_DIR}/3rdparty/libjpeg
                           ${CMAKE_BINARY_DIR}/src
                           ${ICL_SOURCE_DIR}/ICLUtils/src
                           ${ICL_SOURCE_DIR}/ICLMath/src
                           ${ICL_SOURCE_DIR}/ICLCore/src)
ELSE()
INCLUDE_DIRECTORIES(BEFORE src
                           ${CMAKE_BINARY_DIR}/src
                           ${ICL_SOURCE_DIR}/ICLUtils/src
                           ${ICL_SOURCE_DIR}/ICLMath/src
                           ${ICL_SOURCE_DIR}/ICLCore/src)
ENDIF()

ADD_LIBRARY(ICLFilter SHARED ${SOURCES} ${HEADERS} ${KERNEL})

# ---- 3rd party library handling ----
TARGET_LINK_LIBRARIES(ICLFilter ICLCore)

SET_TARGET_PROPERTIES(ICLFilter
                      PROPERTIES 
		      VERSION ${SO_VERSION})

# ---- Build examples/ demos/ apps ----
IF(BUILD_DEMOS)
  ADD_SUBDIRECTORY(demos)
ENDIF()

IF(BUILD_APPS)
  ADD_SUBDIRECTORY(apps)
ENDIF()

# ---- Install specifications ----
INSTALL(TARGETS ICLFilter
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib)
INSTALL_FILES_RECURSIVE("include/${INSTALL_PATH_PREFIX}" HEADERS)

# ---- PKG-config ----
CREATE_PKGCONFIG(NAME ICLFilter
                 PKGCONFIG_DEPS ICLCore-${SO_VERSION})