IF(WIN32)
  cmake_minimum_required(VERSION 2.6.0)
ELSE(WIN32)
  cmake_minimum_required(VERSION 2.4)
ENDIF(WIN32)

IF( COMMAND cmake_policy )
  IF( POLICY CMP0003 )
    cmake_policy(SET CMP0003 OLD)
  ENDIF( POLICY CMP0003 )
ENDIF( COMMAND cmake_policy )

PROJECT (MedX3DDemo)

# set the install directory to the MedX3D directory on Windows
IF( WIN32 AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND NOT H3D_CMAKE_INSTALL_PREFIX_ALREADY_SET ) 
  SET( CMAKE_INSTALL_PREFIX ${MedX3DDemo_SOURCE_DIR}/../.. CACHE PATH "Install path prefix, prepended onto install directories." FORCE )
  SET( H3D_CMAKE_INSTALL_PREFIX_ALREADY_SET TRUE )
ENDIF( WIN32 AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND NOT H3D_CMAKE_INSTALL_PREFIX_ALREADY_SET ) 

# use, i.e. don't skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH FALSE)

# when building, don't use the install RPATH already
# (but later on when installing)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 

# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

# the RPATH to be used when installing, but only if it's not a system directory
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
IF("${isSystemDir}" STREQUAL "-1")
   SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
ENDIF("${isSystemDir}" STREQUAL "-1")

SET( MedX3DDemo_SRCS "${MedX3DDemo_SOURCE_DIR}/../src/WxConsoleDialog.cpp"
                     "${MedX3DDemo_SOURCE_DIR}/../src/WxConsoleDialog.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemo.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemo.h"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoApp.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoApp.h"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoMainDialog.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoMainDialog.h"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoMainFrame.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoMainFrame.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoBoundaryEnhancementVolumeStyleOptions.cpp"   
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoBoundaryEnhancementVolumeStyleOptions.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoBlendedVolumeStyleOptions.cpp"   
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoBlendedVolumeStyleOptions.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoCartoonVolumeStyleOptions.cpp"            
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoCartoonVolumeStyleOptions.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoComposedVolumeStyleOptions.cpp"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoComposedVolumeStyleOptions.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoComposedVolumeStyleOptionsPart.cpp"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoComposedVolumeStyleOptionsPart.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoEdgeEnhancementVolumeStyleOptions.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoEdgeEnhancementVolumeStyleOptions.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoLoadRawImageDialog.cpp"            
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoLoadRawImageDialog.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoMIPVolumeStyleOptions.cpp"            
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoMIPVolumeStyleOptions.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoOpacityMapVolumeStyleOptions.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoOpacityMapVolumeStyleOptions.h"
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoShadedVolumeStyleOptions.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoShadedVolumeStyleOptions.h"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoSilhouetteEnhancementVolumeStyleOptions.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoSilhouetteEnhancementVolumeStyleOptions.h"        
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoToneMappedVolumeStyleOptions.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoToneMappedVolumeStyleOptions.h"        
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoStyleDialog.cpp"    
                     "${MedX3DDemo_SOURCE_DIR}/../src/MedX3DDemoStyleDialog.h"        
 
  
                     "${MedX3DDemo_SOURCE_DIR}/../src/WxWidgetsWindow.cpp"
                     "${MedX3DDemo_SOURCE_DIR}/../src/WxWidgetsWindow.h" )

# Add the MedX3DDemo.rc resource file if Visual Studio
IF(MSVC)
  SET( MedX3DDemo_SRCS ${MedX3DDemo_SRCS} ${CMAKE_CURRENT_BINARY_DIR}/MedX3DDemo.rc )
ENDIF(MSVC)

SET(MedX3DDemo_MAJOR_VERSION "1")
SET(MedX3DDemo_MINOR_VERSION "4")
SET(MedX3DDemo_BUILD_VERSION "0")

INCLUDE_DIRECTORIES( ../include )

SET(requiredLibs)

SET(CMAKE_MODULE_PATH  ${MedX3DDemo_SOURCE_DIR}/../../build/modules $ENV{H3D_ROOT}/build/modules ${MedX3DDemo_SOURCE_DIR}/../../../H3DAPI/build/modules/)
IF( COMMAND cmake_policy )
  IF( POLICY CMP0011 )
    cmake_policy( SET CMP0011 NEW )
  ENDIF( POLICY CMP0011 )
ENDIF( COMMAND cmake_policy )
INCLUDE( StripAndAddLibraryDirectories )

IF( H3D_USE_DEPENDENCIES_ONLY )
  # The variables set here must be set by the CMakeLists.txt that sets H3D_USE_DEPENDENCIES_ONLY to true.
  INCLUDE_DIRECTORIES( ${H3DUTIL_INCLUDE_DIR} ) 
  INCLUDE_DIRECTORIES( ${HAPI_INCLUDE_DIR} ) 
  INCLUDE_DIRECTORIES( ${H3DAPI_INCLUDE_DIR} ) 
  
  SET( requiredLibs ${requiredLibs} H3DUtil HAPI H3DAPI )
ELSE( H3D_USE_DEPENDENCIES_ONLY )
  #H3DUtil
  FIND_PACKAGE(H3DUtil REQUIRED)

  IF(H3DUTIL_FOUND)
    INCLUDE_DIRECTORIES( ${H3DUTIL_INCLUDE_DIR} ) 
    SET(requiredLibs ${requiredLibs} ${H3DUTIL_LIBRARIES} )
  ENDIF(H3DUTIL_FOUND)

  #HAPI
  FIND_PACKAGE(HAPI REQUIRED)

  IF(HAPI_FOUND)
    INCLUDE_DIRECTORIES( ${HAPI_INCLUDE_DIR} ) 
    SET(requiredLibs ${requiredLibs} ${HAPI_LIBRARIES} )
  ENDIF(HAPI_FOUND)

  #H3DAPI
  FIND_PACKAGE(H3DAPI REQUIRED)

  IF(H3DAPI_FOUND)
    INCLUDE_DIRECTORIES( ${H3DAPI_INCLUDE_DIR} ) 
    SET(requiredLibs ${requiredLibs} ${H3DAPI_LIBRARIES} )
  ENDIF(H3DAPI_FOUND)
ENDIF( H3D_USE_DEPENDENCIES_ONLY )

IF( TARGET MedX3D )
  INCLUDE_DIRECTORIES( ${MEDX3D_INCLUDE_DIR} ) 
  SET( requiredLibs ${requiredLibs} MedX3D )
ELSE( TARGET MedX3D )
  #MedX3D
  FIND_PACKAGE(MedX3D REQUIRED)
   
  IF(MEDX3D_FOUND)
    INCLUDE_DIRECTORIES( ${MEDX3D_INCLUDE_DIR} ) 
    SET(requiredLibs ${requiredLibs} ${MEDX3D_LIBRARIES} )
  ENDIF(MEDX3D_FOUND)
ENDIF( TARGET MedX3D )

# WxWidgets.
SET( TMP_wxWidgets_FOUND FALSE )
SET(WXWINDOWS_USE_GL 1)
IF(WIN32)
  FIND_PACKAGE(wxWidgetsWin)
  IF(wxWidgets_FOUND)
    INCLUDE_DIRECTORIES( ${wxWidgets_INCLUDE_DIR} ) 
    SET(requiredLibs ${requiredLibs} ${wxWidgets_LIBRARIES} )
    SET( TMP_wxWidgets_FOUND TRUE )
  ENDIF(wxWidgets_FOUND)
ENDIF(WIN32)

IF(TMP_wxWidgets_FOUND)
ELSE(TMP_wxWidgets_FOUND)
  SET(wxWidgets_USE_LIBS base core gl adv)
  FIND_PACKAGE(wxWidgets REQUIRED)
  IF(wxWidgets_FOUND)
    INCLUDE(${wxWidgets_USE_FILE})
    SET(requiredLibs ${requiredLibs} ${wxWidgets_LIBRARIES} )
  ENDIF(wxWidgets_FOUND)
ENDIF(TMP_wxWidgets_FOUND)

ADD_EXECUTABLE(MedX3DDemo WIN32 MACOSX_BUNDLE ${MedX3DDemo_SRCS})

# make sure that the MedX3DDemo.rc contains the correct svn-version
IF( MSVC )

  SET( MedX3DDemo_SVN_VERSION "0" )
  # Find SubWCRev.exe
  FIND_FILE( SubWCRev
             NAMES "SubWCRev.exe"
             DOC   "Set to SubWCRev.exe that comes with TortoiseSVN. Used to find svn revision number." )
  MARK_AS_ADVANCED( SubWCRev )

  SET( MedX3DDemo_is_working_copy 10 )
  IF( SubWCRev )
    EXECUTE_PROCESS( COMMAND ${SubWCRev} ${MedX3DDemo_SOURCE_DIR}/../
                     RESULT_VARIABLE MedX3DDemo_is_working_copy )
    IF( ${MedX3DDemo_is_working_copy} EQUAL 0 )
      SET( MedX3DDemo_SVN_VERSION "$WCREV$" )
    ENDIF( ${MedX3DDemo_is_working_copy} EQUAL 0 )
  ENDIF( SubWCRev )

  # autogenerate MedX3DDemo.rc depending on the version
  CONFIGURE_FILE( MedX3DDemo.rc.cmake ${CMAKE_CURRENT_BINARY_DIR}/MedX3DDemo.rc )

  ADD_CUSTOM_COMMAND( TARGET MedX3DDemo
                      PRE_BUILD
                      COMMAND ${MedX3DDemo_SOURCE_DIR}/../../build/UpdateResourceFile 
                      ARGS MedX3DDemo ${CMAKE_CURRENT_BINARY_DIR}/MedX3DDemo.rc ${MedX3DDemo_SOURCE_DIR}/MedX3DDemo.rc.cmake
                      ${MedX3DDemo_MAJOR_VERSION} ${MedX3DDemo_MINOR_VERSION}
                      ${MedX3DDemo_BUILD_VERSION} "${MedX3DDemo_SVN_VERSION}"
                      "MedX3DDemo_SOURCE_DIR"
                      ${MedX3DDemo_SOURCE_DIR}
                      "MedX3DDemo_Output_Name"
                      "$(TargetFileName)" )

  IF( SubWCRev AND ${MedX3DDemo_is_working_copy} EQUAL 0 )
    # Update SVN revision in file.
    EXECUTE_PROCESS( COMMAND ${SubWCRev} ${MedX3DDemo_SOURCE_DIR}/../ ${CMAKE_CURRENT_BINARY_DIR}/MedX3DDemo.rc ${CMAKE_CURRENT_BINARY_DIR}/MedX3DDemo.rc )
    
    ADD_CUSTOM_COMMAND( TARGET MedX3DDemo 
                        PRE_BUILD 
                        COMMAND ${SubWCRev} 
                        ARGS ${MedX3DDemo_SOURCE_DIR}/../ ${CMAKE_CURRENT_BINARY_DIR}/MedX3DDemo.rc ${CMAKE_CURRENT_BINARY_DIR}/MedX3DDemo.rc )
  ENDIF( SubWCRev AND ${MedX3DDemo_is_working_copy} EQUAL 0 )
ENDIF(MSVC)

TARGET_LINK_LIBRARIES( MedX3DDemo ${requiredLibs} ${optionalLibs} )

# make the name of debug libraries end in _d.
SET_TARGET_PROPERTIES( MedX3DDemo PROPERTIES DEBUG_POSTFIX "_d" )

IF(MSVC)
  # Create variables
  SET( MedX3DDemo_LINK_FLAGS_DEBUG "" )
  SET( MedX3DDemo_COMPILE_FLAGS "-DWXUSINGDLL -DUNICODE -D_UNICODE" )  
  
  # Treat wchar_t as built in type for all visual studio versions.
  # This is default for every version above 7 ( so far ) but we still set it for all.
  SET( MedX3DDemo_COMPILE_FLAGS "${MedX3DDemo_COMPILE_FLAGS} /Zc:wchar_t")
  
  IF( ${MSVC_VERSION} GREATER 1399 )
    # Remove compiler warnings about deprecation for visual studio versions 8 and above.
    SET( MedX3DDemo_COMPILE_FLAGS "${MedX3DDemo_COMPILE_FLAGS} -D_CRT_SECURE_NO_DEPRECATE" )
  ENDIF( ${MSVC_VERSION} GREATER 1399 )

  IF( ${MSVC_VERSION} GREATER 1499 )
    # Build using several threads for visual studio versions 9 and above.
    SET( MedX3DDemo_COMPILE_FLAGS "${MedX3DDemo_COMPILE_FLAGS} /MP" )
    # Remove link against default library for debug builds.
    SET( MedX3DDemo_LINK_FLAGS_DEBUG "${MedX3DDemo_LINK_FLAGS_DEBUG} /NODEFAULTLIB:msvcrt" )
  ENDIF( ${MSVC_VERSION} GREATER 1499 )

  # set compile and link flags for MedX3DDemo project
  SET_TARGET_PROPERTIES( MedX3DDemo PROPERTIES COMPILE_FLAGS "${MedX3DDemo_COMPILE_FLAGS}"
                                               LINK_FLAGS_DEBUG "${MedX3DDemo_LINK_FLAGS_DEBUG}" )
ENDIF(MSVC)

SET( DEFAULT_BIN_INSTALL "bin" )
SET( DEFAULT_LIB_INSTALL "lib" )

IF( WIN32 )
  SET( DEFAULT_BIN_INSTALL "bin32" )
  SET( DEFAULT_LIB_INSTALL "lib32" )
  IF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
    SET( DEFAULT_BIN_INSTALL "bin64" )
    SET( DEFAULT_LIB_INSTALL "lib64" )
  ENDIF( CMAKE_SIZEOF_VOID_P EQUAL 8 )
ENDIF( WIN32 )

IF( APPLE )
 INSTALL( TARGETS MedX3DDemo
          LIBRARY DESTINATION ${DEFAULT_LIB_INSTALL}
          RUNTIME DESTINATION ${DEFAULT_BIN_INSTALL}
    BUNDLE DESTINATION "/Applications" )
ELSE( APPLE )
 INSTALL( TARGETS MedX3DDemo
          LIBRARY DESTINATION ${DEFAULT_LIB_INSTALL}
          RUNTIME DESTINATION ${DEFAULT_BIN_INSTALL}
					COMPONENT MedX3D_cpack_examples_runtime )
ENDIF( APPLE )

