#--------------------------------------------
#         CamiTK Extension Project
#
# You should probably NOT modify this file...
# Please edit CEPDescription.cmake instead
#--------------------------------------------
include(SDKConfig.cmake) 

# Please add your project name inside the project() brackets, e.g. project(myProject)
# project(${CEP_NAME})

# Mini find CamiTK inside SDK
set(CAMITK_DIR ${CMAKE_BINARY_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CAMITK_DIR}/share/${CAMITK_SHORT_VERSION_STRING}/cmake)
include(CamiTKConfig)

# include global install of SDK
# This is a SDK build => global install is done in CMAKE_INSTALL_PREFIX
add_custom_target(sdk_global_install
    COMMAND ${CMAKE_COMMAND} -E echo "Global Installation in ${CMAKE_INSTALL_PREFIX}"
    # First remove the WIN32 system runtime libraries dependencies
    COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS:STRING=" " ${CMAKE_BINARY_DIR}
    COMMAND ${CMAKE_COMMAND} -E echo "Configuration for ${CMAKE_INSTALL_PREFIX} done."
    # Second cmake to install
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target install --config ${CMAKE_CFG_INTDIR}
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target sdk_copy_camitkdirtxt --config ${CMAKE_CFG_INTDIR}
    COMMAND ${CMAKE_COMMAND} -E echo "File installation done."
    COMMAND ${CMAKE_COMMAND} -E echo "Global installation in ${CMAKE_INSTALL_PREFIX} done."
    COMMENT "Global installation"
)

# The definition of SDK_TOP_LEVEL_SOURCE_DIR and SDK_TOP_LEVEL_BINARY_DIR are
# are needed to store the current source dir to pass as an argument to the ConfigureCamiTKDirTxt.cmake script in sdk_copy_camitkdirtxt
set(SDK_TOP_LEVEL_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(SDK_TOP_LEVEL_BINARY_DIR ${CMAKE_BINARY_DIR})
# specific top-level target that prepare and copy the CamiTKDir.txt file in ${CAMITK_USER_DIR}
add_custom_target(sdk_copy_camitkdirtxt
    # prepare the CamiTKConfig.cmake for installation
    COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
                             -DCAMITK_USER_DIR=${CAMITK_USER_DIR}
                             -DSDK_TOP_LEVEL_SOURCE_DIR=${SDK_TOP_LEVEL_SOURCE_DIR}
                             -DSDK_TOP_LEVEL_BINARY_DIR=${SDK_TOP_LEVEL_BINARY_DIR}
                             -P ${CMAKE_CURRENT_SOURCE_DIR}/ConfigureCamiTKDirTxt.cmake
    # Make sure the user dir exists
    COMMAND ${CMAKE_COMMAND} -E make_directory "${CAMITK_USER_DIR}"
    # Remove the previous version
    COMMAND ${CMAKE_COMMAND} -E remove -f ${CAMITK_USER_DIR}/CamiTKDir.txt
    # Copy the CamiTKDir.txt file in the ${CMAKE_USER_DIR} directory
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/CamiTKDir.txt ${CAMITK_USER_DIR}
    COMMAND ${CMAKE_COMMAND} -E echo "CamiTKDir.txt [${CMAKE_INSTALL_PREFIX}] copied in ${CAMITK_USER_DIR}"
)

# camitk_local_install == install in User Config directory
add_custom_target(sdk_local_install
    COMMAND ${CMAKE_COMMAND} -E echo "Local Installation in ${CAMITK_USER_DIR}"
    # First cmake to redefine install prefix
    COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${CAMITK_USER_DIR} ${CMAKE_BINARY_DIR}
    COMMAND ${CMAKE_COMMAND} -E echo "Configuration for ${CMAKE_INSTALL_PREFIX} done."    
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target install --config ${CMAKE_CFG_INTDIR}
    COMMAND ${CMAKE_COMMAND} -E echo "File installation done."
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target sdk_copy_camitkdirtxt --config ${CMAKE_CFG_INTDIR}
    COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} ${CMAKE_BINARY_DIR}
    COMMAND ${CMAKE_COMMAND} -E echo "Local Installation in ${CAMITK_USER_DIR} done."
    COMMENT "Local installation"
)

# camitk_update_translate == configure all the .qrc files for the different extensions of the SDK.
# .qrc files consider up to date .ts resources files for translation
add_custom_target(sdk_updatetranslate
    COMMAND ${CMAKE_COMMAND} -E echo "Updating translation for CamiTK SDK"
    COMMAND ${CMAKE_COMMAND} -DCAMITK_TRANSLATE=TRUE ${CMAKE_BINARY_DIR}
    COMMAND ${CMAKE_COMMAND} -DCAMITK_TRANSLATE=FALSE ${CMAKE_BINARY_DIR}
    COMMAND ${CMAKE_COMMAND} -E echo "Translation updated for CamiTK SDK"    
)

# make sure a copy of the CamiTKDir.txt file is written to ${CAMITK_USER_DIR}
# even if the user is just invoking the "install" target (from the IDE or command line)
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target sdk_copy_camitkdirtxt)")

# include CamiTK auto-documentation generation
include(CamiTKApiDoc)

# initialize subproject management
camitk_sub_project_init()

# Create a shiboken path variable containing the CamiTK SDK tree structure, needed by shiboken to find C++ classes to wrap
set(SHIBOKEN_CAMITK_SDK_PATH ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")

# initialize automatic tests parsing
camitk_parse_test_init()

# add all subprojects, in dependencies order
camitk_add_subdirectory(libraries)
camitk_add_subdirectory(testapplications)
camitk_add_subdirectory(components)
camitk_add_subdirectory(actions)
camitk_add_subdirectory(viewers)
camitk_add_subdirectory(applications)
camitk_add_subdirectory(cmake) # for cmake module installation

# Validate project.xml file for CDash
camitk_sub_project_validate()

# Validate CamiTKTestsLevel.txt file for wiki
camitk_parse_test_validate()

message(STATUS "compiling in ${CMAKE_BUILD_TYPE}")
message(STATUS "CMAKE_CFG_INTDIR=${CMAKE_CFG_INTDIR}")
message(STATUS "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
message(STATUS "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}")


