CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0)
PROJECT(polyora)
ENABLE_TESTING()

SET(CPACK_PACKAGE_VENDOR "Julien Pilet")
SET(CPACK_PACKAGE_VERSION_MAJOR 1)
SET(CPACK_PACKAGE_VERSION_MINOR 0)
SET(CPACK_PACKAGE_VERSION_PATCH 2)
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
SET(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.txt")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Polyora is a multi-target tracking and retrieval library")
SET(CPACK_SOURCE_IGNORE_FILES "/\\\\.svn/" "/data/" "/tags" "/doc/" "/SiftGPU/" ".*\\\\.pro" "\\\\..*\\\\.swp"
		"/build/" "/\\\\.DS_Store")
SET(CPACK_SOURCE_GENERATOR ZIP)

INCLUDE(CPack)

SET(polyora_CMAKE_DIR "${polyora_SOURCE_DIR}/cmake")
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${polyora_CMAKE_DIR}")

FIND_PACKAGE(OpenMP)
IF (OPENMP_FOUND)
	OPTION(POLYORA_USE_OPENMP "Use OpenMP for multithreading" ON)	
	IF (POLYORA_USE_OPENMP)
		LIST(APPEND CMAKE_C_FLAGS ${OpenMP_C_FLAGS})
		LIST(APPEND CMAKE_CXX_FLAGS ${OpenMP_CXX_FLAGS})
		LIST(APPEND CMAKE_EXE_LINKER_FLAGS ${OpenMP_CXX_FLAGS})
	ENDIF(POLYORA_USE_OPENMP)
ENDIF(OPENMP_FOUND)

OPTION(POLYORA_PROFILING "Self-profiling support" OFF)
OPTION(POLYORA_DISABLE_ASSERTIONS "Disable runtime integrity checks (assert). Faster, but make debugging more difficult." OFF)	
IF (POLYORA_DISABLE_ASSERTIONS)
	add_definitions(-DNDEBUG)
ENDIF (POLYORA_DISABLE_ASSERTIONS)

# OpenGL
FIND_PACKAGE(OpenGL)
IF(OPENGL_FOUND) 
	MESSAGE(STATUS "Looking for OpenGL - found")
ELSE(OPENGL_FOUND) 
	MESSAGE(STATUS "Looking for OpenGL - not found")
ENDIF(OPENGL_FOUND)

# Qt
SET(Qt4_FIND_REQUIRED OFF)
SET(QT_USE_QTOPENGL ON)
FIND_PACKAGE(Qt4)
IF(QT4_FOUND) 
	MESSAGE(STATUS "Looking for Qt4 - found")
ELSE(QT4_FOUND) 
	MESSAGE(STATUS "Looking for Qt4 - not found")
ENDIF(QT4_FOUND)

IF(APPLE)
	ADD_DEFINITIONS(-DMACOS)
ENDIF(APPLE)

# OpenCV
FIND_PACKAGE(OpenCV COMPONENTS "CXCORE;CV;HIGHGUI" REQUIRED )
IF(OpenCV_FOUND) 
	MESSAGE(STATUS "Looking for OpenCV - found")
ELSE(OpenCV_FOUND) 
	MESSAGE(FATAL_ERROR "Looking for OpenCV - not found")
ENDIF(OpenCV_FOUND)


# SiftGPU depends on a lot of stuff
SET(SIFTGPU_FOUND OFF)
SET(GLUT_FOUND OFF)
FIND_PACKAGE(GLEW)
IF (WIN32)
	FIND_PATH(GLUT_INCLUDE_DIR GL/glut.h SiftGPU/Include)
	FIND_LIBRARY(GLUT_LIBRARY glut32.lib SiftGPU/lib SiftGPU/SiftGPU/lib)
	IF(GLUT_INCLUDE_DIR AND GLUT_LIBRARY)
		SET(GLUT_FOUND ON)
	ELSE(GLUT_INCLUDE_DIR AND GLUT_LIBRARY)
		SET(GLUT_FOUND OFF)
	ENDIF(GLUT_INCLUDE_DIR AND GLUT_LIBRARY)
ELSE(WIN32)
	FIND_PACKAGE(GLUT)
ENDIF(WIN32)

FIND_PACKAGE(Cg)
FIND_PACKAGE(CUDA)
FIND_PATH(SIFTGPU_INCLUDE_DIR SiftGPU.h SiftGPU/src SiftGPU/src/SiftGPU SiftGPU/SiftGPU/src)
MARK_AS_ADVANCED(SIFTGPU_INCLUDE_DIR)
FIND_LIBRARY(SIFTGPU_LIBRARY NAMES siftgpu SIFTGPU PATHS SiftGPU/Mac/bin SiftGPU/linux/bin/ SiftGPU/Linux/bin SiftGPU/bin SiftGPU/lib)
MARK_AS_ADVANCED(SIFTGPU_LIBRARY)
FIND_LIBRARY(IL_LIBRARY NAMES IL DevIL PATHS SiftGPU/lib SiftGPU/SiftGPU/lib /opt/local/lib /sw/lib /usr/lib /usr/local/lib)
MARK_AS_ADVANCED(IL_LIBRARY)
SET(IL_FOUND OFF)
MARK_AS_ADVANCED(IL_FOUND)
IF(IL_LIBRARY)
	SET(IL_FOUND ON)
ENDIF(IL_LIBRARY)

SET (GPU_SUPPORT OFF)
MARK_AS_ADVANCED(GPU_SUPPORT)
IF (CUDA_RUNTIME_LIBRARY)
	SET (GPU_SUPPORT ON)
ENDIF (CUDA_RUNTIME_LIBRARY)
IF (GLEW_FOUND AND CG_LIBRARY AND GLUT_FOUND)
	SET (GPU_SUPPORT ON)
ENDIF (GLEW_FOUND AND CG_LIBRARY AND GLUT_FOUND)
IF ( SIFTGPU_LIBRARY AND  IL_LIBRARY AND GPU_SUPPORT)
	# hourrah ! we have everything. 
	SET(SIFTGPU_FOUND ON)
	IF (CUDA_RUNTIME_LIBRARY)
		SET(SIFTGPU_LIBRARIES ${CUDA_RUNTIME_LIBRARY})
		SET(SIFTGPU_INCLUDE_DIRS ${CUDA_INCLUDE_PATH})
	ENDIF (CUDA_RUNTIME_LIBRARY)
	IF (CG_LIBRARY)
		SET(SIFTGPU_LIBRARIES ${CG_LIBRARY} ${CG_GL_LIBRARY} ${GLEW_LIBRARY} ${OPENGL_LIBRARY} ${GLUT_LIBRARY})
		SET(SIFTGPU_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIR} ${GLUT_INCLUDE_DIR})
	ENDIF (CG_LIBRARY)
	SET(SIFTGPU_LIBRARIES ${SIFTGPU_LIBRARIES} ${SIFTGPU_LIBRARY} ${IL_LIBRARY})
	SET(SIFTGPU_INCLUDE_DIRS ${SIFTGPU_INCLUDE_DIRS} ${SIFTGPU_INCLUDE_DIR})
ENDIF ( SIFTGPU_LIBRARY AND  IL_LIBRARY AND GPU_SUPPORT)
MESSAGE(STATUS "SiftGPU is " ${SIFTGPU_FOUND} ", CUDA: " ${CUDA_FOUND} ", CG: " ${CG_FOUND} ", IL: " ${IL_FOUND} ", GPU Support: " ${GPU_SUPPORT})


INCLUDE_DIRECTORIES(.)

SET(CPACK_COMPONENTS_ALL polyora_lib_headers tools videosource_lib_headers)
SET(CPACK_COMPONENT_polyora_LIB_HEADERS_DISPLAY_NAME "Polyora library")
SET(CPACK_COMPONENT_VIDEOSOURCE_LIB_HEADERS_DISPLAY_NAME "Videosource library (optional)")
SET(CPACK_COMPONENT_TOOLS_DISPLAY_NAME "Tools")

ADD_SUBDIRECTORY(videosource)
ADD_SUBDIRECTORY(polyora)
ADD_SUBDIRECTORY(buildtree)
ADD_SUBDIRECTORY(cluster_ids)
ADD_SUBDIRECTORY(crawler)
ADD_SUBDIRECTORY(examples)
IF (QT4_FOUND)
	ADD_SUBDIRECTORY(qtpolyora)
	ADD_SUBDIRECTORY(vobj_tracker)
ENDIF (QT4_FOUND)
