# This project is designed to be built outside the Insight source tree.
PROJECT(StochasticTractographyFilter)
OPTION(STFILTERMODULE "Would you like to build the Stochastic Tractography Filter Tools" ON)
SET(CMAKE_VERBOSE_MAKEFILE ON)
IF(STFILTERMODULE)

#SET(CMAKE_CXX_FLAGS "-g")

# Find ITK.
FIND_PACKAGE(ITK)
IF(ITK_FOUND)
  INCLUDE(${ITK_USE_FILE})
ELSE(ITK_FOUND)
  MESSAGE(FATAL_ERROR "Cannot build without ITK.  Please set ITK_DIR.")
ENDIF(ITK_FOUND)

FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})

#SET(GenerateCLP_DIR CACHE FILEPATH "Directory where UseGenerateCLP.cmake can be found")

#Include Directories
#These 3 directories contain files needed for the execution
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/itkModules)

IF(Slicer3_SOURCE_DIR)
  INCLUDE(${Slicer3_SOURCE_DIR}/Libs/GenerateCLP/UseGenerateCLP.cmake)
  GENERATECLP(StochasticTractographyFilter StochasticTractographyFilter.xml)
  GENERATECLP(GenerateConnectivityMap GenerateConnectivityMap.xml)
  GENERATECLP(ROITractFilter ROITractFilter.xml)
  GENERATECLP(CalculateVolumeStatistics CalculateVolumeStatistics.xml)
ELSE(Slicer3_SOURCE_DIR)
  #These 3 directories are for the compatibility with Slicer3
  MESSAGE(STATUS "GenerateCLP isn't available, using pre-generated CLPfiles")
  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/tclap/include)
  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/ModuleDescriptionParser)
  INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/CLP)
ENDIF(Slicer3_SOURCE_DIR)
ADD_EXECUTABLE(StochasticTractographyFilter StochasticTractographyFilter.cxx)
ADD_EXECUTABLE(GenerateConnectivityMap GenerateConnectivityMap.cxx)
ADD_EXECUTABLE(ROITractFilter ROITractFilter.cxx)
ADD_EXECUTABLE(CalculateVolumeStatistics CalculateVolumeStatistics.cxx)

#This section copies the exe files in the /lib/Slicer3/Plugins
#directory in order to have the module recognized by Slicer3
#If we are in Slicer3
IF(GenerateCLP_DIR)
  #Get where the exe will be located
  GET_TARGET_PROPERTY(EXE_LOC_STF StochasticTractographyFilter LOCATION)
  GET_TARGET_PROPERTY(EXE_LOC_GCM GenerateConnectivityMap LOCATION)
  GET_TARGET_PROPERTY(EXE_LOC_RTF ROITractFilter LOCATION)
  GET_TARGET_PROPERTY(EXE_LOC_RTF CalculateVolumeStatistics LOCATION)
  
  #Then copy the exe to Slicer3-bin/lib/Slicer3/Plugins
  ADD_CUSTOM_COMMAND(
    TARGET StochasticTractographyFilter
    POST_BUILD
    COMMAND ${CMAKE_COMMAND}
    ARGS -E copy ${EXE_LOC_STF} ${Slicer3_BINARY_DIR}/lib/Slicer3/Plugins
  )
  ADD_CUSTOM_COMMAND(
    TARGET GenerateConnectivityMap
    POST_BUILD
    COMMAND ${CMAKE_COMMAND}
    ARGS -E copy ${EXE_LOC_GCM} ${Slicer3_BINARY_DIR}/lib/Slicer3/Plugins
  )
  ADD_CUSTOM_COMMAND(
    TARGET ROITractFilter
    POST_BUILD
    COMMAND ${CMAKE_COMMAND}
    ARGS -E copy ${EXE_LOC_RTF} ${Slicer3_BINARY_DIR}/lib/Slicer3/Plugins
  )
  ADD_CUSTOM_COMMAND(
    TARGET CalculateVolumeStatistics
    POST_BUILD
    COMMAND ${CMAKE_COMMAND}
    ARGS -E copy ${EXE_LOC_RTF} ${Slicer3_BINARY_DIR}/lib/Slicer3/Plugins
  )
ENDIF(GenerateCLP_DIR)

#Libraries
TARGET_LINK_LIBRARIES(StochasticTractographyFilter ITKIO ITKBasicFilters ITKCommon 
  vtkIO vtkCommon vtkGraphics)
TARGET_LINK_LIBRARIES(GenerateConnectivityMap ITKIO ITKBasicFilters ITKCommon 
  vtkIO vtkCommon vtkGraphics)
TARGET_LINK_LIBRARIES(ROITractFilter ITKIO ITKBasicFilters ITKCommon 
  vtkIO vtkCommon vtkGraphics)
TARGET_LINK_LIBRARIES(CalculateVolumeStatistics ITKIO ITKBasicFilters ITKCommon 
  vtkIO vtkCommon vtkGraphics)
  
ENDIF(STFILTERMODULE)
