cmake_minimum_required(VERSION 3.13.4)

# We don't support APPLE OS
if (APPLE)
    message(FATAL_ERROR "APPLE is not supported")
endif()

set(CMAKE_CXX_STANDARD 11)

# set the project name
project(ImageDevExampleC++)

# setup cmake configuration for ImageDevExamples
set(PATH_IMAGEDEVEXAMPLES_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake")
set(ImageDevExamples_DIR "${PATH_IMAGEDEVEXAMPLES_CMAKE_DIR}")

# setup cmake configuration for ImageDev
if ((DEFINED ENV{IMAGEDEVHOME}) AND (NOT "$ENV{IMAGEDEVHOME}" STREQUAL "") AND (EXISTS "$ENV{IMAGEDEVHOME}"))
    set(image_dev_DIR "$ENV{IMAGEDEVHOME}/cmake" CACHE PATH "ImageDev CMake path")
else()
    set(image_dev_DIR "${PATH_IMAGEDEVEXAMPLES_CMAKE_DIR}" CACHE PATH "ImageDev CMake path")
endif()

# enable CMake to organize targets into folders
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

# find all required package
find_package( image_dev REQUIRED )
find_package( ImageDevExamples REQUIRED )

# define the output directory for binaries
set(OUTPUT_DEBUG "${CMAKE_BINARY_DIR}/debug")
set(OUTPUT_RELEASE "${CMAKE_BINARY_DIR}/release")

# install files
install(FILES ${image_dev_ALL_BINARIES_DEBUG}   DESTINATION "${OUTPUT_DEBUG}"   CONFIGURATIONS Debug)
install(FILES ${image_dev_ALL_BINARIES_RELEASE} DESTINATION "${OUTPUT_RELEASE}" CONFIGURATIONS Release)
install(DIRECTORY ${ImageDevExamples_BINS_DIRECTORY_DEBUG}   DESTINATION "${OUTPUT_DEBUG}"   CONFIGURATIONS Debug)
install(DIRECTORY ${ImageDevExamples_BINS_DIRECTORY_RELEASE} DESTINATION "${OUTPUT_RELEASE}" CONFIGURATIONS Release)

# add projects
add_subdirectory(T01_FirstSteps/T01_01_HelloImageDev )
add_subdirectory(T01_FirstSteps/T01_02_InitializeImageDev )
add_subdirectory(T02_ImageManagement/T02_01_CreateImage2d )
add_subdirectory(T02_ImageManagement/T02_02_CreateImage3d )
add_subdirectory(T02_ImageManagement/T02_03_TransferData )
add_subdirectory(T03_StandardProcessing/T03_01_Denoising )
add_subdirectory(T03_StandardProcessing/T03_02_Thresholding )
add_subdirectory(T04_ImageAnalysis/T04_01_GlobalAnalysis )
add_subdirectory(T04_ImageAnalysis/T04_02_LabelAnalysis )
add_subdirectory(T04_ImageAnalysis/T04_03_MeasurementBrowsing )
add_subdirectory(T04_ImageAnalysis/T04_04_MeasurementGroup )
add_subdirectory(T04_ImageAnalysis/T04_05_CustomAnalysis )
add_subdirectory(T05_AdvancedProcessing/T05_01_AlgorithmTracking )
add_subdirectory(T06_TypicalUseCases/T06_01_ParticleAnalysis )
add_subdirectory(T06_TypicalUseCases/T06_02_PoreAnalysis )
