##=========================================================================
## 
##   Copyright (c) Kitware, Inc.
##   All rights reserved.
##   See Copyright.txt or http://www.kitware.com/VolViewCopyright.htm for details.
## 
##      This software is distributed WITHOUT ANY WARRANTY; without even
##      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
##      PURPOSE.  See the above copyright notice for more information.
## 
##=========================================================================
CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
IF(COMMAND CMAKE_POLICY)
  CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND CMAKE_POLICY)


PROJECT(KWVolView)

INCLUDE_REGULAR_EXPRESSION("^.*$")

# --------------------------------------------------------------------------
# To use this library in a larger project you will need to SUBDIR into this
# directory so that it gets built and then you will use the following variables
# in your CMakeLists files to get the proper include paths and libraries

SET(KWVolView_INCLUDE_PATH 
  "${CMAKE_CURRENT_SOURCE_DIR}/Core;${CMAKE_CURRENT_SOURCE_DIR}/DataItems;${CMAKE_CURRENT_SOURCE_DIR}/Features;${CMAKE_CURRENT_SOURCE_DIR}/RemoteIO;${CMAKE_CURRENT_SOURCE_DIR}/MeasurementTools;${CMAKE_CURRENT_SOURCE_DIR}/SegmentationTools;${CMAKE_CURRENT_SOURCE_DIR}/Resources;${CMAKE_CURRENT_SOURCE_DIR}/Plugins;${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms;${CMAKE_CURRENT_BINARY_DIR}"
  CACHE INTERNAL "include paths for KWVolView"
  )

SET(KWVolView_LIBRARIES KWVolView 
  CACHE INTERNAL "libraries for KWVolView")

# You will also need to define a value for the following variables:
# KWVolView_INSTALL_BIN_DIR            - binary dir (executables)
# KWVolView_INSTALL_LIB_DIR            - library dir (libs)
# KWVolView_INSTALL_DATA_DIR           - share dir (say, examples, data, etc)
# KWVolView_INSTALL_INCLUDE_DIR        - include dir (headers)
# KWVolView_INSTALL_PACKAGE_DIR        - package/export configuration files
# KWVolView_KWWidgetsPro_INSTALL_PACKAGE_DIR - KWWidgetsPro package/export 
# KWVolView_VTKEdge_INSTALL_PACKAGE_DIR - VTKEdge package/export 
# KWVolView_GDCM_INSTALL_PACKAGE_DIR   - GDCM package/export config files
# KWVolView_INSTALL_NO_DEVELOPMENT     - do not install development files
# KWVolView_INSTALL_NO_RUNTIME         - do not install runtime files
# KWVolView_INSTALL_NO_DOCUMENTATION   - do not install documentation files
# --------------------------------------------------------------------------

# --------------------------------------------------------------------------
# Version

SET(KWVolView_MAJOR_VERSION 1)
SET(KWVolView_MINOR_VERSION 0)

# --------------------------------------------------------------------------
# We need various packages

MACRO(KWVolView_REQUIRE_PACKAGE PACKAGE_NAME)
  IF(NOT ${PACKAGE_NAME}_SOURCE_DIR)
    FIND_PACKAGE(${PACKAGE_NAME} REQUIRED)
    IF(${PACKAGE_NAME}_FOUND)
      INCLUDE(${${PACKAGE_NAME}_USE_FILE})
    ENDIF(${PACKAGE_NAME}_FOUND)
  ENDIF(NOT ${PACKAGE_NAME}_SOURCE_DIR)
ENDMACRO(KWVolView_REQUIRE_PACKAGE PACKAGE_NAME)

# KWWidgetsPro (which brings KWWidgets, KWCommonPro, KWCommon automatically)

KWVolView_REQUIRE_PACKAGE(KWWidgetsPro)

# GDCM

SET(default_val 1)
IF(DEFINED KWVolView_USE_GDCM_DEFAULT)
  SET(default_val ${KWVolView_USE_GDCM_DEFAULT})
ENDIF(DEFINED KWVolView_USE_GDCM_DEFAULT)
OPTION(KWVolView_USE_GDCM 
  "Build KWVolView with GDCM support." ${default_val})
MARK_AS_ADVANCED(KWVolView_USE_GDCM)
IF(KWVolView_USE_GDCM)
  KWVolView_REQUIRE_PACKAGE(GDCM)
  IF(NOT GDCM_VTK)
    MESSAGE(FATAL_ERROR "GDCM_VTK is OFF. Please configure and build GDCM with GDCM_VTK set to ON in order to use GDCM's reader and writer classes for VTK.")
  ENDIF(NOT GDCM_VTK)
ENDIF(KWVolView_USE_GDCM)


# Plugins
OPTION(KWVolView_BUILD_PLUGINS "Build KWVolView with Plugins support." ON)
SET(KWVolView_PLUGINS_USE_SERIES OFF CACHE INTERNAL "")
SET(KWVolView_PLUGINS_USE_SPLINE OFF CACHE INTERNAL "")
SET(KWVolView_PLUGINS_USE_MARKER ON  CACHE INTERNAL "")
MARK_AS_ADVANCED(KWVolView_BUILD_PLUGINS)

# VTKEdge

KWVolView_REQUIRE_PACKAGE(VTKEdge)

# Use the lesion sizing toolkit ?

OPTION(KWVolView_USE_LESION_SIZING_KIT
  "Build the Lesion sizing kit into the application. This will add a UI panel for CT lung lesion sizing. It will require you to specify the inlcude and library path for the lesion sizing toolkit."  ON )
MARK_AS_ADVANCED(KWVolView_USE_LESION_SIZING_KIT)
IF(KWVolView_USE_LESION_SIZING_KIT)
  FIND_PATH(LesionSizingKit_Sandbox_SOURCE_DIR 
    itkLesionSegmentationMethod.h
    PATHS ${VolViewPlatform_PARENT_DIR}/VolViewExternalLibraries/LesionSizingKit/Sandbox/Source 
    DOC "Path to the LesionSizing toolkit Sandbox source dir.")
  MARK_AS_ADVANCED(LesionSizingKit_Sandbox_SOURCE_DIR)
ENDIF(KWVolView_USE_LESION_SIZING_KIT)


# ITK

IF(KWVolView_USE_LESION_SIZING_KIT)
  IF(NOT ITK_SOURCE_DIR)
    FIND_PACKAGE(ITK REQUIRED)
    IF(ITK_FOUND)
      INCLUDE(${ITK_USE_FILE})
    ENDIF(ITK_FOUND)
  ELSE(NOT ITK_SOURCE_DIR)
    INCLUDE(${ITK_SOURCE_DIR}/Utilities/itkThirdParty.cmake)
    INCLUDE(${ITK_SOURCE_DIR}/itkIncludeDirectories.cmake)
    INCLUDE_DIRECTORIES(
      ${ITK_INCLUDE_DIRS_BUILD_TREE}
      ${ITK_INCLUDE_DIRS_BUILD_TREE_CXX}
      ${ITK_INCLUDE_DIRS_SYSTEM}
      )
  ENDIF(NOT ITK_SOURCE_DIR)
ENDIF(KWVolView_USE_LESION_SIZING_KIT)

# --------------------------------------------------------------------------
# Output directories

IF(NOT LIBRARY_OUTPUT_PATH)
  SET(LIBRARY_OUTPUT_PATH ${KWVolView_BINARY_DIR}/bin CACHE INTERNAL
    "Single output directory for building all libraries.")
ENDIF(NOT LIBRARY_OUTPUT_PATH)
SET(KWVolView_LIBRARY_DIRS ${LIBRARY_OUTPUT_PATH})
SET(KWVolView_RUNTIME_DIRS ${LIBRARY_OUTPUT_PATH})

IF(NOT EXECUTABLE_OUTPUT_PATH)
  SET(EXECUTABLE_OUTPUT_PATH ${KWVolView_BINARY_DIR}/bin CACHE INTERNAL
    "Single output directory for building all executables.")
ENDIF(NOT EXECUTABLE_OUTPUT_PATH)

# --------------------------------------------------------------------------
# Some flags

INCLUDE_REGULAR_EXPRESSION("^(vtk|kw|icons).*$")
SET(CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS}")
IF(CMAKE_COMPILER_2005)
  ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE)
ENDIF(CMAKE_COMPILER_2005)

SET(BUILD_SHARED_LIBS ${VTK_BUILD_SHARED_LIBS})
SET(KWVolView_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})

SET(KWVolView_CMAKE_DIR "${KWVolView_SOURCE_DIR}/CMake")
SUBDIRS(CMake)
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${KWVolView_CMAKE_DIR}")

SET(KWVolView_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES})

MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY)

SET(KWVolView_TEMPLATES_DIR ${KWVolView_SOURCE_DIR}/Templates)

# --------------------------------------------------------------------------
# Install directories

IF(NOT KWVolView_INSTALL_BIN_DIR)
  SET(KWVolView_INSTALL_BIN_DIR "/bin")
ENDIF(NOT KWVolView_INSTALL_BIN_DIR)

IF(NOT KWVolView_INSTALL_LIB_DIR)
  SET(KWVolView_INSTALL_LIB_DIR "/lib/${PROJECT_NAME}")
ENDIF(NOT KWVolView_INSTALL_LIB_DIR)

IF(NOT KWVolView_INSTALL_DATA_DIR)
  SET(KWVolView_INSTALL_DATA_DIR "/share/${PROJECT_NAME}"
    CACHE INTERNAL "")
ENDIF(NOT KWVolView_INSTALL_DATA_DIR)

IF(NOT KWVolView_INSTALL_INCLUDE_DIR)
  SET(KWVolView_INSTALL_INCLUDE_DIR "/include/${PROJECT_NAME}")
ENDIF(NOT KWVolView_INSTALL_INCLUDE_DIR)

IF(NOT KWVolView_INSTALL_PACKAGE_DIR)
  SET(KWVolView_INSTALL_PACKAGE_DIR ${KWVolView_INSTALL_LIB_DIR}
    CACHE INTERNAL "")
ENDIF(NOT KWVolView_INSTALL_PACKAGE_DIR)

IF(NOT KWVolView_KWWidgetsPro_INSTALL_PACKAGE_DIR)
  SET(KWVolView_KWWidgetsPro_INSTALL_PACKAGE_DIR 
    ${KWWidgetsPro_INSTALL_PACKAGE_DIR})
ENDIF(NOT KWVolView_KWWidgetsPro_INSTALL_PACKAGE_DIR)

IF(NOT KWVolView_VTKEdge_INSTALL_PACKAGE_DIR)
  SET(KWVolView_VTKEdge_INSTALL_PACKAGE_DIR 
    ${VTKEdge_INSTALL_PACKAGE_DIR})
ENDIF(NOT KWVolView_VTKEdge_INSTALL_PACKAGE_DIR)

IF(NOT KWVolView_GDCM_INSTALL_PACKAGE_DIR)
  SET(KWVolView_GDCM_INSTALL_PACKAGE_DIR ${GDCM_INSTALL_PACKAGE_DIR})
ENDIF(NOT KWVolView_GDCM_INSTALL_PACKAGE_DIR)

IF(NOT KWVolView_INSTALL_NO_DEVELOPMENT)
  SET(KWVolView_INSTALL_NO_DEVELOPMENT 0)
ENDIF(NOT KWVolView_INSTALL_NO_DEVELOPMENT)

IF(NOT KWVolView_INSTALL_NO_RUNTIME)
  SET(KWVolView_INSTALL_NO_RUNTIME 0)
ENDIF(NOT KWVolView_INSTALL_NO_RUNTIME)

IF(NOT KWVolView_INSTALL_NO_DOCUMENTATION)
  SET(KWVolView_INSTALL_NO_DOCUMENTATION 0)
ENDIF(NOT KWVolView_INSTALL_NO_DOCUMENTATION)

SET(KWVolView_INSTALL_NO_LIBRARIES)
IF(KWVolView_BUILD_SHARED_LIBS)
  IF(KWVolView_INSTALL_NO_RUNTIME AND KWVolView_INSTALL_NO_DEVELOPMENT)
    SET(KWVolView_INSTALL_NO_LIBRARIES 1)
  ENDIF(KWVolView_INSTALL_NO_RUNTIME AND KWVolView_INSTALL_NO_DEVELOPMENT)
ELSE(KWVolView_BUILD_SHARED_LIBS)
  IF(KWVolView_INSTALL_NO_DEVELOPMENT)
    SET(KWVolView_INSTALL_NO_LIBRARIES 1)
  ENDIF(KWVolView_INSTALL_NO_DEVELOPMENT)
ENDIF(KWVolView_BUILD_SHARED_LIBS)

# --------------------------------------------------------------------------
# Sources: Core

SET(KWVolView_Core_SRCS
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVApplication.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVApplicationSettingsInterface.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVApplicationSettingsInterfaceBase.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVSaveDialog.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVSaveFiducialsDialog.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVSaveVolume.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVSaveFiducials.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVSelectionFrame.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVSelectionFrameLayoutManager.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVSnapshotPresetSelector.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVUserInterfacePanel.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVWindow.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/vtkVVWindowBase.cxx
  )
SET(KWVolView_Core_XML_SRCS
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/XML/vtkXMLVVWindowBaseReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/XML/vtkXMLVVWindowBaseWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/XML/vtkXMLVVApplicationReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/XML/vtkXMLVVApplicationWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/XML/vtkXMLVVSelectionFrameLayoutManagerReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/XML/vtkXMLVVSelectionFrameLayoutManagerWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/XML/vtkXMLVVSelectionFrameReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Core/XML/vtkXMLVVSelectionFrameWriter.cxx
  )
SET(KWVolView_SRCS 
  ${KWVolView_SRCS} ${KWVolView_Core_SRCS} ${KWVolView_Core_XML_SRCS})

SET_SOURCE_FILES_PROPERTIES(
  ${KWVolView_Core_XML_SRCS}
  WRAP_EXCLUDE
  )

# --------------------------------------------------------------------------
# Sources: Data Items

SET(KWVolView_DataItems_SRCS
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVDataItem.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVDataItemVolume.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVDataItemVolumeContour.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVDataItemVolumeContourCollection.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkRECISTCalculator.cxx 
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVLODDataItemVolumeHelper.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVDataItemPool.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVFileInstance.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVFileInstancePool.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVFileAuthenticator.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVMD5FileAuthenticator.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVSnapshot.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVSnapshotPool.cxx
  )
SET(KWVolView_DataItems_XML_SRCS
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVDataItemPoolReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVDataItemPoolWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVDataItemReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVDataItemVolumeReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVDataItemVolumeWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVDataItemWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVFileInstancePoolReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVFileInstancePoolWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVFileInstanceReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVFileInstanceWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVLODDataItemVolumeHelperReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVLODDataItemVolumeHelperWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVSnapshotPoolReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVSnapshotPoolWriter.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVSnapshotReader.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/XML/vtkXMLVVSnapshotWriter.cxx
  )
SET(KWVolView_SRCS 
  ${KWVolView_SRCS} ${KWVolView_DataItems_SRCS} ${KWVolView_DataItems_XML_SRCS})

SET_SOURCE_FILES_PROPERTIES(
  ${KWVolView_DataItems_XML_SRCS}
  WRAP_EXCLUDE
  )
SET_SOURCE_FILES_PROPERTIES(
  ${CMAKE_CURRENT_SOURCE_DIR}/DataItems/vtkVVDataItem.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/RemoteIO/vtkURIHandler.cxx
  ABSTRACT)

# --------------------------------------------------------------------------
# Sources: Plugins

SET(KWVolView_Plugins_SRCS
  ${CMAKE_CURRENT_SOURCE_DIR}/Plugins/vtkVVPluginSelector.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Plugins/vtkVVPlugin.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Plugins/vtkVVPluginInterface.cxx
  )
SET(KWVolView_SRCS ${KWVolView_SRCS} ${KWVolView_Plugins_SRCS})

IF( KWVolView_BUILD_PLUGINS )
  SUBDIRS(Plugins)
ENDIF( KWVolView_BUILD_PLUGINS )

# --------------------------------------------------------------------------
# Sources: Measurement Tools

SET(vtk_has_measurement_widgets 1)
IF(VTK_MAJOR_VERSION LESS 5)
  SET(vtk_has_measurement_widgets 0)
ELSE(VTK_MAJOR_VERSION LESS 5)
  IF(VTK_MAJOR_VERSION EQUAL 5 AND VTK_MINOR_VERSION EQUAL 0)
    SET(vtk_has_measurement_widgets 0)
  ENDIF(VTK_MAJOR_VERSION EQUAL 5 AND VTK_MINOR_VERSION EQUAL 0)
ENDIF(VTK_MAJOR_VERSION LESS 5)

IF(vtk_has_measurement_widgets)
  SET(KWVolView_MeasurementTools_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/MeasurementTools/vtkVVWidgetInterface.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/MeasurementTools/vtkVVInteractorWidgetSelector.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/MeasurementTools/vtkVVPaintbrushWidgetToolbar.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/MeasurementTools/vtkVVPaintbrushOptionsFrame.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/MeasurementTools/vtkVVPaintbrushWidgetEditor.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/MeasurementTools/vtkVVHandleWidget.cxx
    )
  SET(KWVolView_MeasurementTools_XML_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/MeasurementTools/XML/vtkXMLVVHandleWidgetReader.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/MeasurementTools/XML/vtkXMLVVHandleWidgetWriter.cxx
    )
  SET(KWVolView_SRCS ${KWVolView_SRCS} ${KWVolView_MeasurementTools_SRCS} ${KWVolView_MeasurementTools_XML_SRCS})
  SET_SOURCE_FILES_PROPERTIES(
    ${KWVolView_MeasurementTools_XML_SRCS}
    WRAP_EXCLUDE
    )
ENDIF(vtk_has_measurement_widgets)

# --------------------------------------------------------------------------
# Sources: Features

SET(KWVolView_Features_SRCS
  ${CMAKE_CURRENT_SOURCE_DIR}/Features/vtkVVDisplayInterface.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Features/vtkVVInformationInterface.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Features/vtkVVInformationInterfaceLabels.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Features/vtkVVReviewInterface.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/Features/vtkVVAdvancedAlgorithmsInterface.cxx
  )
SET(KWVolView_SRCS ${KWVolView_SRCS} ${KWVolView_Features_SRCS})

# --------------------------------------------------------------------------
# Sources: Segmentation Tools

IF(vtk_has_measurement_widgets)
  SET(KWVolView_SegmentationTools_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/SegmentationTools/vtkContourSegmentationFrame.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/SegmentationTools/vtkVVContourSelector.cxx
    )
  SET(KWVolView_SRCS ${KWVolView_SRCS} ${KWVolView_SegmentationTools_SRCS})
ENDIF(vtk_has_measurement_widgets)

# --------------------------------------------------------------------------
# Sources: RemoteIO

SET(KWVolView_RemoteIO_SRCS
  ${CMAKE_CURRENT_SOURCE_DIR}/RemoteIO/vtkKWDataTransfer.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/RemoteIO/vtkKWRemoteIOManager.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/RemoteIO/vtkKWCacheManager.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/RemoteIO/vtkURIHandler.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/RemoteIO/vtkHTTPHandler.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/RemoteIO/vtkKWRemoteIOTask.cxx
  ${CMAKE_CURRENT_SOURCE_DIR}/RemoteIO/vtkKWRemoteIOUtilities.cxx
  )
SET(KWVolView_SRCS ${KWVolView_SRCS} ${KWVolView_RemoteIO_SRCS})

# --------------------------------------------------------------------------
# Sources: Advanced Algorithms

IF(KWVolView_USE_LESION_SIZING_KIT)
  SET(KWVolView_AdvancedAlgorithms_SRCS ${KWVolView_AdvancedAlgorithms_SRCS} 
    ${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms/vtkVVLesionSizingInterface.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms/vtkITKLesionSegmentationImageFilter8.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms/vtkITKLesionSegmentationImageFilter7.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms/vtkITKLesionSegmentationImageFilter4.cxx
    )   
  SET_SOURCE_FILES_PROPERTIES( 
    ${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms/vtkITKLesionSegmentationImageFilter4.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms/vtkITKLesionSegmentationImageFilter7.cxx
    ${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms/vtkITKLesionSegmentationImageFilter8.cxx
    WRAP_EXCLUDE )
ENDIF(KWVolView_USE_LESION_SIZING_KIT)

SET(KWVolView_AdvancedAlgorithms_SRCS ${KWVolView_AdvancedAlgorithms_SRCS} 
    ${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms/vtkKWPSFLogWidget.cxx 
    ${CMAKE_CURRENT_SOURCE_DIR}/AdvancedAlgorithms/vtkKWPSFLogDialog.cxx )

SET(KWVolView_SRCS ${KWVolView_SRCS} ${KWVolView_AdvancedAlgorithms_SRCS})

# --------------------------------------------------------------------------
# Sources: Testing

INCLUDE(CTest)
MARK_AS_ADVANCED(BUILD_TESTING DART_ROOT TCL_TCLSH)

SET(default_val 1)
IF(DEFINED KWVolView_BUILD_TESTING_DEFAULT)
  SET(default_val ${KWVolView_BUILD_TESTING_DEFAULT})
ENDIF(DEFINED KWVolView_BUILD_TESTING_DEFAULT)
OPTION(KWVolView_BUILD_TESTING 
  "Enable testing in KWVolView (if BUILD_TESTING is ON as well)." 
  ${default_val})
MARK_AS_ADVANCED(KWVolView_BUILD_TESTING)
IF(BUILD_TESTING AND KWVolView_BUILD_TESTING)
  SET(KWVolView_INCLUDE_PATH ${KWVolView_INCLUDE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/Testing" CACHE INTERNAL "include paths for KWVolView")
  SET(KWVolView_Testing_SRCS
    ${CMAKE_CURRENT_SOURCE_DIR}/Testing/vtkVVTesting.cxx
    )
  IF(KWVolView_USE_GDCM)
    SET(KWVolView_Testing_SRCS ${KWVolView_Testing_SRCS}
      ${CMAKE_CURRENT_SOURCE_DIR}/Testing/vtkVVDicomTagPrinter.cxx
      )
  ENDIF(KWVolView_USE_GDCM)
  SET(KWVolView_SRCS ${KWVolView_SRCS} ${KWVolView_Testing_SRCS})
ENDIF(BUILD_TESTING AND KWVolView_BUILD_TESTING)

# --------------------------------------------------------------------------
# Internationalization

IF(KWWidgets_USE_INTERNATIONALIZATION)
  SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${KWWidgets_CMAKE_DIR}")
  FIND_PACKAGE(Gettext REQUIRED)
  INCLUDE("${KWWidgets_CMAKE_DIR}/KWWidgetsInternationalizationMacros.cmake")
  KWWidgets_CREATE_GETTEXT_TARGETS(
    DOMAIN_NAME "KWVolView"
    LOCALE_LIST "fr;pt_BR"
    COPYRIGHT_HOLDER "Kitware, Inc."
    SOURCES "${KWVolView_SRCS}"
    PO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Resources/po"
    POT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/Resources/po"
    PO_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/Resources/po"
    MO_INSTALL_DIR "${KWVolView_INSTALL_DATA_DIR}/locale"
    ADD_MO_TARGET_TO_ALL)
  # We provide our own translation for KWWidgets in some languages
  # It would be fine to use the POT file already in KWWidgets, but
  # the resulting PO file would have wrong relative locations.
  # As a convenience, let's create a new POT file in the binary dir
  # with correct locations to the KWWidgets sources.
  IF(KWWidgets_SOURCE_DIR)
    KWWidgets_CREATE_GETTEXT_TARGETS(
      TARGET_BASENAME "KWVolView_KWWidgets"
      DOMAIN_NAME "KWWidgets"
      SOURCES "${KWWidgets_INTERNATIONALIZED_SRCS_INTERNAL}"
      LOCALE_LIST "pt_BR"
      PO_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Resources/po"
      POT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/Resources/po"
      PO_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/Resources/po"
      MO_INSTALL_DIR "${KWWidgets_INSTALL_DATA_DIR}/locale"
      ADD_MO_TARGET_TO_ALL)
    ADD_DEPENDENCIES(KWVolView_mo 
      KWWidgetsPro_mo KWVolView_KWWidgets_mo) # Convenience
  ENDIF(KWWidgets_SOURCE_DIR)
ENDIF(KWWidgets_USE_INTERNATIONALIZATION)

# --------------------------------------------------------------------------
# Include dirs

INCLUDE_DIRECTORIES(
  ${KWCommon_INCLUDE_PATH}
  ${KWCommonPro_INCLUDE_PATH}
  ${KWWidgets_INCLUDE_PATH}
  ${KWWidgetsPro_INCLUDE_PATH}
  ${VTKEdge_INCLUDE_PATH}
  ${KWVolView_INCLUDE_PATH}
  ${VolViewLibraries_SOURCE_DIR}/Utilities # for curl
  ${LIBTAR_BINARY_DIR}
  )

IF(KWVolView_USE_GDCM)
  INCLUDE_DIRECTORIES(${GDCM_INCLUDE_PATH})
ENDIF(KWVolView_USE_GDCM)

IF(KWVolView_USE_LESION_SIZING_KIT)
  INCLUDE_DIRECTORIES(${LesionSizingKit_Sandbox_SOURCE_DIR})
ENDIF(KWVolView_USE_LESION_SIZING_KIT)

# --------------------------------------------------------------------------
# Wrap the classes in Tcl

INCLUDE("${KWWidgets_CMAKE_DIR}/KWWidgetsWrappingMacros.cmake")
#SET(VTK_WRAP_HINTS ${KWVolView_SOURCE_DIR}/hints)
KWWidgets_WRAP_TCL(
  KWVolView
  KWVolViewTCL_SRCS
  "${KWVolView_SRCS}"
  ""
  "${KWVolView_MAJOR_VERSION}.${KWVolView_MINOR_VERSION}")

# --------------------------------------------------------------------------
# Create the instantiators

SET(VTK_USE_INSTANTIATOR_NEW 1)
VTK_MAKE_INSTANTIATOR3(KWVolViewInstantiator 
                       KWVolView_Instantiator_SRCS
                       "${KWVolView_SRCS}"
                       VTK_EXPORT
                       ${KWVolView_BINARY_DIR} 
                       "")

# --------------------------------------------------------------------------
# Build the library

ADD_LIBRARY(KWVolView 
  ${KWVolView_SRCS}
  ${KWVolViewTCL_SRCS} 
  ${KWVolView_Instantiator_SRCS}
  )

TARGET_LINK_LIBRARIES(KWVolView
  ${KWWidgetsPro_LIBRARIES}
  ${VTKEdge_LIBRARIES}
  cmtar
  Curl
  )

IF(KWVolView_USE_GDCM)
  TARGET_LINK_LIBRARIES(KWVolView ${GDCM_LIBRARIES})
ENDIF(KWVolView_USE_GDCM)

IF(KWWidgets_USE_INTERNATIONALIZATION AND GETTEXT_RUNTIME_FOUND)
  TARGET_LINK_LIBRARIES(KWVolView ${GETTEXT_LIBRARIES})
ENDIF(KWWidgets_USE_INTERNATIONALIZATION AND GETTEXT_RUNTIME_FOUND)

IF(KWVolView_USE_LESION_SIZING_KIT)
  TARGET_LINK_LIBRARIES(KWVolView 
    ITKCommon 
    ITKNumerics 
    ITKSpatialObject 
    ITKAlgorithms 
    ITKBasicFilters 
    ITKIO    
    )
ENDIF(KWVolView_USE_LESION_SIZING_KIT)

IF(NOT KWVolView_INSTALL_NO_LIBRARIES)
  INSTALL_TARGETS(
    ${KWVolView_INSTALL_LIB_DIR}
    RUNTIME_DIRECTORY ${KWVolView_INSTALL_BIN_DIR}
    ${KWVolView_LIBRARIES})
ENDIF(NOT KWVolView_INSTALL_NO_LIBRARIES)

# --------------------------------------------------------------------------
# Copy/install the presets

SET(KWVolView_PRESETS_TFUNCS_SUBDIR "Presets/TransferFunctions")
SET(KWVolView_PRESETS_WLS_SUBDIR "Presets/WindowLevels")
SUBDIRS(Presets)

# --------------------------------------------------------------------------
# Testing

IF(BUILD_TESTING AND KWVolView_BUILD_TESTING)
  ENABLE_TESTING()
  SUBDIRS(Testing)
ENDIF(BUILD_TESTING AND KWVolView_BUILD_TESTING)

SET(KWVolView_TESTING_DIR 
  ${KWVolView_SOURCE_DIR}/Testing CACHE INTERNAL "")

# --------------------------------------------------------------------------
# Install the headers

IF(NOT KWVolView_INSTALL_NO_DEVELOPMENT)
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/Core .h 
    ${KWVolView_Core_SRCS})
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/Core/XML .h 
    ${KWVolView_Core_XML_SRCS})
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/DataItems .h 
    ${KWVolView_DataItems_SRCS})
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/DataItems/XML .h 
    ${KWVolView_DataItems_XML_SRCS})
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/Features .h 
    ${KWVolView_Features_SRCS})
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/RemoteIO .h 
    ${KWVolView_RemoteIO_SRCS})
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/AdvancedAlgorithms .h 
    ${KWVolView_AdvancedAlgorithms_SRCS})
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/MeasurementTools .h 
    ${KWVolView_MeasurementTools_SRCS})
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/MeasurementTools/XML .h 
    ${KWVolView_MeasurementTools_XML_SRCS})
#  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/Plugins .h 
#    ${KWVolView_Plugins_SRCS})
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/SegmentationTools .h 
    ${KWVolView_SegmentationTools_SRCS})
  IF(BUILD_TESTING AND KWVolView_BUILD_TESTING)
    INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR}/Testing .h 
      ${KWVolView_Testing_SRCS})
  ENDIF(BUILD_TESTING AND KWVolView_BUILD_TESTING)
  INSTALL_FILES(${KWVolView_INSTALL_INCLUDE_DIR} FILES 
    ${CMAKE_CURRENT_BINARY_DIR}/vtkKWVolViewConfigure.h)
ENDIF(NOT KWVolView_INSTALL_NO_DEVELOPMENT)

# --------------------------------------------------------------------------
# Configure some files. This should be at the end for all variables to
# be set before the contents of the files is replaced.

CONFIGURE_FILE(
  ${CMAKE_CURRENT_SOURCE_DIR}/vtkKWVolViewConfigure.h.in
  ${CMAKE_CURRENT_BINARY_DIR}/vtkKWVolViewConfigure.h)

CONFIGURE_FILE(
  ${CMAKE_CURRENT_SOURCE_DIR}/vtkKWVolViewBuildConfigure.h.in 
  ${CMAKE_CURRENT_BINARY_DIR}/vtkKWVolViewBuildConfigure.h)

# --------------------------------------------------------------------------
# Configure the export configuration

SUBDIRS(CMake/ExportConfiguration)
