Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

  • 1c75839
  • /
  • CMakeLists.txt
Raw File Download

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • content
  • directory
content badge
swh:1:cnt:5cbbdfb3accae01b23d606e9597d7fb09ec07302
directory badge
swh:1:dir:1c75839370ddb528d0ebf129d2933604cffe62b5

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • content
  • directory
(requires biblatex-software package)
Generating citation ...
(requires biblatex-software package)
Generating citation ...
CMakeLists.txt
##############
### Tomato ###
##############
# you can build tomato with command:
# cmake .
#       -DCMAKE_BUILD_TYPE=RELEASE
#       -DCMAKE_INSTALL_PREFIX="install"
# additionally for osx:
#       -DCMAKE_MACOSX_RPATH=1
# additionally for windows:
#       -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON
# see .travis.yml and appveyor.yml for examples
#
# Konrad Werys

cmake_minimum_required (VERSION 2.8)

project (Tomato)

# The version number
set (Tomato_VERSION_MAJOR 0)
set (Tomato_VERSION_MINOR 5)

# Compiler flags
set (CMAKE_CXX_STANDARD_REQUIRED ON)
set (CMAKE_CXX_STANDARD 98 CACHE STRING "")
if (CMAKE_CXX_STANDARD EQUAL 98)
    set (CXX_STANDARD_98 ON) # flag used in the code
endif()

# RPATH preparation for the executables
set(CMAKE_INSTALL_RPATH
        @executable_path
        @executable_path/lib
        @executable_path/../lib
        @loader_path
        @loader_path/lib
        @loader_path/../lib
        $ORIGIN
        $ORIGIN/lib
        $ORIGIN/../lib/)

#############################
### DOWNLOAD DEPENDENCIES ###
#############################

# scripts to download pre-compiled dependencis, running only if DOWNLOAD_DEPENDENCIES is ON
set(DOWNLOAD_DEPENDENCIES ON CACHE BOOL "Do you want to download the dependencies?")
include(cmake/downloadItk.cmake)
include(cmake/downloadLmfit.cmake)

##################
### list files ###
##################

# list of source files TODO: do not use glob, as it is not recommended https://cmake.org/cmake/help/latest/command/file.html#filesystem
file (GLOB_RECURSE APP_FILES app/*.c* app/*.h* app/*.t*)
file (GLOB_RECURSE LIB_FILES lib/*.c* lib/*.h* lib/*.t*)
file (GLOB_RECURSE API_FILES lib/*.h lib/KWUtil.hxx)

###############
### 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 OFF CACHE BOOL "")
if (USE_PRIVATE_NR2)
    add_subdirectory(${PRIVATE_NR2_DIR} ${CMAKE_BINARY_DIR}/private)
    include_directories(${PRIVATE_NR2_DIR}/lib)
endif()

############
### YAML ###
############

set(USE_YAML ON CACHE BOOL "Do you want to use yaml?")
include(cmake/libyaml.cmake)

###############
### Fitting ###
###############

# lmfit currently not on windows
set(USE_LMFIT ON CACHE BOOL "Do you want to use LMFIT?")
include(cmake/lmfit.cmake)

###########
### ITK ###
###########

set(USE_ITK ON CACHE BOOL "Do you want to use ITK?")

if(USE_ITK)
    set(USE_ITK OFF)
    set(USE_VNL OFF)
    find_package(ITK HINTS ${ITK_DIR_HINTS})
    MESSAGE("ITK version:" ${ITK_VERSION})
    if (ITK_FOUND)
        set(USE_ITK ON)
        set(USE_VNL ON)
        include(${ITK_USE_FILE})
        set(TOMATO_LIBS_TO_LINK ${TOMATO_LIBS_TO_LINK} ${ITK_LIBRARIES})
    endif()
else()
    set(USE_VNL OFF)
endif(USE_ITK)

####################
### MAIN PROGRAM ###
####################

set(Tomato_BUILD_TESTING ON CACHE BOOL "Do you want to build Tomato tests?")

set(BUILD_APP OFF)
if(USE_ITK AND  USE_YAML)
    set(BUILD_APP ON)
endif()

MESSAGE("CXX_STANDARD_98:      " ${CXX_STANDARD_98})
MESSAGE("DOWNLOAD_DEPENDENCIES:" ${DOWNLOAD_DEPENDENCIES})
MESSAGE("USE_ITK:              " ${USE_ITK})
MESSAGE("USE_VNL:              " ${USE_VNL})
MESSAGE("USE_PRIVATE_NR2:      " ${USE_PRIVATE_NR2})
MESSAGE("USE_LMFIT:            " ${USE_LMFIT})
MESSAGE("USE_YAML:             " ${USE_YAML})
MESSAGE("BUILD_APP:            " ${BUILD_APP})
MESSAGE("Tomato_BUILD_TESTING: " ${Tomato_BUILD_TESTING})
MESSAGE("BUILD_SHARED_LIBS:    " ${BUILD_SHARED_LIBS})
MESSAGE("CMAKE_INSTALL_PREFIX: " ${CMAKE_INSTALL_PREFIX})

# configure a header file to pass some of the CMake settings to the source code
configure_file ("${PROJECT_SOURCE_DIR}/cmake/CmakeConfigForTomato.h.in" "${PROJECT_BINARY_DIR}/CmakeConfigForTomato.h")
set (LIB_FILES ${LIB_FILES} "${PROJECT_BINARY_DIR}/CmakeConfigForTomato.h")
set (API_FILES ${API_FILES} "${PROJECT_BINARY_DIR}/CmakeConfigForTomato.h")

#################
### TOMATOLIB ###
#################

# include
include_directories (lib)
include_directories ("${PROJECT_BINARY_DIR}") # for the configuration header

# target
add_library (TomatoLib SHARED ${LIB_FILES})

#link
target_link_libraries (TomatoLib ${TOMATO_LIBS_TO_LINK})
set(TOMATO_LIBS_TO_LINK ${TOMATO_LIBS_TO_LINK} TomatoLib)

# generating TomatoLib_export.h
include(GenerateExportHeader)
generate_export_header(TomatoLib)
set(API_FILES ${API_FILES} ${PROJECT_SOURCE_DIR}/cmake/tomatolib_export.h) # to make tomatolib_export.h available in installation step

#################
### TOMATOAPP ###
#################

if(BUILD_APP)

    # include
    include_directories (app)

    # target
    add_executable (TomatoExe ${APP_FILES} ${LIB_FILES})

    # link
    target_link_libraries (TomatoExe ${TOMATO_LIBS_TO_LINK})

endif()

##################
### Installing ###
##################

install (TARGETS TomatoLib
            RUNTIME DESTINATION bin
            LIBRARY DESTINATION lib
            ARCHIVE DESTINATION lib)
install (FILES ${API_FILES} DESTINATION include) # headers
if(BUILD_APP)
    install (TARGETS TomatoExe DESTINATION bin)
endif()

###############
### TESTING ###
###############

if(Tomato_BUILD_TESTING AND USE_YAML)
    add_subdirectory (tests)
    install(TARGETS TomatoLib DESTINATION tests)
endif()

##############################
#### DISPLAY ALL VARIABLES ###
##############################
#
##get_cmake_property (_variableNames VARIABLES)
##list (SORT _variableNames)
##foreach (_variableName ${_variableNames})
##    message (STATUS "${_variableName}=${${_variableName}}")
##endforeach()

back to top

Software Heritage — Copyright (C) 2015–2026, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API