PROJECT(GAMBIT)

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
CMAKE_POLICY(VERSION 2.8)

IF(CMAKE_COMPILER_2005)
  ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
ENDIF(CMAKE_COMPILER_2005)

IF (${CMAKE_SOURCE_DIR} STREQUAL ${GAMBIT_SOURCE_DIR})
  SET (LIBRARY_OUTPUT_PATH ${GAMBIT_BINARY_DIR}/lib CACHE PATH "Single output directory for building all libraries.")
  SET (EXECUTABLE_OUTPUT_PATH ${GAMBIT_BINARY_DIR}/bin CACHE PATH "Single output directory for building all executables.")
ENDIF (${CMAKE_SOURCE_DIR} STREQUAL ${GAMBIT_SOURCE_DIR})

# Configure Dart testing support.
OPTION(BUILD_TESTING "Compile Testing." OFF)
IF(BUILD_TESTING)
  ENABLE_TESTING()
  INCLUDE(CTest)
ENDIF(BUILD_TESTING)

OPTION(COMPILE_GAMBIT "Compile GAMBIT." ON)
IF(COMPILE_GAMBIT)
  SUBDIRS(GAMBIT)
ENDIF(COMPILE_GAMBIT)

OPTION(COMPILE_CORTTHICKCLP "Compile CortThickCLP." ON)
IF(COMPILE_CORTTHICKCLP)
  SUBDIRS(CortThickCLP)
ENDIF(COMPILE_CORTTHICKCLP)

OPTION(COMPILE_GENUSZEROIMAGEFILTER "Compile GenusZeroImageFilter." ON)
IF(COMPILE_GENUSZEROIMAGEFILTER)
  SUBDIRS(GenusZeroImageFilter)
ENDIF(COMPILE_GENUSZEROIMAGEFILTER)

OPTION(COMPILE_IMAGEMATH "Compile ImageMath." ON)
IF(COMPILE_IMAGEMATH)
  SUBDIRS(ImageMath)
ENDIF(COMPILE_IMAGEMATH)

OPTION(COMPILE_LABELSEGPOSTPROCESS "Compile LabelSegPostProcess." ON)
IF(COMPILE_LABELSEGPOSTPROCESS)
  SUBDIRS(LabelSegPostProcess)
ENDIF(COMPILE_LABELSEGPOSTPROCESS)

OPTION(COMPILE_MESHCORTTHICK "Compile MeshCortThick." ON)
IF(COMPILE_MESHCORTTHICK)
  SUBDIRS(MeshCortThick)
ENDIF(COMPILE_MESHCORTTHICK)

OPTION(COMPILE_MESHINFLATION "Compile MeshInflation." ON)
IF(COMPILE_MESHINFLATION)
  SUBDIRS(MeshInflation)
ENDIF(COMPILE_MESHINFLATION)

OPTION(COMPILE_MESHMATH "Compile MeshMath." ON)
IF(COMPILE_MESHMATH)
  SUBDIRS(MeshMath)
ENDIF(COMPILE_MESHMATH)

OPTION(COMPILE_PARTICLEINITIALIZER "Compile ParticleInitializer." ON)
IF(COMPILE_PARTICLEINITIALIZER)
  SUBDIRS(ParticleInitializer)
ENDIF(COMPILE_PARTICLEINITIALIZER)

OPTION(COMPILE_SEGPOSTPROCESSCLP "Compile SegPostProcessCLP." ON)
IF(COMPILE_SEGPOSTPROCESSCLP)
  SUBDIRS(SegPostProcessCLP)
ENDIF(COMPILE_SEGPOSTPROCESSCLP)

OPTION(COMPILE_VTK2META "Compile VTK2Meta." ON)
IF(COMPILE_VTK2META)
  SUBDIRS(VTK2Meta)
ENDIF(COMPILE_VTK2META)

OPTION(COMPILE_WMIMAGEFIXING "Compile WMImageFixing." ON)
IF(COMPILE_WMIMAGEFIXING)
  SUBDIRS(WMImageFixing)
ENDIF(COMPILE_WMIMAGEFIXING)

OPTION(COMPILE_WMSEGPOSTPROCESS "Compile WMSegPostProcess." ON)
IF(COMPILE_WMSEGPOSTPROCESS)
  SUBDIRS(WMSegPostProcess)
ENDIF(COMPILE_WMSEGPOSTPROCESS)

#--------COMPILE GAMBIT AS STANDALONE PACKAGE--------
OPTION(COMPILE_EXTERNAL_PROJECTS "Compile External Projects." OFF)
IF(COMPILE_EXTERNAL_PROJECTS)

  FIND_PACKAGE(Slicer3 QUIET NO_DEFAULT_PATH)
  IF (Slicer3_FOUND)
    INCLUDE(${Slicer3_USE_FILE})
    slicer3_set_default_install_prefix_for_external_projects()
  ELSE (Slicer3_FOUND)
    FIND_PACKAGE(ITK REQUIRED)
    IF (ITK_FOUND)
      INCLUDE(${USE_ITK_FILE})
    ELSE(ITK_FOUND)
      MESSAGE(FATAL_ERROR, "ITK not found. Please set ITK_DIR.")
    ENDIF (ITK_FOUND)

    FIND_PACKAGE(GenerateCLP REQUIRED)
    IF(GenerateCLP_FOUND)
      INCLUDE(${GenerateCLP_USE_FILE})
    ENDIF(GenerateCLP_FOUND)
  ENDIF (Slicer3_FOUND)

  #External Projects
  include(ExternalProject)
  if(CMAKE_EXTRA_GENERATOR)
    set(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}")
  else()
    set(gen "${CMAKE_GENERATOR}")
  endif()

  OPTION(COMPILE_EXTERNAL_ABC "Compile External ABC." ON)
  IF(COMPILE_EXTERNAL_ABC)
    # Build ABC https://www.nitrc.org/svn/abc/tags/ABC-REL1.4/
    set(proj ABC)
    IF (Slicer3_FOUND)
      ExternalProject_Add(${proj}
        SVN_REPOSITORY "https://www.nitrc.org/svn/abc/tags/ABC-REL1.4/"
        SVN_USERNAME slicerbot
        SVN_PASSWORD slicer
        SOURCE_DIR ${proj}
        BINARY_DIR ${proj}-build
        DEPENDS  ${ITK_DEPEND}
        CMAKE_GENERATOR ${gen}
        CMAKE_ARGS
          ${LOCAL_CMAKE_BUILD_OPTIONS}
          -DSlicer3_DIR:PATH=${Slicer3_DIR}
      INSTALL_COMMAND ""
      )
    ELSE (Slicer3_FOUND)
      ExternalProject_Add(${proj}
        SVN_REPOSITORY "https://www.nitrc.org/svn/abc/tags/ABC-REL1.4/"
        SVN_USERNAME slicerbot
        SVN_PASSWORD slicer
        SOURCE_DIR ${proj}
        BINARY_DIR ${proj}-build
        DEPENDS  ${ITK_DEPEND}
        CMAKE_GENERATOR ${gen}
        CMAKE_ARGS
          ${LOCAL_CMAKE_BUILD_OPTIONS}
          -DGenerateCLP_DIR:PATH=${GenerateCLP_DIR}
          -DITK_DIR:PATH=${ITK_DIR}
      INSTALL_COMMAND ""
      )
    ENDIF (Slicer3_FOUND)
  ENDIF(COMPILE_EXTERNAL_ABC)

  OPTION(COMPILE_EXTERNAL_SHAPEWORKS "Compile External ShapeWorks." ON)
  IF(COMPILE_EXTERNAL_SHAPEWORKS)
    # Build ShapeWorks cvs -d :pserver:anonymous@gforge.sci.utah.edu:/cvsroot/shapeworks
    set(proj ShapeWorks)
      ExternalProject_Add(ShapeWorks
        CVS_REPOSITORY ":pserver:anonymous@gforge.sci.utah.edu:/cvsroot/shapeworks/"
        CVS_MODULE ShapeWorks/code
        SOURCE_DIR ${proj}
        BINARY_DIR ${proj}-build
        DEPENDS  ${ITK_DEPEND}
        CMAKE_GENERATOR ${gen}
        CMAKE_ARGS
          ${LOCAL_CMAKE_BUILD_OPTIONS}
          -DITK_DIR:PATH=${ITK_DIR}
      INSTALL_COMMAND ""
      )
  ENDIF(COMPILE_EXTERNAL_SHAPEWORKS)
ENDIF(COMPILE_EXTERNAL_PROJECTS)
