https://github.com/ElsevierSoftwareX/SOFTX_2019_219
Raw File
Tip revision: 8449484d61814fb6b89eccbdcc29c5d51481966e authored by Konrad Werys on 07 December 2018, 11:08:10 UTC
travis works again
Tip revision: 8449484
CMakeLists.txt
##################
### Tomato ###
##################

cmake_minimum_required (VERSION 2.8)

project (Tomato)

# The version number.
set (Tomato_VERSION_MAJOR 0)
set (Tomato_VERSION_MINOR 11)

# 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()





back to top