##========================================================================= ## ## 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(VolViewPlatform) # -------------------------------------------------------------------------- # VolViewPlatform_INSTALL_BIN_DIR - binary dir (executables) # VolViewPlatform_INSTALL_LIB_DIR - library dir (libs) # VolViewPlatform_INSTALL_DATA_DIR - share dir (say, examples, data) # VolViewPlatform_INSTALL_INCLUDE_DIR - include dir (headers) # VolViewPlatform_INSTALL_PACKAGE_DIR - package/export config files # VolViewPlatform_INSTALL_NO_DEVELOPMENT - do not install development files # VolViewPlatform_INSTALL_NO_RUNTIME - do not install runtime files # VolViewPlatform_INSTALL_NO_DOCUMENTATION - do not install doc files # -------------------------------------------------------------------------- # -------------------------------------------------------------------------- # Version set(VolViewPlatform_MAJOR_VERSION 1) set(VolViewPlatform_MINOR_VERSION 0) # -------------------------------------------------------------------------- # Output directories if(NOT LIBRARY_OUTPUT_PATH) set(LIBRARY_OUTPUT_PATH ${VolViewPlatform_BINARY_DIR}/bin CACHE INTERNAL "Single output directory for building all libraries.") endif(NOT LIBRARY_OUTPUT_PATH) if(NOT EXECUTABLE_OUTPUT_PATH) set(EXECUTABLE_OUTPUT_PATH ${VolViewPlatform_BINARY_DIR}/bin CACHE INTERNAL "Single output directory for building all executables.") endif(NOT EXECUTABLE_OUTPUT_PATH) set(CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH}) # -------------------------------------------------------------------------- # Some flags if(APPLE) set(CMAKE_CXX_FLAGS "-mlong-branch ${CMAKE_CXX_FLAGS}") set(CMAKE_C_FLAGS "-mlong-branch ${CMAKE_C_FLAGS}") endif(APPLE) option(BUILD_SHARED_LIBS "Build with shared libraries." ON) set(VolViewPlatform_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}) option(BUILD_TESTING "Build testing." OFF) option(VTK_BUILD_TESTING "Build VTK Testing." OFF) option(ITK_BUILD_TESTING "Build ITK Testing." OFF) mark_as_advanced(BUILD_TESTING VTK_BUILD_TESTING ITK_BUILD_TESTING) # Disable deprecation warnings for standard C functions and all the # 1.276E1265 security warnings if(CMAKE_COMPILER_2005) add_definitions( -D_CRT_FAR_MAPPINGS_NO_DEPRECATE -D_CRT_IS_WCTYPE_NO_DEPRECATE -D_CRT_MANAGED_FP_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE_GLOBALS -D_CRT_SETERRORMODE_BEEP_SLEEP_NO_DEPRECATE -D_CRT_TIME_FUNCTIONS_NO_DEPRECATE -D_CRT_VCCLRIT_NO_DEPRECATE -D_SCL_SECURE_NO_DEPRECATE) endif(CMAKE_COMPILER_2005) mark_as_advanced(CMAKE_BACKWARDS_COMPATIBILITY) # Leave skip_rpath to OFF for now. This will make the build tree # easier to use. The install tree would be busted anyway and require # special launchers. set(CMAKE_SKIP_RPATH ON CACHE INTERNAL "" FORCE) set(VTK_USE_RPATH OFF CACHE INTERNAL "" FORCE) set(VTKEdge_PAINTBRUSH_LABEL_TYPE "VTK_UNSIGNED_CHAR" CACHE INTERNAL "" FORCE) if(APPLE) set(CMAKE_INSTALL_NAME_DIR "@executable_path/../lib" CACHE INTERNAL "" FORCE) endif(APPLE) # -------------------------------------------------------------------------- # Find the source dirs get_filename_component(VolViewPlatform_PARENT_DIR ${VolViewPlatform_SOURCE_DIR} PATH) find_path(VTK_SOURCE_DIR UseVTK.cmake.in PATHS ${VolViewPlatform_PARENT_DIR}/VolViewExternalLibraries/VTK DOC "Path to VTK source dir.") find_path(KWWidgets_SOURCE_DIR vtkKWWidget.h PATHS ${VolViewPlatform_PARENT_DIR}/VolViewExternalLibraries/KWWidgets DOC "Path to KWWidgets source dir.") find_path(ITK_SOURCE_DIR UseITK.cmake.in PATHS ${VolViewPlatform_PARENT_DIR}/VolViewExternalLibraries/Insight DOC "Path to ITK source dir.") find_path(LesionSizingKit_SOURCE_DIR LesionSizingKitReadme.txt PATHS ${VolViewPlatform_PARENT_DIR}/VolViewExternalLibraries/LesionSizingKit DOC "Path to LesionSizingKit source dir.") find_path(VolViewLibraries_SOURCE_DIR KWVolView PATHS ${VolViewPlatform_PARENT_DIR}/VolViewLibraries DOC "Path to VolViewLibraries source dir.") find_path(VolViewApplications_SOURCE_DIR VolView_Mac_Icon.icns PATHS ${VolViewPlatform_PARENT_DIR}/VolViewApplications DOC "Path to VolViewApplications source dir.") if(NOT VTK_SOURCE_DIR OR NOT KWWidgets_SOURCE_DIR OR NOT ITK_SOURCE_DIR OR NOT VolViewLibraries_SOURCE_DIR OR NOT VolViewApplications_SOURCE_DIR) # message(FATAL_ERROR "Make sure the source directories for the following components are set:\n - VTK,\n - KWWidgets,\n - ITK,\n - VolViewLibraries,\n - VolViewApplications.") endif(NOT VTK_SOURCE_DIR OR NOT KWWidgets_SOURCE_DIR OR NOT ITK_SOURCE_DIR OR NOT VolViewLibraries_SOURCE_DIR OR NOT VolViewApplications_SOURCE_DIR) # -------------------------------------------------------------------------- # Install directories if(NOT VolViewPlatform_INSTALL_BIN_DIR) set(VolViewPlatform_INSTALL_BIN_DIR "/bin") endif(NOT VolViewPlatform_INSTALL_BIN_DIR) if(NOT VolViewPlatform_INSTALL_LIB_DIR) set(VolViewPlatform_INSTALL_LIB_DIR "/lib/${PROJECT_NAME}") endif(NOT VolViewPlatform_INSTALL_LIB_DIR) if(NOT VolViewPlatform_INSTALL_DATA_DIR) set(VolViewPlatform_INSTALL_DATA_DIR "/share/${PROJECT_NAME}") endif(NOT VolViewPlatform_INSTALL_DATA_DIR) if(NOT VolViewPlatform_INSTALL_INCLUDE_DIR) set(VolViewPlatform_INSTALL_INCLUDE_DIR "/include/${PROJECT_NAME}") endif(NOT VolViewPlatform_INSTALL_INCLUDE_DIR) if(NOT VolViewPlatform_INSTALL_PACKAGE_DIR) set(VolViewPlatform_INSTALL_PACKAGE_DIR ${VolViewPlatform_INSTALL_LIB_DIR}) endif(NOT VolViewPlatform_INSTALL_PACKAGE_DIR) set(VTK_INSTALL_LIB_DIR "/lib/vtk") if(NOT VolViewPlatform_VTK_INSTALL_PACKAGE_DIR) set(VolViewPlatform_VTK_INSTALL_PACKAGE_DIR ${VolViewPlatform_INSTALL_PACKAGE_DIR}) endif(NOT VolViewPlatform_VTK_INSTALL_PACKAGE_DIR) if(NOT VolViewPlatform_ITK_INSTALL_PACKAGE_DIR) set(VolViewPlatform_ITK_INSTALL_PACKAGE_DIR ${VolViewPlatform_INSTALL_PACKAGE_DIR}) endif(NOT VolViewPlatform_ITK_INSTALL_PACKAGE_DIR) set(VolViewPlatform_INSTALL_NO_DEVELOPMENT 1) if(NOT VolViewPlatform_INSTALL_NO_RUNTIME) if(VolViewPlatform_BUILD_SHARED_LIBS) set(VolViewPlatform_INSTALL_NO_RUNTIME 0) else(VolViewPlatform_BUILD_SHARED_LIBS) set(VolViewPlatform_INSTALL_NO_RUNTIME 1) endif(VolViewPlatform_BUILD_SHARED_LIBS) endif(NOT VolViewPlatform_INSTALL_NO_RUNTIME) if(NOT VolViewPlatform_INSTALL_NO_DOCUMENTATION) set(VolViewPlatform_INSTALL_NO_DOCUMENTATION 1) endif(NOT VolViewPlatform_INSTALL_NO_DOCUMENTATION) set(VolViewPlatform_INSTALL_NO_LIBRARIES) if(VolViewPlatform_BUILD_SHARED_LIBS) if(VolViewPlatform_INSTALL_NO_RUNTIME AND VolViewPlatform_INSTALL_NO_DEVELOPMENT) set(VolViewPlatform_INSTALL_NO_LIBRARIES 1) endif(VolViewPlatform_INSTALL_NO_RUNTIME AND VolViewPlatform_INSTALL_NO_DEVELOPMENT) else(VolViewPlatform_BUILD_SHARED_LIBS) if(VolViewPlatform_INSTALL_NO_DEVELOPMENT) set(VolViewPlatform_INSTALL_NO_LIBRARIES 1) endif(VolViewPlatform_INSTALL_NO_DEVELOPMENT) endif(VolViewPlatform_BUILD_SHARED_LIBS) # Propagate to all components foreach(component VTK KWWidgets GDCM ITK VolViewLibraries VolViewApplications ) set(${component}_BUILD_SHARED_LIBS ${VolViewPlatform_BUILD_SHARED_LIBS}) set(${component}_INSTALL_BIN_DIR ${VolViewPlatform_INSTALL_BIN_DIR}) set(${component}_VTK_INSTALL_PACKAGE_DIR ${VolViewPlatform_VTK_INSTALL_PACKAGE_DIR}) set(${component}_ITK_INSTALL_PACKAGE_DIR ${VolViewPlatform_ITK_INSTALL_PACKAGE_DIR}) set(${component}_INSTALL_NO_DEVELOPMENT ${VolViewPlatform_INSTALL_NO_DEVELOPMENT}) set(${component}_INSTALL_NO_RUNTIME ${VolViewPlatform_INSTALL_NO_RUNTIME}) set(${component}_INSTALL_NO_DOCUMENTATION ${VolViewPlatform_INSTALL_NO_DOCUMENTATION}) # Do *not* propagate: # - VolViewPlatform_INSTALL_INCLUDE_DIR (way too messy) # - VolViewPlatform_INSTALL_LIB_DIR (too messy) # - VolViewPlatform_INSTALL_PACKAGE_DIR (too messy) # - VolViewPlatform_INSTALL_DATA_DIR (personal preference) #SET(${component}_INSTALL_PACKAGE_DIR # ${VolViewPlatform_INSTALL_PACKAGE_DIR}) endforeach(component) # -------------------------------------------------------------------------- # VTK set(VTK_WRAP_TCL ON CACHE INTERNAL "" FORCE) if(VolViewPlatform_BUILD_SHARED_LIBS) set(VTK_TCL_TK_STATIC OFF CACHE INTERNAL "" FORCE) else(VolViewPlatform_BUILD_SHARED_LIBS) set(VTK_TCL_TK_STATIC ON CACHE INTERNAL "" FORCE) endif(VolViewPlatform_BUILD_SHARED_LIBS) # We need Tcl/Tk now set(VTK_TCL_TK_MACROS_MODULE "${VTK_SOURCE_DIR}/CMake/vtkTclTkMacros.cmake") set(TclTk_BIN_DIR "${LIBRARY_OUTPUT_PATH}") set(TclTk_LIB_DIR "${PROJECT_BINARY_DIR}/lib") set(TclTk_INSTALL_LIB_DIR "/lib") set(TclTk_INSTALL_BIN_DIR ${VolViewPlatform_INSTALL_BIN_DIR}) #add_subdirectory( # ${VolViewLibraries_SOURCE_DIR}/Utilities/TclTk # ${VolViewPlatform_BINARY_DIR}/VolViewLibraries/Utilities/TclTk) set(OLD_BUILD_TESTING ${BUILD_TESTING}) set(BUILD_TESTING ${VTK_BUILD_TESTING}) # Add VTK set(METAIO_USE_OpenJPEG_DEFAULT ON) set(VTK_DIR ${VolViewPlatform_BINARY_DIR}/VTK) #add_subdirectory(${VTK_SOURCE_DIR} ${VTK_DIR}) set(BUILD_TESTING ${OLD_BUILD_TESTING}) mark_as_advanced( BUILD_EXAMPLES VTK_DATA_ROOT VTK_USE_CG_SHADERS VTK_USE_FFMPEG_ENCODER VTK_USE_GLSL_SHADERS VTK_USE_PARALLEL VTK_USE_RENDERING VTK_USE_RPATH VTK_WRAP_JAVA VTK_WRAP_PYTHON ) # -------------------------------------------------------------------------- # Build OpenJPEG. SET( OpenJPEG_INCLUDE_DIR ${VTK_SOURCE_DIR}/Utilities/OpenJPEG/libopenjpeg ${VTK_BINARY_DIR}/Utilities/OpenJPEG/libopenjpeg CACHE INTERNAL "" FORCE ) SET( OpenJPEG_LIBRARY vtkopenjpeg CACHE INTERNAL "" FORCE ) SET( OpenJPEG_JP3DVM_INCLUDE_DIR ${VTK_SOURCE_DIR}/Utilities/OpenJPEG/jp3d/libjp3dvm ${VTK_BINARY_DIR}/Utilities/OpenJPEG/jp3d/libjp3dvm CACHE INTERNAL "" FORCE ) SET( OpenJPEG_JP3DVM_LIBRARY vtkopenjp3dvm CACHE INTERNAL "" FORCE) SET( OpenJPEG_FOUND_DEFAULT TRUE CACHE INTERNAL "" FORCE) SET( OpenJPEG_JP3DVM_FOUND_DEFAULT TRUE CACHE INTERNAL "" FORCE) # -------------------------------------------------------------------------- # VolViewLibraries: Utilities: GDCM set(GDCM_BUILD_EXAMPLES_DEFAULT 0) set(GDCM_BUILD_TESTING_DEFAULT 0) set(GDCM_INSTALL_NO_DICTIONARY 1) set(GDCM_VTK_DEFAULT ON) set(GDCM_PUB_DICT_PATH "") set(OPENJPEG_BUILD_SHARED_LIBS ${GDCM_BUILD_SHARED_LIBS}) mark_as_advanced( GDCM_BUILD_EXAMPLES GDCM_BUILD_SHARED_LIBS GDCM_DATA_ROOT GDCM_DOCUMENTATION GDCM_FORCE_BIGENDIAN_EMULATION GDCM_INSTALLER GDCM_PUB_DICT_PATH GDCM_VTK GDCM_WRAP_PYTHON ) # GDCM contains an older version of OpenJPEG. We will use the system # version of OpenJPEG that provides support for JP3D (JPEG2000 Part 10 # Volumetric Compression) among other things. SET( GDCM_USE_SYSTEM_OpenJPEG ON CACHE INTERNAL "" FORCE ) #set(GDCM_DIR ${VolViewPlatform_BINARY_DIR}/VolViewLibraries/Utilities/gdcm) #add_subdirectory(${VolViewLibraries_SOURCE_DIR}/Utilities/gdcm ${GDCM_DIR}) # -------------------------------------------------------------------------- # VolViewLibraries: Utilities: gettext if(WIN32) set(GETTEXT_INCLUDE_DIR "${VolViewLibraries_SOURCE_DIR}/Utilities/gettext/include" CACHE PATH "") mark_as_advanced(GETTEXT_INCLUDE_DIR) endif(WIN32) # -------------------------------------------------------------------------- # ITK set(ITK_USE_SYSTEM_GDCM ON CACHE INTERNAL "" FORCE) set(OLD_BUILD_TESTING ${BUILD_TESTING}) set(BUILD_TESTING ${ITK_BUILD_TESTING}) #set(ITK_DIR ${VolViewPlatform_BINARY_DIR}/ITK) #add_subdirectory(${ITK_SOURCE_DIR} ${ITK_DIR}) set(BUILD_TESTING OFF) set(LesionSizingKit_DIR ${VolViewPlatform_BINARY_DIR}/LesionSizingKit) add_subdirectory(${LesionSizingKit_SOURCE_DIR} ${LesionSizingKit_DIR}) set(BUILD_TESTING ${OLD_BUILD_TESTING}) # -------------------------------------------------------------------------- # KWWidgets # We need VTK's include path. Since VTK_SOURCE_DIR is defined, the sub # packages in VolViewLibraries won't bother using FIND_PACKAGE and will # rely on include paths and libs path to be set globally, thanks to # the Complete framework that has been going on for some time. # Let's not hack and include VTK just to way it is supposed to be. find_package(VTK REQUIRED) include(${VTK_USE_FILE}) #set(KWWidgets_DIR ${VolViewPlatform_BINARY_DIR}/KWWidgets) set(HTML_HELP_INCLUDE_PATH "" CACHE INTERNAL "" FORCE) set(HTML_HELP_LIBRARY "" CACHE INTERNAL "" FORCE) #add_subdirectory(${KWWidgets_SOURCE_DIR} ${KWWidgets_DIR}) # -------------------------------------------------------------------------- # VolViewLibraries set(VolViewLibraries_USE_ITK ON CACHE INTERNAL "" FORCE) set(VolViewLibraries_USE_GDCM ON CACHE INTERNAL "" FORCE) set(VolViewLibraries_DO_NOT_BUILD_GDCM ON CACHE INTERNAL "" FORCE) set(VolViewLibraries_USE_RPATH ${VTK_USE_RPATH} CACHE INTERNAL "" FORCE) set(VolViewLibraries_DIR ${VolViewPlatform_BINARY_DIR}/VolViewLibraries) add_subdirectory(${VolViewLibraries_SOURCE_DIR} ${VolViewLibraries_DIR}) # -------------------------------------------------------------------------- # VolViewApplications set(VolViewApplications_DIR ${VolViewPlatform_BINARY_DIR}/VolViewApplications) add_subdirectory(${VolViewApplications_SOURCE_DIR} ${VolViewApplications_DIR}) # -------------------------------------------------------------------------- # Testing include(CTest) mark_as_advanced(BUILD_TESTING DART_ROOT TCL_TCLSH) if(BUILD_TESTING) enable_testing() endif(BUILD_TESTING)