#===============================================================================
# Medical Data Segmentation Toolkit (MDSTk)
# Copyright (c) 2007-2010 by PGMed@FIT
#
# Authors: Miroslav Svub, svub@fit.vutbr.cz
#          Michal Spanel, spanel@fit.vutbr.cz
# Date:    2007/08/25
#
# $Id: CMakeLists.txt 1873 2010-09-03 11:43:01Z spanel $
#
# Description:
# - Configuration file for the CMake build system.

# Check the CMake version
cmake_minimum_required( VERSION 2.4 )
if( COMMAND cmake_policy )
  cmake_policy( SET CMP0003 NEW )
endif( COMMAND cmake_policy )


# Main project name
project( OMToolkit )

# Current version
set( OMToolkit_MAJOR_VERSION 0 )
set( OMToolkit_MINOR_VERSION 1 )
set( OMToolkit_PATCH_VERSION 0 )
set( OMToolkit_VERSION ${OMToolkit_MAJOR_VERSION}.${OMToolkit_MINOR_VERSION}.${OMToolkit_PATCH_VERSION} )
mark_as_advanced( OMToolkit_MAJOR_VERSION OMToolkit_MINOR_VERSION OMToolkit_PATCH_VERSION OMToolkit_VERSION )

# Path to some custom .cmake scripts.
set( CMAKE_MODULE_PATH "${OMToolkit_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}" )

# Set default build type
if( NOT MSVC )
  if( NOT CMAKE_BUILD_TYPE )
    set( CMAKE_BUILD_TYPE Release CACHE STRING 
         "Choose the type of build, options are: Release and Debug." FORCE )
  endif( NOT CMAKE_BUILD_TYPE )
endif( NOT MSVC )

# Empty linker flags
set( OMToolkit_LINK_FLAGS "" )


set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)

# Set output path for libraries
set( LIBRARY_OUTPUT_PATH ${OMToolkit_BINARY_DIR}/lib CACHE PATH
     "Output directory for the OMToolkit libraries." )

# Set output path for binaries
set( EXECUTABLE_OUTPUT_PATH ${OMToolkit_BINARY_DIR}/bin CACHE PATH
     "Output directory for the OMToolkit executables." )

# Add path to OMToolkit include directories
include_directories( ${PROJECT_SOURCE_DIR}/include/ )


# Enable/disable 64-bit compilation?
if( UNIX )
  option( OMToolkit_GENERATE_64BIT_CODE "Do you want to generate code for 64bit environment?" OFF )
  if( OMToolkit_GENERATE_64BIT_CODE )
    set( OMToolkit_LIB_POSTFIX "64" CACHE STRING "Suffix for 32/64 libraries directory." )
    mark_as_advanced( OMToolkit_LIB_POSTFIX )
  endif( OMToolkit_GENERATE_64BIT_CODE )
endif( UNIX )

if( NOT DEFINED OMToolkit_LIB_POSTFIX )
  set( OMToolkit_LIB_POSTFIX "" )
  mark_as_advanced( OMToolkit_LIB_POSTFIX )
endif( NOT DEFINED OMToolkit_LIB_POSTFIX )


# Build shared or static library?
#option( BUILD_SHARED_LIBS "Should shared library be built?" OFF )

# Stop after the initial options on the first run
#if( NOT AUX_FIRST_RUN )
#  set( AUX_FIRST_RUN "1" CACHE STRING "Internal helper flag..." FORCE )
#  mark_as_advanced( AUX_FIRST_RUN )
#  return()
#endif( NOT AUX_FIRST_RUN )


# Set platform specific preprocessor definitions
if( WIN32 )
  add_definitions( -D_WIN32 -D_USE_MATH_DEFINES )
else( WIN32 )
  if( UNIX )
    add_definitions( -D_LINUX )
    if( NOT OMToolkit_GENERATE_64BIT_CODE )
      set_property( GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS OFF )
      add_definitions( -m32 )
      set( OMToolkit_LINK_FLAGS -m32 )
    else( NOT OMToolkit_GENERATE_64BIT_CODE )
      set_property( GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ON )
    endif( NOT OMToolkit_GENERATE_64BIT_CODE )
    if( CMAKE_BUILD_TYPE STREQUAL "Debug" )
      add_definitions( -D_DEBUG )
    endif( CMAKE_BUILD_TYPE STREQUAL "Debug" )
  endif( UNIX )
endif( WIN32 )

# Build options
option( BUILD_LIBRARIES "Should OMToolkit libraries be built?" ON )
option( BUILD_MODULES "Should OMToolkit modules be built?" ON )
#option( BUILD_DOCUMENTATION "Should documentation be generated?" OFF )

option( OMToolkit_MULTITHREADED "Enables support for multithreaded applications." OFF )


# Prepare the 'configure.h' file
#configure_file( ${OMToolkit_SOURCE_DIR}/include/OMToolkit/configure.in
 #               ${OMToolkit_BINARY_DIR}/include/OMToolkit/configure.h
 #               @ONLY )

# Add path to the 'configure.h'
include_directories( ${PROJECT_BINARY_DIR}/include/ )


# Find the OPENMESH library
if( NOT OMToolkit_OM )
#  find_package( OPENMESH )
   set (OM_LIBRARIES "C:/Libs/OpenMesh")
   set (OM_INCLUDE_DIR "C:/Libs/OpenMesh/include")
#  if( OM_FOUND OR OMD_FOUND )
    set( OMToolkit_OM ${OM_LIBRARIES} CACHE PATH "Full path to the OpenMesh library." FORCE )
    set( OMToolkit_OM_INCLUDE_DIR ${OM_INCLUDE_DIR} CACHE PATH "Full path to the OpenMesh library header files." FORCE )
#  endif( OM_FOUND OR OMD_FOUND )
endif( NOT OMToolkit_OM )

option( BUILD_MODULES_OSG "Should OMToolkit modules which depends on OpenSceneGraph be built?" ON )
if( NOT OMToolkit_OSG )
#  find_package( OPENSCENEGRAPH )
	set (OSG_LIBRARY "C:/Libs/osg")
   set (OSG_INCLUDE_DIR "C:/Libs/osg/include")
#  if( OSG_FOUND OR OSGD_FOUND )
    set( OMToolkit_OSG ${OSG_LIBRARY} CACHE PATH "Full path to the OpenSceneGraph library." FORCE )
    set( OMToolkit_OSG_INCLUDE_DIR ${OSG_INCLUDE_DIR} CACHE PATH "Full path to the OpenSceneGraph library header files." FORCE )
#  endif( OSG_FOUND OR OSGD_FOUND )
endif( NOT OMToolkit_OSG )

if( NOT OMToolkit_MDSTk )
#  find_package( MDSTk )
	set (MDSTk_LIBRARY "C:/Libs/MDSTk")
   set (MDSTk_INCLUDE_DIR "C:/Libs/MDSTk/include")
#  if( OSG_FOUND OR OSGD_FOUND )
    set( OMToolkit_MDSTk ${MDSTk_LIBRARY} CACHE PATH "Full path to the MDSTk library." FORCE )
    set( OMToolkit_MDSTk_INCLUDE_DIR ${MDSTk_INCLUDE_DIR} CACHE PATH "Full path to the MDSTk library header files." FORCE )
#  endif( OSG_FOUND OR OSGD_FOUND )
endif( NOT OMToolkit_MDSTk )

if( NOT OMToolkit_OCv )
#  find_package( OpenCv )
	set (OCv_LIBRARY "C:/Libs/OpenCv")
   set (OCv_INCLUDE_DIR "C:/Libs/OpenCv/include")
#  if( OSG_FOUND OR OSGD_FOUND )
    set( OMToolkit_OCv ${OCvk_LIBRARY} CACHE PATH "Full path to the OpenCv library." FORCE )
    set( OMToolkit_OCv_INCLUDE_DIR ${OCv_INCLUDE_DIR} CACHE PATH "Full path to the OpenCv library header files." FORCE )
#  endif( OSG_FOUND OR OSGD_FOUND )
endif( NOT OMToolkit_OCv )

option( BUILD_MODULES_OpenCL "Should OMToolkit modules which depends on OpenCL be built?" ON )
if( NOT OMToolkit_OpenCL )
#  find_package( OpenCL )
	set (OpenCL_LIBRARY "C:/Libs/OpenCLSDK")
   set (OpenCL_INCLUDE_DIR "C:/Libs/OpenCLSDK/include")

   set( OMToolkit_OpenCL ${OpenCL_LIBRARY} CACHE PATH "Full path to the OpenCL library." FORCE )
   set( OMToolkit_OpenCL_INCLUDE_DIR ${OpenCL_INCLUDE_DIR} CACHE PATH "Full path to the OpenCL library header files." FORCE )

endif( NOT OMToolkit_OpenCL )

# All 3rd party include directories
set( OMToolkit_3RDPARTY_INCLUDE_DIR ${OMToolkit_OM_INCLUDE_DIR}
									${OMToolkit_OSG_INCLUDE_DIR}
									${OMToolkit_OpenCL_INCLUDE_DIR}
									${OMToolkit_OCv_INCLUDE_DIR}
									${OMToolkit_MDSTk_INCLUDE_DIR} )

include_directories( ${OMToolkit_3RDPARTY_INCLUDE_DIR} )

if(MSVC_VERSION GREATER 1299)
  ADD_DEFINITIONS("/wd4244")
endif(MSVC_VERSION GREATER 1299)



# All necessary 3rd party libraries
set( OMToolkit_3RDPARTY_LIBS ${OMToolkit_OM}
                             ${OMToolkit_OSG}
							 ${OMToolkit_OpenCL}
							 ${OMToolkit_OCv}
							 ${OMToolkit_MDSTk})			

# Continue with subdirectories
add_subdirectory( src )
