cmake_minimum_required(VERSION 2.8)

# set default build mode
if(NOT CMAKE_BUILD_TYPE)
	set(CMAKE_BUILD_TYPE "Release")
endif(NOT CMAKE_BUILD_TYPE)
if(WIN32)
	mark_as_advanced(CLEAR CMAKE_CONFIGURATION_TYPES)
	set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "")
endif(WIN32)

project(PORTR)

find_package(ITK)
if(ITK_FOUND)
	include(${ITK_USE_FILE})
else(ITK_FOUND)
	message(FATAL_ERROR "Cannot build without ITK. Please set ITK_DIR.")
endif(ITK_FOUND)

find_package(OpenMP)
if(OPENMP_FOUND)
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
else(OPENMP_FOUND)
	message("OpenMP is disabled.")
endif(OPENMP_FOUND)

find_package(CUDA)
if(CUDA_FOUND)
	if(CUDA_VERSION_MAJOR EQUAL 4)
		set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-gencode arch=compute_20,code=sm_20)
		add_definitions(-D_USE_CUDA)
	else()
		set(CUDA_FOUND 0)
	endif()
else(CUDA_FOUND)
	message("CUDA is disabled.")
endif(CUDA_FOUND)
mark_as_advanced(CUDA_BUILD_CUBIN)
mark_as_advanced(CUDA_BUILD_EMULATION)
mark_as_advanced(CUDA_HOST_COMPILER)
mark_as_advanced(CUDA_SDK_ROOT_DIR)
mark_as_advanced(CUDA_TOOLKIT_ROOT_DIR)
mark_as_advanced(CUDA_VERBOSE_BUILD)

# remove some MSVC flags
if(MSVC)
	add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS)
endif(MSVC)

# get revision
if(EXISTS ${PROJECT_SOURCE_DIR}/.svn)
	find_package(Subversion)
	if(Subversion_FOUND)
		Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project)
		message("Current revision is ${Project_WC_REVISION}")
		add_definitions(-DSW_REV="${Project_WC_REVISION}")
	else(Subversion_FOUND)
		if(WIN32)
			include(${PROJECT_SOURCE_DIR}/config/FindTortoiseSVN.cmake)
			if(TortoiseSVN_FOUND)
				TortoiseSVN_WC_INFO(${PROJECT_SOURCE_DIR} Project)
				message("Current revision is ${Project_WC_REVISION}")
				add_definitions(-DSW_REV="${Project_WC_REVISION}")
			endif(TortoiseSVN_FOUND)
		endif(WIN32)
	endif(Subversion_FOUND)
endif()

# set version
add_definitions(-DSW_VER="1.0.0")

add_definitions(-DDLONG)

if(WIN32)
	add_definitions(-DWIN64)
	add_definitions(-D_WIN64)
endif(WIN32)

string(TOLOWER "${ITK_LIBRARIES}" ITK_LIBRARIES_LO)
string(FIND "${ITK_LIBRARIES_LO}" "metaio" ITKHasMetaIO)
#if(ITKHasMetaIO EQUAL -1)
#	message("ITK_LIBRARIES doesn't include the MetaIO library: Added the internal one instead.")
#endif()

include_directories(${PROJECT_SOURCE_DIR}/lib)
include_directories(${PROJECT_SOURCE_DIR}/lib/MetaIO)
include_directories(${PROJECT_SOURCE_DIR}/lib/NIFTI)
include_directories(${PROJECT_SOURCE_DIR}/lib/zlib)

link_directories(${PROJECT_BINARY_DIR}/lib)
link_directories(${PROJECT_BINARY_DIR}/lib/MetaIO) 
link_directories(${PROJECT_BINARY_DIR}/lib/NIFTI) 
link_directories(${PROJECT_BINARY_DIR}/lib/zlib) 

add_subdirectory(data)
add_subdirectory(doc)
add_subdirectory(example)
add_subdirectory(lib)
add_subdirectory(src)
set(BUILD_TESTING TRUE CACHE BOOL "Build testing")
if(BUILD_TESTING)
	enable_testing()
	add_subdirectory(testing)
endif(BUILD_TESTING)
set(BUILD_DOCUMENTATION FALSE CACHE BOOL "Build documentation")
mark_as_advanced(BUILD_DOCUMENTATION)

# CPack settings
set(CPACK_PACKAGE_VERSION_MAJOR 1)
set(CPACK_PACKAGE_VERSION_MINOR 0)
set(CPACK_PACKAGE_VERSION_PATCH 0)
set(CPACK_GENERATOR TGZ)
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 1)
set(CPACK_PACKAGE_NAME "portr")
set(CPACK_SOURCE_GENERATOR TGZ)
set(CPACK_SOURCE_IGNORE_FILES "\\\\.svn/;^${PROJECT_SOURCE_DIR}/doc/src/")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "portr-1.0.0-source" CACHE INTERNAL "tarball basename")

include(CPack)
