##################
### Tomato ###
##################
cmake_minimum_required (VERSION 2.8)
project (Tomato)
# The version number.
set (Tomato_VERSION_MAJOR 0)
set (Tomato_VERSION_MINOR 1)
# Compiler flags
set (CMAKE_CXX_STANDARD 98 CACHE STRING "")
set (CMAKE_CXX_STANDARD_REQUIRED ON)
if (CMAKE_CXX_STANDARD EQUAL 98)
set (CXX_STANDARD_98 ON) # flag used in the code
endif()
# list of source files
file (GLOB_RECURSE APP_FILES app/*.c* app/*.h* app/*.t*)
file (GLOB_RECURSE LIB_FILES lib/*.c* lib/*.h* lib/*.t*)
###############
### PRIVATE ###
###############
# unfortunatelly I cannot publish numerical recipes code according to numerical recipes licence
set(PRIVATE_NR2_DIR ../Tomato_private CACHE PATH "")
set(USE_PRIVATE_NR2 ON CACHE BOOL "")
if (USE_PRIVATE_NR2)
add_subdirectory(${PRIVATE_NR2_DIR} ${CMAKE_BINARY_DIR}/private)
include_directories(${PRIVATE_NR2_DIR}/lib)
endif()
############
### YAML ###
############
set (BUILD_TESTING OFF CACHE INTERNAL "" FORCE)
add_subdirectory (thirdParty/libyaml)
include_directories (${yaml_BINARY_DIR}/include ${yaml_SOURCE_DIR}/include) # for windows
set(OxSmolli2_LIBS_TO_LINK ${OxSmolli2_LIBS_TO_LINK} yaml)
#target_link_libraries (TomatoExe PUBLIC yaml)
###############
### Fitting ###
###############
## VNL TODO: code behaviour with VNL off
#set(USE_VNL ON CACHE BOOL "Do you want to use VNL numerics library?")
#include(cmake/vnl.cmake)
#target_link_libraries (TomatoLib PUBLIC ${VNL_LIBRARIES})
#target_link_libraries (TomatoExe PUBLIC ${VNL_LIBRARIES})
#add_dependencies (TomatoLib vnl vnl_algo)
#add_dependencies (TomatoExe vnl vnl_algo)
# Numerical Recipes v2
set(USE_NR2 ON CACHE BOOL "Do you want to use Numerical Recipes 2 code?")
include(cmake/nr2.cmake)
#target_link_libraries (TomatoLib PUBLIC NR2)
# Numerical Recipes v3
set(USE_NR3 OFF CACHE BOOL "Do you want to use Numerical Recipes 3 code?")
include(cmake/nr3.cmake)
###########
### ITK ###
###########
set(USE_ITK ON CACHE BOOL "Do you want to use ITK?")
if(USE_ITK)
set(USE_ITK OFF)
find_package(ITK) # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (NOT ITK_FOUND)
find_package(ITK HINTS ../ITK_install)
endif()
MESSAGE("ITK version:" ${ITK_VERSION})
if (ITK_FOUND)
set(USE_ITK ON)
set(USE_VNL ON)
include(${ITK_USE_FILE})
set(OxSmolli2_LIBS_TO_LINK ${OxSmolli2_LIBS_TO_LINK} ${ITK_LIBRARIES})
endif()
endif(USE_ITK)
###########
### VTK ###
###########
set(USE_VTK ON CACHE BOOL "Do you want to use VTK?")
list (FIND ITK_LIBRARIES "ITKVtkGlue" _index)
# use vtk only if ITK is present
if(USE_VTK)
set(USE_VTK OFF)
if(_index GREATER -1)
find_package(VTK)
MESSAGE("VTK version:" ${VTK_VERSION})
if (VTK_FOUND)
set(USE_VTK ON)
include(${VTK_USE_FILE})
set(OxSmolli2_LIBS_TO_LINK ${OxSmolli2_LIBS_TO_LINK} ${VTK_LIBRARIES})
endif()
endif()
endif(USE_VTK)
####################
### MAIN PROGRAM ###
####################
MESSAGE("CXX_STANDARD_98: " ${CXX_STANDARD_98})
MESSAGE("USE_ITK: " ${USE_ITK})
MESSAGE("USE_VTK: " ${USE_VTK})
MESSAGE("USE_VNL: " ${USE_VNL})
MESSAGE("USE_PRIVATE_NR2: " ${USE_PRIVATE_NR2})
MESSAGE("USE_NR2: " ${USE_NR2})
MESSAGE("USE_NR3: " ${USE_NR3})
# configure a header file to pass some of the CMake settings to the source code
configure_file ("${PROJECT_SOURCE_DIR}/CmakeConfigForTomato.h.in" "${PROJECT_BINARY_DIR}/CmakeConfigForTomato.h")
set (LIB_FILES ${LIB_FILES} "${PROJECT_BINARY_DIR}/CmakeConfigForTomato.h")
include_directories (app)
include_directories (lib)
include_directories ("${PROJECT_BINARY_DIR}") # for the configuration header
add_library (TomatoLib ${APP_FILES} ${LIB_FILES})
add_executable (TomatoExe ${APP_FILES} ${LIB_FILES})
###############
### Linking ###
###############
target_link_libraries (TomatoLib PUBLIC ${OxSmolli2_LIBS_TO_LINK})
set(OxSmolli2_LIBS_TO_LINK ${OxSmolli2_LIBS_TO_LINK} TomatoLib)
target_link_libraries (TomatoExe PUBLIC ${OxSmolli2_LIBS_TO_LINK})
##################
### Installing ###
##################
#set (CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}" CACHE INTERNAL "" FORCE)
install (TARGETS TomatoLib DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
install (FILES ${LIB_FILES} DESTINATION ${CMAKE_INSTALL_PREFIX}/install/OxShmolli)
install (TARGETS TomatoExe DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
###############
### TESTING ###
###############
set(Tomato_BUILD_TESTING ON CACHE BOOL "Do you want to build Tomato tests?")
add_subdirectory (tests)
#############################
### DISPLAY ALL VARIABLES ###
#############################
#get_cmake_property (_variableNames VARIABLES)
#list (SORT _variableNames)
#foreach (_variableName ${_variableNames})
# message (STATUS "${_variableName}=${${_variableName}}")
#endforeach()