diff --git a/Applications/CMakeLists.txt b/Applications/CMakeLists.txt index db74dcca2d..0a913738b9 100644 --- a/Applications/CMakeLists.txt +++ b/Applications/CMakeLists.txt @@ -1,17 +1,17 @@ SET(MITK_CPACK_PACKAGE_EXECUTABLES "" CACHE INTERNAL "Collecting windows shortcuts to executables" FORCE) IF(MITK_USE_QT AND QT4_FOUND) IF(MITK_USE_BLUEBERRY) - IF(MITK_BUILD_org.mitk.gui.qt.application) + IF(MITK_BUILD_org.mitk.gui.qt.application OR MITK_BUILD_ALL_PLUGINS) ADD_SUBDIRECTORY(CoreApp) ENDIF() - IF(MITK_BUILD_org.mitk.gui.qt.extapplication) + IF(MITK_BUILD_org.mitk.gui.qt.extapplication OR MITK_BUILD_ALL_PLUGINS) ADD_SUBDIRECTORY(ExtApp) ENDIF() ENDIF() IF(MITK_BUILD_TUTORIAL) ADD_SUBDIRECTORY(Tutorial) ENDIF() ENDIF() diff --git a/Applications/CoreApp/CMakeLists.txt b/Applications/CoreApp/CMakeLists.txt index bfa1b92e12..9fb010d6c1 100644 --- a/Applications/CoreApp/CMakeLists.txt +++ b/Applications/CoreApp/CMakeLists.txt @@ -1,60 +1,61 @@ -SET(MITK_USE_BLUEBERRY 1) -FIND_PACKAGE(MITK) +FIND_PACKAGE(BlueBerry REQUIRED) INCLUDE_DIRECTORIES( ${BLUEBERRY_PLUGIN_SOURCE_DIRS} ${org.blueberry.osgi_BIN_DIR} # needed for generated berryConfig.h ${Poco_INCLUDE_DIRS} ) -LINK_DIRECTORIES(${Poco_LIBRARY_DIRS}) +LINK_DIRECTORIES(${Poco_LIBRARY_DIRS} + ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin + ) IF(MITK_SHOW_CONSOLE_WINDOW) ADD_EXECUTABLE(CoreApp MACOSX_BUNDLE CoreApp.cpp) ELSE(MITK_SHOW_CONSOLE_WINDOW) ADD_EXECUTABLE(CoreApp MACOSX_BUNDLE WIN32 CoreApp.cpp) ENDIF(MITK_SHOW_CONSOLE_WINDOW) IF (WIN32) FIND_PACKAGE(Qt4) TARGET_LINK_LIBRARIES(CoreApp ${QT_QTCORE_LIBRARY} ${QT_QTMAIN_LIBRARY}) ENDIF(WIN32) TARGET_LINK_LIBRARIES(CoreApp optimized PocoFoundation debug PocoFoundationd optimized PocoUtil debug PocoUtild optimized org_blueberry_osgi debug org_blueberry_osgi${BLUEBERRY_DEBUG_POSTFIX}) SET_TARGET_PROPERTIES(CoreApp PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${CMAKE_INSTALL_RPATH}/BlueBerry/org.blueberry.osgi/bin") SET(_plugin_deps ${BLUEBERRY_ENABLED_PLUGINS} ${MITK_CORE_ENABLED_PLUGINS} ${MITK_CORE_ENABLED_TEST_PLUGINS} ) IF(_plugin_deps) # Make sure all enabled plug-ins are up to date ADD_DEPENDENCIES(CoreApp ${_plugin_deps}) ENDIF() SET(BLUEBERRY_PLUGIN_CACHE_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/plugin_cache") CONFIGURE_FILE(CoreApp.ini ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/CoreApp.ini) IF(WIN32) SET(COREAPP_BUILD_TYPE debug) CONFIGURE_FILE(startCoreApp.bat.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/startCoreApp_${COREAPP_BUILD_TYPE}.bat @ONLY) SET(COREAPP_BUILD_TYPE release) CONFIGURE_FILE(startCoreApp.bat.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/startCoreApp_${COREAPP_BUILD_TYPE}.bat @ONLY) ENDIF(WIN32) MITK_INSTALL_TARGETS(EXECUTABLES CoreApp GLOB_PLUGINS ) IF(UNIX AND MITK_INSTALL_RPATH_RELATIVE AND NOT APPLE) INSTALL(PROGRAMS "${MITK_SOURCE_DIR}/CMake/RunInstalledApp.sh" DESTINATION "." RENAME CoreApp.sh) ENDIF() SET(MITK_CPACK_PACKAGE_EXECUTABLES ${MITK_CPACK_PACKAGE_EXECUTABLES} "CoreApp;MITK - CoreApp Application" CACHE INTERNAL "Collecting windows shortcuts to executables") diff --git a/Applications/CoreApp/CoreApp.ini b/Applications/CoreApp/CoreApp.ini index ff2a1ff9ba..1a39ed4fb4 100644 --- a/Applications/CoreApp/CoreApp.ini +++ b/Applications/CoreApp/CoreApp.ini @@ -1,2 +1,2 @@ BlueBerry.home=@BLUEBERRY_BINARY_DIR@ -BlueBerry.plugin_dirs=@BLUEBERRY_PLUGINS_OUTPUT_DIR@;@MITK_PLUGIN_OUTPUT_DIRS@ +BlueBerry.plugin_dirs=@BLUEBERRY_PLUGINS_OUTPUT_DIR@;@MITK_CORE_PLUGIN_OUTPUT_DIRS@ diff --git a/Applications/ExtApp/CMakeLists.txt b/Applications/ExtApp/CMakeLists.txt index 24d9e1bce9..001079cc61 100644 --- a/Applications/ExtApp/CMakeLists.txt +++ b/Applications/ExtApp/CMakeLists.txt @@ -1,74 +1,74 @@ -SET(MITK_USE_BLUEBERRY 1) -SET(MITK_USE_EXT 1) -FIND_PACKAGE(MITK) +FIND_PACKAGE(BlueBerry REQUIRED) # TODO: this can be removed after resolving factory issues, it's only necessary for the registration call in main() MITK_USE_MODULE(MitkExt) INCLUDE_DIRECTORIES( ${BLUEBERRY_PLUGIN_SOURCE_DIRS} ${org.blueberry.osgi_BIN_DIR} # needed for generated berryConfig.h ${Poco_INCLUDE_DIRS} ${ALL_INCLUDE_DIRECTORIES} ) -LINK_DIRECTORIES(${Poco_LIBRARY_DIRS}) +LINK_DIRECTORIES(${Poco_LIBRARY_DIRS} + ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin + ) IF(MITK_SHOW_CONSOLE_WINDOW) ADD_EXECUTABLE(ExtApp MACOSX_BUNDLE ExtApp.cpp) ELSE(MITK_SHOW_CONSOLE_WINDOW) ADD_EXECUTABLE(ExtApp MACOSX_BUNDLE WIN32 ExtApp.cpp) ENDIF(MITK_SHOW_CONSOLE_WINDOW) IF (WIN32) FIND_PACKAGE(Qt4) TARGET_LINK_LIBRARIES(ExtApp ${QT_QTCORE_LIBRARY} ${QT_QTMAIN_LIBRARY}) ENDIF(WIN32) TARGET_LINK_LIBRARIES(ExtApp optimized PocoFoundation debug PocoFoundationd optimized PocoUtil debug PocoUtild optimized org_blueberry_osgi debug org_blueberry_osgi${BLUEBERRY_DEBUG_POSTFIX} ${ALL_LIBRARIES}) SET_TARGET_PROPERTIES(ExtApp PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${CMAKE_INSTALL_RPATH}/BlueBerry/org.blueberry.osgi/bin") - + SET(EXTAPP_REQUIRED_BUNDLES org.mitk.gui.qt.datamanager org.mitk.gui.qt.imagenavigator ) FOREACH(EXTAPP_REQUIRED_BUNDLE ${EXTAPP_REQUIRED_BUNDLES}) SET(MITK_BUILD_${EXTAPP_REQUIRED_BUNDLE} "ON" CACHE BOOL "Build ${EXTAPP_REQUIRED_BUNDLE} Plugin" FORCE) STRING(REPLACE "." "_" EXTAPP_REQUIRED_BUNDLE_PROJECT ${EXTAPP_REQUIRED_BUNDLE}) SET(MITK_MODULES_ENABLED_PLUGINS ${MITK_MODULES_ENABLED_PLUGINS} ${EXTAPP_REQUIRED_BUNDLE_PROJECT}) ENDFOREACH() #MESSAGE(STATUS ${MITK_MODULES_ENABLED_PLUGINS}) - + SET(_plugin_deps ${BLUEBERRY_ENABLED_PLUGINS} ${MITK_CORE_ENABLED_PLUGINS} ${MITK_MODULES_ENABLED_PLUGINS}) IF(_plugin_deps) # Make sure all enabled plug-ins are up to date ADD_DEPENDENCIES(ExtApp ${_plugin_deps}) # TARGET_LINK_LIBRARIES(ExtApp ${_plugin_deps}) ENDIF() SET(BLUEBERRY_PLUGIN_CACHE_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/plugin_cache") CONFIGURE_FILE(ExtApp.ini ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/ExtApp.ini) IF(WIN32) SET(EXTAPP_BUILD_TYPE debug) CONFIGURE_FILE(startExtApp.bat.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/startExtApp_${EXTAPP_BUILD_TYPE}.bat @ONLY) SET(EXTAPP_BUILD_TYPE release) CONFIGURE_FILE(startExtApp.bat.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/startExtApp_${EXTAPP_BUILD_TYPE}.bat @ONLY) ENDIF(WIN32) MITK_INSTALL_TARGETS(EXECUTABLES ExtApp GLOB_PLUGINS ) IF(UNIX AND MITK_INSTALL_RPATH_RELATIVE AND NOT APPLE) INSTALL(PROGRAMS "${MITK_SOURCE_DIR}/CMake/RunInstalledApp.sh" DESTINATION "." RENAME ExtApp.sh) ENDIF() SET(MITK_CPACK_PACKAGE_EXECUTABLES ${MITK_CPACK_PACKAGE_EXECUTABLES} "ExtApp;MITK - ExtApp Application" CACHE INTERNAL "Collecting windows shortcuts to executables") diff --git a/Applications/ExtApp/ExtApp.ini b/Applications/ExtApp/ExtApp.ini index ff2a1ff9ba..4294aae6aa 100644 --- a/Applications/ExtApp/ExtApp.ini +++ b/Applications/ExtApp/ExtApp.ini @@ -1,2 +1,2 @@ BlueBerry.home=@BLUEBERRY_BINARY_DIR@ -BlueBerry.plugin_dirs=@BLUEBERRY_PLUGINS_OUTPUT_DIR@;@MITK_PLUGIN_OUTPUT_DIRS@ +BlueBerry.plugin_dirs=@BLUEBERRY_PLUGINS_OUTPUT_DIR@;@MITK_CORE_PLUGIN_OUTPUT_DIRS@;@MITK_MODULES_PLUGIN_OUTPUT_DIRS@ diff --git a/BlueBerry/BlueBerryConfig.cmake.in b/BlueBerry/BlueBerryConfig.cmake.in index bb3b87dc20..9a86a1c27f 100644 --- a/BlueBerry/BlueBerryConfig.cmake.in +++ b/BlueBerry/BlueBerryConfig.cmake.in @@ -1,25 +1,32 @@ SET(BLUEBERRY_PLUGINS_SOURCE_DIR "@BLUEBERRY_PLUGINS_SOURCE_DIR@") SET(BLUEBERRY_PLUGINS_BINARY_DIR "@BLUEBERRY_PLUGINS_BINARY_DIR@") SET(BLUEBERRY_PLUGIN_SOURCE_DIRS "@BLUEBERRY_PLUGINS_SOURCE_DIR@") SET(BLUEBERRY_PLUGINS_OUTPUT_DIR "@BLUEBERRY_PLUGINS_OUTPUT_DIR@") SET(BLUEBERRY_SOURCE_DIR "@BLUEBERRY_SOURCE_DIR@") +SET(BlueBerry_SOURCE_DIR "@BLUEBERRY_SOURCE_DIR@") SET(BLUEBERRY_BINARY_DIR "@BLUEBERRY_BINARY_DIR@") SET(BLUEBERRY_DEBUG_POSTFIX @BLUEBERRY_DEBUG_POSTFIX@) +SET(BLUEBERRY_USE_QT_HELP @BLUEBERRY_USE_QT_HELP@) +SET(QT_HELPGENERATOR_EXECUTABLE "@QT_HELPGENERATOR_EXECUTABLE@") +SET(QT_COLLECTIONGENERATOR_EXECUTABLE "@QT_COLLECTIONGENERATOR_EXECUTABLE@") +SET(QT_ASSISTANT_EXECUTABLE "@QT_ASSISTANT_EXECUTABLE@") + INCLUDE("@BLUEBERRY_BINARY_DIR@/BlueBerryBundleList.cmake") SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "@BLUEBERRY_SOURCE_DIR@/CMake") FIND_PACKAGE(Poco REQUIRED) INCLUDE(MacroParseArguments) INCLUDE(MacroConvertSchema) INCLUDE(MacroOrganizeSources) INCLUDE(berryPluginHelpers) INCLUDE(MacroCollectPlugins) INCLUDE(MacroParseManifest) INCLUDE(MacroCreatePlugin) -INCLUDE(MacroInstallPlugin) \ No newline at end of file +INCLUDE(MacroCreateQtHelp) +INCLUDE(MacroInstallPlugin) diff --git a/BlueBerry/Bundles/org.blueberry.osgi/CMakeLists.txt b/BlueBerry/Bundles/org.blueberry.osgi/CMakeLists.txt index 4dfb654812..528543ed1f 100644 --- a/BlueBerry/Bundles/org.blueberry.osgi/CMakeLists.txt +++ b/BlueBerry/Bundles/org.blueberry.osgi/CMakeLists.txt @@ -1,27 +1,25 @@ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/berryConfig.h.in" "${CMAKE_CURRENT_BINARY_DIR}/berryConfig.h" @ONLY) MACRO_CREATE_PLUGIN() TARGET_LINK_LIBRARIES(${PLUGIN_TARGET} optimized PocoUtil debug PocoUtild optimized PocoXML debug PocoXMLd) ADD_EXECUTABLE(${OSGI_APP} MACOSX_BUNDLE "src/application/berryMain.cpp") # ADD_EXECUTABLE(${OSGI_APP} "src/application/berryMain.cpp") TARGET_LINK_LIBRARIES(${OSGI_APP} ${PLUGIN_TARGET} mbilog) IF (BLUEBERRY_ENABLED_TEST_PLUGINS) ADD_DEPENDENCIES(${OSGI_APP} ${BLUEBERRY_ENABLED_TEST_PLUGINS}) ENDIF() SET(BLUEBERRY_PLUGIN_CACHE_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/plugin_cache") CONFIGURE_FILE(src/application/solstice.ini ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${OSGI_APP}.ini) -INCLUDE(${MITK_SOURCE_DIR}/CMake/CoreHelpers.cmake) - SET_TARGET_PROPERTIES(${OSGI_APP} PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_RPATH};${CMAKE_INSTALL_PREFIX}/bin/BlueBerry/org.blueberry.osgi/bin") # MITK_INSTALL_TARGETS(EXECUTABLES ${OSGI_APP} GLOB_PLUGINS ) # MITK_INSTALL_TARGETS(EXECUTABLES ${OSGI_APP} LIBRARY_DIRS ${CMAKE_INSTALL_PREFIX}/bin) # MITK_INSTALL_TARGETS(EXECUTABLES ${OSGI_APP} LIBRARY_DIRS ${CMAKE_INSTALL_PREFIX}/bin PLUGINS ${CMAKE_INSTALL_PREFIX}/bin/BlueBerry/org.blueberry.osgi/bin/liborg_blueberry_osgid.dylib) diff --git a/BlueBerry/CMake/MacroCollectPlugins.cmake b/BlueBerry/CMake/MacroCollectPlugins.cmake index 82f2153cdd..b77a39db8a 100755 --- a/BlueBerry/CMake/MacroCollectPlugins.cmake +++ b/BlueBerry/CMake/MacroCollectPlugins.cmake @@ -1,191 +1,191 @@ # Recursively searches for plugins (i.e. directories containing a # META-INF/MANIFEST.MF file). The macro adds the found directories # to cmake and writes information about the configured plug-ins in a file # # MACRO_COLLECT_PLUGINS(OUTPUT_DIR plugin_output_dir # [CACHE_PLUGIN_SOURCE_DIRS cache_src_dirs] # [CACHE_PLUGIN_OUTPUT_DIRS cache_out_dirs] # [CACHE_PLUGIN_TARGETS cache_plugin_targets] # [BUNDLE_LIST_PATH bundle_list_path] # [CMAKE_CACHE_PREFIX cache_prefix] # [ENABLE_PLUGIN_MACROS macro...] # [PLUGIN_DEFAULT_ON id...] # [PLUGIN_EXCLUDES id...] # [DEFAULT_BUILD_ON] # [FORCE_BUILD_ALL] # ) # # plugin_output_dir is the common binary output directory for all # plugins found. It is available as PLUGINS_OUTPUT_BASE_DIR # and used by the MACRO_CREATE_PLUGIN macro. # # CACHE_PLUGIN_SOURCE_DIRS and CACHE_PLUGIN_OUTPUT_DIRS # names of CMake cache variables where the base plugin source # and output directories will be appended. This is useful if this # macro is invoked multiple times in different places and you want # to record the directories. The variables # can than later be used to configure your applications .ini file. # Be sure to clear the cache variables before the first invokation # of this macro. # # CACHE_PLUGIN_TARGETS # is used as the name of a cache variable which # stores a list of enabled plug-ins (their CMake target names) # # BUNDLE_LIST_PATH # The full path for the generated cmake file containing the _BUILD_ # variables. If not set, "${PROJECT_BINARY_DIR}/${PROJECT_NAME}BundleList.cmake" # is used. # # CMAKE_CACHE_PREFIX # is prepended to the CMake cache variables # # ENABLE_PLUGIN_MACROS # macro... is a list containing macro names which will be evaluated # to determine if a specific plug-in should be build. The parameter list of # the macro is () and the macro must set the variable # ENABLE_PLUGIN to true or false. For Qt4, a default macro is provided. # # PLUGIN_DEFAULT_ON # id... is a list of bundle symbolic names for which the # CMake build option should default to ON # # PLUGIN_EXCLUDES # id... is a list of bundle symbolic names which will be excluded from # the build process # # DEFAULT_BUILD_ON if set, the generated CMake option for building plug-ins # defaults to ON. Otherwise, it is set to OFF. # # FORCE_BUILD_ALL if set, the BUILD_pluginname variables are ignored and all # plugins under this directory are build # # # The following variables can be used after the macro is invoked: # # PLUGINS_SOURCE_BASE_DIR the directory where this macro has been invoked # PLUGINS_OUTPUT_BASE_DIR the output directory for the bundles # ENABLED_PLUGINS_RELATIVE_DIRS a list of bundle directories relative to # PLUGINS_SOURCE_BASE_DIR which are build # ENABLED_PLUGINS_ABSOLUTE_DIRS the same as ENABLED_PLUGINS_RELATIVE_DIRS # but with absolute paths # MACRO(MACRO_COLLECT_PLUGINS) MACRO_PARSE_ARGUMENTS(_COLLECT "OUTPUT_DIR;CACHE_PLUGIN_SOURCE_DIRS;CACHE_PLUGIN_OUTPUT_DIRS;CACHE_PLUGIN_TARGETS;BUNDLE_LIST_PATH;PLUGIN_EXCLUDES;PLUGIN_DEFAULT_ON;CMAKE_CACHE_PREFIX;ENABLE_PLUGIN_MACROS" "DEFAULT_BUILD_ON;FORCE_BUILD_ALL" ${ARGN}) IF(NOT _COLLECT_ADD_DIR) SET(_COLLECT_ADD_DIR 1) ENDIF(NOT _COLLECT_ADD_DIR) IF(NOT _COLLECT_BUNDLE_LIST_PATH) SET(_COLLECT_BUNDLE_LIST_PATH "${PROJECT_BINARY_DIR}/${PROJECT_NAME}BundleList.cmake") ENDIF(NOT _COLLECT_BUNDLE_LIST_PATH) IF(_COLLECT_CMAKE_CACHE_PREFIX) SET(_COLLECT_CMAKE_CACHE_PREFIX "${_COLLECT_CMAKE_CACHE_PREFIX}_") ENDIF(_COLLECT_CMAKE_CACHE_PREFIX) LIST(APPEND _COLLECT_ENABLE_PLUGIN_MACROS "_MACRO_ENABLE_QT4_PLUGINS") SET(PLUGINS_OUTPUT_BASE_DIR ${_COLLECT_OUTPUT_DIR}) # writes the file ${CMAKE_CURRENT_BINARY_DIR}/berryEnablePlugin.cmake _MACRO_CREATE_ENABLE_PLUGIN_CODE(${_COLLECT_ENABLE_PLUGIN_MACROS}) SET(PLUGINS_SOURCE_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) IF(_COLLECT_CACHE_PLUGIN_SOURCE_DIRS) SET(${_COLLECT_CACHE_PLUGIN_SOURCE_DIRS} ${${_COLLECT_CACHE_PLUGIN_SOURCE_DIRS}} "\"${PLUGINS_SOURCE_BASE_DIR}\"" CACHE INTERNAL "List of base plugin source directories" FORCE) ENDIF(_COLLECT_CACHE_PLUGIN_SOURCE_DIRS) IF(_COLLECT_CACHE_PLUGIN_OUTPUT_DIRS) - SET(${_COLLECT_CACHE_PLUGIN_OUTPUT_DIRS} ${${_COLLECT_CACHE_PLUGIN_OUTPUT_DIRS}} "\"${_COLLECT_OUTPUT_DIR}\"" + SET(${_COLLECT_CACHE_PLUGIN_OUTPUT_DIRS} ${${_COLLECT_CACHE_PLUGIN_OUTPUT_DIRS}} "${_COLLECT_OUTPUT_DIR}" CACHE INTERNAL "List of base plugin output directories" FORCE) ENDIF(_COLLECT_CACHE_PLUGIN_OUTPUT_DIRS) SET(ENABLED_PLUGINS_RELATIVE_DIRS ) SET(ENABLED_PLUGINS_ABSOLUTE_DIRS ) SET(_plugins_target_list ) FILE(GLOB all_dirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *) FOREACH(dir_relative_entry ${all_dirs}) SET(dir_entry "${CMAKE_CURRENT_SOURCE_DIR}/${dir_relative_entry}") IF(EXISTS "${dir_entry}/META-INF/MANIFEST.MF") MACRO_PARSE_MANIFEST("${dir_entry}/META-INF/MANIFEST.MF" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${dir_relative_entry}") IF(BUNDLE-SYMBOLICNAME) LIST(FIND _COLLECT_PLUGIN_EXCLUDES ${BUNDLE-SYMBOLICNAME} _excluded) IF(_excluded EQUAL -1) # include the generated file with the custom macro code for # checking if a bundle should be enabled INCLUDE("${_enable_plugins_file}") IF(_enable_bundle) # The bundle is considered valid for the current configuration # i.e. a build option will be displayed and internal variables are set SET(${BUNDLE-SYMBOLICNAME}_SRC_DIR "${dir_entry}") SET(${BUNDLE-SYMBOLICNAME}_BIN_DIR "${CMAKE_CURRENT_BINARY_DIR}/${dir_relative_entry}") SET(${BUNDLE-SYMBOLICNAME}_OUT_DIR "${_COLLECT_OUTPUT_DIR}/${BUNDLE-SYMBOLICNAME}") # write the variable in .cmake file, so external projects have access to them SET(BLUEBERRY_BUNDLE_VARIABLES "${BLUEBERRY_BUNDLE_VARIABLES} SET(${BUNDLE-SYMBOLICNAME}_SRC_DIR \"${${BUNDLE-SYMBOLICNAME}_SRC_DIR}\") SET(${BUNDLE-SYMBOLICNAME}_BIN_DIR \"${${BUNDLE-SYMBOLICNAME}_BIN_DIR}\") SET(${BUNDLE-SYMBOLICNAME}_OUT_DIR \"${${BUNDLE-SYMBOLICNAME}_OUT_DIR}\")") # compute the default for the build option (ON/OFF) SET(_default_bundle_option ${_COLLECT_DEFAULT_BUILD_ON}) LIST(FIND _COLLECT_PLUGIN_DEFAULT_ON ${BUNDLE-SYMBOLICNAME} _PLUGIN_DEFAULT_ON_found) IF(_PLUGIN_DEFAULT_ON_found GREATER -1) SET(_default_bundle_option 1) ENDIF() OPTION("${_COLLECT_CMAKE_CACHE_PREFIX}BUILD_${BUNDLE-SYMBOLICNAME}" "Build ${BUNDLE-SYMBOLICNAME} Plugin" ${_default_bundle_option}) # test if the bundle should be build IF(${_COLLECT_CMAKE_CACHE_PREFIX}BUILD_${BUNDLE-SYMBOLICNAME} OR _COLLECT_FORCE_BUILD_ALL) LIST(APPEND ENABLED_PLUGINS_RELATIVE_DIRS "${dir_relative_entry}") LIST(APPEND ENABLED_PLUGINS_ABSOLUTE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/${dir_relative_entry}") STRING(REPLACE . _ _plugin_target ${BUNDLE-SYMBOLICNAME}) # record that this bundle is being build. SET(_BUILD_${BUNDLE-SYMBOLICNAME} 1) SET(BLUEBERRY_BUNDLE_VARIABLES "${BLUEBERRY_BUNDLE_VARIABLES} SET(_BUILD_${BUNDLE-SYMBOLICNAME} 1)") ELSE() # the build option for the bundle is off, hence we delete the MANIFEST.MF # file in the output directory to prevent the bundle loader from finding # the disabled bundle. FILE(REMOVE "${${BUNDLE-SYMBOLICNAME}_OUT_DIR}/META-INF/MANIFEST.MF") ENDIF() ENDIF() ENDIF() ENDIF() ENDIF() ENDFOREACH() # add Poco directories for all plugins INCLUDE_DIRECTORIES(${Poco_INCLUDE_DIRS}) LINK_DIRECTORIES(${Poco_LIBRARY_DIR}) SET(PLUGIN_TARGETS "" CACHE INTERNAL "Temporary list of plug-in targets") FOREACH(_subdir ${ENABLED_PLUGINS_RELATIVE_DIRS}) INCLUDE("${CMAKE_CURRENT_BINARY_DIR}/${_subdir}/Manifest.cmake") #MACRO_PARSE_MANIFEST("${CMAKE_CURRENT_SOURCE_DIR}/${_subdir}/META-INF/MANIFEST.MF") ADD_SUBDIRECTORY(${_subdir}) ENDFOREACH(_subdir ${ENABLED_PLUGINS_RELATIVE_DIRS}) IF(_COLLECT_CACHE_PLUGIN_TARGETS) SET(${_COLLECT_CACHE_PLUGIN_TARGETS} ${PLUGIN_TARGETS} CACHE INTERNAL "A list of enabled plug-ins") ENDIF(_COLLECT_CACHE_PLUGIN_TARGETS) IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/BundleList.cmake.in) CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/BundleList.cmake.in" "${_COLLECT_BUNDLE_LIST_PATH}" @ONLY) ENDIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/BundleList.cmake.in) ENDMACRO(MACRO_COLLECT_PLUGINS) diff --git a/BlueBerry/CMakeLists.txt b/BlueBerry/CMakeLists.txt index c250eddd73..86818d2bc2 100644 --- a/BlueBerry/CMakeLists.txt +++ b/BlueBerry/CMakeLists.txt @@ -1,187 +1,187 @@ PROJECT(BlueBerry) CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMake/") INCLUDE(MacroParseArguments) INCLUDE(MacroConvertSchema) INCLUDE(MacroOrganizeSources) INCLUDE(berryPluginHelpers) INCLUDE(MacroCollectPlugins) INCLUDE(MacroParseManifest) INCLUDE(MacroCreatePlugin) INCLUDE(MacroCreateQtHelp) INCLUDE(MacroInstallPlugin) OPTION(BLUEBERRY_INSTALL_RPATH_RELATIVE "Use relative rpath entries when installing" OFF) MARK_AS_ADVANCED(BLUEBERRY_INSTALL_RPATH_RELATIVE) IF(BLUEBERRY_INSTALL_RPATH_RELATIVE) SET(CMAKE_INSTALL_RPATH ".") ELSE() SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/bin") ENDIF() IF(MSVC) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4250 /wd4275 /wd4251 /wd4503") ENDIF() IF (NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) ENDIF () FIND_PACKAGE(mbilog REQUIRED) INCLUDE_DIRECTORIES(${mbilog_INCLUDE_DIRS}) OPTION(BLUEBERRY_USE_QT "Use the Qt GUI toolkit" OFF) IF(NOT DESIRED_QT_VERSION) SET(DESIRED_QT_VERSION 4 CACHE STRING "Desired Qt version" FORCE) MARK_AS_ADVANCED(DESIRED_QT_VERSION) ENDIF() IF(BLUEBERRY_USE_QT AND NOT DESIRED_QT_VERSION EQUAL 4) MESSAGE("Attention: Qt4 is required to build the BlueBerry Qt plug-ins.") ENDIF() IF(BLUEBERRY_USE_QT AND DESIRED_QT_VERSION EQUAL 4) SET(QT_MT_REQUIRED 1) SET(BUILD_QT_PLUGINS 1) FIND_PACKAGE(Qt REQUIRED) IF(QT_QMAKE_CHANGED) SET(QT_HELPGENERATOR_EXECUTABLE NOTFOUND) SET(QT_COLLECTIONGENERATOR_EXECUTABLE NOTFOUND) SET(QT_ASSISTANT_EXECUTABLE NOTFOUND) ENDIF() FIND_PROGRAM(QT_HELPGENERATOR_EXECUTABLE NAMES qhelpgenerator qhelpgenerator-qt4 qhelpgenerator4 PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH ) FIND_PROGRAM(QT_COLLECTIONGENERATOR_EXECUTABLE NAMES qcollectiongenerator qcollectiongenerator-qt4 qcollectiongenerator4 PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH ) FIND_PROGRAM(QT_ASSISTANT_EXECUTABLE NAMES assistant-qt4 assistant4 assistant PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH ) OPTION(BLUEBERRY_USE_QT_HELP "Enable support for integrating bundle documentation into Qt Help" ON) MARK_AS_ADVANCED(BLUEBERRY_USE_QT_HELP QT_HELPGENERATOR_EXECUTABLE QT_COLLECTIONGENERATOR_EXECUTABLE QT_ASSISTANT_EXECUTABLE) SET(_doxygen_too_old 1) IF(BLUEBERRY_USE_QT_HELP) FIND_PACKAGE(Doxygen) IF(DOXYGEN_FOUND) EXECUTE_PROCESS(COMMAND ${DOXYGEN_EXECUTABLE} --version OUTPUT_VARIABLE _doxygen_version) IF(${_doxygen_version} VERSION_GREATER 1.6.0 OR ${_doxygen_version} VERSION_EQUAL 1.6.0) SET(_doxygen_too_old 0) ENDIF() ENDIF() ELSE(BLUEBERRY_USE_QT_HELP) - CONFIGURE_FILE( ../Documentation/pregenerated/MITKBlankPage.qch - ${MITK_BINARY_DIR}/bin/ExtBundles/org.mitk.gui.qt.extapplication/resources/MITKBlankPage.qch - COPYONLY ) - - CONFIGURE_FILE( ../Documentation/pregenerated/MitkExtQtHelpCollection.qhc - ${MITK_BINARY_DIR}/bin/ExtBundles/org.mitk.gui.qt.extapplication/resources/MitkExtQtHelpCollection.qhc - COPYONLY ) + CONFIGURE_FILE(../Documentation/pregenerated/MITKBlankPage.qch + ${MITK_BINARY_DIR}/bin/ExtBundles/org.mitk.gui.qt.extapplication/resources/MITKBlankPage.qch + COPYONLY) + + CONFIGURE_FILE(../Documentation/pregenerated/MitkExtQtHelpCollection.qhc + ${MITK_BINARY_DIR}/bin/ExtBundles/org.mitk.gui.qt.extapplication/resources/MitkExtQtHelpCollection.qhc + COPYONLY) ENDIF(BLUEBERRY_USE_QT_HELP) IF (BLUEBERRY_USE_QT_HELP AND _doxygen_too_old) MESSAGE("Doxygen was not found or is too old. Version 1.6.0 or later is needed if BLUEBERRY_USE_QT_HELP is ON") SET(BLUEBERRY_USE_QT_HELP OFF CACHE BOOL "Enable support for integrating bundle documentation into Qt Help" FORCE) ENDIF() IF(BLUEBERRY_USE_QT_HELP AND NOT QT_HELPGENERATOR_EXECUTABLE) MESSAGE("You have enabled Qt Help support, but QT_HELPGENERATOR_EXECUTABLE is empty") SET(BLUEBERRY_USE_QT_HELP OFF CACHE BOOL "Enable support for integrating bundle documentation into Qt Help" FORCE) ENDIF() INCLUDE(${QT_USE_FILE}) ENDIF() OPTION(BLUEBERRY_BUILD_ALL_PLUGINS "Build all BlueBerry plugins (overriding selection)" OFF) MARK_AS_ADVANCED(BLUEBERRY_BUILD_ALL_PLUGINS) IF(BLUEBERRY_BUILD_ALL_PLUGINS) SET(BLUEBERRY_BUILD_ALL_PLUGINS_OPTION "FORCE_BUILD_ALL") ENDIF() OPTION(BLUEBERRY_STATIC "Build all plugins as static libraries" OFF) MARK_AS_ADVANCED(BLUEBERRY_STATIC) OPTION(BLUEBERRY_DEBUG_SMARTPOINTER "Enable code for debugging smart pointers" OFF) MARK_AS_ADVANCED(BLUEBERRY_DEBUG_SMARTPOINTER) FIND_PACKAGE(Poco REQUIRED) FIND_PACKAGE(Ant) FIND_PACKAGE(Eclipse) SET(BLUEBERRY_SOURCE_DIR ${BlueBerry_SOURCE_DIR}) SET(BLUEBERRY_BINARY_DIR ${BlueBerry_BINARY_DIR}) SET(BLUEBERRY_PLUGINS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Bundles) SET(BLUEBERRY_PLUGINS_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/Bundles) SET(OSGI_APP solstice) # Force should be removed after everybody has configured their old binary tree SET(BLUEBERRY_PLUGINS_OUTPUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/BlueBerry CACHE PATH "Directory where to build the BlueBerry Bundles" FORCE) MARK_AS_ADVANCED(BLUEBERRY_PLUGINS_OUTPUT_DIR) SET(BLUEBERRY_TEST_PLUGINS_OUTPUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/BlueBerryTests CACHE PATH "Directory where to build the BlueBerry test bundles") MARK_AS_ADVANCED(BLUEBERRY_TEST_PLUGINS_OUTPUT_DIR) # Clear the cache variables SET(BLUEBERRY_PLUGIN_SOURCE_DIRS "" CACHE INTERNAL "List of base plugin source directories" FORCE) SET(BLUEBERRY_PLUGIN_BINARY_DIRS "" CACHE INTERNAL "List of base plugin binary directories" FORCE) IF (Eclipse_DIR) SET(BLUEBERRY_DOC_TOOLS_DIR "${Eclipse_DIR}" CACHE PATH "Directory containing additional tools needed for generating the documentation") ELSE () SET(BLUEBERRY_DOC_TOOLS_DIR "" CACHE PATH "Directory containing additional tools needed for generating the documentation") ENDIF () SET(BLUEBERRY_DEBUG_POSTFIX d) CONFIGURE_FILE(BlueBerryConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/BlueBerryConfig.cmake @ONLY) ADD_SUBDIRECTORY(Bundles) ADD_SUBDIRECTORY(Documentation) # Testing options OPTION(BLUEBERRY_BUILD_TESTING "Build the BlueBerry tests." OFF) IF(WIN32) SET(_gui_testing_default "ON") ELSE() SET(_gui_testing_default "OFF") ENDIF() OPTION(BLUEBERRY_ENABLE_GUI_TESTING "Enable the BlueBerry GUI tests" ${_gui_testing_default}) MARK_AS_ADVANCED(BLUEBERRY_ENABLE_GUI_TESTING) IF(BLUEBERRY_BUILD_TESTING) ENABLE_TESTING() ADD_SUBDIRECTORY(Testing) ENDIF() diff --git a/CMake/CTKConfig.cmake.in b/CMake/CTKConfig.cmake.in deleted file mode 100644 index 616f71e301..0000000000 --- a/CMake/CTKConfig.cmake.in +++ /dev/null @@ -1,8 +0,0 @@ -SET(CTK_IS_ENABLED "1") -IF(CTK_IS_ENABLED) - SET(CTK_INCLUDE_DIRS @CTK_INCLUDE_DIRS@) - SET(CTK_PROVIDES @CTK_LIBRARIES@) - SET(CTK_DEPENDS "") - SET(CTK_PACKAGE_DEPENDS "") - SET(CTK_LIBRARY_DIRS "@CTK_LIBRARY_DIRS@") -ENDIF() diff --git a/CMake/CTestCustom.cmake.in b/CMake/CTestCustom.cmake.in new file mode 100644 index 0000000000..8a7311dd07 --- /dev/null +++ b/CMake/CTestCustom.cmake.in @@ -0,0 +1,86 @@ +SET(CTEST_CUSTOM_COVERAGE_EXCLUDE + ${CTEST_CUSTOM_COVERAGE_EXCLUDE} + + # Exclude try_compile sources from coverage results: + "/CMakeFiles/CMakeTmp/" + + # Exclude files generated by the moc pre-compiler + ".*/moc_.*" + + # Exclude files generated by the uic pre-compiler + ".*/ui_.*" + + # Exclude files from the Testing directories + ".*/Testing/.*" + + ".*/CMakeExternals/.*" + + ) + +# The following tests should not be run under valgrind +SET(CTEST_CUSTOM_MEMCHECK_IGNORE + + ) + +SET(CTEST_CUSTOM_ERROR_MATCH + ${CTEST_CUSTOM_ERROR_MATCH} + "CMake Error[ :]" + ) + +SET(CTEST_CUSTOM_WARNING_MATCH + ${CTEST_CUSTOM_WARNING_MATCH} + "CMake Warning[ :]" + ) + +SET(CTEST_CUSTOM_WARNING_EXCEPTION + ${CTEST_CUSTOM_WARNING_EXCEPTION} + + # MITK Utilities + "Utilities/Poco/" + "Utilities/qwt/" + "Utilities/qxt" + "Utilities/tinyxml/" + + # kwstyle suppressions + "[Kk][Ww][Ss]tyle.*kws.*cxx" + "[Kk][Ww][Ss]tyle.*kws.*h" + "[Kk][Ww][Ss]tyle.*metaCommand.*cxx" + + # vtk suppressions + "vtkfreetype" + "Utilities.vtktiff" + "VTK.*IO.vtkMySQLQuery.cxx" + "VTK.*Utilities.vtkexodus2" + "VTK.*Utilities.vtklibproj" + "VTK.*Utilities.vtksqlite" + "VTK.*Utilities.vtkmetaio" + "VTK.*warn_unused_result" + "VTK.*Filtering.*cxx" + "VTK.*IO.*cxx" + "VTK.*Infovis.*cxx" + + # qt suppressions from vtk... + # Some VTK dashboards include building bits of Qt which produce lots of + # the following warnings when built with the MS compilers. Qt guys should + # fix their code. Until they do, keep the Qt chatter off the VTK dashboard + # results: + "include.[Qq]t([Cc]ore|[Gg]ui).*warning C4127: conditional expression is constant" + "[Qq]t.*h.*warning.*declaration of .* shadows a member of .this" + "[Qq]t.*h.*warning.*(copy constructor|assignment operator) could not be generated" + + # Suppress warning caused when QT 'foreach' loops are combined + ".*warning: declaration of '_container_' shadows a previous local" + + # PythonQt suppressions + "PythonQt.*src.*PythonQt.*(cpp|h)" + "include.PythonQt.PythonQt.*h" + + # Suppressing warnings about duplicate libraries in Darwin + # At some point this may be addressed by CMake feature request: + # http://public.kitware.com/Bug/view.php?id=10179 + "ld: warning: duplicate dylib.*" + + # Visual studio spurious warnings... + "The following environment variables were not found" + + ) diff --git a/CMake/CoreHelpers.cmake b/CMake/CoreHelpers.cmake deleted file mode 100644 index 8efae623bc..0000000000 --- a/CMake/CoreHelpers.cmake +++ /dev/null @@ -1,859 +0,0 @@ -MACRO(ORGANIZE_SOURCES) - - # this macro gets a filelist as input and looks - # for corresponding h-files to add them to the project. - - # additionally files are grouped in source-groups. - - # No parameters explicitly declared here, because - # we want to allow for variable argument lists, which - # are later access by the keyword FOREACH(MYFILE ${ARGV}) - - # output: after calling the macro, files that were found - # correspondigly to the given files are stored in the - # variable: - # ${CORRESPONDING_H_FILES} - # ${CORRESPONDING_TXX_FILES} - # ${CORRESPONDING_UI_H_FILES} - - # Globbed can be found in the variables - # ${GLOBBED_TXX_FILES} (CURRENTLY COMMENTED OUT) - # ${GLOBBED_DOX_FILES} - - MACRO_PARSE_ARGUMENTS(_ORG "HEADER;SOURCE;TXX;DOC;MOC;GEN_QRC;GEN_UI;UI;QRC" "" ${ARGN}) - - SET(CORRESPONDING__H_FILES "" ) - SET(GLOBBED__H_FILES "" ) - - IF(_ORG_HEADER) - FOREACH(_file ${_ORG_SOURCE}) - STRING(REGEX REPLACE "(.*)\\.(txx|cpp|c|cxx)$" "\\1.h" H_FILE ${_file}) - IF(EXISTS ${H_FILE}) - LIST(APPEND CORRESPONDING__H_FILES "${H_FILE}") - ENDIF() - ENDFOREACH() - ELSE() - FILE(GLOB_RECURSE GLOBBED__H_FILES *.h) - ENDIF() - - IF(_ORG_GEN_QRC OR _ORG_GEN_UI OR _ORG_MOC) - SOURCE_GROUP("Generated\\Qt QRC Source Files" FILES ${_ORG_GEN_QRC}) - SOURCE_GROUP("Generated\\Qt UI Header Files" FILES ${_ORG_GEN_UI}) - SOURCE_GROUP("Generated\\Qt MOC Source Files" FILES ${_ORG_MOC}) - ENDIF() - - #_MACRO_APPEND_TO_LIST(_ORG_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/") - SOURCE_GROUP("== Source Files ==" FILES ${_ORG_SOURCE}) - - #_MACRO_APPEND_TO_LIST(_ORG_TXX "${CMAKE_CURRENT_SOURCE_DIR}/") - SOURCE_GROUP("== Template Files ==" FILES ${_ORG_TXX}) - - #_MACRO_APPEND_TO_LIST(_ORG_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/") - SOURCE_GROUP("== Header Files ==" FILES ${_ORG_HEADER} ${_ORG_HEADER} ${CORRESPONDING__H_FILES} ${GLOBBED__H_FILES}) - - - #_MACRO_APPEND_TO_LIST(_ORG_UI "${CMAKE_CURRENT_SOURCE_DIR}/") - SOURCE_GROUP("QT UI Files" FILES ${_ORG_UI}) - - #_MACRO_APPEND_TO_LIST(_ORG_DOC "${CMAKE_CURRENT_SOURCE_DIR}/") - SOURCE_GROUP("Doxygen Files" FILES ${_ORG_DOC}) - - #_MACRO_APPEND_TO_LIST(_ORG_QRC "${CMAKE_CURRENT_SOURCE_DIR}/") - SOURCE_GROUP("Qt Resource Files" FILES ${_ORG_QRC}) - -ENDMACRO(ORGANIZE_SOURCES) - -MACRO(APPLY_VTK_FLAGS) - IF(NOT MITK_VTK_FLAGS_APPLIED) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VTK_REQUIRED_C_FLAGS}") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${VTK_REQUIRED_CXX_FLAGS}") - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${VTK_REQUIRED_EXE_LINKER_FLAGS}") - SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${VTK_REQUIRED_SHARED_LINKER_FLAGS}") - SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${VTK_REQUIRED_MODULE_LINKER_FLAGS}") - SET(MITK_VTK_FLAGS_APPLIED 1) - ENDIF(NOT MITK_VTK_FLAGS_APPLIED) -ENDMACRO(APPLY_VTK_FLAGS) - -# increase heap limit for MSVC70. Assumes /Zm1000 is set by ITK -MACRO(INCREASE_MSVC_HEAP_LIMIT) -IF(MSVC70) - STRING(REPLACE /Zm1000 /Zm1200 CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) -ENDIF(MSVC70) -ENDMACRO(INCREASE_MSVC_HEAP_LIMIT) - -# suppress some warnings in VC8 about using unsafe/deprecated c functions -MACRO(SUPPRESS_VC8_DEPRECATED_WARNINGS) -IF(MSVC80) - ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS) -ENDIF(MSVC80) -ENDMACRO(SUPPRESS_VC8_DEPRECATED_WARNINGS) - -MACRO(SUPPRESS_ALL_WARNINGS) -IF(MSVC_VERSION) - STRING(REGEX REPLACE "/W[0-9]" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) - STRING(REGEX REPLACE "/W[0-9]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - ADD_DEFINITIONS(/w) - # suppress also poco linker warnings - SET (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /ignore:4217") - SET (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /ignore:4217") -ENDIF(MSVC_VERSION) -IF(CMAKE_COMPILER_IS_GNUCXX) - ADD_DEFINITIONS(-w) -ENDIF(CMAKE_COMPILER_IS_GNUCXX) -ENDMACRO(SUPPRESS_ALL_WARNINGS) - -INCLUDE(${CMAKE_ROOT}/Modules/TestCXXAcceptsFlag.cmake) -MACRO(CHECK_AND_SET flag sourcelist ) - CHECK_CXX_ACCEPTS_FLAG(${flag} R) - IF(R) - SET_SOURCE_FILES_PROPERTIES( - ${${sourcelist}} - PROPERTIES - COMPILE_FLAGS ${flag} - ) - ENDIF(R) -ENDMACRO(CHECK_AND_SET) - -# -# MITK_MULTIPLEX_PICTYPE: generate separated source files for different -# data types to reduce memory consumption of compiler during template -# instantiation -# -# Param "file" should be named like mitkMyAlgo-TYPE.cpp -# in the file, every occurence of @TYPE@ is replaced by the -# datatype. For each datatype, a new file mitkMyAlgo-datatype.cpp -# is generated and added to CPP_FILES_GENERATED. -# -MACRO(MITK_MULTIPLEX_PICTYPE file) - SET(TYPES "double;float;int;unsigned int;short;unsigned short;char;unsigned char") - FOREACH(TYPE ${TYPES}) - # create filename for destination - STRING(REPLACE " " "_" quoted_type "${TYPE}") - STRING(REPLACE TYPE ${quoted_type} quoted_file ${file}) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file} ${CMAKE_CURRENT_BINARY_DIR}/${quoted_file} @ONLY) - SET(CPP_FILES_GENERATED ${CPP_FILES_GENERATED} ${CMAKE_CURRENT_BINARY_DIR}/${quoted_file}) - ENDFOREACH(TYPE) -ENDMACRO(MITK_MULTIPLEX_PICTYPE) - -INCLUDE(MacroParseArguments) - - -################################################################### -# -# MITK_CREATE_MODULE_CONF -# -# This can be called in a similar way like MITK_CREATE_MODULE -# but it just creates the module configuration files without -# actually building it. It is used for integration of legacy libraries -# into the MITK module build system -# -################################################################## -MACRO(MITK_CREATE_MODULE_CONF MODULE_NAME_IN) - MACRO_PARSE_ARGUMENTS(MODULE "INCLUDE_DIRS;DEPENDS;PROVIDES" "QT_MODULE" ${ARGN}) - SET(MODULE_NAME ${MODULE_NAME_IN}) - SET(MODULE_IS_ENABLED 1) - _MITK_CREATE_MODULE_CONF() -ENDMACRO(MITK_CREATE_MODULE_CONF) - -MACRO(_MITK_CREATE_MODULE_CONF) - IF(NOT MODULE_QT_MODULE OR MITK_USE_QT) - IF(NOT MODULE_PROVIDES AND NOT MODULE_HEADERS_ONLY) - SET(MODULE_PROVIDES ${MODULE_NAME}) - ENDIF(NOT MODULE_PROVIDES AND NOT MODULE_HEADERS_ONLY) - SET(MODULE_INCLUDE_DIRS_ABSOLUTE "") - FOREACH(dir ${MODULE_INCLUDE_DIRS}) - GET_FILENAME_COMPONENT(abs_dir ${dir} ABSOLUTE) - SET(MODULE_INCLUDE_DIRS_ABSOLUTE ${MODULE_INCLUDE_DIRS_ABSOLUTE} ${abs_dir}) - ENDFOREACH(dir) - - SET(MODULE_INCLUDE_DIRS ${MODULE_INCLUDE_DIRS_ABSOLUTE} ${CMAKE_CURRENT_SOURCE_DIR}) - - # Qt generates headers in the binary tree - IF(MODULE_QT_MODULE) - SET(MODULE_INCLUDE_DIRS ${MODULE_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}) - ENDIF(MODULE_QT_MODULE) - - CONFIGURE_FILE(${MITK_SOURCE_DIR}/CMake/moduleConf.cmake.in ${MITK_MODULES_CONF_DIR}/${MODULE_NAME}Config.cmake @ONLY) - ENDIF(NOT MODULE_QT_MODULE OR MITK_USE_QT) -ENDMACRO(_MITK_CREATE_MODULE_CONF) - -################################################################## -# -# MITK_CREATE_MODULE -# -# Creates a module for the automatic module dependeny system within MITK. -# Configurations are generated in the moduleConf directory. -# -# USAGE: -# -# MITK_CREATE_MODULE( -# [INCLUDE_DIRS ] -# [INTERNAL_INCLUDE_DIRS ] -# [DEPENDS ] -# [PROVIDES ] -# [PACKAGE_DEPENDS ] -# [EXPORT_DEFINE ] -# [QT_MODULE] -# -################################################################## -MACRO(MITK_CREATE_MODULE MODULE_NAME_IN) - MACRO_PARSE_ARGUMENTS(MODULE "INCLUDE_DIRS;INTERNAL_INCLUDE_DIRS;DEPENDS;DEPENDS_INTERNAL;PROVIDES;PACKAGE_DEPENDS;EXPORT_DEFINE;ADDITIONAL_LIBS;GENERATED_CPP" "QT_MODULE;FORCE_STATIC;HEADERS_ONLY" ${ARGN}) - SET(MODULE_NAME ${MODULE_NAME_IN}) - - # assume worst case - SET(MODULE_IS_ENABLED 0) - # first of all we check for the dependencies - MITK_CHECK_MODULE(_MISSING_DEP ${MODULE_DEPENDS}) - IF(_MISSING_DEP) - MESSAGE("Module ${MODULE_NAME} won't be built, missing dependency: ${_MISSING_DEP}") - SET(MODULE_IS_ENABLED 0) - ELSE(_MISSING_DEP) - SET(MODULE_IS_ENABLED 1) - # now check for every package if it is enabled. This overlaps a bit with - # MITK_CHECK_MODULE ... - FOREACH(_package ${MODULE_PACKAGE_DEPENDS}) - IF((DEFINED MITK_USE_${_package}) AND NOT (MITK_USE_${_package})) - MESSAGE("Module ${MODULE_NAME} won't be built. Turn on MITK_USE_${_package} if you want to use it.") - SET(MODULE_IS_ENABLED 0) - ENDIF() - ENDFOREACH() - IF(MODULE_IS_ENABLED) - IF(NOT MODULE_QT_MODULE OR MITK_USE_QT) - SET(MODULE_IS_ENABLED 1) - _MITK_CREATE_MODULE_CONF() - IF(NOT MODULE_EXPORT_DEFINE) - SET(MODULE_EXPORT_DEFINE ${MODULE_NAME}_EXPORT) - ENDIF(NOT MODULE_EXPORT_DEFINE) - CONFIGURE_FILE(${MITK_SOURCE_DIR}/CMake/moduleExports.h.in ${MITK_MODULES_CONF_DIR}/${MODULE_NAME}Exports.h @ONLY) - - IF(MITK_GENERATE_MODULE_DOT) - MESSAGE("MODULEDOTNAME ${MODULE_NAME}") - FOREACH(dep ${MODULE_DEPENDS}) - MESSAGE("MODULEDOT \"${MODULE_NAME}\" -> \"${dep}\" ; ") - ENDFOREACH(dep) - ENDIF(MITK_GENERATE_MODULE_DOT) - - SET(DEPENDS "${MODULE_DEPENDS}") - SET(DEPENDS_BEFORE "not initialized") - SET(PACKAGE_DEPENDS "${MODULE_PACKAGE_DEPENDS}") - MITK_USE_MODULE("${MODULE_DEPENDS}") - - # ok, now create the module itself - INCLUDE_DIRECTORIES(. ${ALL_INCLUDE_DIRECTORIES}) - INCLUDE(files.cmake) - - IF(NOT MODULE_QT_MODULE) - ORGANIZE_SOURCES(SOURCE ${CPP_FILES} - HEADER ${H_FILES} - TXX ${TXX_FILES} - DOC ${DOX_FILES} - ) - - IF(MODULE_FORCE_STATIC) - SET(_STATIC ${MITK_WIN32_FORCE_STATIC}) - ENDIF(MODULE_FORCE_STATIC) - - IF(NOT MODULE_HEADERS_ONLY) - IF(ALL_LIBRARIES) - # LINK_DIRECTORIES applies only to targets which are added after the call to LINK_DIRECTORIES - LINK_DIRECTORIES(${ALL_LIBRARY_DIRS}) - ENDIF(ALL_LIBRARIES) - ADD_LIBRARY(${MODULE_PROVIDES} ${_STATIC} ${CPP_FILES} ${H_FILES} ${CPP_FILES_GENERATED} ${GLOBBED__H_FILES} ${CORRESPONDING__H_FILES} ${TXX_FILES} ${DOX_FILES} ${UI_FILES} ${TOOL_CPPS}) - IF(ALL_LIBRARIES) - TARGET_LINK_LIBRARIES(${MODULE_PROVIDES} ${ALL_LIBRARIES}) - ENDIF(ALL_LIBRARIES) - ENDIF() - - ELSE(NOT MODULE_QT_MODULE) - - INCLUDE(files.cmake) - - IF(UI_FILES) - QT4_WRAP_UI(Q${KITNAME}_GENERATED_UI_CPP ${UI_FILES}) - ENDIF(UI_FILES) - - IF(MOC_H_FILES) - QT4_WRAP_CPP(Q${KITNAME}_GENERATED_MOC_CPP ${MOC_H_FILES}) - ENDIF(MOC_H_FILES) - - IF(QRC_FILES) - QT4_ADD_RESOURCES(Q${KITNAME}_GENERATED_QRC_CPP ${QRC_FILES}) - ENDIF(QRC_FILES) - - SET(Q${KITNAME}_GENERATED_CPP ${Q${KITNAME}_GENERATED_CPP} ${Q${KITNAME}_GENERATED_UI_CPP} ${Q${KITNAME}_GENERATED_MOC_CPP} ${Q${KITNAME}_GENERATED_QRC_CPP}) - - ORGANIZE_SOURCES(SOURCE ${CPP_FILES} - HEADER ${H_FILES} - TXX ${TXX_FILES} - DOC ${DOX_FILES} - UI ${UI_FILES} - QRC ${QRC_FILES} - MOC ${Q${KITNAME}_GENERATED_MOC_CPP} - GEN_QRC ${Q${KITNAME}_GENERATED_QRC_CPP} - GEN_UI ${Q${KITNAME}_GENERATED_UI_CPP}) - - # MITK_GENERATE_TOOLS_LIBRARY(Qmitk${LIBPOSTFIX} "NO") - - IF(NOT MODULE_HEADERS_ONLY) - ADD_LIBRARY(${MODULE_PROVIDES} ${CPP_FILES} ${CPP_FILES_GENERATED} ${Q${KITNAME}_GENERATED_CPP} ${CORRESPONDING__H_FILES} ${GLOBBED__H_FILES} ${TXX_FILES} ${DOX_FILES} ${UI_FILES} ${QRC_FILES} ${TOOL_GUI_CPPS}) - TARGET_LINK_LIBRARIES(${MODULE_PROVIDES} ${QT_LIBRARIES} ${ALL_LIBRARIES} QVTK) - ENDIF() - - ENDIF(NOT MODULE_QT_MODULE) - - - # install only if shared lib (for now) - IF(NOT _STATIC OR MINGW) - IF(NOT MODULE_HEADERS_ONLY) - # # deprecated: MITK_INSTALL_TARGETS(${MODULE_PROVIDES}) - ENDIF() - ENDIF(NOT _STATIC OR MINGW) - ENDIF(NOT MODULE_QT_MODULE OR MITK_USE_QT) - ENDIF(MODULE_IS_ENABLED) -ENDIF(_MISSING_DEP) - IF(NOT MODULE_IS_ENABLED) - _MITK_CREATE_MODULE_CONF() - ENDIF(NOT MODULE_IS_ENABLED) -ENDMACRO(MITK_CREATE_MODULE) - -MACRO(MITK_USE_MODULE) - SET(DEPENDS "") - SET(DEPENDS_BEFORE "not initialized") - # check for each parameter if it is a package (3rd party) - FOREACH(package ${ARGN}) - IF(EXISTS "${MITK_SOURCE_DIR}/CMake/MITK_${package}_Config.cmake") - LIST(APPEND PACKAGE_DEPENDS ${package}) - ELSE() - LIST(APPEND DEPENDS ${package}) - ENDIF() - ENDFOREACH(package) - WHILE(NOT "${DEPENDS}" STREQUAL "${DEPENDS_BEFORE}") - SET(DEPENDS_BEFORE ${DEPENDS}) - FOREACH(dependency ${DEPENDS}) - INCLUDE(${MITK_MODULES_CONF_DIR}/${dependency}Config.cmake) - LIST(APPEND DEPENDS ${${dependency}_DEPENDS}) - LIST(APPEND PACKAGE_DEPENDS ${${dependency}_PACKAGE_DEPENDS}) - ENDFOREACH(dependency) - IF(DEPENDS) - LIST(REMOVE_DUPLICATES DEPENDS) - LIST(SORT DEPENDS) - ENDIF(DEPENDS) - IF(PACKAGE_DEPENDS) - LIST(REMOVE_DUPLICATES PACKAGE_DEPENDS) - LIST(SORT PACKAGE_DEPENDS) - ENDIF(PACKAGE_DEPENDS) - ENDWHILE() - # CMake Debug - FOREACH(dependency ${DEPENDS} ${MODULE_DEPENDS_INTERNAL}) - INCLUDE(${MITK_MODULES_CONF_DIR}/${dependency}Config.cmake) - SET(ALL_INCLUDE_DIRECTORIES ${ALL_INCLUDE_DIRECTORIES} ${${dependency}_INCLUDE_DIRS}) - SET(ALL_LIBRARIES ${ALL_LIBRARIES} ${${dependency}_PROVIDES}) - SET(ALL_LIBRARY_DIRS ${ALL_LIBRARY_DIRS} ${${dependency}_LIBRARY_DIRS}) - ENDFOREACH(dependency) - - FOREACH(package ${PACKAGE_DEPENDS}) - INCLUDE(MITK_${package}_Config) - #SET(ALL_INCLUDE_DIRECTORIES ${ALL_INCLUDE_DIRECTORIES} ${${package}_INCLUDE_DIRS}) - # SET(ALL_LIBRARIES ${ALL_LIBRARIES} ${${package}_LIBRARIES}) - ENDFOREACH(package) - SET(ALL_LIBRARIES ${ALL_LIBRARIES} ${MODULE_ADDITIONAL_LIBS}) - SET(ALL_INCLUDE_DIRECTORIES ${ALL_INCLUDE_DIRECTORIES} ${MODULE_INCLUDE_DIRS} ${MODULE_INTERNAL_INCLUDE_DIRS} ${MITK_MODULES_CONF_DIR}) - IF(ALL_LIBRARY_DIRS) - LIST(REMOVE_DUPLICATES ALL_LIBRARY_DIRS) - ENDIF(ALL_LIBRARY_DIRS) - -ENDMACRO(MITK_USE_MODULE) - -# Usage: MITK_CHECK_MODULE(RESULT_VAR [dependencies ...] ) -# check if all required modules exist and stores missing module names in RESULT_VAR. -MACRO(MITK_CHECK_MODULE RESULT_VAR) - SET(${RESULT_VAR} "") - SET(DEPENDS "") - SET(DEPENDS_BEFORE "not initialized") - SET(PACKAGE_DEPENDS "") - - - # check for each parameter if it is a package (3rd party) - FOREACH(package ${ARGN}) - IF(EXISTS "${MITK_SOURCE_DIR}/CMake/MITK_${package}_Config.cmake") - LIST(APPEND PACKAGE_DEPENDS ${package}) - ELSE() - LIST(APPEND DEPENDS ${package}) - ENDIF() - ENDFOREACH(package) - - # create a list of all lowercase module names - FILE(GLOB _ALL_MODULES RELATIVE ${MITK_MODULES_CONF_DIR} ${MITK_MODULES_CONF_DIR}/*Config.cmake) - SET(_ALL_MODULES_LOWERCASE "") - FOREACH(_module ${_ALL_MODULES}) - STRING(TOLOWER ${_module} _lowermodule) - LIST(APPEND _ALL_MODULES_LOWERCASE ${_lowermodule}) - ENDFOREACH(_module ${_ALL_MODULES}) - - WHILE(NOT "${DEPENDS}" STREQUAL "${DEPENDS_BEFORE}") - SET(DEPENDS_BEFORE ${DEPENDS}) - FOREACH(dependency ${DEPENDS}) - - SET(_dependency_file_name ${dependency}Config.cmake) - LIST(FIND _ALL_MODULES ${_dependency_file_name} _index) - IF(NOT _index EQUAL -1) - INCLUDE(${MITK_MODULES_CONF_DIR}/${dependency}Config.cmake) - IF(${dependency}_IS_ENABLED) - LIST(APPEND DEPENDS ${${dependency}_DEPENDS}) - LIST(APPEND PACKAGE_DEPENDS ${${dependency}_PACKAGE_DEPENDS}) - ELSE(${dependency}_IS_ENABLED) - LIST(APPEND ${RESULT_VAR} ${dependency}) - LIST(REMOVE_DUPLICATES ${RESULT_VAR}) - ENDIF(${dependency}_IS_ENABLED) - ELSE(NOT _index EQUAL -1) - STRING(TOLOWER ${_dependency_file_name} _lowercase_dependency_file_name) - LIST(FIND _ALL_MODULES_LOWERCASE ${_lowercase_dependency_file_name} _index_lower) - IF(NOT _index_lower EQUAL -1) - LIST(GET _ALL_MODULES ${_index_lower} _real_module_name) - STRING(REPLACE "Config.cmake" "" _real_module_name ${_real_module_name}) - MESSAGE("Warning: case mismatch for module name ${dependency}, did you mean ${_real_module_name} ?") - ENDIF(NOT _index_lower EQUAL -1) - LIST(APPEND ${RESULT_VAR} ${dependency}) - LIST(REMOVE_DUPLICATES ${RESULT_VAR}) - ENDIF(NOT _index EQUAL -1) - - ENDFOREACH(dependency) - LIST(REMOVE_DUPLICATES DEPENDS) - LIST(REMOVE_DUPLICATES PACKAGE_DEPENDS) - LIST(SORT DEPENDS) - LIST(SORT PACKAGE_DEPENDS) - ENDWHILE() - FOREACH(_package PACKAGE_DEPENDS) - IF((DEFINED MITK_USE_${_package}) AND NOT (${MITK_USE_${_package}})) - LIST(APPEND ${RESULT_VAR} ${_package}) - ENDIF() - ENDFOREACH() - -ENDMACRO(MITK_CHECK_MODULE) - -# -# MITK specific install macro -# -# On Mac everything is installed for each bundle listed in MACOSX_BUNDLE_NAMES -# by replacing the DESTINATION parameter. Everything else is passed to the CMake INSTALL command -# -# Usage: MITK_INSTALL( ) -# -MACRO(MITK_INSTALL) - -SET(ARGS ${ARGN}) - - SET(install_directories "") - LIST(FIND ARGS DESTINATION _destination_index) - # SET(_install_DESTINATION "") - IF(_destination_index GREATER -1) - MESSAGE(SEND_ERROR "MITK_INSTALL macro must not be called with a DESTINATION parameter.") -### This code was a try to replace a given DESTINATION -# MATH(EXPR _destination_index ${_destination_index} + 1) -# LIST(GET ARGS ${_destination_index} _install_DESTINATION) -# STRING(REGEX REPLACE ^bin "" _install_DESTINATION ${_install_DESTINATION}) - ELSE(_destination_index GREATER -1) - - IF(NOT MACOSX_BUNDLE_NAMES) - INSTALL(${ARGS} DESTINATION bin) - ELSE(NOT MACOSX_BUNDLE_NAMES) - FOREACH(bundle_name ${MACOSX_BUNDLE_NAMES}) - INSTALL(${ARGS} DESTINATION ${bundle_name}.app/Contents/MacOS/${_install_DESTINATION}) - ENDFOREACH(bundle_name) - ENDIF(NOT MACOSX_BUNDLE_NAMES) - ENDIF(_destination_index GREATER -1) - -ENDMACRO(MITK_INSTALL) - -# MITK specific cross plattform install macro -# -# Usage: MITK_INSTALL_HELPER_APP(target1 [target2] ....) -# -MACRO(MITK_INSTALL_HELPER_APP) - MACRO_PARSE_ARGUMENTS(_install "TARGETS;EXECUTABLES;PLUGINS;LIBRARY_DIRS" "GLOB_PLUGINS" ${ARGN}) - LIST(APPEND _install_TARGETS ${_install_DEFAULT_ARGS}) - -# TODO: how to supply to correct intermediate directory?? -# CMAKE_CFG_INTDIR is not expanded to actual values inside the INSTALL(CODE "...") macro ... -SET(intermediate_dir ) -IF(WIN32 AND NOT MINGW) - SET(intermediate_dir Release) -ENDIF() -SET(DIRS - ${VTK_RUNTIME_LIBRARY_DIRS}/${intermediate_dir} - ${ITK_LIBRARY_DIRS}/${intermediate_dir} - ${QT_LIBRARY_DIR} - ${MITK_BINARY_DIR}/bin/${intermediate_dir} - ${_install_LIBRARY_DIRS} - ) -IF(APPLE) - LIST(APPEND DIRS "/usr/lib") -ENDIF(APPLE) - -if(QT_LIBRARY_DIR MATCHES "^(/lib/|/lib32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/lib64/|/usr/X11R6/)") - set(_qt_is_system_qt 1) -endif() - -FOREACH(_target ${_install_EXECUTABLES}) - -SET(_qt_plugins_install_dirs "") -SET(_qt_conf_install_dirs "") -SET(_target_locations "") - -GET_FILENAME_COMPONENT(_target_name ${_target} NAME) - -IF(APPLE) - IF(NOT MACOSX_BUNDLE_NAMES) - SET(_qt_conf_install_dirs bin) - SET(_target_locations bin/${_target_name}) - SET(${_target_locations}_qt_plugins_install_dir bin) - INSTALL(PROGRAMS ${_target} DESTINATION bin) - ELSE(NOT MACOSX_BUNDLE_NAMES) - FOREACH(bundle_name ${MACOSX_BUNDLE_NAMES}) - LIST(APPEND _qt_conf_install_dirs ${bundle_name}.app/Contents/Resources) - SET(_current_target_location ${bundle_name}.app/Contents/MacOS/${_target_name}) - LIST(APPEND _target_locations ${_current_target_location}) - SET(${_current_target_location}_qt_plugins_install_dir ${bundle_name}.app/Contents/MacOS) - - INSTALL(PROGRAMS ${_target} DESTINATION ${bundle_name}.app/Contents/MacOS/) - ENDFOREACH(bundle_name) - ENDIF(NOT MACOSX_BUNDLE_NAMES) -ELSE() - SET(_target_locations bin/${_target_name}) - SET(${_target_locations}_qt_plugins_install_dir bin) - SET(_qt_conf_install_dirs bin) - INSTALL(PROGRAMS ${_target} DESTINATION bin) -ENDIF() - -FOREACH(_target_location ${_target_locations}) - -IF(NOT _qt_is_system_qt) - IF(QT_PLUGINS_DIR) - INSTALL(DIRECTORY "${QT_PLUGINS_DIR}" - DESTINATION ${${_target_location}_qt_plugins_install_dir} - CONFIGURATIONS Release - FILES_MATCHING REGEX "[^d]4?\\${CMAKE_SHARED_LIBRARY_SUFFIX}" - ) - - INSTALL(DIRECTORY "${QT_PLUGINS_DIR}" - DESTINATION ${${_target_location}_qt_plugins_install_dir} - CONFIGURATIONS Debug - FILES_MATCHING REGEX "d4?\\${CMAKE_SHARED_LIBRARY_SUFFIX}" - ) - - ENDIF(QT_PLUGINS_DIR) -ENDIF(NOT _qt_is_system_qt) - - - _fixup_target() -ENDFOREACH(_target_location) - - -IF(NOT _qt_is_system_qt) - #-------------------------------------------------------------------------------- - # install a qt.conf file - # this inserts some cmake code into the install script to write the file - SET(_qt_conf_plugin_install_prefix .) - IF(APPLE) - SET(_qt_conf_plugin_install_prefix ./MacOS) - ENDIF(APPLE) - FOREACH(_qt_conf_install_dir ${_qt_conf_install_dirs}) - INSTALL(CODE " - file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${_qt_conf_install_dir}/qt.conf\" \" -[Paths] -Prefix=${_qt_conf_plugin_install_prefix} - -\") - ") - ENDFOREACH() -ENDIF(NOT _qt_is_system_qt) - - - - -ENDFOREACH(_target) - -ENDMACRO(MITK_INSTALL_HELPER_APP) - - - -# -# MITK specific cross plattform install macro -# -# Usage: MITK_INSTALL_TARGETS(target1 [target2] ....) -# -MACRO(MITK_INSTALL_TARGETS) - MACRO_PARSE_ARGUMENTS(_install "TARGETS;EXECUTABLES;PLUGINS;LIBRARY_DIRS" "GLOB_PLUGINS" ${ARGN}) - LIST(APPEND _install_TARGETS ${_install_DEFAULT_ARGS}) - -# TODO: how to supply to correct intermediate directory?? -# CMAKE_CFG_INTDIR is not expanded to actual values inside the INSTALL(CODE "...") macro ... -SET(intermediate_dir ) -IF(WIN32 AND NOT MINGW) - SET(intermediate_dir Release) -ENDIF() -SET(DIRS - ${VTK_RUNTIME_LIBRARY_DIRS}/${intermediate_dir} - ${ITK_LIBRARY_DIRS}/${intermediate_dir} - ${QT_LIBRARY_DIR} - ${MITK_BINARY_DIR}/bin/${intermediate_dir} - ${_install_LIBRARY_DIRS} - ) - -if(QT_LIBRARY_DIR MATCHES "^(/lib/|/lib32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/lib64/|/usr/X11R6/)") - set(_qt_is_system_qt 1) -endif() - -FOREACH(_target ${_install_EXECUTABLES}) - -GET_TARGET_PROPERTY(_is_bundle ${_target} MACOSX_BUNDLE) - -SET(_qt_plugins_install_dirs "") -SET(_qt_conf_install_dirs "") -SET(_target_locations "") - -IF(APPLE) - IF(_is_bundle) - SET(_target_locations ${_target}.app) - SET(${_target_locations}_qt_plugins_install_dir ${_target}.app/Contents/MacOS) - SET(_bundle_dest_dir ${_target}.app/Contents/MacOS) - SET(_qt_plugins_for_current_bundle ${_target}.app/Contents/MacOS) - SET(_qt_conf_install_dirs ${_target}.app/Contents/Resources) - INSTALL(TARGETS ${_target} BUNDLE DESTINATION . ) - ELSE(_is_bundle) - IF(NOT MACOSX_BUNDLE_NAMES) - SET(_qt_conf_install_dirs bin) - SET(_target_locations bin/${_target}) - SET(${_target_locations}_qt_plugins_install_dir bin) - INSTALL(TARGETS ${_target} RUNTIME DESTINATION bin) - ELSE(NOT MACOSX_BUNDLE_NAMES) - FOREACH(bundle_name ${MACOSX_BUNDLE_NAMES}) - LIST(APPEND _qt_conf_install_dirs ${bundle_name}.app/Contents/Resources) - SET(_current_target_location ${bundle_name}.app/Contents/MacOS/${_target}) - LIST(APPEND _target_locations ${_current_target_location}) - SET(${_current_target_location}_qt_plugins_install_dir ${bundle_name}.app/Contents/MacOS) - MESSAGE( " SET(${_current_target_location}_qt_plugins_install_dir ${bundle_name}.app/Contents/MacOS) ") - - INSTALL(TARGETS ${_target} RUNTIME DESTINATION ${bundle_name}.app/Contents/MacOS/) - ENDFOREACH(bundle_name) - ENDIF(NOT MACOSX_BUNDLE_NAMES) - ENDIF(_is_bundle) -ELSE() - SET(_target_locations bin/${_target}${CMAKE_EXECUTABLE_SUFFIX}) - SET(${_target_locations}_qt_plugins_install_dir bin) - SET(_qt_conf_install_dirs bin) - INSTALL(TARGETS ${_target} RUNTIME DESTINATION bin) -ENDIF() - - -FOREACH(_target_location ${_target_locations}) - IF(NOT _qt_is_system_qt) - - IF(QT_PLUGINS_DIR) - INSTALL(DIRECTORY "${QT_PLUGINS_DIR}" - DESTINATION ${${_target_location}_qt_plugins_install_dir} - CONFIGURATIONS Release - FILES_MATCHING REGEX "[^d]4?\\${CMAKE_SHARED_LIBRARY_SUFFIX}" - ) - - INSTALL(DIRECTORY "${QT_PLUGINS_DIR}" - DESTINATION ${${_target_location}_qt_plugins_install_dir} - CONFIGURATIONS Debug - FILES_MATCHING REGEX "d4?\\${CMAKE_SHARED_LIBRARY_SUFFIX}" - ) - - ENDIF(QT_PLUGINS_DIR) - ENDIF(NOT _qt_is_system_qt) - - _fixup_target() -ENDFOREACH(_target_location) - - -IF(NOT _qt_is_system_qt) - - #-------------------------------------------------------------------------------- - # install a qt.conf file - # this inserts some cmake code into the install script to write the file - SET(_qt_conf_plugin_install_prefix .) - IF(APPLE) - SET(_qt_conf_plugin_install_prefix ./MacOS) - ENDIF(APPLE) - FOREACH(_qt_conf_install_dir ${_qt_conf_install_dirs}) - INSTALL(CODE " - file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${_qt_conf_install_dir}/qt.conf\" \" -[Paths] -Prefix=${_qt_conf_plugin_install_prefix} - -\") - ") - ENDFOREACH() - -ENDIF(NOT _qt_is_system_qt) - - - -ENDFOREACH(_target) - -ENDMACRO(MITK_INSTALL_TARGETS) - -# Fix _target_location -MACRO(_fixup_target) - -INSTALL(CODE " - MACRO(gp_item_default_embedded_path_override item default_embedded_path_var) - GET_FILENAME_COMPONENT(_item_name \"\${item}\" NAME) - GET_FILENAME_COMPONENT(_item_path \"\${item}\" PATH) - IF(_item_name MATCHES \"liborg\") - IF(APPLE) - SET(full_path \"full_path-NOTFOUND\") - MESSAGE(\"override: \${item}\") - FILE (GLOB_RECURSE full_path \${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir}/\${_item_name} ) - MESSAGE(\"find file: \${full_path}\") - - GET_FILENAME_COMPONENT(_item_path \"\${full_path}\" PATH) - - STRING(REPLACE - \${CMAKE_INSTALL_PREFIX} - @executable_path/../../../ \${default_embedded_path_var} \"\${_item_path}\" ) - MESSAGE(\"override result: \${\${default_embedded_path_var}}\") - ELSE(APPLE) - SET(\${default_embedded_path_var} \"\${_item_path}\") - ENDIF(APPLE) - ENDIF() - - #IF(_item_name MATCHES \"^liborg\") - # IF(APPLE) - # MESSAGE(\"override: \${item}\") - # STRING(REPLACE - # ${CMAKE_INSTALL_PREFIX} - # @loader_path/../ \${default_embedded_path_var} \"\${_item_path}\" ) - # ELSE(APPLE) - # SET(\${default_embedded_path_var} \"\${_item_path}\") - # ENDIF(APPLE) - #ENDIF() - ENDMACRO(gp_item_default_embedded_path_override) - - MACRO(gp_resolved_file_type_override file type) - IF(NOT APPLE) - GET_FILENAME_COMPONENT(_file_path \"\${file}\" PATH) - GET_FILENAME_COMPONENT(_file_name \"\${file}\" NAME) - IF(_file_path MATCHES \"^\${CMAKE_INSTALL_PREFIX}\") - SET(\${type} \"local\") - # On linux, rpaths are removed from the plugins - # if installing more than on application. This override - # should prevent this. - IF(_file_name MATCHES \"^liborg\") - SET(\${type} \"system\") - ENDIF(_file_name MATCHES \"^liborg\") - - ENDIF() - ENDIF() - ENDMACRO(gp_resolved_file_type_override) - - SET(_rpath_relative ${MITK_INSTALL_RPATH_RELATIVE}) - IF(_rpath_relative AND NOT APPLE) - IF(UNIX OR MINGW) - MACRO(gp_resolve_item_override context item exepath dirs resolved_item_var resolved_var) - IF(\${item} MATCHES \"blueberry_osgi\") - SET(\${resolved_item_var} \"\${exepath}/BlueBerry/org.blueberry.osgi/bin/\${item}\") - SET(\${resolved_var} 1) - ENDIF() - ENDMACRO() - ENDIF() - ENDIF() - - IF(\"${_install_GLOB_PLUGINS}\" STREQUAL \"TRUE\") - file(GLOB_RECURSE PLUGINS - # glob for all blueberry bundles of this application - \"\${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir}/liborg*${CMAKE_SHARED_LIBRARY_SUFFIX}\" - # glob for Qt plugins - \"\${CMAKE_INSTALL_PREFIX}/${${_target_location}_qt_plugins_install_dir}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\") - ELSE() - file(GLOB_RECURSE PLUGINS - # glob for Qt plugins - \"\${CMAKE_INSTALL_PREFIX}/${${_target_location}_qt_plugins_install_dir}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\") - ENDIF() - - # use custom version of BundleUtilities - message(\"globbed plugins: \${PLUGINS}\") - SET(PLUGIN_DIRS ${DIRS}) - LIST(APPEND PLUGINS ${_install_PLUGINS}) - foreach(_plugin \${PLUGINS}) - get_filename_component(_pluginpath \${_plugin} PATH) - list(APPEND PLUGIN_DIRS \${_pluginpath}) - endforeach(_plugin) - list(APPEND DIRS \${PLUGIN_DIRS}) - # use custom version of BundleUtilities - SET(CMAKE_MODULE_PATH ${MITK_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH} ) - include(BundleUtilities) - fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${_target_location}\" \"\${PLUGINS}\" \"\${PLUGIN_DIRS}\") - ") -ENDMACRO() - -# -# Create tests and testdriver for this module -# -# Usage: MITK_CREATE_MODULE_TESTS( [EXTRA_DRIVER_INIT init_code] ) -# -# EXTRA_DRIVER_INIT is inserted as c++ code in the testdriver and will be executed before each test -# -MACRO(MITK_CREATE_MODULE_TESTS) -MACRO_PARSE_ARGUMENTS(MODULE_TEST "EXTRA_DRIVER_INIT;EXTRA_DRIVER_INCLUDE" "" ${ARGN}) -IF(BUILD_TESTING AND MODULE_IS_ENABLED) - SET(OLD_MOC_H_FILES ${MOC_H_FILES}) - SET(MOC_H_FILES) - INCLUDE(files.cmake) - INCLUDE_DIRECTORIES(.) - - IF(DEFINED MOC_H_FILES) - QT4_WRAP_CPP(MODULE_TEST_GENERATED_MOC_CPP ${MOC_H_FILES}) - ENDIF(DEFINED MOC_H_FILES) - - SET(CMAKE_TESTDRIVER_BEFORE_TESTMAIN "mitk::LoggingBackend::Register(); ${MODULE_TEST_EXTRA_DRIVER_INIT};") - SET(CMAKE_TESTDRIVER_AFTER_TESTMAIN "mitk::LoggingBackend::Unregister();") - IF(NOT MODULE_TEST_EXTRA_DRIVER_INCLUDE) - # this is necessary to make the LoggingBackend calls available if nothing else is included - SET(MODULE_TEST_EXTRA_DRIVER_INCLUDE "mitkLog.h") - ENDIF(NOT MODULE_TEST_EXTRA_DRIVER_INCLUDE) - CREATE_TEST_SOURCELIST(MODULETEST_SOURCE ${MODULE_NAME}TestDriver.cpp - ${MODULE_TESTS} ${MODULE_IMAGE_TESTS} ${MODULE_CUSTOM_TESTS} - EXTRA_INCLUDE ${MODULE_TEST_EXTRA_DRIVER_INCLUDE} - ) - SET(TESTDRIVER ${MODULE_NAME}TestDriver) - ADD_EXECUTABLE(${TESTDRIVER} ${MODULETEST_SOURCE} ${MODULE_TEST_GENERATED_MOC_CPP}) - TARGET_LINK_LIBRARIES(${TESTDRIVER} ${MODULE_PROVIDES} ${ALL_LIBRARIES}) - # - # Now tell CMake which tests should be run. This is done automatically - # for all tests in ${KITNAME}_TESTS and ${KITNAME}_IMAGE_TESTS. The IMAGE_TESTS - # are run for each image in the TESTIMAGES list. - # - FOREACH( test ${MODULE_TESTS} ) - GET_FILENAME_COMPONENT(TName ${test} NAME_WE) - ADD_TEST(${TName} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} ${TName}) - ENDFOREACH( test ) - - FOREACH(image ${MODULE_TESTIMAGES} ${ADDITIONAL_TEST_IMAGES} ) - IF(EXISTS ${image}) - SET(IMAGE_FULL_PATH ${image}) - ELSE(EXISTS ${image}) - # todo: maybe search other paths as well - # yes, please in mitk/Testing/Data, too - SET(IMAGE_FULL_PATH ${MITK_SOURCE_DIR}/Core/Code/Testing/Data/${image}) - ENDIF(EXISTS ${image}) - - IF(EXISTS ${IMAGE_FULL_PATH}) - FOREACH( test ${MODULE_IMAGE_TESTS} ) - GET_FILENAME_COMPONENT(TName ${test} NAME_WE) - GET_FILENAME_COMPONENT(ImageName ${IMAGE_FULL_PATH} NAME) - ADD_TEST(${TName}_${ImageName} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} ${TName} ${IMAGE_FULL_PATH}) - ENDFOREACH( test ) - ELSE(EXISTS ${IMAGE_FULL_PATH}) - MESSAGE("!!!!! No such file: ${IMAGE_FULL_PATH} !!!!!") - ENDIF(EXISTS ${IMAGE_FULL_PATH}) - ENDFOREACH( image ) - - SET(MOC_H_FILES ${OLD_MOC_H_FILES}) -ENDIF(BUILD_TESTING AND MODULE_IS_ENABLED) - -ENDMACRO(MITK_CREATE_MODULE_TESTS) - diff --git a/CMake/FindGit.cmake b/CMake/FindGit.cmake new file mode 100644 index 0000000000..bcde2e43aa --- /dev/null +++ b/CMake/FindGit.cmake @@ -0,0 +1,58 @@ +# +# FindGit +# + +SET(GIT_FOUND FALSE) + +FIND_PROGRAM(GIT_EXECUTABLE git + PATHS + "C:/Program Files/Git/bin" + "C:/Program Files (x86)/Git/bin" + DOC "git command line client") +MARK_AS_ADVANCED(GIT_EXECUTABLE) + +IF(GIT_EXECUTABLE) + SET(GIT_FOUND TRUE) + MACRO(GIT_WC_INFO dir prefix) + EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} rev-list -n 1 HEAD + WORKING_DIRECTORY ${dir} + ERROR_VARIABLE GIT_error + OUTPUT_VARIABLE ${prefix}_WC_REVISION_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT ${GIT_error} EQUAL 0) + MESSAGE(SEND_ERROR "Command \"${GIT_EXECUTBALE} rev-list -n 1 HEAD\" in directory ${dir} failed with output:\n${GIT_error}") + ELSE(NOT ${GIT_error} EQUAL 0) + EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} name-rev ${${prefix}_WC_REVISION_HASH} + WORKING_DIRECTORY ${dir} + OUTPUT_VARIABLE ${prefix}_WC_REVISION_NAME + OUTPUT_STRIP_TRAILING_WHITESPACE) + ENDIF(NOT ${GIT_error} EQUAL 0) + + # In case, git-svn is used, attempt to extract svn info + EXECUTE_PROCESS(COMMAND ${GIT_EXECUTABLE} svn info + WORKING_DIRECTORY ${dir} + ERROR_VARIABLE git_svn_info_error + OUTPUT_VARIABLE ${prefix}_WC_INFO + RESULT_VARIABLE git_svn_info_result + OUTPUT_STRIP_TRAILING_WHITESPACE) + + IF(NOT ${git_svn_info_result} EQUAL 0) + #MESSAGE(SEND_ERROR "Command \"${GIT_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${git_svn_info_error}") + ELSE(NOT ${git_svn_info_result} EQUAL 0) + + STRING(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*" + "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}") + STRING(REGEX REPLACE "^(.*\n)?Revision: ([^\n]+).*" + "\\2" ${prefix}_WC_REVISION "${${prefix}_WC_INFO}") + STRING(REGEX REPLACE "^(.*\n)?Last Changed Author: ([^\n]+).*" + "\\2" ${prefix}_WC_LAST_CHANGED_AUTHOR "${${prefix}_WC_INFO}") + STRING(REGEX REPLACE "^(.*\n)?Last Changed Rev: ([^\n]+).*" + "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}") + STRING(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*" + "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}") + + ENDIF(NOT ${git_svn_info_result} EQUAL 0) + + ENDMACRO(GIT_WC_INFO) +ENDIF(GIT_EXECUTABLE) + diff --git a/CMake/FindMitkQt.cmake b/CMake/FindMitkQt.cmake deleted file mode 100644 index baf0c9620f..0000000000 --- a/CMake/FindMitkQt.cmake +++ /dev/null @@ -1,11 +0,0 @@ -SET(DESIRED_QT_VERSION 0 CACHE STRING "Pick a version of Qt to use: 3 or 4") - -IF(DESIRED_QT_VERSION MATCHES 0) - MESSAGE("Please set the DESIRED_QT_VERSION") -ELSE(DESIRED_QT_VERSION MATCHES 0) - - SET (QT_MT_REQUIRED 1 ) - - INCLUDE( ${CMAKE_ROOT}/Modules/FindQt${DESIRED_QT_VERSION}.cmake ) -ENDIF(DESIRED_QT_VERSION MATCHES 0) - diff --git a/CMake/MITKSetupCPack.cmake b/CMake/MITKSetupCPack.cmake deleted file mode 100644 index 910d481c95..0000000000 --- a/CMake/MITKSetupCPack.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# -# First, set the generator variable -# - -IF(NOT CPACK_GENERATOR) -IF(WIN32) - FIND_PROGRAM(NSIS_MAKENSIS NAMES makensis - PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS] - DOC "Where is makensis.exe located" - ) - - IF(NOT NSIS_MAKENSIS) - SET(CPACK_GENERATOR ZIP) - ELSE() - SET(CPACK_GENERATOR "NSIS;ZIP") - ENDIF(NOT NSIS_MAKENSIS) -ELSE() - IF(APPLE) - SET(CPACK_GENERATOR DragNDrop) - ELSE() - SET(CPACK_GENERATOR TGZ) - ENDIF() -ENDIF() -ENDIF(NOT CPACK_GENERATOR) - -# include required mfc libraries -INCLUDE(InstallRequiredSystemLibraries) - -SET(CPACK_PACKAGE_NAME "MITK") -SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MITK is a medical image processing tool") -SET(CPACK_PACKAGE_VENDOR "German Cancer Research Center (DKFZ)") -SET(CPACK_CREATE_DESKTOP_LINKS "ExtApp") -SET(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/MITKCopyright.txt") -SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/MITKCopyright.txt") -SET(CPACK_PACKAGE_VERSION_MAJOR "${MITK_VERSION_MAJOR}") -SET(CPACK_PACKAGE_VERSION_MINOR "${MITK_VERSION_MINOR}") -# append revision number if available -IF(SVN_INFO_WC_REVISION) - SET(CPACK_PACKAGE_VERSION_PATCH "${MITK_VERSION_PATCH}_r${SVN_INFO_WC_REVISION}") -ELSE(SVN_INFO_WC_REVISION) - SET(CPACK_PACKAGE_VERSION_PATCH "${MITK_VERSION_PATCH}") -ENDIF(SVN_INFO_WC_REVISION) - - - diff --git a/CMake/MITK_QVTK_Config.cmake b/CMake/MITK_QVTK_Config.cmake deleted file mode 100644 index d0e958ce41..0000000000 --- a/CMake/MITK_QVTK_Config.cmake +++ /dev/null @@ -1,3 +0,0 @@ -INCLUDE(${MITK_SOURCE_DIR}/CMake/MITK_VTK_Config.cmake) -LIST(APPEND ALL_LIBRARIES QVTK) - diff --git a/CMake/MITK_VTK_Config.cmake b/CMake/MITK_VTK_Config.cmake deleted file mode 100644 index 287eaa8af0..0000000000 --- a/CMake/MITK_VTK_Config.cmake +++ /dev/null @@ -1,27 +0,0 @@ -IF(NOT MITK_VTK_Config_INCLUDED) -SET(MITK_VTK_Config_INCLUDED 1) -FIND_PACKAGE(VTK) -IF(VTK_FOUND AND NOT VTK_BUILD_SHARED_LIBS) - MESSAGE(FATAL_ERROR "MITK only supports a VTK which was built with shared libraries. Turn on BUILD_SHARED_LIBS in your VTK config.") -ENDIF(VTK_FOUND AND NOT VTK_BUILD_SHARED_LIBS) -LIST(APPEND ALL_INCLUDE_DIRECTORIES ${VTK_INCLUDE_DIRS}) -LIST(APPEND ALL_LIBRARIES vtkGraphics - vtkCommon - vtkFiltering - vtkftgl - vtkGraphics - vtkHybrid - vtkImaging - vtkIO - vtkParallel - vtkRendering - vtkVolumeRendering - vtkWidgets - ${VTK_JPEG_LIBRARIES} - ${VTK_PNG_LIBRARIES} - ${VTK_ZLIB_LIBRARIES} - ${VTK_EXPAT_LIBRARIES} - ${VTK_FREETYPE_LIBRARIES} -) -LINK_DIRECTORIES(${VTK_LIBRARY_DIRS}) -ENDIF(NOT MITK_VTK_Config_INCLUDED) diff --git a/CMake/MITK_Boost_Config.cmake b/CMake/PackageDepends/MITK_Boost_Config.cmake similarity index 86% rename from CMake/MITK_Boost_Config.cmake rename to CMake/PackageDepends/MITK_Boost_Config.cmake index 996559f224..ce78246eae 100644 --- a/CMake/MITK_Boost_Config.cmake +++ b/CMake/PackageDepends/MITK_Boost_Config.cmake @@ -1,14 +1,13 @@ -OPTION(MITK_USE_Boost OFF) IF(MITK_USE_Boost) -FIND_PACKAGE(Boost) +FIND_PACKAGE(Boost REQUIRED) #here we could also choose the desired components: #FIND_PACKAGE(Boost COMPONENTS graph math/special_functions) LIST(APPEND ALL_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIRS}) LIST(APPEND ALL_LIBRARIES ${Boost_LIBRARIES}) link_directories(${Boost_LIBRARY_DIRS}) ENDIF(MITK_USE_Boost) diff --git a/CMake/MITK_CTK_Config.cmake b/CMake/PackageDepends/MITK_CTK_Config.cmake similarity index 86% rename from CMake/MITK_CTK_Config.cmake rename to CMake/PackageDepends/MITK_CTK_Config.cmake index 2edebf64cd..5146413906 100644 --- a/CMake/MITK_CTK_Config.cmake +++ b/CMake/PackageDepends/MITK_CTK_Config.cmake @@ -1,7 +1,7 @@ MESSAGE("In package CTK config") -FIND_PACKAGE(CTK) +FIND_PACKAGE(CTK REQUIRED) LIST(APPEND ALL_INCLUDE_DIRECTORIES ${CTK_INCLUDE_DIRS}) LIST(APPEND ALL_LIBRARIES ${CTK_LIBRARIES}) link_directories(${CTK_LIBRARY_DIRS}) diff --git a/CMake/MITK_ITK_Config.cmake b/CMake/PackageDepends/MITK_ITK_Config.cmake similarity index 65% rename from CMake/MITK_ITK_Config.cmake rename to CMake/PackageDepends/MITK_ITK_Config.cmake index 689fbf147a..9c14ae8de3 100644 --- a/CMake/MITK_ITK_Config.cmake +++ b/CMake/PackageDepends/MITK_ITK_Config.cmake @@ -1,19 +1,17 @@ -FIND_PACKAGE(ITK) +FIND_PACKAGE(ITK REQUIRED) # # for some reason this does not work on windows, probably an ITK bug # ITK_BUILD_SHARED is OFF even in shared library builds # #IF(ITK_FOUND AND NOT ITK_BUILD_SHARED) # MESSAGE(FATAL_ERROR "MITK only supports a ITK which was built with shared libraries. Turn on BUILD_SHARED_LIBS in your ITK config.") #ENDIF(ITK_FOUND AND NOT ITK_BUILD_SHARED) -LIST(APPEND ALL_INCLUDE_DIRECTORIES ${ITK_INCLUDE_DIRS}) + +INCLUDE(${ITK_USE_FILE}) LIST(APPEND ALL_LIBRARIES ${ITK_LIBRARIES}) -link_directories(${ITK_LIBRARY_DIRS}) IF(ITK_USE_SYSTEM_GDCM) - FIND_PACKAGE(GDCM PATHS ${ITK_GDCM_DIR}) - LIST(APPEND ALL_INCLUDE_DIRECTORIES ${GDCM_INCLUDE_DIRS}) + FIND_PACKAGE(GDCM PATHS ${ITK_GDCM_DIR} REQUIRED) LIST(APPEND ALL_LIBRARIES ${GDCM_LIBRARIES}) - link_directories(${ITK_GDCM_DIR}/bin) ENDIF(ITK_USE_SYSTEM_GDCM) diff --git a/CMake/MITK_Kinect_Config.cmake b/CMake/PackageDepends/MITK_Kinect_Config.cmake similarity index 100% rename from CMake/MITK_Kinect_Config.cmake rename to CMake/PackageDepends/MITK_Kinect_Config.cmake diff --git a/CMake/MITK_OpenCV_Config.cmake b/CMake/PackageDepends/MITK_OpenCV_Config.cmake similarity index 100% rename from CMake/MITK_OpenCV_Config.cmake rename to CMake/PackageDepends/MITK_OpenCV_Config.cmake diff --git a/CMake/MITK_Poco_Config.cmake b/CMake/PackageDepends/MITK_Poco_Config.cmake similarity index 100% rename from CMake/MITK_Poco_Config.cmake rename to CMake/PackageDepends/MITK_Poco_Config.cmake diff --git a/CMake/MITK_QT_Config.cmake b/CMake/PackageDepends/MITK_QT_Config.cmake similarity index 82% rename from CMake/MITK_QT_Config.cmake rename to CMake/PackageDepends/MITK_QT_Config.cmake index 11b3d9e815..663932b144 100644 --- a/CMake/MITK_QT_Config.cmake +++ b/CMake/PackageDepends/MITK_QT_Config.cmake @@ -1,6 +1,6 @@ -FIND_PACKAGE(Qt4) +FIND_PACKAGE(Qt4 REQUIRED) INCLUDE(${QT_USE_FILE}) LIST(APPEND ALL_INCLUDE_DIRECTORIES ${QT_INCLUDE_DIRS}) LIST(APPEND ALL_LIBRARIES ${QT_LIBRARIES}) diff --git a/CMake/PackageDepends/MITK_QVTK_Config.cmake b/CMake/PackageDepends/MITK_QVTK_Config.cmake new file mode 100644 index 0000000000..ebb31a62f0 --- /dev/null +++ b/CMake/PackageDepends/MITK_QVTK_Config.cmake @@ -0,0 +1,3 @@ +INCLUDE(${MITK_MODULES_PACKAGE_DEPENDS_DIR}/MITK_VTK_Config.cmake) +LIST(APPEND ALL_LIBRARIES QVTK) + diff --git a/CMake/PackageDepends/MITK_VTK_Config.cmake b/CMake/PackageDepends/MITK_VTK_Config.cmake new file mode 100644 index 0000000000..7ab1dbbd92 --- /dev/null +++ b/CMake/PackageDepends/MITK_VTK_Config.cmake @@ -0,0 +1,36 @@ +IF(NOT MITK_VTK_Config_INCLUDED) + SET(MITK_VTK_Config_INCLUDED 1) + FIND_PACKAGE(VTK REQUIRED) + IF(VTK_FOUND AND NOT VTK_BUILD_SHARED_LIBS) + MESSAGE(FATAL_ERROR "MITK only supports a VTK which was built with shared libraries. Turn on BUILD_SHARED_LIBS in your VTK config.") + ENDIF() + + INCLUDE(${VTK_USE_FILE}) + IF(VTK_FOR_MITK_LIBRARIES) + LIST(APPEND ALL_LIBRARIES ${VTK_FOR_MITK_LIBRARIES}) + ELSE() + # Libraries in mitk/Utilities may depend on VTK but + # the VTK_FOR_MITK_LIBRARIES variable is not yet set. + # Supply the VTK libraries manually + LIST(APPEND ALL_LIBRARIES + vtkGraphics + vtkCommon + vtkFiltering + vtkftgl + vtkGraphics + vtkHybrid + vtkImaging + vtkIO + vtkParallel + vtkRendering + vtkVolumeRendering + vtkWidgets + ${VTK_JPEG_LIBRARIES} + ${VTK_PNG_LIBRARIES} + ${VTK_ZLIB_LIBRARIES} + ${VTK_EXPAT_LIBRARIES} + ${VTK_FREETYPE_LIBRARIES} + ) + ENDIF() + +ENDIF(NOT MITK_VTK_Config_INCLUDED) diff --git a/CMake/mitkFunctionCheckCompilerFlags.cmake b/CMake/mitkFunctionCheckCompilerFlags.cmake new file mode 100644 index 0000000000..055bb8378a --- /dev/null +++ b/CMake/mitkFunctionCheckCompilerFlags.cmake @@ -0,0 +1,40 @@ +# +# Helper macro allowing to check if the given flags are supported +# by the underlying build tool +# +# If the flag(s) is/are supported, they will be appended to the string identified by RESULT_VAR +# +# Usage: +# MITKFunctionCheckCompilerFlags(FLAGS_TO_CHECK VALID_FLAGS_VAR) +# +# Example: +# +# set(myflags) +# MITKFunctionCheckCompilerFlags("-fprofile-arcs" myflags) +# message(1-myflags:${myflags}) +# MITKFunctionCheckCompilerFlags("-fauto-bugfix" myflags) +# message(2-myflags:${myflags}) +# MITKFunctionCheckCompilerFlags("-Wall" myflags) +# message(1-myflags:${myflags}) +# +# The output will be: +# 1-myflags: -fprofile-arcs +# 2-myflags: -fprofile-arcs +# 3-myflags: -fprofile-arcs -Wall + +INCLUDE(TestCXXAcceptsFlag) + +FUNCTION(mitkFunctionCheckCompilerFlags CXX_FLAG_TO_TEST RESULT_VAR) + + IF(CXX_FLAG_TO_TEST STREQUAL "") + MESSAGE(FATAL_ERROR "CXX_FLAG_TO_TEST shouldn't be empty") + ENDIF() + + CHECK_CXX_ACCEPTS_FLAG(${CXX_FLAG_TO_TEST} HAS_FLAG) + + IF(HAS_FLAG) + SET(${RESULT_VAR} "${${RESULT_VAR}} ${CXX_FLAG_TO_TEST}" PARENT_SCOPE) + ENDIF() + +ENDFUNCTION() + diff --git a/CMake/mitkFunctionGetGccVersion.cmake b/CMake/mitkFunctionGetGccVersion.cmake new file mode 100644 index 0000000000..0d068c44a8 --- /dev/null +++ b/CMake/mitkFunctionGetGccVersion.cmake @@ -0,0 +1,37 @@ +########################################################################### +# +# Library: CTK +# +# Copyright (c) Kitware Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.commontk.org/LICENSE +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +########################################################################### + +FUNCTION(mitkFunctionGetGccVersion path_to_gcc output_var) + IF(CMAKE_COMPILER_IS_GNUCXX) + EXECUTE_PROCESS( + COMMAND ${path_to_gcc} -dumpversion + RESULT_VARIABLE result + OUTPUT_VARIABLE output + ERROR_VARIABLE error + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + ) + IF(result) + MESSAGE(FATAL_ERROR "Failed to obtain compiler version running [${path_to_gcc} -dumpversion]: ${error}") + ENDIF() + SET(${output_var} ${output} PARENT_SCOPE) + ENDIF() +ENDFUNCTION() + diff --git a/CMake/mitkFunctionGetVersion.cmake b/CMake/mitkFunctionGetVersion.cmake new file mode 100644 index 0000000000..51e7eb20b0 --- /dev/null +++ b/CMake/mitkFunctionGetVersion.cmake @@ -0,0 +1,25 @@ +# +# Extracts the current git revision hash and branch/tag name +# and provides these in +# MITK_WC_REVISION_HASH +# MITK_WC_REVISION_NAME +# +function(mitkFunctionGetVersion source_dir prefix) + find_package(Git) + if(GIT_FOUND) + GIT_WC_INFO(${source_dir} ${prefix}) + + if(NOT ${prefix}_WC_REVISION_HASH) + set(${prefix}_WC_REVISION_HASH "n/a") + endif() + + string(REPLACE " " ";" hash_name ${${prefix}_WC_REVISION_NAME}) + list(GET hash_name 1 name) + if (NOT name) + set(name "n/a") + endif() + + set(${prefix}_WC_REVISION_HASH ${${prefix}_WC_REVISION_HASH} PARENT_SCOPE) + set(${prefix}_WC_REVISION_NAME ${name} PARENT_SCOPE) + endif() +endfunction() diff --git a/CMake/mitkFunctionOrganizeSources.cmake b/CMake/mitkFunctionOrganizeSources.cmake new file mode 100644 index 0000000000..1f7e1aa888 --- /dev/null +++ b/CMake/mitkFunctionOrganizeSources.cmake @@ -0,0 +1,64 @@ +FUNCTION(ORGANIZE_SOURCES) + + # this functions gets a filelist as input and looks + # for corresponding h-files to add them to the project. + + # additionally files are grouped in source-groups. + + # No parameters explicitly declared here, because + # we want to allow for variable argument lists, which + # are later access by the keyword FOREACH(MYFILE ${ARGV}) + + # output: after calling the macro, files that were found + # correspondigly to the given files are stored in the + # variable: + # ${CORRESPONDING_H_FILES} + # ${CORRESPONDING_TXX_FILES} + # ${CORRESPONDING_UI_H_FILES} + + # Globbed can be found in the variables + # ${GLOBBED_TXX_FILES} (CURRENTLY COMMENTED OUT) + # ${GLOBBED_DOX_FILES} + + MACRO_PARSE_ARGUMENTS(_ORG "HEADER;SOURCE;TXX;DOC;MOC;GEN_QRC;GEN_UI;UI;QRC" "" ${ARGN}) + + SET(CORRESPONDING__H_FILES "" ) + SET(GLOBBED__H_FILES "" ) + + IF(_ORG_HEADER) + FOREACH(_file ${_ORG_SOURCE}) + STRING(REGEX REPLACE "(.*)\\.(txx|cpp|c|cxx)$" "\\1.h" H_FILE ${_file}) + IF(EXISTS ${H_FILE}) + LIST(APPEND CORRESPONDING__H_FILES "${H_FILE}") + ENDIF() + ENDFOREACH() + ELSE() + FILE(GLOB_RECURSE GLOBBED__H_FILES *.h) + ENDIF() + + IF(_ORG_GEN_QRC OR _ORG_GEN_UI OR _ORG_MOC) + SOURCE_GROUP("Generated\\Qt QRC Source Files" FILES ${_ORG_GEN_QRC}) + SOURCE_GROUP("Generated\\Qt UI Header Files" FILES ${_ORG_GEN_UI}) + SOURCE_GROUP("Generated\\Qt MOC Source Files" FILES ${_ORG_MOC}) + ENDIF() + + #_MACRO_APPEND_TO_LIST(_ORG_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/") + SOURCE_GROUP("== Source Files ==" FILES ${_ORG_SOURCE}) + + #_MACRO_APPEND_TO_LIST(_ORG_TXX "${CMAKE_CURRENT_SOURCE_DIR}/") + SOURCE_GROUP("== Template Files ==" FILES ${_ORG_TXX}) + + #_MACRO_APPEND_TO_LIST(_ORG_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/") + SOURCE_GROUP("== Header Files ==" FILES ${_ORG_HEADER} ${_ORG_HEADER} ${CORRESPONDING__H_FILES} ${GLOBBED__H_FILES}) + + + #_MACRO_APPEND_TO_LIST(_ORG_UI "${CMAKE_CURRENT_SOURCE_DIR}/") + SOURCE_GROUP("QT UI Files" FILES ${_ORG_UI}) + + #_MACRO_APPEND_TO_LIST(_ORG_DOC "${CMAKE_CURRENT_SOURCE_DIR}/") + SOURCE_GROUP("Doxygen Files" FILES ${_ORG_DOC}) + + #_MACRO_APPEND_TO_LIST(_ORG_QRC "${CMAKE_CURRENT_SOURCE_DIR}/") + SOURCE_GROUP("Qt Resource Files" FILES ${_ORG_QRC}) + +ENDFUNCTION(ORGANIZE_SOURCES) diff --git a/CMake/mitkFunctionSuppressWarnings.cmake b/CMake/mitkFunctionSuppressWarnings.cmake new file mode 100644 index 0000000000..bfe61e569c --- /dev/null +++ b/CMake/mitkFunctionSuppressWarnings.cmake @@ -0,0 +1,21 @@ + +# suppress some warnings in VC8 about using unsafe/deprecated c functions +function(SUPPRESS_VC8_DEPRECATED_WARNINGS) + if(MSVC80) + add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS) + endif() +endfunction() + +function(SUPPRESS_ALL_WARNINGS) + if(MSVC) + string(REGEX REPLACE "/W[0-9]" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) + string(REGEX REPLACE "/W[0-9]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + add_definitions(/w) + # suppress also poco linker warnings + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /ignore:4217") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /ignore:4217") + elseif(CMAKE_COMPILER_IS_GNUCXX) + add_definitions(-w) + endif() +endfunction(SUPPRESS_ALL_WARNINGS) + diff --git a/CMake/mitkInstallRules.cmake b/CMake/mitkInstallRules.cmake new file mode 100644 index 0000000000..468b880426 --- /dev/null +++ b/CMake/mitkInstallRules.cmake @@ -0,0 +1,82 @@ +MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/mitk.ico ) +MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/mitk.bmp ) + +#STATEMACHINE XML +MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/Core/Code/Interactions/StateMachine.xml ) +MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/Config/mitkLevelWindowPresets.xml ) +MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/Config/mitkRigidRegistrationPresets.xml ) +MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/Config/mitkRigidRegistrationTestPresets.xml ) + +#QT +if(MITK_USE_QT) + find_package(Qt4) + # this is not a godd idea since it adds the QT include directories to everything that is built below this directory + #include(${QT_USE_FILE}) + + # TODO: use fixup_bundle(...) + MITK_INSTALL_HELPER_APP(EXECUTABLES "${QT_ASSISTANT_EXECUTABLE}" ) +endif(MITK_USE_QT) + +if(WIN32) + #DCMTK Dlls install target (shared libs on gcc only) + if(MINGW AND DCMTK_ofstd_LIBRARY) + set(_dcmtk_libs + ${DCMTK_dcmdata_LIBRARY} + ${DCMTK_dcmimgle_LIBRARY} + ${DCMTK_dcmnet_LIBRARY} + ${DCMTK_ofstd_LIBRARY} + ) + + foreach(_dcmtk_lib ${_dcmtk_libs}) + MITK_INSTALL(FILES ${_dcmtk_lib} ) + endforeach() + endif() + + #BlueBerry + if(MITK_USE_BLUEBERRY) + if(MINGW) + MITK_INSTALL(FILES ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin/liborg_blueberry_osgid.dll CONFIGURATIONS Debug) + MITK_INSTALL(FILES ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin/liborg_blueberry_osgi.dll CONFIGURATIONS Release) + else() + if(NOT APPLE) + MITK_INSTALL(FILES ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin/debug/liborg_blueberry_osgid.dll CONFIGURATIONS Debug) + MITK_INSTALL(FILES ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin/release/liborg_blueberry_osgi.dll CONFIGURATIONS Release) + endif(NOT APPLE) + endif() + endif() + + #MinGW dll + if(MINGW) + find_library(MINGW_RUNTIME_DLL "mingwm10.dll" HINTS ${CMAKE_FIND_ROOT_PATH}/sys-root/mingw/bin) + if(MINGW_RUNTIME_DLL) + MITK_INSTALL(FILES ${MINGW_RUNTIME_DLL} ) + else() + message(SEND_ERROR "Could not find mingwm10.dll which is needed for a proper install") + endif() + + find_library(MINGW_GCC_RUNTIME_DLL "libgcc_s_dw2-1.dll" HINTS ${CMAKE_FIND_ROOT_PATH}/sys-root/mingw/bin) + if(MINGW_GCC_RUNTIME_DLL) + MITK_INSTALL(FILES ${MINGW_GCC_RUNTIME_DLL} ) + else() + message(SEND_ERROR "Could not find libgcc_s_dw2-1.dll which is needed for a proper install") + endif() + endif() + +else() + + #DCMTK Dlls install target (shared libs on gcc only) + if(DCMTK_ofstd_LIBRARY) + set(_dcmtk_libs + ${DCMTK_dcmdata_LIBRARY} + ${DCMTK_dcmimgle_LIBRARY} + ${DCMTK_dcmnet_LIBRARY} + ${DCMTK_ofstd_LIBRARY} + ) + foreach(_dcmtk_lib ${_dcmtk_libs}) + #MITK_INSTALL(FILES ${_dcmtk_lib} DESTINATION lib) + endforeach() + endif() + +endif() + + diff --git a/CMake/mitkMacroCheckModule.cmake b/CMake/mitkMacroCheckModule.cmake new file mode 100644 index 0000000000..8f99538e1a --- /dev/null +++ b/CMake/mitkMacroCheckModule.cmake @@ -0,0 +1,67 @@ +# Usage: MITK_CHECK_MODULE(RESULT_VAR [dependencies ...] ) +# check if all required modules exist and stores missing module names in RESULT_VAR. +MACRO(MITK_CHECK_MODULE RESULT_VAR) + SET(${RESULT_VAR} "") + SET(DEPENDS "") + SET(DEPENDS_BEFORE "not initialized") + SET(PACKAGE_DEPENDS "") + + + # check for each parameter if it is a package (3rd party) + FOREACH(package ${ARGN}) + IF(EXISTS "${MITK_SOURCE_DIR}/CMake/MITK_${package}_Config.cmake") + LIST(APPEND PACKAGE_DEPENDS ${package}) + ELSE() + LIST(APPEND DEPENDS ${package}) + ENDIF() + ENDFOREACH(package) + + # create a list of all lowercase module names + FILE(GLOB _ALL_MODULES RELATIVE ${MITK_MODULES_CONF_DIR} ${MITK_MODULES_CONF_DIR}/*Config.cmake) + SET(_ALL_MODULES_LOWERCASE "") + FOREACH(_module ${_ALL_MODULES}) + STRING(TOLOWER ${_module} _lowermodule) + LIST(APPEND _ALL_MODULES_LOWERCASE ${_lowermodule}) + ENDFOREACH(_module ${_ALL_MODULES}) + + WHILE(NOT "${DEPENDS}" STREQUAL "${DEPENDS_BEFORE}") + SET(DEPENDS_BEFORE ${DEPENDS}) + FOREACH(dependency ${DEPENDS}) + + SET(_dependency_file_name ${dependency}Config.cmake) + LIST(FIND _ALL_MODULES ${_dependency_file_name} _index) + IF(NOT _index EQUAL -1) + INCLUDE(${MITK_MODULES_CONF_DIR}/${dependency}Config.cmake) + IF(${dependency}_IS_ENABLED) + LIST(APPEND DEPENDS ${${dependency}_DEPENDS}) + LIST(APPEND PACKAGE_DEPENDS ${${dependency}_PACKAGE_DEPENDS}) + ELSE(${dependency}_IS_ENABLED) + LIST(APPEND ${RESULT_VAR} ${dependency}) + LIST(REMOVE_DUPLICATES ${RESULT_VAR}) + ENDIF(${dependency}_IS_ENABLED) + ELSE(NOT _index EQUAL -1) + STRING(TOLOWER ${_dependency_file_name} _lowercase_dependency_file_name) + LIST(FIND _ALL_MODULES_LOWERCASE ${_lowercase_dependency_file_name} _index_lower) + IF(NOT _index_lower EQUAL -1) + LIST(GET _ALL_MODULES ${_index_lower} _real_module_name) + STRING(REPLACE "Config.cmake" "" _real_module_name ${_real_module_name}) + MESSAGE("Warning: case mismatch for module name ${dependency}, did you mean ${_real_module_name} ?") + ENDIF(NOT _index_lower EQUAL -1) + LIST(APPEND ${RESULT_VAR} ${dependency}) + LIST(REMOVE_DUPLICATES ${RESULT_VAR}) + ENDIF(NOT _index EQUAL -1) + + ENDFOREACH(dependency) + LIST(REMOVE_DUPLICATES DEPENDS) + LIST(REMOVE_DUPLICATES PACKAGE_DEPENDS) + LIST(SORT DEPENDS) + LIST(SORT PACKAGE_DEPENDS) + ENDWHILE() + + FOREACH(_package PACKAGE_DEPENDS) + IF((DEFINED MITK_USE_${_package}) AND NOT (${MITK_USE_${_package}})) + LIST(APPEND ${RESULT_VAR} ${_package}) + ENDIF() + ENDFOREACH() + +ENDMACRO(MITK_CHECK_MODULE) diff --git a/CMake/TestingHelpers.cmake b/CMake/mitkMacroCreateDefaultTests.cmake similarity index 100% rename from CMake/TestingHelpers.cmake rename to CMake/mitkMacroCreateDefaultTests.cmake diff --git a/CMake/mitkMacroCreateModule.cmake b/CMake/mitkMacroCreateModule.cmake new file mode 100644 index 0000000000..17de9b591d --- /dev/null +++ b/CMake/mitkMacroCreateModule.cmake @@ -0,0 +1,148 @@ +################################################################## +# +# MITK_CREATE_MODULE +# +# Creates a module for the automatic module dependeny system within MITK. +# Configurations are generated in the moduleConf directory. +# +# USAGE: +# +# MITK_CREATE_MODULE( +# [INCLUDE_DIRS ] +# [INTERNAL_INCLUDE_DIRS ] +# [DEPENDS ] +# [PROVIDES ] +# [PACKAGE_DEPENDS ] +# [EXPORT_DEFINE ] +# [QT_MODULE] +# +################################################################## +MACRO(MITK_CREATE_MODULE MODULE_NAME_IN) + MACRO_PARSE_ARGUMENTS(MODULE + "INCLUDE_DIRS;INTERNAL_INCLUDE_DIRS;DEPENDS;DEPENDS_INTERNAL;PROVIDES;PACKAGE_DEPENDS;EXPORT_DEFINE;ADDITIONAL_LIBS;GENERATED_CPP" + "QT_MODULE;FORCE_STATIC;HEADERS_ONLY" + ${ARGN}) + + SET(MODULE_NAME ${MODULE_NAME_IN}) + + # assume worst case + SET(MODULE_IS_ENABLED 0) + # first of all we check for the dependencies + MITK_CHECK_MODULE(_MISSING_DEP ${MODULE_DEPENDS}) + IF(_MISSING_DEP) + MESSAGE("Module ${MODULE_NAME} won't be built, missing dependency: ${_MISSING_DEP}") + SET(MODULE_IS_ENABLED 0) + ELSE(_MISSING_DEP) + SET(MODULE_IS_ENABLED 1) + # now check for every package if it is enabled. This overlaps a bit with + # MITK_CHECK_MODULE ... + FOREACH(_package ${MODULE_PACKAGE_DEPENDS}) + IF((DEFINED MITK_USE_${_package}) AND NOT (MITK_USE_${_package})) + MESSAGE("Module ${MODULE_NAME} won't be built. Turn on MITK_USE_${_package} if you want to use it.") + SET(MODULE_IS_ENABLED 0) + ENDIF() + ENDFOREACH() + IF(MODULE_IS_ENABLED) + IF(NOT MODULE_QT_MODULE OR MITK_USE_QT) + SET(MODULE_IS_ENABLED 1) + _MITK_CREATE_MODULE_CONF() + IF(NOT MODULE_EXPORT_DEFINE) + SET(MODULE_EXPORT_DEFINE ${MODULE_NAME}_EXPORT) + ENDIF(NOT MODULE_EXPORT_DEFINE) + CONFIGURE_FILE(${MITK_SOURCE_DIR}/CMake/moduleExports.h.in ${MITK_MODULES_CONF_DIR}/${MODULE_NAME}Exports.h @ONLY) + + IF(MITK_GENERATE_MODULE_DOT) + MESSAGE("MODULEDOTNAME ${MODULE_NAME}") + FOREACH(dep ${MODULE_DEPENDS}) + MESSAGE("MODULEDOT \"${MODULE_NAME}\" -> \"${dep}\" ; ") + ENDFOREACH(dep) + ENDIF(MITK_GENERATE_MODULE_DOT) + + SET(DEPENDS "${MODULE_DEPENDS}") + SET(DEPENDS_BEFORE "not initialized") + SET(PACKAGE_DEPENDS "${MODULE_PACKAGE_DEPENDS}") + MITK_USE_MODULE("${MODULE_DEPENDS}") + + # ok, now create the module itself + INCLUDE_DIRECTORIES(. ${ALL_INCLUDE_DIRECTORIES}) + INCLUDE(files.cmake) + + IF(NOT MODULE_QT_MODULE) + ORGANIZE_SOURCES(SOURCE ${CPP_FILES} + HEADER ${H_FILES} + TXX ${TXX_FILES} + DOC ${DOX_FILES} + ) + + IF(MODULE_FORCE_STATIC) + SET(_STATIC ${MITK_WIN32_FORCE_STATIC}) + ENDIF(MODULE_FORCE_STATIC) + + IF(NOT MODULE_HEADERS_ONLY) + IF(ALL_LIBRARY_DIRS) + # LINK_DIRECTORIES applies only to targets which are added after the call to LINK_DIRECTORIES + LINK_DIRECTORIES(${ALL_LIBRARY_DIRS}) + ENDIF(ALL_LIBRARY_DIRS) + ADD_LIBRARY(${MODULE_PROVIDES} ${_STATIC} ${CPP_FILES} ${H_FILES} ${CPP_FILES_GENERATED} ${GLOBBED__H_FILES} ${CORRESPONDING__H_FILES} ${TXX_FILES} ${DOX_FILES} ${UI_FILES} ${TOOL_CPPS}) + IF(ALL_LIBRARIES) + TARGET_LINK_LIBRARIES(${MODULE_PROVIDES} ${ALL_LIBRARIES}) + ENDIF(ALL_LIBRARIES) + ENDIF() + + ELSE(NOT MODULE_QT_MODULE) + + INCLUDE(files.cmake) + + IF(UI_FILES) + QT4_WRAP_UI(Q${KITNAME}_GENERATED_UI_CPP ${UI_FILES}) + ENDIF(UI_FILES) + + IF(MOC_H_FILES) + QT4_WRAP_CPP(Q${KITNAME}_GENERATED_MOC_CPP ${MOC_H_FILES}) + ENDIF(MOC_H_FILES) + + IF(QRC_FILES) + QT4_ADD_RESOURCES(Q${KITNAME}_GENERATED_QRC_CPP ${QRC_FILES}) + ENDIF(QRC_FILES) + + SET(Q${KITNAME}_GENERATED_CPP ${Q${KITNAME}_GENERATED_CPP} ${Q${KITNAME}_GENERATED_UI_CPP} ${Q${KITNAME}_GENERATED_MOC_CPP} ${Q${KITNAME}_GENERATED_QRC_CPP}) + + ORGANIZE_SOURCES(SOURCE ${CPP_FILES} + HEADER ${H_FILES} + TXX ${TXX_FILES} + DOC ${DOX_FILES} + UI ${UI_FILES} + QRC ${QRC_FILES} + MOC ${Q${KITNAME}_GENERATED_MOC_CPP} + GEN_QRC ${Q${KITNAME}_GENERATED_QRC_CPP} + GEN_UI ${Q${KITNAME}_GENERATED_UI_CPP}) + + # MITK_GENERATE_TOOLS_LIBRARY(Qmitk${LIBPOSTFIX} "NO") + + IF(NOT MODULE_HEADERS_ONLY) + IF(ALL_LIBRARY_DIRS) + # LINK_DIRECTORIES applies only to targets which are added after the call to LINK_DIRECTORIES + LINK_DIRECTORIES(${ALL_LIBRARY_DIRS}) + ENDIF(ALL_LIBRARY_DIRS) + ADD_LIBRARY(${MODULE_PROVIDES} ${CPP_FILES} ${CPP_FILES_GENERATED} ${Q${KITNAME}_GENERATED_CPP} ${CORRESPONDING__H_FILES} ${GLOBBED__H_FILES} ${TXX_FILES} ${DOX_FILES} ${UI_FILES} ${QRC_FILES} ${TOOL_GUI_CPPS}) + TARGET_LINK_LIBRARIES(${MODULE_PROVIDES} ${QT_LIBRARIES} ${ALL_LIBRARIES} QVTK) + ENDIF() + + ENDIF(NOT MODULE_QT_MODULE) + + + # install only if shared lib (for now) + IF(NOT _STATIC OR MINGW) + IF(NOT MODULE_HEADERS_ONLY) + # # deprecated: MITK_INSTALL_TARGETS(${MODULE_PROVIDES}) + ENDIF() + ENDIF(NOT _STATIC OR MINGW) + + ENDIF(NOT MODULE_QT_MODULE OR MITK_USE_QT) + ENDIF(MODULE_IS_ENABLED) + ENDIF(_MISSING_DEP) + + IF(NOT MODULE_IS_ENABLED) + _MITK_CREATE_MODULE_CONF() + ENDIF(NOT MODULE_IS_ENABLED) +ENDMACRO(MITK_CREATE_MODULE) diff --git a/CMake/mitkMacroCreateModuleConf.cmake b/CMake/mitkMacroCreateModuleConf.cmake new file mode 100644 index 0000000000..826659de85 --- /dev/null +++ b/CMake/mitkMacroCreateModuleConf.cmake @@ -0,0 +1,38 @@ +################################################################### +# +# MITK_CREATE_MODULE_CONF +# +# This can be called in a similar way like MITK_CREATE_MODULE +# but it just creates the module configuration files without +# actually building it. It is used for integration of legacy libraries +# into the MITK module build system +# +################################################################## +MACRO(MITK_CREATE_MODULE_CONF MODULE_NAME_IN) + MACRO_PARSE_ARGUMENTS(MODULE "INCLUDE_DIRS;DEPENDS;PROVIDES" "QT_MODULE;HEADERS_ONLY" ${ARGN}) + SET(MODULE_NAME ${MODULE_NAME_IN}) + SET(MODULE_IS_ENABLED 1) + _MITK_CREATE_MODULE_CONF() +ENDMACRO(MITK_CREATE_MODULE_CONF) + +MACRO(_MITK_CREATE_MODULE_CONF) + IF(NOT MODULE_QT_MODULE OR MITK_USE_QT) + IF(NOT MODULE_PROVIDES AND NOT MODULE_HEADERS_ONLY) + SET(MODULE_PROVIDES ${MODULE_NAME}) + ENDIF(NOT MODULE_PROVIDES AND NOT MODULE_HEADERS_ONLY) + SET(MODULE_INCLUDE_DIRS_ABSOLUTE "") + FOREACH(dir ${MODULE_INCLUDE_DIRS}) + GET_FILENAME_COMPONENT(abs_dir ${dir} ABSOLUTE) + SET(MODULE_INCLUDE_DIRS_ABSOLUTE ${MODULE_INCLUDE_DIRS_ABSOLUTE} ${abs_dir}) + ENDFOREACH(dir) + + SET(MODULE_INCLUDE_DIRS ${MODULE_INCLUDE_DIRS_ABSOLUTE} ${CMAKE_CURRENT_SOURCE_DIR}) + + # Qt generates headers in the binary tree + IF(MODULE_QT_MODULE) + SET(MODULE_INCLUDE_DIRS ${MODULE_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR}) + ENDIF(MODULE_QT_MODULE) + + CONFIGURE_FILE(${MITK_SOURCE_DIR}/CMake/moduleConf.cmake.in ${MITK_MODULES_CONF_DIR}/${MODULE_NAME}Config.cmake @ONLY) + ENDIF(NOT MODULE_QT_MODULE OR MITK_USE_QT) +ENDMACRO(_MITK_CREATE_MODULE_CONF) diff --git a/CMake/mitkMacroCreateModuleTests.cmake b/CMake/mitkMacroCreateModuleTests.cmake new file mode 100644 index 0000000000..978c3d04de --- /dev/null +++ b/CMake/mitkMacroCreateModuleTests.cmake @@ -0,0 +1,71 @@ +# +# Create tests and testdriver for this module +# +# Usage: MITK_CREATE_MODULE_TESTS( [EXTRA_DRIVER_INIT init_code] ) +# +# EXTRA_DRIVER_INIT is inserted as c++ code in the testdriver and will be executed before each test +# +MACRO(MITK_CREATE_MODULE_TESTS) + MACRO_PARSE_ARGUMENTS(MODULE_TEST + "EXTRA_DRIVER_INIT;EXTRA_DRIVER_INCLUDE" "" ${ARGN}) + + IF(BUILD_TESTING AND MODULE_IS_ENABLED) + SET(OLD_MOC_H_FILES ${MOC_H_FILES}) + SET(MOC_H_FILES) + INCLUDE(files.cmake) + INCLUDE_DIRECTORIES(.) + + IF(DEFINED MOC_H_FILES) + QT4_WRAP_CPP(MODULE_TEST_GENERATED_MOC_CPP ${MOC_H_FILES}) + ENDIF(DEFINED MOC_H_FILES) + + SET(CMAKE_TESTDRIVER_BEFORE_TESTMAIN "mitk::LoggingBackend::Register(); ${MODULE_TEST_EXTRA_DRIVER_INIT};") + SET(CMAKE_TESTDRIVER_AFTER_TESTMAIN "mitk::LoggingBackend::Unregister();") + IF(NOT MODULE_TEST_EXTRA_DRIVER_INCLUDE) + # this is necessary to make the LoggingBackend calls available if nothing else is included + SET(MODULE_TEST_EXTRA_DRIVER_INCLUDE "mitkLog.h") + ENDIF(NOT MODULE_TEST_EXTRA_DRIVER_INCLUDE) + + CREATE_TEST_SOURCELIST(MODULETEST_SOURCE ${MODULE_NAME}TestDriver.cpp + ${MODULE_TESTS} ${MODULE_IMAGE_TESTS} ${MODULE_CUSTOM_TESTS} + EXTRA_INCLUDE ${MODULE_TEST_EXTRA_DRIVER_INCLUDE} + ) + + SET(TESTDRIVER ${MODULE_NAME}TestDriver) + ADD_EXECUTABLE(${TESTDRIVER} ${MODULETEST_SOURCE} ${MODULE_TEST_GENERATED_MOC_CPP}) + TARGET_LINK_LIBRARIES(${TESTDRIVER} ${MODULE_PROVIDES} ${ALL_LIBRARIES}) + + # + # Now tell CMake which tests should be run. This is done automatically + # for all tests in ${KITNAME}_TESTS and ${KITNAME}_IMAGE_TESTS. The IMAGE_TESTS + # are run for each image in the TESTIMAGES list. + # + FOREACH( test ${MODULE_TESTS} ) + GET_FILENAME_COMPONENT(TName ${test} NAME_WE) + ADD_TEST(${TName} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} ${TName}) + ENDFOREACH( test ) + + FOREACH(image ${MODULE_TESTIMAGES} ${ADDITIONAL_TEST_IMAGES} ) + IF(EXISTS ${image}) + SET(IMAGE_FULL_PATH ${image}) + ELSE(EXISTS ${image}) + # todo: maybe search other paths as well + # yes, please in mitk/Testing/Data, too + SET(IMAGE_FULL_PATH ${MITK_SOURCE_DIR}/Core/Code/Testing/Data/${image}) + ENDIF(EXISTS ${image}) + + IF(EXISTS ${IMAGE_FULL_PATH}) + FOREACH( test ${MODULE_IMAGE_TESTS} ) + GET_FILENAME_COMPONENT(TName ${test} NAME_WE) + GET_FILENAME_COMPONENT(ImageName ${IMAGE_FULL_PATH} NAME) + ADD_TEST(${TName}_${ImageName} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} ${TName} ${IMAGE_FULL_PATH}) + ENDFOREACH( test ) + ELSE(EXISTS ${IMAGE_FULL_PATH}) + MESSAGE("!!!!! No such file: ${IMAGE_FULL_PATH} !!!!!") + ENDIF(EXISTS ${IMAGE_FULL_PATH}) + ENDFOREACH( image ) + + SET(MOC_H_FILES ${OLD_MOC_H_FILES}) + ENDIF(BUILD_TESTING AND MODULE_IS_ENABLED) + +ENDMACRO(MITK_CREATE_MODULE_TESTS) diff --git a/CMake/MITKPluginHelpers.cmake b/CMake/mitkMacroCreatePlugin.cmake similarity index 100% rename from CMake/MITKPluginHelpers.cmake rename to CMake/mitkMacroCreatePlugin.cmake diff --git a/CMake/mitkMacroEmptyExternalProject.cmake b/CMake/mitkMacroEmptyExternalProject.cmake new file mode 100644 index 0000000000..0a5ad4b14f --- /dev/null +++ b/CMake/mitkMacroEmptyExternalProject.cmake @@ -0,0 +1,17 @@ + +# +# Convenient macro allowing to define a "empty" project in case an external one is provided +# using for example _DIR. +# Doing so allows to keep the external project dependency system happy. +# +MACRO(mitkMacroEmptyExternalProject proj dependencies) + + ExternalProject_Add(${proj} + DOWNLOAD_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + DEPENDS + ${dependencies} + ) +ENDMACRO() diff --git a/CMake/ToolExtensionHelpers.cmake b/CMake/mitkMacroGenerateToolsLibrary.cmake similarity index 100% rename from CMake/ToolExtensionHelpers.cmake rename to CMake/mitkMacroGenerateToolsLibrary.cmake diff --git a/CMake/mitkMacroInstall.cmake b/CMake/mitkMacroInstall.cmake new file mode 100644 index 0000000000..8efff82f78 --- /dev/null +++ b/CMake/mitkMacroInstall.cmake @@ -0,0 +1,126 @@ +# +# MITK specific install macro +# +# On Mac everything is installed for each bundle listed in MACOSX_BUNDLE_NAMES +# by replacing the DESTINATION parameter. Everything else is passed to the CMake INSTALL command +# +# Usage: MITK_INSTALL( ) +# +MACRO(MITK_INSTALL) + + SET(ARGS ${ARGN}) + + SET(install_directories "") + LIST(FIND ARGS DESTINATION _destination_index) + # SET(_install_DESTINATION "") + IF(_destination_index GREATER -1) + MESSAGE(SEND_ERROR "MITK_INSTALL macro must not be called with a DESTINATION parameter.") + ### This code was a try to replace a given DESTINATION + #MATH(EXPR _destination_index ${_destination_index} + 1) + #LIST(GET ARGS ${_destination_index} _install_DESTINATION) + #STRING(REGEX REPLACE ^bin "" _install_DESTINATION ${_install_DESTINATION}) + ELSE() + IF(NOT MACOSX_BUNDLE_NAMES) + INSTALL(${ARGS} DESTINATION bin) + ELSE() + FOREACH(bundle_name ${MACOSX_BUNDLE_NAMES}) + INSTALL(${ARGS} DESTINATION ${bundle_name}.app/Contents/MacOS/${_install_DESTINATION}) + ENDFOREACH() + ENDIF() + ENDIF() + +ENDMACRO() + +# Fix _target_location +# This is used in several install macros +MACRO(_fixup_target) + + INSTALL(CODE " + MACRO(gp_item_default_embedded_path_override item default_embedded_path_var) + GET_FILENAME_COMPONENT(_item_name \"\${item}\" NAME) + GET_FILENAME_COMPONENT(_item_path \"\${item}\" PATH) + IF(_item_name MATCHES \"liborg\") + IF(APPLE) + SET(full_path \"full_path-NOTFOUND\") + MESSAGE(\"override: \${item}\") + FILE (GLOB_RECURSE full_path \${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir}/\${_item_name} ) + MESSAGE(\"find file: \${full_path}\") + + GET_FILENAME_COMPONENT(_item_path \"\${full_path}\" PATH) + + STRING(REPLACE + \${CMAKE_INSTALL_PREFIX} + @executable_path/../../../ \${default_embedded_path_var} \"\${_item_path}\" ) + MESSAGE(\"override result: \${\${default_embedded_path_var}}\") + ELSE() + SET(\${default_embedded_path_var} \"\${_item_path}\") + ENDIF() + ENDIF() + + #IF(_item_name MATCHES \"^liborg\") + # IF(APPLE) + # MESSAGE(\"override: \${item}\") + # STRING(REPLACE + # ${CMAKE_INSTALL_PREFIX} + # @loader_path/../ \${default_embedded_path_var} \"\${_item_path}\" ) + # ELSE(APPLE) + # SET(\${default_embedded_path_var} \"\${_item_path}\") + # ENDIF(APPLE) + #ENDIF() + ENDMACRO(gp_item_default_embedded_path_override) + + MACRO(gp_resolved_file_type_override file type) + IF(NOT APPLE) + GET_FILENAME_COMPONENT(_file_path \"\${file}\" PATH) + GET_FILENAME_COMPONENT(_file_name \"\${file}\" NAME) + IF(_file_path MATCHES \"^\${CMAKE_INSTALL_PREFIX}\") + SET(\${type} \"local\") + # On linux, rpaths are removed from the plugins + # if installing more than on application. This override + # should prevent this. + IF(_file_name MATCHES \"^liborg\") + SET(\${type} \"system\") + ENDIF() + ENDIF() + ENDIF() + ENDMACRO(gp_resolved_file_type_override) + + SET(_rpath_relative ${MITK_INSTALL_RPATH_RELATIVE}) + IF(_rpath_relative AND NOT APPLE) + IF(UNIX OR MINGW) + MACRO(gp_resolve_item_override context item exepath dirs resolved_item_var resolved_var) + IF(\${item} MATCHES \"blueberry_osgi\") + SET(\${resolved_item_var} \"\${exepath}/BlueBerry/org.blueberry.osgi/bin/\${item}\") + SET(\${resolved_var} 1) + ENDIF() + ENDMACRO() + ENDIF() + ENDIF() + + IF(\"${_install_GLOB_PLUGINS}\" STREQUAL \"TRUE\") + file(GLOB_RECURSE PLUGINS + # glob for all blueberry bundles of this application + \"\${CMAKE_INSTALL_PREFIX}/${_bundle_dest_dir}/liborg*${CMAKE_SHARED_LIBRARY_SUFFIX}\" + # glob for Qt plugins + \"\${CMAKE_INSTALL_PREFIX}/${${_target_location}_qt_plugins_install_dir}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\") + ELSE() + file(GLOB_RECURSE PLUGINS + # glob for Qt plugins + \"\${CMAKE_INSTALL_PREFIX}/${${_target_location}_qt_plugins_install_dir}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\") + ENDIF() + + # use custom version of BundleUtilities + message(\"globbed plugins: \${PLUGINS}\") + SET(PLUGIN_DIRS ${DIRS}) + LIST(APPEND PLUGINS ${_install_PLUGINS}) + foreach(_plugin \${PLUGINS}) + get_filename_component(_pluginpath \${_plugin} PATH) + list(APPEND PLUGIN_DIRS \${_pluginpath}) + endforeach(_plugin) + list(APPEND DIRS \${PLUGIN_DIRS}) + # use custom version of BundleUtilities + SET(CMAKE_MODULE_PATH ${MITK_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH} ) + include(BundleUtilities) + fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/${_target_location}\" \"\${PLUGINS}\" \"\${PLUGIN_DIRS}\") + ") +ENDMACRO() diff --git a/CMake/mitkMacroInstallHelperApp.cmake b/CMake/mitkMacroInstallHelperApp.cmake new file mode 100644 index 0000000000..850a5a9c96 --- /dev/null +++ b/CMake/mitkMacroInstallHelperApp.cmake @@ -0,0 +1,100 @@ +# MITK specific cross plattform install macro +# +# Usage: MITK_INSTALL_HELPER_APP(target1 [target2] ....) +# +MACRO(MITK_INSTALL_HELPER_APP) + MACRO_PARSE_ARGUMENTS(_install "TARGETS;EXECUTABLES;PLUGINS;LIBRARY_DIRS" "GLOB_PLUGINS" ${ARGN}) + LIST(APPEND _install_TARGETS ${_install_DEFAULT_ARGS}) + + # TODO: how to supply to correct intermediate directory?? + # CMAKE_CFG_INTDIR is not expanded to actual values inside the INSTALL(CODE "...") macro ... + SET(intermediate_dir ) + IF(WIN32 AND NOT MINGW) + SET(intermediate_dir Release) + ENDIF() + + SET(DIRS + ${VTK_RUNTIME_LIBRARY_DIRS}/${intermediate_dir} + ${ITK_LIBRARY_DIRS}/${intermediate_dir} + ${QT_LIBRARY_DIR} + ${MITK_BINARY_DIR}/bin/${intermediate_dir} + ${_install_LIBRARY_DIRS} + ) + + IF(APPLE) + LIST(APPEND DIRS "/usr/lib") + ENDIF(APPLE) + + if(QT_LIBRARY_DIR MATCHES "^(/lib/|/lib32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/lib64/|/usr/X11R6/)") + set(_qt_is_system_qt 1) + endif() + + FOREACH(_target ${_install_EXECUTABLES}) + + SET(_qt_plugins_install_dirs "") + SET(_qt_conf_install_dirs "") + SET(_target_locations "") + + GET_FILENAME_COMPONENT(_target_name ${_target} NAME) + + IF(APPLE) + IF(NOT MACOSX_BUNDLE_NAMES) + SET(_qt_conf_install_dirs bin) + SET(_target_locations bin/${_target_name}) + SET(${_target_locations}_qt_plugins_install_dir bin) + INSTALL(PROGRAMS ${_target} DESTINATION bin) + ELSE() + FOREACH(bundle_name ${MACOSX_BUNDLE_NAMES}) + LIST(APPEND _qt_conf_install_dirs ${bundle_name}.app/Contents/Resources) + SET(_current_target_location ${bundle_name}.app/Contents/MacOS/${_target_name}) + LIST(APPEND _target_locations ${_current_target_location}) + SET(${_current_target_location}_qt_plugins_install_dir ${bundle_name}.app/Contents/MacOS) + + INSTALL(PROGRAMS ${_target} DESTINATION ${bundle_name}.app/Contents/MacOS/) + ENDFOREACH() + ENDIF(NOT MACOSX_BUNDLE_NAMES) + ELSE() + SET(_target_locations bin/${_target_name}) + SET(${_target_locations}_qt_plugins_install_dir bin) + SET(_qt_conf_install_dirs bin) + INSTALL(PROGRAMS ${_target} DESTINATION bin) + ENDIF() + + FOREACH(_target_location ${_target_locations}) + IF(NOT _qt_is_system_qt) + IF(QT_PLUGINS_DIR) + INSTALL(DIRECTORY "${QT_PLUGINS_DIR}" + DESTINATION ${${_target_location}_qt_plugins_install_dir} + CONFIGURATIONS Release + FILES_MATCHING REGEX "[^d]4?\\${CMAKE_SHARED_LIBRARY_SUFFIX}" + ) + + INSTALL(DIRECTORY "${QT_PLUGINS_DIR}" + DESTINATION ${${_target_location}_qt_plugins_install_dir} + CONFIGURATIONS Debug + FILES_MATCHING REGEX "d4?\\${CMAKE_SHARED_LIBRARY_SUFFIX}" + ) + ENDIF() + ENDIF() + _fixup_target() + ENDFOREACH(_target_location) + + IF(NOT _qt_is_system_qt) + #-------------------------------------------------------------------------------- + # install a qt.conf file + # this inserts some cmake code into the install script to write the file + SET(_qt_conf_plugin_install_prefix .) + IF(APPLE) + SET(_qt_conf_plugin_install_prefix ./MacOS) + ENDIF() + FOREACH(_qt_conf_install_dir ${_qt_conf_install_dirs}) + INSTALL(CODE "file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${_qt_conf_install_dir}/qt.conf\" \" +[Paths] +Prefix=${_qt_conf_plugin_install_prefix} +\")") + ENDFOREACH() + ENDIF() + + ENDFOREACH() + +ENDMACRO(MITK_INSTALL_HELPER_APP) diff --git a/CMake/mitkMacroInstallTargets.cmake b/CMake/mitkMacroInstallTargets.cmake new file mode 100644 index 0000000000..4de121f9ac --- /dev/null +++ b/CMake/mitkMacroInstallTargets.cmake @@ -0,0 +1,112 @@ +# +# MITK specific cross plattform install macro +# +# Usage: MITK_INSTALL_TARGETS(target1 [target2] ....) +# +MACRO(MITK_INSTALL_TARGETS) + MACRO_PARSE_ARGUMENTS(_install "TARGETS;EXECUTABLES;PLUGINS;LIBRARY_DIRS" "GLOB_PLUGINS" ${ARGN}) + LIST(APPEND _install_TARGETS ${_install_DEFAULT_ARGS}) + + # TODO: how to supply to correct intermediate directory?? + # CMAKE_CFG_INTDIR is not expanded to actual values inside the INSTALL(CODE "...") macro ... + SET(intermediate_dir ) + IF(WIN32 AND NOT MINGW) + SET(intermediate_dir Release) + ENDIF() + + SET(DIRS + ${VTK_RUNTIME_LIBRARY_DIRS}/${intermediate_dir} + ${ITK_LIBRARY_DIRS}/${intermediate_dir} + ${QT_LIBRARY_DIR} + ${MITK_BINARY_DIR}/bin/${intermediate_dir} + ${_install_LIBRARY_DIRS} + ) + + if(QT_LIBRARY_DIR MATCHES "^(/lib/|/lib32/|/lib64/|/usr/lib/|/usr/lib32/|/usr/lib64/|/usr/X11R6/)") + set(_qt_is_system_qt 1) + endif() + + FOREACH(_target ${_install_EXECUTABLES}) + + GET_TARGET_PROPERTY(_is_bundle ${_target} MACOSX_BUNDLE) + + SET(_qt_plugins_install_dirs "") + SET(_qt_conf_install_dirs "") + SET(_target_locations "") + + IF(APPLE) + IF(_is_bundle) + SET(_target_locations ${_target}.app) + SET(${_target_locations}_qt_plugins_install_dir ${_target}.app/Contents/MacOS) + SET(_bundle_dest_dir ${_target}.app/Contents/MacOS) + SET(_qt_plugins_for_current_bundle ${_target}.app/Contents/MacOS) + SET(_qt_conf_install_dirs ${_target}.app/Contents/Resources) + INSTALL(TARGETS ${_target} BUNDLE DESTINATION . ) + ELSE() + IF(NOT MACOSX_BUNDLE_NAMES) + SET(_qt_conf_install_dirs bin) + SET(_target_locations bin/${_target}) + SET(${_target_locations}_qt_plugins_install_dir bin) + INSTALL(TARGETS ${_target} RUNTIME DESTINATION bin) + ELSE() + FOREACH(bundle_name ${MACOSX_BUNDLE_NAMES}) + LIST(APPEND _qt_conf_install_dirs ${bundle_name}.app/Contents/Resources) + SET(_current_target_location ${bundle_name}.app/Contents/MacOS/${_target}) + LIST(APPEND _target_locations ${_current_target_location}) + SET(${_current_target_location}_qt_plugins_install_dir ${bundle_name}.app/Contents/MacOS) + MESSAGE( " SET(${_current_target_location}_qt_plugins_install_dir ${bundle_name}.app/Contents/MacOS) ") + + INSTALL(TARGETS ${_target} RUNTIME DESTINATION ${bundle_name}.app/Contents/MacOS/) + ENDFOREACH() + ENDIF() + ENDIF() + ELSE() + SET(_target_locations bin/${_target}${CMAKE_EXECUTABLE_SUFFIX}) + SET(${_target_locations}_qt_plugins_install_dir bin) + SET(_qt_conf_install_dirs bin) + INSTALL(TARGETS ${_target} RUNTIME DESTINATION bin) + ENDIF() + + FOREACH(_target_location ${_target_locations}) + IF(NOT _qt_is_system_qt) + + IF(QT_PLUGINS_DIR) + INSTALL(DIRECTORY "${QT_PLUGINS_DIR}" + DESTINATION ${${_target_location}_qt_plugins_install_dir} + CONFIGURATIONS Release + FILES_MATCHING REGEX "[^d]4?\\${CMAKE_SHARED_LIBRARY_SUFFIX}" + ) + + INSTALL(DIRECTORY "${QT_PLUGINS_DIR}" + DESTINATION ${${_target_location}_qt_plugins_install_dir} + CONFIGURATIONS Debug + FILES_MATCHING REGEX "d4?\\${CMAKE_SHARED_LIBRARY_SUFFIX}" + ) + + ENDIF() + ENDIF() + _fixup_target() + ENDFOREACH() + + IF(NOT _qt_is_system_qt) + + #-------------------------------------------------------------------------------- + # install a qt.conf file + # this inserts some cmake code into the install script to write the file + SET(_qt_conf_plugin_install_prefix .) + IF(APPLE) + SET(_qt_conf_plugin_install_prefix ./MacOS) + ENDIF() + + FOREACH(_qt_conf_install_dir ${_qt_conf_install_dirs}) + INSTALL(CODE "file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${_qt_conf_install_dir}/qt.conf\" \" +[Paths] +Prefix=${_qt_conf_plugin_install_prefix} +\")") + ENDFOREACH() + + ENDIF() + + ENDFOREACH() + +ENDMACRO() diff --git a/CMake/mitkMacroMultiplexPicType.cmake b/CMake/mitkMacroMultiplexPicType.cmake new file mode 100644 index 0000000000..ba19ae9de6 --- /dev/null +++ b/CMake/mitkMacroMultiplexPicType.cmake @@ -0,0 +1,20 @@ +# +# MITK_MULTIPLEX_PICTYPE: generate separated source files for different +# data types to reduce memory consumption of compiler during template +# instantiation +# +# Param "file" should be named like mitkMyAlgo-TYPE.cpp +# in the file, every occurence of @TYPE@ is replaced by the +# datatype. For each datatype, a new file mitkMyAlgo-datatype.cpp +# is generated and added to CPP_FILES_GENERATED. +# +MACRO(MITK_MULTIPLEX_PICTYPE file) + SET(TYPES "double;float;int;unsigned int;short;unsigned short;char;unsigned char") + FOREACH(TYPE ${TYPES}) + # create filename for destination + STRING(REPLACE " " "_" quoted_type "${TYPE}") + STRING(REPLACE TYPE ${quoted_type} quoted_file ${file}) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file} ${CMAKE_CURRENT_BINARY_DIR}/${quoted_file} @ONLY) + SET(CPP_FILES_GENERATED ${CPP_FILES_GENERATED} ${CMAKE_CURRENT_BINARY_DIR}/${quoted_file}) + ENDFOREACH(TYPE) +ENDMACRO(MITK_MULTIPLEX_PICTYPE) diff --git a/CMake/mitkMacroUseModule.cmake b/CMake/mitkMacroUseModule.cmake new file mode 100644 index 0000000000..21e84eaa10 --- /dev/null +++ b/CMake/mitkMacroUseModule.cmake @@ -0,0 +1,47 @@ +MACRO(MITK_USE_MODULE) + SET(DEPENDS "") + SET(DEPENDS_BEFORE "not initialized") + # check for each parameter if it is a package (3rd party) + FOREACH(package ${ARGN}) + IF(EXISTS "${MITK_MODULES_PACKAGE_DEPENDS_DIR}/MITK_${package}_Config.cmake") + LIST(APPEND PACKAGE_DEPENDS ${package}) + ELSE() + LIST(APPEND DEPENDS ${package}) + ENDIF() + ENDFOREACH(package) + WHILE(NOT "${DEPENDS}" STREQUAL "${DEPENDS_BEFORE}") + SET(DEPENDS_BEFORE ${DEPENDS}) + FOREACH(dependency ${DEPENDS}) + INCLUDE(${MITK_MODULES_CONF_DIR}/${dependency}Config.cmake) + LIST(APPEND DEPENDS ${${dependency}_DEPENDS}) + LIST(APPEND PACKAGE_DEPENDS ${${dependency}_PACKAGE_DEPENDS}) + ENDFOREACH(dependency) + IF(DEPENDS) + LIST(REMOVE_DUPLICATES DEPENDS) + LIST(SORT DEPENDS) + ENDIF(DEPENDS) + IF(PACKAGE_DEPENDS) + LIST(REMOVE_DUPLICATES PACKAGE_DEPENDS) + LIST(SORT PACKAGE_DEPENDS) + ENDIF(PACKAGE_DEPENDS) + ENDWHILE() + # CMake Debug + FOREACH(dependency ${DEPENDS} ${MODULE_DEPENDS_INTERNAL}) + INCLUDE(${MITK_MODULES_CONF_DIR}/${dependency}Config.cmake) + SET(ALL_INCLUDE_DIRECTORIES ${ALL_INCLUDE_DIRECTORIES} ${${dependency}_INCLUDE_DIRS}) + SET(ALL_LIBRARIES ${ALL_LIBRARIES} ${${dependency}_PROVIDES}) + SET(ALL_LIBRARY_DIRS ${ALL_LIBRARY_DIRS} ${${dependency}_LIBRARY_DIRS}) + ENDFOREACH(dependency) + + FOREACH(package ${PACKAGE_DEPENDS}) + INCLUDE(${MITK_MODULES_PACKAGE_DEPENDS_DIR}/MITK_${package}_Config.cmake) + #SET(ALL_INCLUDE_DIRECTORIES ${ALL_INCLUDE_DIRECTORIES} ${${package}_INCLUDE_DIRS}) + # SET(ALL_LIBRARIES ${ALL_LIBRARIES} ${${package}_LIBRARIES}) + ENDFOREACH(package) + SET(ALL_LIBRARIES ${ALL_LIBRARIES} ${MODULE_ADDITIONAL_LIBS}) + SET(ALL_INCLUDE_DIRECTORIES ${ALL_INCLUDE_DIRECTORIES} ${MODULE_INCLUDE_DIRS} ${MODULE_INTERNAL_INCLUDE_DIRS} ${MITK_MODULES_CONF_DIR}) + IF(ALL_LIBRARY_DIRS) + LIST(REMOVE_DUPLICATES ALL_LIBRARY_DIRS) + ENDIF(ALL_LIBRARY_DIRS) + +ENDMACRO(MITK_USE_MODULE) diff --git a/CMake/mitkSetupBlueBerry.cmake b/CMake/mitkSetupBlueBerry.cmake new file mode 100644 index 0000000000..aa16c54abf --- /dev/null +++ b/CMake/mitkSetupBlueBerry.cmake @@ -0,0 +1,24 @@ +set(BLUEBERRY_INSTALL_RPATH_RELATIVE ${MITK_INSTALL_RPATH_RELATIVE} + CACHE BOOL "Use relative rpath entries when installing" FORCE) + +set(BLUEBERRY_USE_QT ${MITK_USE_QT} CACHE BOOL "Use the Qt GUI toolkit" FORCE) +mark_as_advanced(BLUEBERRY_USE_QT) + +# Clear the cache variables containing plugin base directories +set(MITK_MODULES_PLUGIN_SOURCE_DIRS "" CACHE INTERNAL "List of base plugin source directories" FORCE) +set(MITK_MODULES_PLUGIN_OUTPUT_DIRS "" CACHE INTERNAL "List of base plugin output directories" FORCE) +set(MITK_CORE_PLUGIN_OUTPUT_DIRS "" CACHE INTERNAL "List of base plugin output directories" FORCE) +set(MITK_CORE_PLUGIN_SOURCE_DIRS "" CACHE INTERNAL "List of base plugin source directories" FORCE) + +set(mbilog_DIR "${mbilog_BINARY_DIR}") + +if(MITK_BUILD_ALL_PLUGINS) + set(BLUEBERRY_BUILD_ALL_PLUGINS ON) +endif() + +add_subdirectory(BlueBerry) + +set(BlueBerry_DIR ${CMAKE_CURRENT_BINARY_DIR}/BlueBerry + CACHE PATH "The directory containing a CMake configuration file for BlueBerry" FORCE) +include(${BlueBerry_DIR}/BlueBerryConfig.cmake) +include(mitkMacroCreatePlugin) diff --git a/CMake/mitkSetupCPack.cmake b/CMake/mitkSetupCPack.cmake new file mode 100644 index 0000000000..bab79daed4 --- /dev/null +++ b/CMake/mitkSetupCPack.cmake @@ -0,0 +1,50 @@ +# +# First, set the generator variable +# +IF(NOT CPACK_GENERATOR) + IF(WIN32) + FIND_PROGRAM(NSIS_MAKENSIS NAMES makensis + PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS] + DOC "Where is makensis.exe located" + ) + + IF(NOT NSIS_MAKENSIS) + SET(CPACK_GENERATOR ZIP) + ELSE() + SET(CPACK_GENERATOR "NSIS;ZIP") + + ENDIF(NOT NSIS_MAKENSIS) + ELSE() + IF(APPLE) + SET(CPACK_GENERATOR DragNDrop) + ELSE() + SET(CPACK_GENERATOR TGZ) + ENDIF() + ENDIF() +ENDIF(NOT CPACK_GENERATOR) + +# include required mfc libraries +INCLUDE(InstallRequiredSystemLibraries) + +SET(CPACK_PACKAGE_NAME "MITK") +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MITK is a medical image processing tool") +SET(CPACK_PACKAGE_VENDOR "German Cancer Research Center (DKFZ)") +SET(CPACK_CREATE_DESKTOP_LINKS "ExtApp") +SET(CPACK_PACKAGE_DESCRIPTION_FILE "${MITK_SOURCE_DIR}/MITKCopyright.txt") +SET(CPACK_RESOURCE_FILE_LICENSE "${MITK_SOURCE_DIR}/MITKCopyright.txt") +SET(CPACK_PACKAGE_VERSION_MAJOR "${MITK_VERSION_MAJOR}") +SET(CPACK_PACKAGE_VERSION_MINOR "${MITK_VERSION_MINOR}") + +# tell cpack to strip all debug symbols from all files +SET(CPACK_STRIP_FILES ON) + +# append revision number if available +IF(MITK_WC_REVISION_HASH) + STRING(SUBSTRING ${MITK_WC_REVISION_HASH} 0 6 git_hash) + SET(CPACK_PACKAGE_VERSION_PATCH "${MITK_VERSION_PATCH}_r${git_hash}") +ELSE() + SET(CPACK_PACKAGE_VERSION_PATCH "${MITK_VERSION_PATCH}") +ENDIF() + + + diff --git a/CMake/mitkSetupVariables.cmake b/CMake/mitkSetupVariables.cmake new file mode 100644 index 0000000000..adc3f0bf39 --- /dev/null +++ b/CMake/mitkSetupVariables.cmake @@ -0,0 +1,104 @@ +if(MITK_BUILD_ALL_PLUGINS) + set(MITK_BUILD_ALL_PLUGINS_OPTION "FORCE_BUILD_ALL") +endif() + +set(LIBPOSTFIX "") + +# MITK_VERSION +set(MITK_VERSION_MAJOR "0") +set(MITK_VERSION_MINOR "15") +set(MITK_VERSION_PATCH "1") +set(MITK_VERSION_STRING "${MITK_VERSION_MAJOR}.${MITK_VERSION_MINOR}.${MITK_VERSION_PATCH}") + +if(NOT UNIX AND NOT MINGW) + set(MITK_WIN32_FORCE_STATIC "STATIC" CACHE INTERNAL "Use this variable to always build static libraries on non-unix platforms") +endif() + +# build the MITK_INCLUDE_DIRS variable +set(MITK_INCLUDE_DIRS ${PROJECT_BINARY_DIR}) +set(CORE_DIRECTORIES DataManagement Algorithms IO Rendering Interactions Controllers) +foreach(d ${CORE_DIRECTORIES}) + list(APPEND MITK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/Core/Code/${d}) +endforeach() +#list(APPEND MITK_INCLUDE_DIRS + #${ITK_INCLUDE_DIRS} + #${VTK_INCLUDE_DIRS} +# ) + +foreach(d Utilities Utilities/ipPic Utilities/IIL4MITK Utilities/pic2vtk Utilities/tinyxml Utilities/mbilog) + list(APPEND MITK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}) +endforeach() + +if(WIN32) + list(APPEND MITK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ipPic/win32) +endif() + +# additional include dirs variables +set(ANN_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ann/include) +set(IPSEGMENTATION_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ipSegmentation) + +# variables containing librariy names +set(MITK_CORE_LIBRARIES mitkCore) +set(VTK_FOR_MITK_LIBRARIES + vtkGraphics + vtkCommon + vtkFiltering + vtkftgl + vtkGraphics + vtkHybrid + vtkImaging + vtkIO + vtkParallel + vtkRendering + vtkVolumeRendering + vtkWidgets + ${VTK_JPEG_LIBRARIES} + ${VTK_PNG_LIBRARIES} + ${VTK_ZLIB_LIBRARIES} + ${VTK_EXPAT_LIBRARIES} + ${VTK_FREETYPE_LIBRARIES} + ) +# TODO: maybe solve this with lib depends mechanism of CMake +set(UTIL_FOR_MITK_LIBRARIES mitkIpPic mitkIpFunc mbilog) +set(LIBRARIES_FOR_MITK_CORE + ${UTIL_FOR_MITK_LIBRARIES} + ${VTK_FOR_MITK_LIBRARIES} + ${ITK_LIBRARIES} + ) +set(MITK_LIBRARIES + ${MITK_CORE_LIBRARIES} + ${LIBRARIES_FOR_MITK_CORE} + pic2vtk + IIL4MITK + ipSegmentation + ann + ) + +# variables containing link directories +set(MITK_LIBRARY_DIRS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) +set(MITK_LINK_DIRECTORIES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${ITK_LIBRARY_DIRS} ${VTK_LIBRARY_DIRS}) + +# Qt support +if(MITK_USE_QT) + find_package(Qt4 REQUIRED) + + set(QMITK_INCLUDE_DIRS + ${MITK_INCLUDE_DIRS} + ${CMAKE_CURRENT_SOURCE_DIR}/CoreUI/Qmitk + ${PROJECT_BINARY_DIR}/CoreUI/Qmitk + ) + + foreach(d QmitkApplicationBase QmitkModels QmitkPropertyObservers) + list(APPEND QMITK_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/CoreUI/Qmitk/${d}) + endforeach() + list(APPEND QMITK_INCLUDE_DIRS ${QWT_INCLUDE_DIR}) + + set(QMITK_LIBRARIES Qmitk ${MITK_LIBRARIES} ${QT_LIBRARIES}) + set(QMITK_LINK_DIRECTORIES ${MITK_LINK_DIRECTORIES} ${QT_LIBRARY_DIR}) +endif() + +if(MITK_BUILD_ALL_PLUGINS) + set(MITK_BUILD_ALL_PLUGINS_OPTION "FORCE_BUILD_ALL") +endif() + + diff --git a/CMake/mitkSuperBuildPlugins.cmake b/CMake/mitkSuperBuildPlugins.cmake new file mode 100644 index 0000000000..6fdec1688d --- /dev/null +++ b/CMake/mitkSuperBuildPlugins.cmake @@ -0,0 +1,14 @@ +set(MITK_SUPERBUILD_PLUGINS + org.mitk.gui.qt.basicimageprocessing + org.mitk.gui.qt.datamanager + org.mitk.gui.qt.diffusionimaging + org.mitk.gui.qt.imagecropper + org.mitk.gui.qt.imagestatistics + org.mitk.gui.qt.isosurface + org.mitk.gui.qt.materialeditor + org.mitk.gui.qt.measurement + org.mitk.gui.qt.regiongrowing + org.mitk.gui.qt.segmentation + org.mitk.gui.qt.simplemeasurement + org.mitk.gui.qt.volumevisualization +) diff --git a/CMakeExternals/Boost.cmake b/CMakeExternals/Boost.cmake new file mode 100644 index 0000000000..e52fb87a1a --- /dev/null +++ b/CMakeExternals/Boost.cmake @@ -0,0 +1,33 @@ +#----------------------------------------------------------------------------- +# Boost +#----------------------------------------------------------------------------- + +IF(MITK_USE_Boost) + + # Sanity checks + IF(DEFINED BOOST_ROOT AND NOT EXISTS ${BOOST_ROOT}) + MESSAGE(FATAL_ERROR "BOOST_ROOT variable is defined but corresponds to non-existing directory") + ENDIF() + + SET(proj Boost) + SET(proj_DEPENDENCIES ) + SET(Boost_DEPENDS ${proj}) + + IF(NOT DEFINED BOOST_ROOT) + ExternalProject_Add(${proj} + URL http://mitk.org/download/thirdparty/boost_1_45_0.tar.bz2 + SOURCE_DIR ${proj}-src + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + DEPENDS ${proj_DEPENDENCIES} + ) + SET(BOOST_ROOT ${CMAKE_CURRENT_BINARY_DIR}/${proj}-src) + + ELSE() + + mitkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") + + ENDIF() + +ENDIF() diff --git a/CMakeExternals/CTK.cmake b/CMakeExternals/CTK.cmake new file mode 100644 index 0000000000..922d0aaf43 --- /dev/null +++ b/CMakeExternals/CTK.cmake @@ -0,0 +1,37 @@ +#----------------------------------------------------------------------------- +# CTK +#----------------------------------------------------------------------------- + +IF(MITK_USE_CTK) + + # Sanity checks + IF(DEFINED CTK_DIR AND NOT EXISTS ${CTK_DIR}) + MESSAGE(FATAL_ERROR "CTK_DIR variable is defined but corresponds to non-existing directory") + ENDIF() + + SET(proj CTK) + SET(proj_DEPENDENCIES ) + SET(CTK_DEPENDS ${proj}) + + IF(NOT DEFINED CTK_DIR) + ExternalProject_Add(${proj} + GIT_REPOSITORY git://github.com/commontk/CTK.git + BINARY_DIR ${proj}-build + INSTALL_COMMAND "" + CMAKE_GENERATOR ${gen} + CMAKE_ARGS + ${ep_common_args} + -DDESIRED_QT_VERSION:STRING=4 + -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} + -DCTK_LIB_DICOM/Widgets:BOOL=ON + DEPENDS ${proj_DEPENDENCIES} + ) + SET(CTK_DIR ${CMAKE_CURRENT_BINARY_DIR}/${proj}-build) + + ELSE() + + mitkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") + + ENDIF() + +ENDIF() diff --git a/CMakeExternals/DCMTK.cmake b/CMakeExternals/DCMTK.cmake new file mode 100644 index 0000000000..4e5ad88126 --- /dev/null +++ b/CMakeExternals/DCMTK.cmake @@ -0,0 +1,45 @@ +#----------------------------------------------------------------------------- +# DCMTK +#----------------------------------------------------------------------------- + +IF(MITK_USE_DCMTK) + + # Sanity checks + IF(DEFINED DCMTK_DIR AND NOT EXISTS ${DCMTK_DIR}) + MESSAGE(FATAL_ERROR "DCMTK_DIR variable is defined but corresponds to non-existing directory") + ENDIF() + + SET(proj DCMTK) + SET(proj_DEPENDENCIES ) + SET(DCMTK_DEPENDS ${proj}) + + IF(NOT DEFINED DCMTK_DIR) + IF(UNIX) + SET(DCMTK_CXX_FLAGS "-fPIC") + SET(DCMTK_C_FLAGS "-fPIC") + ENDIF(UNIX) + IF(DCMTK_DICOM_ROOT_ID) + SET(DCMTK_CXX_FLAGS "${DCMTK_CXX_FLAGS} -DSITE_UID_ROOT=\\\"${DCMTK_DICOM_ROOT_ID}\\\"") + SET(DCMTK_C_FLAGS "${DCMTK_CXX_FLAGS} -DSITE_UID_ROOT=\\\"${DCMTK_DICOM_ROOT_ID}\\\"") + ENDIF() + ExternalProject_Add(${proj} + URL http://mitk.org/download/thirdparty/dcmtk-3.6.0.tar.gz + INSTALL_DIR ${proj}-install + CMAKE_GENERATOR ${gen} + CMAKE_ARGS + ${ep_common_args} + -DDCMTK_OVERWRITE_WIN32_COMPILER_FLAGS:BOOL=OFF + -DBUILD_SHARED_LIBS:BOOL=OFF + "-DCMAKE_CXX_FLAGS:STRING=${ep_common_CXX_FLAGS} ${DCMTK_CXX_FLAGS}" + "-DCMAKE_C_FLAGS:STRING=${ep_common_C_FLAGS} ${DCMTK_C_FLAGS}" + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/${proj}-install + DEPENDS ${proj_DEPENDENCIES} + ) + SET(DCMTK_DIR {CMAKE_CURRENT_BINARY_DIR}/${proj}-install) + + ELSE() + + mitkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") + + ENDIF() +ENDIF() diff --git a/CMakeExternals/GDCM.cmake b/CMakeExternals/GDCM.cmake new file mode 100644 index 0000000000..408bd9487e --- /dev/null +++ b/CMakeExternals/GDCM.cmake @@ -0,0 +1,34 @@ +#----------------------------------------------------------------------------- +# GDCM +#----------------------------------------------------------------------------- + +# Sanity checks +IF(DEFINED GDCM_DIR AND NOT EXISTS ${GDCM_DIR}) + MESSAGE(FATAL_ERROR "GDCM_DIR variable is defined but corresponds to non-existing directory") +ENDIF() + +SET(proj GDCM) +SET(proj_DEPENDENCIES ) +SET(GDCM_DEPENDS ${proj}) + +IF(NOT DEFINED GDCM_DIR) + ExternalProject_Add(${proj} + URL http://mitk.org/download/thirdparty/gdcm-2.0.14.tar.gz + BINARY_DIR ${proj}-build + INSTALL_COMMAND "" + CMAKE_GENERATOR ${gen} + CMAKE_ARGS + ${ep_common_args} + -DBUILD_SHARED_LIBS:BOOL=ON + -DGDCM_BUILD_SHARED_LIBS:BOOL=ON + -DBUILD_TESTING:BOOL=OFF + -DBUILD_EXAMPLES:BOOL=OFF + DEPENDS ${proj_DEPENDENCIES} + ) + SET(GDCM_DIR ${CMAKE_CURRENT_BINARY_DIR}/${proj}-build) + +ELSE() + + mitkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") + +ENDIF() diff --git a/CMakeExternals/ITK.cmake b/CMakeExternals/ITK.cmake new file mode 100644 index 0000000000..94cb65e476 --- /dev/null +++ b/CMakeExternals/ITK.cmake @@ -0,0 +1,35 @@ +#----------------------------------------------------------------------------- +# ITK +#----------------------------------------------------------------------------- + +# Sanity checks +IF(DEFINED ITK_DIR AND NOT EXISTS ${ITK_DIR}) + MESSAGE(FATAL_ERROR "ITK_DIR variable is defined but corresponds to non-existing directory") +ENDIF() + +SET(proj ITK) +SET(proj_DEPENDENCIES GDCM) +SET(ITK_DEPENDS ${proj}) + +IF(NOT DEFINED ITK_DIR) + ExternalProject_Add(${proj} + URL http://mitk.org/download/thirdparty/InsightToolkit-3.20.0.tar.gz + BINARY_DIR ${proj}-build + INSTALL_COMMAND "" + CMAKE_GENERATOR ${gen} + CMAKE_ARGS + ${ep_common_args} + -DBUILD_TESTING:BOOL=OFF + -DBUILD_EXAMPLES:BOOL=OFF + -DITK_USE_SYSTEM_GDCM:BOOL=ON + -DGDCM_DIR:PATH=${GDCM_DIR} + DEPENDS ${proj_DEPENDENCIES} + ) + + SET(ITK_DIR ${CMAKE_CURRENT_BINARY_DIR}/${proj}-build) + +ELSE() + + mitkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") + +ENDIF() diff --git a/CMakeExternals/VTK.cmake b/CMakeExternals/VTK.cmake new file mode 100644 index 0000000000..6457549ff1 --- /dev/null +++ b/CMakeExternals/VTK.cmake @@ -0,0 +1,43 @@ +#----------------------------------------------------------------------------- +# VTK +#----------------------------------------------------------------------------- + +IF(WIN32) + OPTION(VTK_USE_SYSTEM_FREETYPE OFF) +ELSE(WIN32) + OPTION(VTK_USE_SYSTEM_FREETYPE ON) +ENDIF(WIN32) + +# Sanity checks +IF(DEFINED VTK_DIR AND NOT EXISTS ${VTK_DIR}) + MESSAGE(FATAL_ERROR "VTK_DIR variable is defined but corresponds to non-existing directory") +ENDIF() + +SET(proj VTK) +SET(proj_DEPENDENCIES ) +SET(VTK_DEPENDS ${proj}) + +IF(NOT DEFINED VTK_DIR) + ExternalProject_Add(${proj} + URL http://mitk.org/download/thirdparty/vtk-5.6.1.tar.gz + BINARY_DIR ${proj}-build + INSTALL_COMMAND "" + CMAKE_GENERATOR ${gen} + CMAKE_ARGS + ${ep_common_args} + -DVTK_WRAP_TCL:BOOL=OFF + -DVTK_WRAP_PYTHON:BOOL=OFF + -DVTK_WRAP_JAVA:BOOL=OFF + -DBUILD_SHARED_LIBS:BOOL=ON + -DVTK_USE_PARALLEL:BOOL=ON + -DVTK_USE_SYSTEM_FREETYPE:BOOL=${VTK_USE_SYSTEM_FREETYPE} + ${vtk_QT_ARGS} + DEPENDS ${proj_DEPENDENCIES} + ) + SET(VTK_DIR ${CMAKE_CURRENT_BINARY_DIR}/${proj}-build) + +ELSE() + + mitkMacroEmptyExternalProject(${proj} "${proj_DEPENDENCIES}") + +ENDIF() diff --git a/CMakeLists.txt b/CMakeLists.txt index 64318bfabb..bdbd832694 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,356 +1,401 @@ -PROJECT(MITK) -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) - -# this should be set to NEW at some point, see bug #1402 -if(COMMAND cmake_policy) - cmake_policy(SET CMP0003 OLD) -endif(COMMAND cmake_policy) - -OPTION(MITK_INSTALL_RPATH_RELATIVE "Use relative rpath entries when installing" OFF) -MARK_AS_ADVANCED(MITK_INSTALL_RPATH_RELATIVE) - -IF(MITK_INSTALL_RPATH_RELATIVE) - SET(CMAKE_INSTALL_RPATH ".") -ELSE() - SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/bin") -ENDIF() - -SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH} ) -SET(MITK_MODULES_CONF_DIR ${MITK_BINARY_DIR}/modulesConf CACHE INTERNAL "Modules Conf") - -OPTION(BUILD_SHARED_LIBS "Build MITK with shared libraries." ON) - -# Clear the cache variables containing plugin base directories -SET(MITK_MODULES_PLUGIN_SOURCE_DIRS "" CACHE INTERNAL "List of base plugin source directories" FORCE) -SET(MITK_MODULES_PLUGIN_OUTPUT_DIRS "" CACHE INTERNAL "List of base plugin output directories" FORCE) -SET(MITK_CORE_PLUGIN_OUTPUT_DIRS "" CACHE INTERNAL "List of base plugin output directories" FORCE) -SET(MITK_CORE_PLUGIN_SOURCE_DIRS "" CACHE INTERNAL "List of base plugin source directories" FORCE) - -# only configure dart here if not already configured in the -# parent directory -IF(NOT MITK_ALL_BUILD) - INCLUDE(CTest) -ENDIF(NOT MITK_ALL_BUILD) - -INCLUDE(CMake/CoreHelpers.cmake) -INCLUDE(CMake/ToolExtensionHelpers.cmake) -SET(KITNAME "MITK") -SET(LIBPOSTFIX "") -SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE STRING "Global output directory for runtime files") -# maybe change the next to directories to "lib" ? -SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE STRING "Global output directory for library files") -SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE STRING "Global output directory for archive files") -MARK_AS_ADVANCED(CMAKE_RUNTIME_OUTPUT_DIRECTORY CMAKE_LIBRARY_OUTPUT_DIRECTORY CMAKE_ARCHIVE_OUTPUT_DIRECTORY) - -# MITK_VERSION -SET(MITK_VERSION_MAJOR "0") -SET(MITK_VERSION_MINOR "15") -SET(MITK_VERSION_PATCH "1") -SET(MITK_VERSION_STRING "${MITK_VERSION_MAJOR}.${MITK_VERSION_MINOR}.${MITK_VERSION_PATCH}") - -IF(NOT MITK_DIR) - SET(MITK_DIR ${CMAKE_CURRENT_BINARY_DIR}) -ENDIF(NOT MITK_DIR) +cmake_minimum_required(VERSION 2.8.2) + +project(MITK) + +#----------------------------------------------------------------------------- +# See http://cmake.org/cmake/help/cmake-2-8-docs.html#section_Policies for details +#----------------------------------------------------------------------------- + +set(project_policies + CMP0001 # NEW: CMAKE_BACKWARDS_COMPATIBILITY should no longer be used. + CMP0002 # NEW: Logical target names must be globally unique. + CMP0003 # NEW: Libraries linked via full path no longer produce linker search paths. + CMP0004 # NEW: Libraries linked may NOT have leading or trailing whitespace. + CMP0005 # NEW: Preprocessor definition values are now escaped automatically. + CMP0006 # NEW: Installing MACOSX_BUNDLE targets requires a BUNDLE DESTINATION. + CMP0007 # NEW: List command no longer ignores empty elements. + CMP0008 # NEW: Libraries linked by full-path must have a valid library file name. + CMP0009 # NEW: FILE GLOB_RECURSE calls should not follow symlinks by default. + CMP0010 # NEW: Bad variable reference syntax is an error. + CMP0011 # NEW: Included scripts do automatic cmake_policy PUSH and POP. + CMP0012 # NEW: if() recognizes numbers and boolean constants. + CMP0013 # NEW: Duplicate binary directories are not allowed. + CMP0014 # NEW: Input directories must have CMakeLists.txt + ) +foreach(policy ${project_policies}) + if(POLICY ${policy}) + cmake_policy(SET ${policy} NEW) + endif() +endforeach() + +#----------------------------------------------------------------------------- +# Update CMake module path +#------------------------------------------------------------------------------ + +set(CMAKE_MODULE_PATH + ${MITK_SOURCE_DIR}/CMake + ${CMAKE_MODULE_PATH} + ) + +#----------------------------------------------------------------------------- +# CMake Function(s) and Macro(s) +#----------------------------------------------------------------------------- + +include(mitkMacroEmptyExternalProject) + +#----------------------------------------------------------------------------- +# Superbuild Option - Enabled by default +#----------------------------------------------------------------------------- + +option(MITK_USE_SUPERBUILD "Build MITK and the projects it depends on via SuperBuild.cmake." ON) + +#----------------------------------------------------------------------------- +# Output directories. +#----------------------------------------------------------------------------- + +foreach(type LIBRARY RUNTIME ARCHIVE) + # Make sure the directory exists + if(DEFINED MITK_CMAKE_${type}_OUTPUT_DIRECTORY + AND NOT EXISTS ${MITK_CMAKE_${type}_OUTPUT_DIRECTORY}) + message(FATAL_ERROR "MITK_CMAKE_${type}_OUTPUT_DIRECTORY is set to a non-existing directory [${MITK_CMAKE_${type}_OUTPUT_DIRECTORY}]") + endif() + + if(MITK_USE_SUPERBUILD) + set(output_dir ${MITK_BINARY_DIR}/bin) + if(NOT DEFINED MITK_CMAKE_${type}_OUTPUT_DIRECTORY) + set(MITK_CMAKE_${type}_OUTPUT_DIRECTORY ${MITK_BINARY_DIR}/MITK-build/bin) + endif() + else() + if(NOT DEFINED MITK_CMAKE_${type}_OUTPUT_DIRECTORY) + SET(output_dir ${MITK_BINARY_DIR}/bin) + else() + SET(output_dir ${MITK_CMAKE_${type}_OUTPUT_DIRECTORY}) + endif() + endif() + set(CMAKE_${type}_OUTPUT_DIRECTORY ${output_dir} CACHE INTERNAL "Single output directory for building all libraries.") + mark_as_advanced(CMAKE_${type}_OUTPUT_DIRECTORY) +endforeach() + +#----------------------------------------------------------------------------- +# Additional MITK Options (also shown during superbuild) +#----------------------------------------------------------------------------- + +option(BUILD_SHARED_LIBS "Build MITK with shared libraries" ON) +option(WITH_COVERAGE "Enable/Disable coverage" OFF) +option(BUILD_TESTING "Test the project" ON) # some targets in Utilities also depend on Qt. Use this option # to decide if they should be build -OPTION(MITK_USE_QT "Use Trolltech's Qt library" ON) -IF(MITK_USE_QT) +option(MITK_USE_QT "Use Trolltech's Qt library" ON) +if(MITK_USE_QT) # find the package at the very beginning, so that QT4_FOUND is available - FIND_PACKAGE(Qt4 REQUIRED) -ENDIF() -OPTION(MITK_BUILD_TUTORIAL "Build the MITK tutorial" ON) -OPTION(MITK_USE_GDCMIO "Use the GDCMIO class instead of ImageIO2 for DICOM" ON) -OPTION(MITK_USE_BLUEBERRY "Build the BlueBerry platform" ON) -OPTION(MITK_USE_CTK "EXEPERIMENTAL, superbuild only: Use CTK in MITK" OFF) -OPTION(MITK_USE_DCMTK "EXEPERIMENTAL, superbuild only: Use DCMTK in MITK" OFF) -OPTION(MITK_USE_SUPERBUILD "EXEPERIMENTAL: Use superbuild for MITK" OFF) -MARK_AS_ADVANCED(MITK_USE_SUPERBUILD MITK_USE_CTK MITK_USE_DCMTK) -IF(MITK_USE_SUPERBUILD) - INCLUDE(SuperBuild.cmake) - RETURN() -ENDIF(MITK_USE_SUPERBUILD) - -IF(NOT UNIX AND NOT MINGW) - SET(MITK_WIN32_FORCE_STATIC "STATIC" CACHE INTERNAL "Use this variable to always build static libraries on non-unix platforms") -ENDIF() - -# we need to define a Windows version -IF(MINGW) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WIN32_WINNT=0x0500") -ENDIF() - -ADD_SUBDIRECTORY(Utilities) - -IF(MITK_USE_BLUEBERRY) - - SET(BLUEBERRY_INSTALL_RPATH_RELATIVE ${MITK_INSTALL_RPATH_RELATIVE} - CACHE BOOL "Use relative rpath entries when installing" FORCE) - - # on Mac OSX all BlueBerry plugins get copied into every - # application bundle (.app directory) specified here - IF(APPLE) - IF(MITK_BUILD_org.mitk.gui.qt.extapplication) - SET(MACOSX_BUNDLE_NAMES ${MACOSX_BUNDLE_NAMES} ExtApp) - ENDIF() - IF(MITK_BUILD_org.mitk.gui.qt.application) - SET(MACOSX_BUNDLE_NAMES ${MACOSX_BUNDLE_NAMES} CoreApp) - ENDIF() - ENDIF(APPLE) - - SET(mbilog_DIR "${mbilog_BINARY_DIR}") - ADD_SUBDIRECTORY(BlueBerry) - SET(BlueBerry_DIR ${CMAKE_CURRENT_BINARY_DIR}/BlueBerry CACHE PATH "The directory containing a CMake configuration file for BlueBerry" FORCE) - INCLUDE(${BlueBerry_DIR}/BlueBerryConfig.cmake) - INCLUDE(CMake/MITKPluginHelpers.cmake) + find_package(Qt4 4.6.0 REQUIRED) +endif() + +option(MITK_INSTALL_RPATH_RELATIVE "Use relative rpath entries for installation packages" OFF) +option(MITK_BUILD_ALL_PLUGINS "Build all MITK plugins" OFF) +option(MITK_BUILD_TUTORIAL "Build the MITK tutorial" ON) +option(MITK_USE_Boost "Use the Boost C++ library" OFF) +option(MITK_USE_GDCMIO "Use the GDCMIO class instead of ImageIO2 for DICOM" ON) +option(MITK_USE_BLUEBERRY "Build the BlueBerry platform" ON) +option(MITK_USE_CTK "EXEPERIMENTAL, superbuild only: Use CTK in MITK" OFF) +option(MITK_USE_DCMTK "EXEPERIMENTAL, superbuild only: Use DCMTK in MITK" OFF) - SET(BLUEBERRY_USE_QT ${MITK_USE_QT} CACHE BOOL "Use the Qt GUI toolkit" FORCE) -ENDIF(MITK_USE_BLUEBERRY) +mark_as_advanced(MITK_INSTALL_RPATH_RELATIVE + MITK_BUILD_ALL_PLUGINS + MITK_USE_CTK + MITK_USE_DCMTK + ) + +#----------------------------------------------------------------------------- +# Additional CXX/C Flags +#----------------------------------------------------------------------------- + +set(ADDITIONAL_C_FLAGS "" CACHE STRING "Additional C Flags") +mark_as_advanced(ADDITIONAL_C_FLAGS) +set(ADDITIONAL_CXX_FLAGS "" CACHE STRING "Additional CXX Flags") +mark_as_advanced(ADDITIONAL_CXX_FLAGS) + +#----------------------------------------------------------------------------- +# Superbuild script +#----------------------------------------------------------------------------- + +if(MITK_USE_SUPERBUILD) + include("${CMAKE_CURRENT_SOURCE_DIR}/SuperBuild.cmake") + return() +endif() + +#***************************************************************************** +#**************************** END OF SUPERBUILD **************************** +#***************************************************************************** + +#----------------------------------------------------------------------------- +# CMake Function(s) and Macro(s) +#----------------------------------------------------------------------------- + +include(mitkFunctionCheckCompilerFlags) +include(mitkFunctionGetGccVersion) +include(MacroParseArguments) +include(mitkFunctionSuppressWarnings) # includes several functions +include(mitkFunctionOrganizeSources) +include(mitkFunctionGetVersion) +include(mitkMacroCreateModuleConf) +include(mitkMacroCreateModule) +include(mitkMacroCheckModule) +include(mitkMacroCreateModuleTests) +include(mitkMacroUseModule) +include(mitkMacroMultiplexPicType) +include(mitkMacroInstall) +include(mitkMacroInstallHelperApp) +include(mitkMacroInstallTargets) +include(mitkMacroGenerateToolsLibrary) + +#----------------------------------------------------------------------------- +# Prerequesites +#----------------------------------------------------------------------------- + +find_package(ITK REQUIRED) +find_package(VTK REQUIRED) + +#----------------------------------------------------------------------------- +# Set MITK specific options and variables (NOT available during superbuild) +#----------------------------------------------------------------------------- + +# ASK THE USER TO SHOW THE CONSOLE WINDOW FOR CoreApp and ExtApp +option(MITK_SHOW_CONSOLE_WINDOW "Use this to enable or disable the console window when starting MITK GUI Applications" ON) +mark_as_advanced(MITK_SHOW_CONSOLE_WINDOW) + +# TODO: check if necessary +option(USE_ITKZLIB "Use the ITK zlib for pic compression." ON) +mark_as_advanced(USE_ITKZLIB) -IF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/Utilities/itk-bin) - SET(ITK_DIR "${CMAKE_CURRENT_BINARY_DIR}/Utilities/itk-bin") -ENDIF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/Utilities/itk-bin) +#----------------------------------------------------------------------------- +# Get MITK version info +#----------------------------------------------------------------------------- -FIND_PACKAGE(ITK) +mitkFunctionGetVersion(${MITK_SOURCE_DIR} MITK) -IF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/Utilities/vtk-bin) - SET(VTK_DIR "${CMAKE_CURRENT_BINARY_DIR}/Utilities/vtk-bin") -ENDIF(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/Utilities/vtk-bin) -FIND_PACKAGE(VTK) -APPLY_VTK_FLAGS() +#----------------------------------------------------------------------------- +# Set symbol visibility Flags +#----------------------------------------------------------------------------- -# ASK THE USER TO SHOW THE CONSOLE WINDOW FOR CoreApp, ExtApp and SandboxApp -OPTION(MITK_SHOW_CONSOLE_WINDOW "Use this to enable or disable the console window when starting MITK GUI Applications" ON) -MARK_AS_ADVANCED(MITK_SHOW_CONSOLE_WINDOW) +# MinGW does not export all symbols automatically, so no need to set flags +if(CMAKE_COMPILER_IS_GNUCXX AND NOT MINGW) + set(VISIBILITY_CXX_FLAGS ) #"-fvisibility=hidden -fvisibility-inlines-hidden") +endif() -# TODO: check if necessary -OPTION(USE_ITKZLIB "Use the ITK zlib for pic compression." ON) -MARK_AS_ADVANCED(USE_ITKZLIB) +#----------------------------------------------------------------------------- +# Set coverage Flags +#----------------------------------------------------------------------------- -# build the MITK_INCLUDE_DIRS variable -SET(CORE_DIRECTORIES DataManagement Algorithms IO Rendering Interactions Controllers) +if(WITH_COVERAGE) + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + set(coverage_flags "-g -fprofile-arcs -ftest-coverage -O0 -DNDEBUG") + set(COVERAGE_CXX_FLAGS ${coverage_flags}) + set(COVERAGE_C_FLAGS ${coverage_flags}) + endif() +endif() -FOREACH(d ${CORE_DIRECTORIES}) - SET(${KITNAME}_INCLUDE_DIRS ${${KITNAME}_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/Core/Code/${d}) -ENDFOREACH(d) +#----------------------------------------------------------------------------- +# MITK C/CXX Flags +#----------------------------------------------------------------------------- -SET(${KITNAME}_CORE_LIBRARIES ${${KITNAME}_CORE_LIBRARIES} mitkCore) -SET(${KITNAME}_INCLUDE_DIRS ${PROJECT_BINARY_DIR} ${${KITNAME}_INCLUDE_DIRS} ${ITK_INCLUDE_DIRS} ${VTK_INCLUDE_DIRS} ${PROJECT_BINARY_DIR}/Utilities/mbilog) +set(MITK_C_FLAGS "${CMAKE_C_FLAGS_INIT} ${COVERAGE_C_FLAGS} ${ADDITIONAL_C_FLAGS}") +set(MITK_CXX_FLAGS "${CMAKE_CXX_FLAGS_INIT} ${VISIBILITY_CXX_FLAGS} ${COVERAGE_CXX_FLAGS} ${ADDITIONAL_CXX_FLAGS}") -FOREACH(dir Utilities Utilities/ipPic -Utilities/IIL4MITK Utilities/pic2vtk Utilities/tinyxml Utilities/mbilog) - SET(${KITNAME}_INCLUDE_DIRS ${${KITNAME}_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/${dir}) -ENDFOREACH(dir) +if(CMAKE_COMPILER_IS_GNUCXX) + set(cflags "-Wall -Wextra -Wpointer-arith -Winvalid-pch -Wcast-align -Wwrite-strings -D_FORTIFY_SOURCE=2") -IF(WIN32) - SET(${${KITNAME}_INCLUDE_DIRS} ${${KITNAME}_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ipPic/win32) -ENDIF(WIN32) - -SET(MITK_LIBRARY_DIRS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) -SET(MITK_LINK_DIRECTORIES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${ITK_LIBRARY_DIRS} ${VTK_LIBRARY_DIRS}) -SET(QMITK_LINK_DIRECTORIES ${MITK_LINK_DIRECTORIES} ${QT_LIBRARY_DIR}) -LINK_DIRECTORIES(${MITK_LINK_DIRECTORIES}) - -SET(VTK_FOR_MITK_LIBRARIES - vtkGraphics vtkCommon vtkFiltering vtkftgl vtkGraphics vtkHybrid vtkImaging vtkIO vtkParallel vtkRendering vtkVolumeRendering vtkWidgets ${VTK_JPEG_LIBRARIES} ${VTK_PNG_LIBRARIES} ${VTK_ZLIB_LIBRARIES} ${VTK_EXPAT_LIBRARIES} ${VTK_FREETYPE_LIBRARIES} -) - -# TODO: maybe solve this with lib depends mechanism of CMake -SET(UTIL_FOR_MITK_LIBRARIES mitkIpPic mitkIpFunc mbilog) -SET(LIBRARIES_FOR_MITK_CORE - ${LIBRARIES_FOR_${KITNAME}_CORE} ${UTIL_FOR_${KITNAME}_LIBRARIES} ${VTK_FOR_${KITNAME}_LIBRARIES} ${ITK_LIBRARIES} -) - -SET(ANN_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ann/include) -SET(IPSEGMENTATION_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ipSegmentation) - -ADD_SUBDIRECTORY(Core) - -SET(MITK_LIBRARIES ${MITK_CORE_LIBRARIES} ${LIBRARIES_FOR_MITK_CORE} ${IPFUNC_LIBRARY} pic2vtk IIL4MITK ipSegmentation ann ) - -IF(MITK_USE_QT) - FIND_PACKAGE(Qt4 REQUIRED) - - ADD_DEFINITIONS(-DQWT_DLL) - SET(Q${KITNAME}_INCLUDE_DIRS ${${KITNAME}_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/CoreUI/Qmitk ${PROJECT_BINARY_DIR}/CoreUI/Qmitk) - FOREACH(dir QmitkApplicationBase QmitkModels QmitkPropertyObservers) - SET(Q${KITNAME}_INCLUDE_DIRS ${Q${KITNAME}_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/CoreUI/Qmitk/${dir}) - ENDFOREACH(dir) - SET(Q${KITNAME}_INCLUDE_DIRS ${Q${KITNAME}_INCLUDE_DIRS} ${QWT_INCLUDE_DIR}) - SET(QMITK_LIBRARIES Qmitk ${MITK_LIBRARIES} ${QT_LIBRARIES}) -ENDIF(MITK_USE_QT) - -#### find out version number ##### - -FIND_PACKAGE(Subversion) -IF(Subversion_FOUND AND MITK_USE_SUBVERSION) - IF(EXISTS ${mitk-all_SOURCE_DIR}) - Subversion_WC_INFO(${mitk-all_SOURCE_DIR} SVN_INFO) - ELSE(EXISTS ${mitk-all_SOURCE_DIR}) - Subversion_WC_INFO(${PROJECT_SOURCE_DIR} SVN_INFO) - ENDIF(EXISTS ${mitk-all_SOURCE_DIR}) - SET(MITK_SVN_REVISION ${SVN_INFO_WC_REVISION}) -ELSE(Subversion_FOUND AND MITK_USE_SUBVERSION) - SET(MITK_SVN_REVISION "n/a") -ENDIF(Subversion_FOUND AND MITK_USE_SUBVERSION) -CONFIGURE_FILE(mitkVersion.h.in ${PROJECT_BINARY_DIR}/mitkVersion.h) - -# TODO: check what could be moved to subdirectories -#### mitkConfig.h #### - -SET(MITK_CONFIG_H ${PROJECT_BINARY_DIR}/mitkConfig.h) -CONFIGURE_FILE(mitkConfig.h.in ${MITK_CONFIG_H}) -SET(MITK_TESTING_CONFIG_H ${PROJECT_BINARY_DIR}/mitkTestingConfig.h) -SET(MITK_TEST_OUTPUT_DIR "${PROJECT_BINARY_DIR}/test_output") -IF(NOT EXISTS ${MITK_TEST_OUTPUT_DIR}) -FILE(MAKE_DIRECTORY ${MITK_TEST_OUTPUT_DIR}) -ENDIF(NOT EXISTS ${MITK_TEST_OUTPUT_DIR}) -CONFIGURE_FILE(mitkTestingConfig.h.in ${MITK_TESTING_CONFIG_H}) -#### MITKConfig.cmake #### -SET(${KITNAME}_INCLUDE_DIRS_CONFIG ${${KITNAME}_INCLUDE_DIRS}) -SET(Q${KITNAME}_INCLUDE_DIRS_CONFIG ${Q${KITNAME}_INCLUDE_DIRS}) -SET(VECMATH_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/vecmath) -SET(IPFUNC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ipFunc) -SET(UTILITIES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities) -CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/CMake/ToolExtensionITKFactory.cpp.in ${PROJECT_BINARY_DIR}/ToolExtensionITKFactory.cpp.in COPYONLY) -CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/CMake/ToolExtensionITKFactoryLoader.cpp.in ${PROJECT_BINARY_DIR}/ToolExtensionITKFactoryLoader.cpp.in COPYONLY) -CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/CMake/ToolGUIExtensionITKFactory.cpp.in ${PROJECT_BINARY_DIR}/ToolGUIExtensionITKFactory.cpp.in COPYONLY) - -IF(MITK_USE_BLUEBERRY) - OPTION(MITK_BUILD_ALL_PLUGINS "Build all MITK plugins (overriding selection)" OFF) - MARK_AS_ADVANCED(MITK_BUILD_ALL_PLUGINS) + mitkFunctionCheckCompilerFlags("-fdiagnostics-show-option" cflags) + mitkFunctionCheckCompilerFlags("-Wl,--no-undefined" cflags) - IF(MITK_BUILD_ALL_PLUGINS) - SET(MITK_BUILD_ALL_PLUGINS_OPTION "FORCE_BUILD_ALL") - ENDIF() -ENDIF() + mitkFunctionGetGccVersion(${CMAKE_CXX_COMPILER} GCC_VERSION) + # With older version of gcc supporting the flag -fstack-protector-all, an extra dependency to libssp.so + # is introduced. If gcc is smaller than 4.4.0 and the build type is Release let's not include the flag. + # Doing so should allow to build package made for distribution using older linux distro. + if(${GCC_VERSION} VERSION_GREATER "4.4.0" OR (CMAKE_BUILD_TYPE STREQUAL "Debug" AND ${GCC_VERSION} VERSION_LESS "4.4.0")) + mitkFunctionCheckCompilerFlags("-fstack-protector-all" cflags) + endif() + if(MINGW) + # suppress warnings about auto imported symbols + set(MITK_CXX_FLAGS "-Wl,--enable-auto-import ${MITK_CXX_FLAGS}") + # we need to define a Windows version + set(MITK_CXX_FLAGS "-D_WIN32_WINNT=0x0500 ${MITK_CXX_FLAGS}") + endif() + + set(MITK_C_FLAGS "${cflags} ${MITK_C_FLAGS}") + #set(MITK_CXX_FLAGS "${cflags} -Woverloaded-virtual -Wold-style-cast -Wstrict-null-sentinel -Wsign-promo ${MITK_CXX_FLAGS}") + set(MITK_CXX_FLAGS "${cflags} -Woverloaded-virtual -Wstrict-null-sentinel ${MITK_CXX_FLAGS}") +endif() + +#----------------------------------------------------------------------------- +# MITK Modules +#----------------------------------------------------------------------------- + +set(MITK_MODULES_CONF_DIR ${MITK_BINARY_DIR}/modulesConf CACHE INTERNAL "Modules Conf") +set(MITK_MODULES_PACKAGE_DEPENDS_DIR ${MITK_SOURCE_DIR}/CMake/PackageDepends) + +#----------------------------------------------------------------------------- +# Testing +#----------------------------------------------------------------------------- + +if(BUILD_TESTING) + enable_testing() + include(CTest) + mark_as_advanced(TCL_TCLSH DART_ROOT) + + # Setup file for setting custom ctest vars + configure_file( + CMake/CTestCustom.cmake.in + ${MITK_BINARY_DIR}/CTestCustom.cmake + @ONLY + ) -ADD_SUBDIRECTORY(Documentation) -ADD_SUBDIRECTORY(CoreUI) -ADD_SUBDIRECTORY(Modules) + # Configuration for the CMake-generated test driver + set(CMAKE_TESTDRIVER_EXTRA_INCLUDES "#include ") + set(CMAKE_TESTDRIVER_BEFORE_TESTMAIN " + try + {") + set(CMAKE_TESTDRIVER_AFTER_TESTMAIN " } + catch( std::exception & excp ) + { + fprintf(stderr,\"%s\\n\",excp.what()); + return EXIT_FAILURE; + } + catch( ... ) + { + printf(\"Exception caught in the test driver\\n\"); + return EXIT_FAILURE; + } + ") + + set(MITK_TEST_OUTPUT_DIR "${MITK_BINARY_DIR}/test_output") + if(NOT EXISTS ${MITK_TEST_OUTPUT_DIR}) + file(MAKE_DIRECTORY ${MITK_TEST_OUTPUT_DIR}) + endif() + configure_file(mitkTestingConfig.h.in ${MITK_BINARY_DIR}/mitkTestingConfig.h) +endif() + +#----------------------------------------------------------------------------- +# MITK_SUPERBUILD_BINARY_DIR +#----------------------------------------------------------------------------- + +# If MITK_SUPERBUILD_BINARY_DIR isn't defined, it means MITK is *NOT* build using Superbuild. +# In that specific case, MITK_SUPERBUILD_BINARY_DIR should default to MITK_BINARY_DIR +if(NOT DEFINED MITK_SUPERBUILD_BINARY_DIR) + set(MITK_SUPERBUILD_BINARY_DIR ${MITK_BINARY_DIR}) +endif() + +#----------------------------------------------------------------------------- +# Compile Utilities and set-up MITK variables +#----------------------------------------------------------------------------- + +add_subdirectory(Utilities) + +include(mitkSetupVariables) +if(MITK_USE_BLUEBERRY) + include(mitkSetupBlueBerry) +endif() + +#----------------------------------------------------------------------------- +# Set C/CXX Flags for MITK code +#----------------------------------------------------------------------------- + +set(CMAKE_CXX_FLAGS ${MITK_CXX_FLAGS}) +set(CMAKE_C_FLAGS ${MITK_C_FLAGS}) + +if(MITK_USE_QT) + add_definitions(-DQWT_DLL) +endif() + +#----------------------------------------------------------------------------- +# Add subdirectories +#----------------------------------------------------------------------------- + +link_directories(${MITK_LINK_DIRECTORIES}) + +add_subdirectory(Core) +add_subdirectory(CoreUI) +add_subdirectory(Modules) +add_subdirectory(Applications) + +#----------------------------------------------------------------------------- +# Python Wrapping +#----------------------------------------------------------------------------- + +set(MITK_WRAPPING_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Wrapping) +set(MITK_WRAPPING_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/Wrapping) +option(MITK_USE_PYTHON "Build cswig Python wrapper support (requires CableSwig)." OFF) +if(MITK_USE_PYTHON) + add_subdirectory(Wrapping) +endif() + +#----------------------------------------------------------------------------- +# Documentation +#----------------------------------------------------------------------------- + +add_subdirectory(Documentation) + +#----------------------------------------------------------------------------- +# Installation +#----------------------------------------------------------------------------- + +if(MITK_INSTALL_RPATH_RELATIVE) + set(CMAKE_INSTALL_RPATH ".") +else() + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/bin") +endif() + +# on Mac OSX all BlueBerry plugins get copied into every +# application bundle (.app directory) specified here +if(APPLE) + if(MITK_BUILD_org.mitk.gui.qt.extapplication) + set(MACOSX_BUNDLE_NAMES ${MACOSX_BUNDLE_NAMES} ExtApp) + endif() + if(MITK_BUILD_org.mitk.gui.qt.application) + set(MACOSX_BUNDLE_NAMES ${MACOSX_BUNDLE_NAMES} CoreApp) + endif() +endif(APPLE) + +# set MITK cpack variables +include(mitkSetupCPack) + +if(MITK_BUILD_org.mitk.gui.qt.application) + list(APPEND CPACK_CREATE_DESKTOP_LINKS "CoreApp") +endif() +if(MITK_BUILD_org.mitk.gui.qt.extapplication) + list(APPEND CPACK_CREATE_DESKTOP_LINKS "ExtApp") +endif() + + +configure_file(${MITK_SOURCE_DIR}/MITKCPackOptions.cmake.in + ${MITK_BINARY_DIR}/MITKCPackOptions.cmake @ONLY) +set(CPACK_PROJECT_CONFIG_FILE "${MITK_BINARY_DIR}/MITKCPackOptions.cmake") -# PYTHON WRAPPING -SET(MITK_WRAPPING_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Wrapping) -SET(MITK_WRAPPING_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/Wrapping) -OPTION(MITK_USE_PYTHON "Build cswig Python wrapper support (requires CableSwig)." OFF) -IF(MITK_USE_PYTHON) - ADD_SUBDIRECTORY(Wrapping) -ENDIF() -CONFIGURE_FILE(${KITNAME}Config.cmake.in ${PROJECT_BINARY_DIR}/${KITNAME}Config.cmake @ONLY) +# include CPack model once all variables are set +include(CPack) -ADD_SUBDIRECTORY(Applications) +# Additional installation rules +include(mitkInstallRules) -###### CPACK OPTIONS ###### -IF(CMAKE_BINARY_DIR STREQUAL MITK_BINARY_DIR) -INCLUDE(MITKSetupCPack) +#----------------------------------------------------------------------------- +# Last configuration steps +#----------------------------------------------------------------------------- +configure_file(${MITK_SOURCE_DIR}/CMake/ToolExtensionITKFactory.cpp.in + ${MITK_BINARY_DIR}/ToolExtensionITKFactory.cpp.in COPYONLY) +configure_file(${MITK_SOURCE_DIR}/CMake/ToolExtensionITKFactoryLoader.cpp.in + ${MITK_BINARY_DIR}/ToolExtensionITKFactoryLoader.cpp.in COPYONLY) +configure_file(${MITK_SOURCE_DIR}/CMake/ToolGUIExtensionITKFactory.cpp.in + ${MITK_BINARY_DIR}/ToolGUIExtensionITKFactory.cpp.in COPYONLY) -CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/MITKCPackOptions.cmake.in ${PROJECT_BINARY_DIR}/MITKCPackOptions.cmake @ONLY) +configure_file(mitkVersion.h.in ${MITK_BINARY_DIR}/mitkVersion.h) +configure_file(mitkConfig.h.in ${MITK_BINARY_DIR}/mitkConfig.h) -SET(CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/MITKCPackOptions.cmake") +set(VECMATH_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/vecmath) +set(IPFUNC_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities/ipFunc) +set(UTILITIES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Utilities) -# include CPack model once all variables are set -INCLUDE(CPack) -ENDIF() - -############################# INSTALL TARGETS ########################## -MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/mitk.ico ) -MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/mitk.bmp ) - -#STATEMACHINE XML -MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/Core/Code/Interactions/StateMachine.xml ) -MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/Config/mitkLevelWindowPresets.xml ) -MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/Config/mitkRigidRegistrationPresets.xml ) -MITK_INSTALL(FILES ${PROJECT_SOURCE_DIR}/Config/mitkRigidRegistrationTestPresets.xml ) - -IF(WIN32) -SET(MITK_INSTALLED_VERSION_LIB bin) -SET(MITK_INSTALLED_VERSION_ARCHIVES bin) -SET(MITK_INSTALLED_VERSION_BIN bin) -ELSE() -SET(MITK_INSTALLED_VERSION_LIB lib/mitk) -SET(MITK_INSTALLED_VERSION_ARCHIVES lib/mitk/static) -SET(MITK_INSTALLED_VERSION_BIN bin) -ENDIF() - - #QT - IF(MITK_USE_QT) - FIND_PACKAGE(Qt4) - # this is not a godd idea since it adds the QT include directories to everything that is built below this directory - INCLUDE(${QT_USE_FILE}) - - # TODO: use fixup_bundle(...) - MITK_INSTALL_HELPER_APP(EXECUTABLES "${QT_ASSISTANT_EXECUTABLE}" ) - ENDIF(MITK_USE_QT) - -IF(WIN32) - - - #DCMTK Dlls install target (shared libs on gcc only) - IF(MINGW AND DCMTK_ofstd_LIBRARY) - SET(_dcmtk_libs - ${DCMTK_dcmdata_LIBRARY} - ${DCMTK_dcmimgle_LIBRARY} - ${DCMTK_dcmnet_LIBRARY} - ${DCMTK_ofstd_LIBRARY} - ) - FOREACH(_dcmtk_lib ${_dcmtk_libs}) - MITK_INSTALL(FILES ${_dcmtk_lib} ) - ENDFOREACH() - ENDIF() - - #BlueBerry - IF(MITK_USE_BLUEBERRY) - IF(MINGW) - MITK_INSTALL(FILES ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin/liborg_blueberry_osgid.dll CONFIGURATIONS Debug) - MITK_INSTALL(FILES ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin/liborg_blueberry_osgi.dll CONFIGURATIONS Release) - ELSE() - IF(NOT APPLE) - MITK_INSTALL(FILES ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin/debug/liborg_blueberry_osgid.dll CONFIGURATIONS Debug) - MITK_INSTALL(FILES ${BLUEBERRY_PLUGINS_OUTPUT_DIR}/org.blueberry.osgi/bin/release/liborg_blueberry_osgi.dll CONFIGURATIONS Release) - ENDIF(NOT APPLE) - ENDIF() - ENDIF() - - #MinGW dll - IF(MINGW) - FIND_LIBRARY(MINGW_RUNTIME_DLL "mingwm10.dll" HINTS ${CMAKE_FIND_ROOT_PATH}/sys-root/mingw/bin) - IF (MINGW_RUNTIME_DLL) - MITK_INSTALL(FILES ${MINGW_RUNTIME_DLL} ) - ELSE() - MESSAGE(SEND_ERROR "Could not find mingwm10.dll which is needed for a proper install") - ENDIF() - - FIND_LIBRARY(MINGW_GCC_RUNTIME_DLL "libgcc_s_dw2-1.dll" HINTS ${CMAKE_FIND_ROOT_PATH}/sys-root/mingw/bin) - IF (MINGW_GCC_RUNTIME_DLL) - MITK_INSTALL(FILES ${MINGW_GCC_RUNTIME_DLL} ) - ELSE() - MESSAGE(SEND_ERROR "Could not find libgcc_s_dw2-1.dll which is needed for a proper install") - ENDIF() - ENDIF() - -ELSE(WIN32) - - #DCMTK Dlls install target (shared libs on gcc only) - IF(DCMTK_ofstd_LIBRARY) - SET(_dcmtk_libs - ${DCMTK_dcmdata_LIBRARY} - ${DCMTK_dcmimgle_LIBRARY} - ${DCMTK_dcmnet_LIBRARY} - ${DCMTK_ofstd_LIBRARY} - ) - FOREACH(_dcmtk_lib ${_dcmtk_libs}) -# MITK_INSTALL(FILES ${_dcmtk_lib} DESTINATION lib) - ENDFOREACH() - ENDIF() - -ENDIF(WIN32) - - - -# suppress a couple of warnings -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/MITKCTestCustom.ctest.in -${MITK_BINARY_DIR}/CTestCustom.ctest @ONLY) -FILE(WRITE ${MITK_BINARY_DIR}/CTestCustom.cmake -"INCLUDE(\"${MITK_BINARY_DIR}/CTestCustom.ctest\")\n") +configure_file(mitkConfig.h.in ${MITK_BINARY_DIR}/mitkConfig.h) +configure_file(MITKConfig.cmake.in ${MITK_BINARY_DIR}/MITKConfig.cmake) diff --git a/Core/Code/Algorithms/mitkInstantiateAccessFunctions.h b/Core/Code/Algorithms/mitkInstantiateAccessFunctions.h index 132cc30a4b..2229a5cbea 100644 --- a/Core/Code/Algorithms/mitkInstantiateAccessFunctions.h +++ b/Core/Code/Algorithms/mitkInstantiateAccessFunctions.h @@ -1,211 +1,211 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html 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 notices for more information. =========================================================================*/ #ifndef MITKINSTANTIATEACCESSFUNCTIONS_H_HEADER_INCLUDED #define MITKINSTANTIATEACCESSFUNCTIONS_H_HEADER_INCLUDED #include #include // File created using Visual Studio by replacing regular expression // itkImgFunc\(itk\:\:Image\<(.*),(.*)\> // with // itkImgFunc<\1, \2>(itk::Image<\1,\2> // from mitkAltInstantiateAccessFunction.h //--------------------------------- instantiation functions ------------------------------ //##Documentation //## @brief Instantiate access function without additional parammeters //## for all datatypes and dimensions //## //## Use this macro once after the definition of your access function. //## Some compilers have memory problems without the explicit instantiation. //## You may need to move the access function to a separate file. The CMake macro -//## MITK_MULTIPLEX_PICTYPE can help you with that. See \c mitk/CMake/CoreHelpers.cmake +//## MITK_MULTIPLEX_PICTYPE can help you with that. See \c mitk/CMake/mitkMacroMultiplexPicType.cmake //## for documentation. //## //## \note If you experience compiler errors, try to //## include mitkAltInstantiateAccessFunctions.h and //## add "Alt" (for alternate) before the call //## (e.g. AltInstantiateAccessFunction(...)). //## \sa InstantiateAccessFunction_1 //## \sa InstantiateAccessFunction_2 //## @ingroup Adaptor #define InstantiateAccessFunction(itkImgFunc) \ InstantiateAccessFunctionForFixedDimension(itkImgFunc, 2) \ InstantiateAccessFunctionForFixedDimension(itkImgFunc, 3) //##Documentation //## @brief Instantiate access function with one additional parammeter //## for all datatypes and dimensions //## //## Use this macro once after the definition of your access function. //## Some compilers have memory problems without the explicit instantiation. //## You may need to move the access function to a separate file. //## \note If you experience compiler errors, try to //## include mitkAltInstantiateAccessFunctions.h and //## add "Alt" (for alternate) before the call //## (e.g. AltInstantiateAccessFunction(...)). //## \sa InstantiateAccessFunction //## \sa InstantiateAccessFunction_2 //## @ingroup Adaptor #define InstantiateAccessFunction_1(itkImgFunc, param1Type) \ InstantiateAccessFunctionForFixedDimension_1(itkImgFunc, 2, param1Type) \ InstantiateAccessFunctionForFixedDimension_1(itkImgFunc, 3, param1Type) //##Documentation //## @brief Instantiate access function with two additional parammeters //## for all datatypes and dimensions //## //## Use this macro once after the definition of your access function. //## Some compilers have memory problems without the explicit instantiation. //## You may need to move the access function to a separate file. //## \sa InstantiateAccessFunction //## \sa InstantiateAccessFunction_1 //## @ingroup Adaptor #define InstantiateAccessFunction_2(itkImgFunc, param1Type, param2Type) \ InstantiateAccessFunctionForFixedDimension_2(itkImgFunc, 2, param1Type, param2Type) \ InstantiateAccessFunctionForFixedDimension_2(itkImgFunc, 3, param1Type, param2Type) //##Documentation //## @brief Instantiate access function without additional parammeters //## for all datatypes, but fixed dimension //## //## Use this macro once after the definition of your access function. //## Some compilers have memory problems without the explicit instantiation. //## You may need to move the access function to a separate file. //## \note If you experience compiler errors, try to //## include mitkAltInstantiateAccessFunctions.h and //## add "Alt" (for alternate) before the call //## (e.g. AltInstantiateAccessFunction(...)). //## \sa InstantiateAccessFunctionForFixedDimension_1 //## \sa InstantiateAccessFunctionForFixedDimension_2 //## @ingroup Adaptor #define InstantiateAccessFunctionForFixedDimension(itkImgFunc, dimension) \ template void itkImgFunc(itk::Image*); \ template void itkImgFunc(itk::Image*); \ template void itkImgFunc(itk::Image*); \ template void itkImgFunc(itk::Image*); \ template void itkImgFunc(itk::Image*); \ template void itkImgFunc(itk::Image*); \ template void itkImgFunc(itk::Image*); \ template void itkImgFunc(itk::Image*); //##Documentation //## @brief Instantiate access function with one additional parammeter //## for all datatypes, but fixed dimension //## //## Use this macro once after the definition of your access function. //## Some compilers have memory problems without the explicit instantiation. //## You may need to move the access function to a separate file. //## \note If you experience compiler errors, try to //## include mitkAltInstantiateAccessFunctions.h and //## add "Alt" (for alternate) before the call //## (e.g. AltInstantiateAccessFunction(...)). //## \sa InstantiateAccessFunctionForFixedDimension //## \sa InstantiateAccessFunctionForFixedDimension_2 //## @ingroup Adaptor #define InstantiateAccessFunctionForFixedDimension_1(itkImgFunc, dimension, param1Type) \ template void itkImgFunc(itk::Image*, param1Type); \ template void itkImgFunc(itk::Image*, param1Type); \ template void itkImgFunc(itk::Image*, param1Type); \ template void itkImgFunc(itk::Image*, param1Type); \ template void itkImgFunc(itk::Image*, param1Type); \ template void itkImgFunc(itk::Image*, param1Type); \ template void itkImgFunc(itk::Image*, param1Type); \ template void itkImgFunc(itk::Image*, param1Type); //##Documentation //## @brief Instantiate access function with two additional parammeters //## for all datatypes, but fixed dimension //## //## Use this macro once after the definition of your access function. //## Some compilers have memory problems without the explicit instantiation. //## You may need to move the access function to a separate file. //## \note If you experience compiler errors, try to //## include mitkAltInstantiateAccessFunctions.h and //## add "Alt" (for alternate) before the call //## (e.g. AltInstantiateAccessFunction(...)). //## \sa InstantiateAccessFunctionForFixedDimension //## \sa InstantiateAccessFunctionForFixedDimension_1 //## @ingroup Adaptor #define InstantiateAccessFunctionForFixedDimension_2(itkImgFunc, dimension, param1Type, param2Type) \ template void itkImgFunc(itk::Image*, param1Type, param2Type); \ template void itkImgFunc(itk::Image*, param1Type, param2Type); \ template void itkImgFunc(itk::Image*, param1Type, param2Type); \ template void itkImgFunc(itk::Image*, param1Type, param2Type); \ template void itkImgFunc(itk::Image*, param1Type, param2Type); \ template void itkImgFunc(itk::Image*, param1Type, param2Type); \ template void itkImgFunc(itk::Image*, param1Type, param2Type); \ template void itkImgFunc(itk::Image*, param1Type, param2Type); //##Documentation //## @brief Instantiate access function without additional parammeters //## for a fixed datatype, but all dimensions //## //## Use this macro once after the definition of your access function. //## Some compilers have memory problems without the explicit instantiation. //## You may need to move the access function to a separate file. //## \note If you experience compiler errors, try to //## include mitkAltInstantiateAccessFunctions.h and //## add "Alt" (for alternate) before the call //## (e.g. AltInstantiateAccessFunction(...)). //## \sa InstantiateAccessFunctionForFixedPixelType_1 //## \sa InstantiateAccessFunctionForFixedPixelType_2 //## @ingroup Adaptor #define InstantiateAccessFunctionForFixedPixelType(itkImgFunc, pixelType) \ template void itkImgFunc(itk::Image*); \ template void itkImgFunc(itk::Image*); //##Documentation //## @brief Instantiate access function with one additional parammeter //## for a fixed datatype, but all dimensions //## //## Use this macro once after the definition of your access function. //## Some compilers have memory problems without the explicit instantiation. //## You may need to move the access function to a separate file. //## \note If you experience compiler errors, try to //## include mitkAltInstantiateAccessFunctions.h and //## add "Alt" (for alternate) before the call //## (e.g. AltInstantiateAccessFunction(...)). //## \sa InstantiateAccessFunctionForFixedPixelType //## \sa InstantiateAccessFunctionForFixedPixelType_2 //## @ingroup Adaptor #define InstantiateAccessFunctionForFixedPixelType_1(itkImgFunc, pixelType, param1Type) \ template void itkImgFunc(itk::Image*, param1Type); \ template void itkImgFunc(itk::Image*, param1Type); //##Documentation //## @brief Instantiate access function with two additional parammeters //## for a fixed datatype, but all dimensions //## //## Use this macro once after the definition of your access function. //## Some compilers have memory problems without the explicit instantiation. //## You may need to move the access function to a separate file. //## \note If you experience compiler errors, try to //## include mitkAltInstantiateAccessFunctions.h and //## add "Alt" (for alternate) before the call //## (e.g. AltInstantiateAccessFunction(...)). //## \sa InstantiateAccessFunctionForFixedPixelType //## \sa InstantiateAccessFunctionForFixedPixelType_1 //## @ingroup Adaptor #define InstantiateAccessFunctionForFixedPixelType_2(itkImgFunc, pixelType, param1Type, param2Type)\ template void itkImgFunc(itk::Image*, param1Type, param2Type); \ template void itkImgFunc(itk::Image*, param1Type, param2Type); #endif // of MITKINSTANTIATEACCESSFUNCTIONS_H_HEADER_INCLUDED diff --git a/Core/Code/CMakeLists.txt b/Core/Code/CMakeLists.txt index 6070f8144b..134a3418c1 100644 --- a/Core/Code/CMakeLists.txt +++ b/Core/Code/CMakeLists.txt @@ -1,50 +1,40 @@ FIND_PACKAGE(OpenGL) IF(NOT OPENGL_FOUND) MESSAGE("GL is required for MITK rendering") ENDIF(NOT OPENGL_FOUND ) -IF(CMAKE_COMPILER_IS_GNUCC) - OPTION(MITK_USE_GCC_VISIBILITY "Use gcc's -fvisibility option to hide exported symbols" OFF) - IF(MITK_USE_GCC_VISIBILITY) - ADD_DEFINITIONS("-fvisibility=hidden") - ENDIF(MITK_USE_GCC_VISIBILITY) -ENDIF(CMAKE_COMPILER_IS_GNUCC) - SET(TOOL_CPPS "") -IF(MITK_TEST_COVERAGE) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") -ENDIF(MITK_TEST_COVERAGE) MITK_CREATE_MODULE( Mitk INCLUDE_DIRS Algorithms DataManagement Controllers Interactions IO Rendering ${MITK_BINARY_DIR} INTERNAL_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR} ${IPSEGMENTATION_INCLUDE_DIR} ${ANN_INCLUDE_DIR} PROVIDES mitkCore - DEPENDS mitkIpPic mbilog tinyxml + DEPENDS mitkIpFunc mbilog tinyxml DEPENDS_INTERNAL IIL4MITK pic2vtk PACKAGE_DEPENDS ITK VTK ) # this is needed for libraries which link to mitkCore and need # symbols from explicitly instantiated templates like # mitk::SurfaceVtkWriter which is referenced in # QmitkCommonFunctionality in the QmitkExt library. IF(MINGW) GET_TARGET_PROPERTY(_mitkCore_MINGW_linkflags mitkCore LINK_FLAGS) IF(NOT _mitkCore_MINGW_linkflags) SET(_mitkCore_MINGW_linkflags "") ENDIF(NOT _mitkCore_MINGW_linkflags) SET_TARGET_PROPERTIES(mitkCore PROPERTIES LINK_FLAGS "${_mitkCore_MINGW_linkflags} -Wl,--export-all-symbols") ENDIF(MINGW) TARGET_LINK_LIBRARIES(mitkCore ${LIBRARIES_FOR_${KITNAME}_CORE} ${IPFUNC_LIBRARY} ipSegmentation ann) TARGET_LINK_LIBRARIES(mitkCore ${OPENGL_LIBRARIES} ) IF(MSVC_IDE OR MSVC_VERSION OR MINGW) TARGET_LINK_LIBRARIES(mitkCore psapi.lib) ENDIF(MSVC_IDE OR MSVC_VERSION OR MINGW) OPTION(BUILD_TESTING "Build the MITK Core tests." ON) IF(BUILD_TESTING) ENABLE_TESTING() ADD_SUBDIRECTORY(Testing) ENDIF(BUILD_TESTING) diff --git a/Documentation/CMakeLists.txt b/Documentation/CMakeLists.txt index 28b7bfac66..26318350de 100644 --- a/Documentation/CMakeLists.txt +++ b/Documentation/CMakeLists.txt @@ -1,133 +1,140 @@ # # Variables: # MITK_DOXYGEN_OUTPUT_DIR: doxygen output directory (optional) FIND_PACKAGE(Doxygen) IF(DOXYGEN_FOUND) OPTION(USE_DOT "Use dot program for generating graphical class diagrams with doxygen, if available" ON) OPTION(BUILD_MITK_QCH_FILES "Use doxygen to build Qt creator help files" OFF) MARK_AS_ADVANCED(USE_DOT) SET(HAVE_DOT "NO") IF(DOXYGEN_DOT_EXECUTABLE AND USE_DOT) SET(HAVE_DOT "YES") ENDIF() -SET(MITK_DOXYGEN_OUTPUT_DIR ${MITK_BINARY_DIR}/Documentation/Doxygen CACHE PATH "Output directory for doxygen generated documentation." ) -SET(MITK_HELPPAGES_OUTPUT_DIR ${MITK_BINARY_DIR}/Documentation/helpPages CACHE PATH "Output directory for html help pages." ) +SET(MITK_DOXYGEN_OUTPUT_DIR ${PROJECT_BINARY_DIR}/Documentation/Doxygen CACHE PATH "Output directory for doxygen generated documentation." ) +SET(MITK_HELPPAGES_OUTPUT_DIR ${PROJECT_BINARY_DIR}/Documentation/helpPages CACHE PATH "Output directory for html help pages." ) SET(BUILD_QCH_FILES_BOOL "NO") IF(BUILD_MITK_QCH_FILES) SET(QHELPGENERATOR_DIR ${QT_DIR}/bin CACHE PATH "Help generator directory." ) SET(QCH_OUTPUT_DIR ${MITK_DOXYGEN_OUTPUT_DIR}/QCH CACHE PATH "Help generator directory." ) #OPTION(BUILD_MITK_QCH_FILE "Use doxygen to build a mitk.qch file" ON) OPTION(BUILD_VTK_QCH_FILE "Use doxygen to build a vtk.qch file" OFF) OPTION(BUILD_ITK_QCH_FILE "Use doxygen to build a itk.qch file" OFF) #ADD_CUSTOM_TARGET(qchfiles # ${DOXYGEN} # ${PROJECT_BINARY_DIR}/Documentation/doxygen.conf ) SET(BUILD_QCH_FILES_BOOL "YES") ENDIF(BUILD_MITK_QCH_FILES) IF(MITK_USE_BLUEBERRY) FILE(RELATIVE_PATH _blueberry_doxygen_path ${MITK_DOXYGEN_OUTPUT_DIR}/html ${BLUEBERRY_DOXYGEN_OUTPUT_DIR}/html) SET(BLUEBERRY_TAGFILE "${BLUEBERRY_DOXYGEN_OUTPUT_DIR}/BlueBerry.tag=${_blueberry_doxygen_path}") SET(BLUEBERRY_DOXYGEN_LINK "BlueBerry Documentation") SET(MITK_XP_LINK "\\ref mitkExtPointsIndex") CONFIGURE_FILE(schema.css ${MITK_DOXYGEN_OUTPUT_DIR}/html/schema.css) SET(MITK_DOXYGEN_ENABLED_SECTIONS "${MITK_DOXYGEN_ENABLED_SECTIONS} BLUEBERRY") ENDIF(MITK_USE_BLUEBERRY) # Configure some doxygen options IF(NOT MITK_DOXYGEN_GENERATE_TODOLIST) SET(MITK_DOXYGEN_GENERATE_TODOLIST "NO") ENDIF() IF(NOT MITK_DOXYGEN_GENERATE_BUGLIST) SET(MITK_DOXYGEN_GENERATE_BUGLIST "NO") ENDIF() IF(NOT MITK_DOXYGEN_HTML_DYNAMIC_SECTIONS) SET(MITK_DOXYGEN_HTML_DYNAMIC_SECTIONS "NO") ENDIF() IF(NOT MITK_DOXYGEN_UML_LOOK) SET(MITK_DOXYGEN_UML_LOOK "NO") ENDIF() IF(NOT MITK_DOXYGEN_GENERATE_DEPRECATEDLIST) SET(MITK_DOXYGEN_GENERATE_DEPRECATEDLIST "YES") ENDIF() CONFIGURE_FILE(Doxygen/MainPage.dox.in ${CMAKE_CURRENT_BINARY_DIR}/Doxygen/MainPage.dox) CONFIGURE_FILE(doxygen.conf.in ${CMAKE_CURRENT_BINARY_DIR}/doxygen.conf) CONFIGURE_FILE(helpPages.conf.in ${CMAKE_CURRENT_BINARY_DIR}/helpPages.conf) - + IF(BUILD_ITK_QCH_FILE) - # add the command to generate the ITK documantation - add_custom_command(TARGET doc - POST_BUILD - ${DOXYGEN} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.itk.conf) + # add the command to generate the ITK documantation + add_custom_command(TARGET doc + POST_BUILD + ${DOXYGEN} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.itk.conf) ENDIF(BUILD_ITK_QCH_FILE) IF(BUILD_VTK_QCH_FILE) - # add the command to generate the VTK documantation - add_custom_command(TARGET doc - POST_BUIL - ${DOXYGEN} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.vtk.conf) + # add the command to generate the VTK documantation + add_custom_command(TARGET doc + POST_BUILD + ${DOXYGEN} ${CMAKE_CURRENT_BINARY_DIR}/doxygen.vtk.conf) ENDIF(BUILD_VTK_QCH_FILE) # CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/Documentation/doxygen.conf.in # ${PROJECT_BINARY_DIR}/Documentation/doxygen.conf) ADD_CUSTOM_TARGET(doc ${DOXYGEN} ${PROJECT_BINARY_DIR}/Documentation/doxygen.conf ) IF (MITK_USE_BLUEBERRY) # convert the extension points schema files into html FIND_PACKAGE(Ant) IF(ANT_FOUND AND BLUEBERRY_DOC_TOOLS_DIR) - FILE(GLOB_RECURSE _plugin_xmls - ${CMAKE_CURRENT_SOURCE_DIR}/../CoreUI/Bundles/plugin.xml - ${CMAKE_CURRENT_SOURCE_DIR}/../Modules/Bundles/plugin.xml) + + LIST(APPEND MITK_XP_GLOB_EXPRESSIONS + ${MITK_SOURCE_DIR}/CoreUI/Bundles/plugin.xml + ${MITK_SOURCE_DIR}/Modules/Bundles/plugin.xml) + + FILE(GLOB_RECURSE _plugin_xmls ${MITK_XP_GLOB_EXPRESSIONS}) + MACRO_CONVERT_SCHEMA(INPUT ${_plugin_xmls} OUTPUT_DIR "${MITK_DOXYGEN_OUTPUT_DIR}/html/extension-points/html" TARGET_NAME mitkXPDoc ) - ADD_DEPENDENCIES(doc mitkXPDoc BlueBerryDoc) + ADD_DEPENDENCIES(doc mitkXPDoc) + IF(${PROJECT_NAME} STREQUAL "MITK") + ADD_DEPENDENCIES(doc BlueBerryDoc) + ENDIF() ENDIF(ANT_FOUND AND BLUEBERRY_DOC_TOOLS_DIR) ENDIF (MITK_USE_BLUEBERRY) ADD_CUSTOM_TARGET(helpPages ${DOXYGEN} ${PROJECT_BINARY_DIR}/Documentation/helpPages.conf ) ELSE(DOXYGEN_FOUND) # copy blank documentation page to prevent QtHelp from being shown # copy the .qhc and .qch files to $MITK_BIN/mitk/bin/ExtBundles/resources/ -CONFIGURE_FILE( pregenerated/MITKBlankPage.qch - ${MITK_BINARY_DIR}/bin/ExtBundles/org.mitk.gui.qt.extapplication/resources/MITKBlankPage.qch - COPYONLY ) - -CONFIGURE_FILE( pregenerated/MitkExtQtHelpCollection.qhc - ${MITK_BINARY_DIR}/bin/ExtBundles/org.mitk.gui.qt.extapplication/resources/MitkExtQtHelpCollection.qhc - COPYONLY ) +CONFIGURE_FILE(pregenerated/MITKBlankPage.qch + ${MITK_BINARY_DIR}/bin/ExtBundles/org.mitk.gui.qt.extapplication/resources/MITKBlankPage.qch + COPYONLY) + +CONFIGURE_FILE(pregenerated/MitkExtQtHelpCollection.qhc + ${MITK_BINARY_DIR}/bin/ExtBundles/org.mitk.gui.qt.extapplication/resources/MitkExtQtHelpCollection.qhc + COPYONLY) ENDIF(DOXYGEN_FOUND) diff --git a/MITKCPackOptions.cmake.in b/MITKCPackOptions.cmake.in index aeada9c222..5c8a6372bc 100644 --- a/MITKCPackOptions.cmake.in +++ b/MITKCPackOptions.cmake.in @@ -1,34 +1,31 @@ -# set the package header icon for MUI - -SET(CPACK_PACKAGE_ICON "@MITK_SOURCE_DIR@/mitk.bmp") - -# tell cpack to strip all debug symbols from all files -SET(CPACK_STRIP_FILES ON) if(CPACK_GENERATOR MATCHES "NSIS") + # set the package header icon for MUI SET(CPACK_PACKAGE_ICON "@MITK_SOURCE_DIR@\\mitk.bmp") - # set the install/unistall icon used for the installer itself - # There is a bug in NSI that does not handle full unix paths properly. + # There is a bug in NSIS that does not handle full unix paths properly. SET(CPACK_NSIS_MUI_ICON "@MITK_SOURCE_DIR@\\mitk.ico") SET(CPACK_NSIS_MUI_UNIICON "@MITK_SOURCE_DIR@\\mitk.ico") + + SET(CPACK_NSIS_DISPLAY_NAME "MITK - Medical Imaging and Interaction Toolkit") + # tell cpack to create links to the doc files SET(CPACK_NSIS_MENU_LINKS "http://www.mitk.org" "MITK Web Site" ) + # tell cpack the executables you want in the start menu as links SET(CPACK_PACKAGE_EXECUTABLES "@MITK_CPACK_PACKAGE_EXECUTABLES@") # tell cpack to create a desktop link to MainApp SET(CPACK_CREATE_DESKTOP_LINKS "@CPACK_CREATE_DESKTOP_LINKS@") SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\mitk.ico") - SET(CPACK_NSIS_DISPLAY_NAME "MITK - Medical Imaging Interaction Toolkit") SET(CPACK_NSIS_HELP_LINK "http:\\\\www.mitk.org") SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\www.mitk.org") SET(CPACK_NSIS_CONTACT mitk@mitk.org) SET(CPACK_NSIS_MODIFY_PATH ON) endif(CPACK_GENERATOR MATCHES "NSIS") diff --git a/MITKCTestCustom.ctest.in b/MITKCTestCustom.ctest.in deleted file mode 100644 index 530bcd23f9..0000000000 --- a/MITKCTestCustom.ctest.in +++ /dev/null @@ -1,13 +0,0 @@ -# suppress a couple of MITK external warnings for better overview -SET(CTEST_CUSTOM_WARNING_EXCEPTION - ${CTEST_CUSTOM_WARNING_EXCEPTION} - "Utilities/Poco/" - "Utilities/qwt/" - "Utilities/qxt" - "Utilities/tinyxml/" - "QtCore" - "QtGui" - "vtkCellArray.h" - "itkNonUniformBSpline.txx" -) - diff --git a/MITKConfig.cmake.in b/MITKConfig.cmake.in index c39eaadedd..e3a5f58d11 100644 --- a/MITKConfig.cmake.in +++ b/MITKConfig.cmake.in @@ -1,87 +1,111 @@ +# Update the CMake module path +SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "@MITK_SOURCE_DIR@/CMake") + +# Include MITK macros +include(MacroParseArguments) +include(mitkFunctionOrganizeSources) +include(mitkMacroCreateModuleConf) +include(mitkMacroCreateModule) +include(mitkMacroCheckModule) +include(mitkMacroCreateModuleTests) +include(mitkMacroUseModule) +include(mitkMacroMultiplexPicType) +include(mitkMacroInstall) +include(mitkMacroInstallHelperApp) +include(mitkMacroInstallTargets) +include(mitkMacroGenerateToolsLibrary) + +# The MITK version number SET(MITK_VERSION_MAJOR "@MITK_VERSION_MAJOR@") SET(MITK_VERSION_MINOR "@MITK_VERSION_MINOR@") SET(MITK_VERSION_PATCH "@MITK_VERSION_PATCH@") +# MITK specific variables SET(MITK_SOURCE_DIR "@MITK_SOURCE_DIR@") -SET(ITK_DIR "@ITK_DIR@") -SET(VTK_DIR "@VTK_DIR@") +SET(UTILITIES_DIR "@UTILITIES_DIR@") +SET(REGISTER_QFUNCTIONALITY_CPP_IN "@REGISTER_QFUNCTIONALITY_CPP_IN@") +SET(MITK_MODULES_CONF_DIR "@MITK_MODULES_CONF_DIR@") +SET(MITK_MODULES_PACKAGE_DEPENDS_DIR "@MITK_MODULES_PACKAGE_DEPENDS_DIR@") -SET(MITK_INCLUDE_DIRS "@MITK_INCLUDE_DIRS_CONFIG@") -SET(QMITK_INCLUDE_DIRS "@QMITK_INCLUDE_DIRS_CONFIG@") +# Include directory variables +SET(MITK_INCLUDE_DIRS "@MITK_INCLUDE_DIRS@") +SET(QMITK_INCLUDE_DIRS "@QMITK_INCLUDE_DIRS@") SET(ANN_INCLUDE_DIR "@ANN_INCLUDE_DIR@") SET(IPSEGMENTATION_INCLUDE_DIR "@IPSEGMENTATION_INCLUDE_DIR@") +SET(VECMATH_INCLUDE_DIR "@VECMATH_INCLUDE_DIR@") +SET(IPFUNC_INCLUDE_DIR "@IPFUNC_INCLUDE_DIR@") +SET(MITK_IGT_INCLUDE_DIRS "@MITK_IGT_INCLUDE_DIRS@") + +# Library variables SET(MITK_LIBRARIES "@MITK_LIBRARIES@") SET(QMITK_LIBRARIES "@QMITK_LIBRARIES@") + +# Link directory variables SET(MITK_LINK_DIRECTORIES "@MITK_LINK_DIRECTORIES@") SET(QMITK_LINK_DIRECTORIES "@QMITK_LINK_DIRECTORIES@") -SET(VECMATH_INCLUDE_DIR "@VECMATH_INCLUDE_DIR@") -SET(IPFUNC_INCLUDE_DIR "@IPFUNC_INCLUDE_DIR@") -SET(UTILITIES_DIR "@UTILITIES_DIR@") -SET(REGISTER_QFUNCTIONALITY_CPP_IN "@REGISTER_QFUNCTIONALITY_CPP_IN@") -SET(MITK_MODULES_CONF_DIR "@MITK_MODULES_CONF_DIR@") +SET(MITK_LIBRARY_DIRS "@CMAKE_LIBRARY_OUTPUT_DIRECTORY@") +SET(MITK_VTK_LIBRARY_DIRS "@VTK_LIBRARY_DIRS@") +SET(MITK_ITK_LIBRARY_DIRS "@ITK_LIBRARY_DIRS@") -SET(MITK_IGT_INCLUDE_DIRS "@MITK_IGT_INCLUDE_DIRS@") +# External projects +SET(ITK_DIR "@ITK_DIR@") +SET(VTK_DIR "@VTK_DIR@") +SET(BOOST_ROOT "@BOOST_ROOT@") +SET(MITK_QMAKE_EXECUTABLE "@QT_QMAKE_EXECUTABLE@") +SET(MITK_INSTALL_RPATH_RELATIVE @MITK_INSTALL_RPATH_RELATIVE@) + +# MITK use variables +SET(MITK_USE_QT @MITK_USE_QT@) +SET(MITK_USE_BLUEBERRY @MITK_USE_BLUEBERRY@) +SET(MITK_USE_Boost @MITK_USE_Boost@) +SET(MITK_USE_CTK @MITK_USE_CTK@) +SET(MITK_USE_GDCMIO @MITK_USE_GDCMIO@) +SET(MITK_USE_DCMTK @MITK_USE_DCMTK@) + +# There is no PocoConfig.cmake, so we set Poco specific CMake variables +# here. This way the call to FIND_PACKAGE(Poco) in BlueBerryConfig.cmake +# finds the Poco distribution supplied by MITK +SET(Poco_INCLUDE_DIR "@MITK_SOURCE_DIR@/Utilities/Poco") +SET(Poco_LIBRARY_DIR "@MITK_BINARY_DIR@/bin") -SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "@MITK_SOURCE_DIR@/CMake") IF(MITK_USE_EXT) #INCLUDE(${MITK_DIR}/mitkExtConfig.cmake) #INCLUDE(${MITK_DIR}/QmitkExtConfig.cmake) ENDIF() IF(MITK_USE_IGT) #INCLUDE(${MITK_DIR}/mitkIGTConfig.cmake) ENDIF() -INCLUDE("@MITK_SOURCE_DIR@/CMake/CoreHelpers.cmake") -INCLUDE("@MITK_SOURCE_DIR@/CMake/ToolExtensionHelpers.cmake") -APPLY_VTK_FLAGS() - -SET(MITK_USE_QT "@MITK_USE_QT@") - - -IF (MITK_USE_BLUEBERRY) +# BlueBerry support +IF(MITK_USE_BLUEBERRY) SET(BlueBerry_DIR "@MITK_BINARY_DIR@/BlueBerry") - # There is no PocoConfig.cmake, so we set Poco specific CMake variables - # here. This way the call to FIND_PACKAGE(Poco) in BlueBerryConfig.cmake - # finds the Poco distribution supplied by MITK - SET(Poco_INCLUDE_DIR - "@MITK_SOURCE_DIR@/Utilities/Poco" - CACHE PATH - "top-level directory containing the poco include directories. E.g /usr/local/include/ or c:\\poco\\include\\poco-1.3.2") - - SET(Poco_LIBRARY_DIR - "@MITK_BINARY_DIR@/bin" - CACHE PATH - "top-level directory containing the poco libraries.") - - INCLUDE("@MITK_SOURCE_DIR@/CMake/MITKPluginHelpers.cmake") + INCLUDE(mitkMacroCreatePlugin) IF(NOT MITK_SKIP_BUNDLELIST) INCLUDE("@MITK_BINARY_DIR@/Bundles/MITKCoreBundleList.cmake") IF(MITK_USE_EXT) INCLUDE("@MITK_BINARY_DIR@/Bundles/MITKModulesBundleList.cmake") ENDIF() ENDIF(NOT MITK_SKIP_BUNDLELIST) FIND_PACKAGE(BlueBerry) IF(NOT BlueBerry_FOUND) MESSAGE(SEND_ERROR "MITK does not seem to be configured with BlueBerry support. Set MITK_USE_BLUEBERRY to ON in your MITK build configuration.") ENDIF(NOT BlueBerry_FOUND) + + SET(BLUEBERRY_OSGI_LINK_DIR "@BLUEBERRY_PLUGINS_OUTPUT_DIR@/org.blueberry.osgi/bin") SET(MITK_PLUGIN_SOURCE_DIRS "@MITK_SOURCE_DIR@/Bundles") SET(MITK_PLUGIN_OUTPUT_DIRS @MITK_CORE_PLUGIN_OUTPUT_DIRS@) IF(MITK_USE_EXT) LIST(APPEND MITK_PLUGIN_OUTPUT_DIRS @MITK_MODULES_PLUGIN_OUTPUT_DIRS@) ENDIF() - SET(MITK_LIBRARY_DIRS "@CMAKE_LIBRARY_OUTPUT_DIRECTORY@") - SET(MITK_VTK_LIBRARY_DIRS "@VTK_LIBRARY_DIRS@") - SET(MITK_ITK_LIBRARY_DIRS "@ITK_LIBRARY_DIRS@") - ENDIF(MITK_USE_BLUEBERRY) diff --git a/Modules/Bundles/org.mitk.gui.qt.ext/src/QmitkExtWorkbenchWindowAdvisor.cpp b/Modules/Bundles/org.mitk.gui.qt.ext/src/QmitkExtWorkbenchWindowAdvisor.cpp index 4a2827a36a..65005d3602 100644 --- a/Modules/Bundles/org.mitk.gui.qt.ext/src/QmitkExtWorkbenchWindowAdvisor.cpp +++ b/Modules/Bundles/org.mitk.gui.qt.ext/src/QmitkExtWorkbenchWindowAdvisor.cpp @@ -1,972 +1,972 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html 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 notices for more information. =========================================================================*/ #include "QmitkExtWorkbenchWindowAdvisor.h" #include "QmitkExtActionBarAdvisor.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // UGLYYY #include "internal/QmitkExtWorkbenchWindowAdvisorHack.h" #include "mitkUndoController.h" #include "mitkVerboseLimitedLinearUndo.h" #include #include #include #include QmitkExtWorkbenchWindowAdvisorHack * QmitkExtWorkbenchWindowAdvisorHack::undohack = new QmitkExtWorkbenchWindowAdvisorHack(); class PartListenerForTitle: public berry::IPartListener { public: PartListenerForTitle(QmitkExtWorkbenchWindowAdvisor* wa) : windowAdvisor(wa) { } Events::Types GetPartEventTypes() const { return Events::ACTIVATED | Events::BROUGHT_TO_TOP | Events::CLOSED | Events::HIDDEN | Events::VISIBLE; } void PartActivated(berry::IWorkbenchPartReference::Pointer ref) { if (ref.Cast ()) { windowAdvisor->UpdateTitle(false); } } void PartBroughtToTop(berry::IWorkbenchPartReference::Pointer ref) { if (ref.Cast ()) { windowAdvisor->UpdateTitle(false); } } void PartClosed(berry::IWorkbenchPartReference::Pointer /*ref*/) { windowAdvisor->UpdateTitle(false); } void PartHidden(berry::IWorkbenchPartReference::Pointer ref) { if (!windowAdvisor->lastActiveEditor.Expired() && ref->GetPart(false) == windowAdvisor->lastActiveEditor.Lock()) { windowAdvisor->UpdateTitle(true); } } void PartVisible(berry::IWorkbenchPartReference::Pointer ref) { if (!windowAdvisor->lastActiveEditor.Expired() && ref->GetPart(false) == windowAdvisor->lastActiveEditor.Lock()) { windowAdvisor->UpdateTitle(false); } } private: QmitkExtWorkbenchWindowAdvisor* windowAdvisor; }; class PartListenerForImageNavigator: public berry::IPartListener { public: PartListenerForImageNavigator(QAction* act) : imageNavigatorAction(act) { } Events::Types GetPartEventTypes() const { return Events::OPENED | Events::CLOSED | Events::HIDDEN | Events::VISIBLE; } void PartOpened(berry::IWorkbenchPartReference::Pointer ref) { if (ref->GetId()=="org.mitk.views.imagenavigator") { imageNavigatorAction->setChecked(true); } } void PartClosed(berry::IWorkbenchPartReference::Pointer ref) { if (ref->GetId()=="org.mitk.views.imagenavigator") { imageNavigatorAction->setChecked(false); } } void PartVisible(berry::IWorkbenchPartReference::Pointer ref) { if (ref->GetId()=="org.mitk.views.imagenavigator") { imageNavigatorAction->setChecked(true); } } void PartHidden(berry::IWorkbenchPartReference::Pointer ref) { if (ref->GetId()=="org.mitk.views.imagenavigator") { imageNavigatorAction->setChecked(false); } } private: QAction* imageNavigatorAction; }; class PerspectiveListenerForTitle: public berry::IPerspectiveListener { public: PerspectiveListenerForTitle(QmitkExtWorkbenchWindowAdvisor* wa) : windowAdvisor(wa), perspectivesClosed(false) { } Events::Types GetPerspectiveEventTypes() const { return Events::ACTIVATED | Events::SAVED_AS | Events::DEACTIVATED // remove the following line when command framework is finished | Events::CLOSED | Events::OPENED; } void PerspectiveActivated(berry::IWorkbenchPage::Pointer /*page*/, berry::IPerspectiveDescriptor::Pointer /*perspective*/) { windowAdvisor->UpdateTitle(false); } void PerspectiveSavedAs(berry::IWorkbenchPage::Pointer /*page*/, berry::IPerspectiveDescriptor::Pointer /*oldPerspective*/, berry::IPerspectiveDescriptor::Pointer /*newPerspective*/) { windowAdvisor->UpdateTitle(false); } void PerspectiveDeactivated(berry::IWorkbenchPage::Pointer /*page*/, berry::IPerspectiveDescriptor::Pointer /*perspective*/) { windowAdvisor->UpdateTitle(false); } void PerspectiveOpened(berry::IWorkbenchPage::Pointer /*page*/, berry::IPerspectiveDescriptor::Pointer /*perspective*/) { if (perspectivesClosed) { QListIterator i(windowAdvisor->viewActions); while (i.hasNext()) { i.next()->setEnabled(true); } windowAdvisor->fileSaveProjectAction->setEnabled(true); windowAdvisor->closeProjectAction->setEnabled(true); windowAdvisor->undoAction->setEnabled(true); windowAdvisor->redoAction->setEnabled(true); windowAdvisor->imageNavigatorAction->setEnabled(true); windowAdvisor->resetPerspAction->setEnabled(true); windowAdvisor->closePerspAction->setEnabled(true); } perspectivesClosed = false; } void PerspectiveClosed(berry::IWorkbenchPage::Pointer /*page*/, berry::IPerspectiveDescriptor::Pointer /*perspective*/) { berry::IWorkbenchWindow::Pointer wnd = windowAdvisor->GetWindowConfigurer()->GetWindow(); bool allClosed = true; if (wnd->GetActivePage()) { std::vector perspectives(wnd->GetActivePage()->GetOpenPerspectives()); allClosed = perspectives.empty(); } if (allClosed) { perspectivesClosed = true; QListIterator i(windowAdvisor->viewActions); while (i.hasNext()) { i.next()->setEnabled(false); } windowAdvisor->fileSaveProjectAction->setEnabled(false); windowAdvisor->closeProjectAction->setEnabled(false); windowAdvisor->undoAction->setEnabled(false); windowAdvisor->redoAction->setEnabled(false); windowAdvisor->imageNavigatorAction->setEnabled(false); windowAdvisor->resetPerspAction->setEnabled(false); windowAdvisor->closePerspAction->setEnabled(false); } } private: QmitkExtWorkbenchWindowAdvisor* windowAdvisor; bool perspectivesClosed; }; class PerspectiveListenerForMenu: public berry::IPerspectiveListener { public: PerspectiveListenerForMenu(QmitkExtWorkbenchWindowAdvisor* wa) : windowAdvisor(wa) { } Events::Types GetPerspectiveEventTypes() const { return Events::ACTIVATED | Events::DEACTIVATED; } void PerspectiveActivated(berry::IWorkbenchPage::Pointer /*page*/, berry::IPerspectiveDescriptor::Pointer perspective) { QAction* action = windowAdvisor->mapPerspIdToAction[perspective->GetId()]; if (action) { action->setChecked(true); } } void PerspectiveDeactivated(berry::IWorkbenchPage::Pointer /*page*/, berry::IPerspectiveDescriptor::Pointer perspective) { QAction* action = windowAdvisor->mapPerspIdToAction[perspective->GetId()]; if (action) { action->setChecked(false); } } private: QmitkExtWorkbenchWindowAdvisor* windowAdvisor; }; QmitkExtWorkbenchWindowAdvisor::QmitkExtWorkbenchWindowAdvisor(berry::WorkbenchAdvisor* wbAdvisor, berry::IWorkbenchWindowConfigurer::Pointer configurer) : QmitkCommonWorkbenchWindowAdvisor(configurer), lastInput(0), wbAdvisor(wbAdvisor), showViewToolbar(true), showVersionInfo(true) { productName = berry::Platform::GetConfiguration().getString("application.baseName"); } berry::ActionBarAdvisor::Pointer QmitkExtWorkbenchWindowAdvisor::CreateActionBarAdvisor( berry::IActionBarConfigurer::Pointer configurer) { berry::ActionBarAdvisor::Pointer actionBarAdvisor( new QmitkExtActionBarAdvisor(configurer)); return actionBarAdvisor; } void* QmitkExtWorkbenchWindowAdvisor::CreateEmptyWindowContents(void* parent) { QWidget* parentWidget = static_cast(parent); QLabel* label = new QLabel(parentWidget); label->setText("No perspectives are open. Open a perspective in the Window->Open Perspective menu."); label->setContentsMargins(10,10,10,10); label->setAlignment(Qt::AlignTop); label->setEnabled(false); parentWidget->layout()->addWidget(label); return label; } void QmitkExtWorkbenchWindowAdvisor::ShowViewToolbar(bool show) { showViewToolbar = show; } void QmitkExtWorkbenchWindowAdvisor::ShowVersionInfo(bool show) { showVersionInfo = show; } void QmitkExtWorkbenchWindowAdvisor::SetProductName(const std::string& product) { productName = product; } void QmitkExtWorkbenchWindowAdvisor::SetWindowIcon(const std::string& wndIcon) { windowIcon = wndIcon; } void QmitkExtWorkbenchWindowAdvisor::PostWindowCreate() { QmitkCommonWorkbenchWindowAdvisor::PostWindowCreate(); // very bad hack... berry::IWorkbenchWindow::Pointer window = this->GetWindowConfigurer()->GetWindow(); QMainWindow* mainWindow = static_cast (window->GetShell()->GetControl()); if (!windowIcon.empty()) { mainWindow->setWindowIcon(QIcon(QString::fromStdString(windowIcon))); } mainWindow->setContextMenuPolicy(Qt::PreventContextMenu); /*mainWindow->setStyleSheet("color: white;" "background-color: #808080;" "selection-color: #659EC7;" "selection-background-color: #808080;" " QMenuBar {" "background-color: #808080; }");*/ // ==== Application menu ============================ QMenuBar* menuBar = mainWindow->menuBar(); menuBar->setContextMenuPolicy(Qt::PreventContextMenu); QMenu* fileMenu = menuBar->addMenu("&File"); fileMenu->setObjectName("FileMenu"); QAction* fileOpenAction = new QmitkExtFileOpenAction(QIcon(":/org.mitk.gui.qt.ext/Load_48.png"), window); fileMenu->addAction(fileOpenAction); fileSaveProjectAction = new QmitkExtFileSaveProjectAction(window); fileSaveProjectAction->setIcon(QIcon(":/org.mitk.gui.qt.ext/Save_48.png")); fileMenu->addAction(fileSaveProjectAction); closeProjectAction = new QmitkCloseProjectAction(window); closeProjectAction->setIcon(QIcon(":/org.mitk.gui.qt.ext/Remove_48.png")); fileMenu->addAction(closeProjectAction); fileMenu->addSeparator(); QAction* fileExitAction = new QmitkFileExitAction(window); fileExitAction->setObjectName("QmitkFileExitAction"); fileMenu->addAction(fileExitAction); berry::IViewRegistry* viewRegistry = berry::PlatformUI::GetWorkbench()->GetViewRegistry(); const std::vector& viewDescriptors = viewRegistry->GetViews(); // another bad hack to get an edit/undo menu... QMenu* editMenu = menuBar->addMenu("&Edit"); undoAction = editMenu->addAction(QIcon(":/org.mitk.gui.qt.ext/Undo_48.png"), "&Undo", QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onUndo()), QKeySequence("CTRL+Z")); undoAction->setToolTip("Undo the last action (not supported by all modules)"); redoAction = editMenu->addAction(QIcon(":/org.mitk.gui.qt.ext/Redo_48.png") , "&Redo", QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onRedo()), QKeySequence("CTRL+Y")); redoAction->setToolTip("execute the last action that was undone again (not supported by all modules)"); imageNavigatorAction = new QAction(QIcon(":/org.mitk.gui.qt.ext/Slider.png"), "&Image Navigator", NULL); QObject::connect(imageNavigatorAction, SIGNAL(triggered(bool)), QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onImageNavigator())); imageNavigatorAction->setCheckable(true); // add part listener for image navigator imageNavigatorPartListener = new PartListenerForImageNavigator(imageNavigatorAction); window->GetPartService()->AddPartListener(imageNavigatorPartListener); berry::IViewPart::Pointer imageNavigatorView = window->GetActivePage()->FindView("org.mitk.views.imagenavigator"); imageNavigatorAction->setChecked(false); if (imageNavigatorView) { bool isImageNavigatorVisible = window->GetActivePage()->IsPartVisible(imageNavigatorView); if (isImageNavigatorVisible) imageNavigatorAction->setChecked(true); } imageNavigatorAction->setToolTip("Open image navigator for navigating through image"); // toolbar for showing file open, undo, redo and other main actions QToolBar* mainActionsToolBar = new QToolBar; mainActionsToolBar->setContextMenuPolicy(Qt::PreventContextMenu); #ifdef __APPLE__ mainActionsToolBar->setToolButtonStyle ( Qt::ToolButtonTextUnderIcon ); #else mainActionsToolBar->setToolButtonStyle ( Qt::ToolButtonTextBesideIcon ); #endif mainActionsToolBar->addAction(fileOpenAction); mainActionsToolBar->addAction(fileSaveProjectAction); mainActionsToolBar->addAction(closeProjectAction); mainActionsToolBar->addAction(undoAction); mainActionsToolBar->addAction(redoAction); mainActionsToolBar->addAction(imageNavigatorAction); mainWindow->addToolBar(mainActionsToolBar); #ifdef __APPLE__ mainWindow->setUnifiedTitleAndToolBarOnMac(true); #endif // ==== Window Menu ========================== QMenu* windowMenu = menuBar->addMenu("Window"); windowMenu->addAction("&New Window", QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onNewWindow())); windowMenu->addSeparator(); QMenu* perspMenu = windowMenu->addMenu("&Open Perspective"); QMenu* viewMenu = windowMenu->addMenu("Show &View"); viewMenu->setObjectName("Show View"); windowMenu->addSeparator(); resetPerspAction = windowMenu->addAction("&Reset Perspective", QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onResetPerspective())); closePerspAction = windowMenu->addAction("&Close Perspective", QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onClosePerspective())); windowMenu->addSeparator(); windowMenu->addAction("&Preferences...", QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onEditPreferences()), QKeySequence("CTRL+P")); // fill perspective menu berry::IPerspectiveRegistry* perspRegistry = window->GetWorkbench()->GetPerspectiveRegistry(); QActionGroup* perspGroup = new QActionGroup(menuBar); std::vector perspectives( perspRegistry->GetPerspectives()); bool skip = false; for (std::vector::iterator perspIt = perspectives.begin(); perspIt != perspectives.end(); ++perspIt) { // if perspectiveExcludeList is set, it contains the id-strings of perspectives, which // should not appear as an menu-entry in the perspective menu if (perspectiveExcludeList.size() > 0) { for (unsigned int i=0; iGetId()) { skip = true; break; } } if (skip) { skip = false; continue; } } QAction* perspAction = new berry::QtOpenPerspectiveAction(window, *perspIt, perspGroup); mapPerspIdToAction.insert(std::make_pair((*perspIt)->GetId(), perspAction)); } perspMenu->addActions(perspGroup->actions()); // sort elements (converting vector to map...) std::vector::const_iterator iter; std::map VDMap; for (iter = viewDescriptors.begin(); iter != viewDescriptors.end(); ++iter) { if ((*iter)->GetId() == "org.blueberry.ui.internal.introview") continue; if ((*iter)->GetId() == "org.mitk.views.imagenavigator") continue; std::pair p( (*iter)->GetLabel(), (*iter)); VDMap.insert(p); } // ================================================== // ==== View Toolbar ================================== QToolBar* qToolbar = new QToolBar; std::map::const_iterator MapIter; for (MapIter = VDMap.begin(); MapIter != VDMap.end(); ++MapIter) { berry::QtShowViewAction* viewAction = new berry::QtShowViewAction(window, (*MapIter).second); viewActions.push_back(viewAction); viewMenu->addAction(viewAction); if (showViewToolbar) { qToolbar->addAction(viewAction); } } if (showViewToolbar) { mainWindow->addToolBar(qToolbar); } else delete qToolbar; Poco::Path path; berry::IBundle::Pointer bundle = berry::Platform::GetBundle("org.mitk.gui.qt.ext"); berry::Platform::GetStatePath(path, bundle); QString qPath = QString::fromStdString(path.toString()); qPath.append("PreferencesQt.ini"); QSettings settings(qPath, QSettings::IniFormat); mainWindow->restoreState(settings.value("ToolbarPosition").toByteArray()); // ==================================================== // ===== Help menu ==================================== QMenu* helpMenu = menuBar->addMenu("Help"); helpMenu->addAction("&Welcome",QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onIntro())); helpMenu->addAction("&Help Contents",QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onHelp()), QKeySequence("F1")); helpMenu->addAction("&About",QmitkExtWorkbenchWindowAdvisorHack::undohack, SLOT(onAbout())); // ===================================================== QStatusBar* qStatusBar = new QStatusBar(); //creating a QmitkStatusBar for Output on the QStatusBar and connecting it with the MainStatusBar QmitkStatusBar *statusBar = new QmitkStatusBar(qStatusBar); //disabling the SizeGrip in the lower right corner statusBar->SetSizeGripEnabled(false); QmitkProgressBar *progBar = new QmitkProgressBar(); qStatusBar->addPermanentWidget(progBar, 0); progBar->hide(); // progBar->AddStepsToDo(2); // progBar->Progress(1); mainWindow->setStatusBar(qStatusBar); QmitkMemoryUsageIndicatorView* memoryIndicator = new QmitkMemoryUsageIndicatorView(); qStatusBar->addPermanentWidget(memoryIndicator, 0); } void QmitkExtWorkbenchWindowAdvisor::PreWindowOpen() { berry::IWorkbenchWindowConfigurer::Pointer configurer = GetWindowConfigurer(); // show the shortcut bar and progress indicator, which are hidden by // default //configurer->SetShowPerspectiveBar(true); //configurer->SetShowFastViewBars(true); //configurer->SetShowProgressIndicator(true); // // add the drag and drop support for the editor area // configurer.addEditorAreaTransfer(EditorInputTransfer.getInstance()); // configurer.addEditorAreaTransfer(ResourceTransfer.getInstance()); // configurer.addEditorAreaTransfer(FileTransfer.getInstance()); // configurer.addEditorAreaTransfer(MarkerTransfer.getInstance()); // configurer.configureEditorAreaDropListener(new EditorAreaDropAdapter( // configurer.getWindow())); this->HookTitleUpdateListeners(configurer); menuPerspectiveListener = new PerspectiveListenerForMenu(this); configurer->GetWindow()->AddPerspectiveListener(menuPerspectiveListener); } //-------------------------------------------------------------------------------- // Ugly hack from here on. Feel free to delete when command framework // and undo buttons are done. //-------------------------------------------------------------------------------- QmitkExtWorkbenchWindowAdvisorHack::QmitkExtWorkbenchWindowAdvisorHack() : QObject() { } QmitkExtWorkbenchWindowAdvisorHack::~QmitkExtWorkbenchWindowAdvisorHack() { } void QmitkExtWorkbenchWindowAdvisorHack::onUndo() { mitk::UndoModel* model = mitk::UndoController::GetCurrentUndoModel(); if (model) { if (mitk::VerboseLimitedLinearUndo* verboseundo = dynamic_cast( model )) { mitk::VerboseLimitedLinearUndo::StackDescription descriptions = verboseundo->GetUndoDescriptions(); if (descriptions.size() >= 1) { MITK_INFO << "Undo " << descriptions.front().second; } } model->Undo(); } else { MITK_ERROR << "No undo model instantiated"; } } void QmitkExtWorkbenchWindowAdvisorHack::onRedo() { mitk::UndoModel* model = mitk::UndoController::GetCurrentUndoModel(); if (model) { if (mitk::VerboseLimitedLinearUndo* verboseundo = dynamic_cast( model )) { mitk::VerboseLimitedLinearUndo::StackDescription descriptions = verboseundo->GetRedoDescriptions(); if (descriptions.size() >= 1) { MITK_INFO << "Redo " << descriptions.front().second; } } model->Redo(); } else { MITK_ERROR << "No undo model instantiated"; } } void QmitkExtWorkbenchWindowAdvisorHack::onImageNavigator() { // get ImageNavigatorView berry::IViewPart::Pointer imageNavigatorView = berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->FindView("org.mitk.views.imagenavigator"); if (imageNavigatorView) { bool isImageNavigatorVisible = berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->IsPartVisible(imageNavigatorView); if (isImageNavigatorVisible) { berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->HideView(imageNavigatorView); return; } } berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->ShowView("org.mitk.views.imagenavigator"); //berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->ResetPerspective(); } void QmitkExtWorkbenchWindowAdvisorHack::onEditPreferences() { QmitkPreferencesDialog _PreferencesDialog(QApplication::activeWindow()); _PreferencesDialog.exec(); } void QmitkExtWorkbenchWindowAdvisorHack::onQuit() { berry::PlatformUI::GetWorkbench()->Close(); } void QmitkExtWorkbenchWindowAdvisorHack::onResetPerspective() { berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage()->ResetPerspective(); } void QmitkExtWorkbenchWindowAdvisorHack::onClosePerspective() { berry::IWorkbenchPage::Pointer page = berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow()->GetActivePage(); page->ClosePerspective(page->GetPerspective(), true, true); } void QmitkExtWorkbenchWindowAdvisorHack::onNewWindow() { berry::PlatformUI::GetWorkbench()->OpenWorkbenchWindow(0); } void QmitkExtWorkbenchWindowAdvisorHack::onIntro() { bool hasIntro = berry::PlatformUI::GetWorkbench()->GetIntroManager()->HasIntro(); if (!hasIntro) { QRegExp reg("(.*)(\\n)*"); QRegExp reg2("(\\n)*(.*)"); QFile file(":/org.mitk.gui.qt.ext/index.html"); file.open(QIODevice::ReadOnly | QIODevice::Text); // Als Text-Datei nur zum Lesen öffnen QString text = QString(file.readAll()); file.close(); QString title = text; title.replace(reg, ""); title.replace(reg2, ""); std::cout << title.toStdString() << std::endl; QMessageBox::information(NULL, title, text, "Close"); } else { berry::PlatformUI::GetWorkbench()->GetIntroManager()->ShowIntro( berry::PlatformUI::GetWorkbench()->GetActiveWorkbenchWindow(), false); } } void QmitkExtWorkbenchWindowAdvisorHack::onHelp() { berry::QtAssistantUtil::OpenActivePartHelp(); } void QmitkExtWorkbenchWindowAdvisorHack::onAbout() { QmitkAboutDialog* aboutDialog = new QmitkAboutDialog(QApplication::activeWindow(),NULL); aboutDialog->open(); } void QmitkExtWorkbenchWindowAdvisor::HookTitleUpdateListeners( berry::IWorkbenchWindowConfigurer::Pointer configurer) { // hook up the listeners to update the window title titlePartListener = new PartListenerForTitle(this); titlePerspectiveListener = new PerspectiveListenerForTitle(this); editorPropertyListener = new berry::PropertyChangeIntAdapter< QmitkExtWorkbenchWindowAdvisor>(this, &QmitkExtWorkbenchWindowAdvisor::PropertyChange); // configurer.getWindow().addPageListener(new IPageListener() { // public void pageActivated(IWorkbenchPage page) { // updateTitle(false); // } // // public void pageClosed(IWorkbenchPage page) { // updateTitle(false); // } // // public void pageOpened(IWorkbenchPage page) { // // do nothing // } // }); configurer->GetWindow()->AddPerspectiveListener(titlePerspectiveListener); configurer->GetWindow()->GetPartService()->AddPartListener(titlePartListener); } std::string QmitkExtWorkbenchWindowAdvisor::ComputeTitle() { berry::IWorkbenchWindowConfigurer::Pointer configurer = GetWindowConfigurer(); berry::IWorkbenchPage::Pointer currentPage = configurer->GetWindow()->GetActivePage(); berry::IEditorPart::Pointer activeEditor; if (currentPage) { activeEditor = lastActiveEditor.Lock(); } std::string title; //TODO Product // IProduct product = Platform.getProduct(); // if (product != null) { // title = product.getName(); // } // instead of the product name, we use a custom variable for now title = productName + " " + MITK_VERSION_STRING; if (showVersionInfo) { // add version informatioin - QString mitkRevision(MITK_SVN_REVISION); - mitkRevision.replace( QRegExp("[^0-9]+(\\d+).*"), "\\1"); + QString mitkRevision(MITK_REVISION); + mitkRevision = mitkRevision.left(6) + " (" MITK_REVISION_NAME ")"; QString versions = QString(" (ITK %1.%2.%3 VTK %4.%5.%6 Qt %7 MITK %8)") .arg(ITK_VERSION_MAJOR).arg(ITK_VERSION_MINOR).arg(ITK_VERSION_PATCH) .arg(VTK_MAJOR_VERSION).arg(VTK_MINOR_VERSION).arg(VTK_BUILD_VERSION) .arg(QT_VERSION_STR) .arg(mitkRevision); title += versions.toStdString(); } if (currentPage) { if (activeEditor) { lastEditorTitle = activeEditor->GetTitleToolTip(); if (!lastEditorTitle.empty()) title = lastEditorTitle + " - " + title; } berry::IPerspectiveDescriptor::Pointer persp = currentPage->GetPerspective(); std::string label = ""; if (persp) { label = persp->GetLabel(); } berry::IAdaptable* input = currentPage->GetInput(); if (input && input != wbAdvisor->GetDefaultPageInput()) { label = currentPage->GetLabel(); } if (!label.empty()) { title = label + " - " + title; } } title += " (Not for use in diagnosis or treatment of patients)"; return title; } void QmitkExtWorkbenchWindowAdvisor::RecomputeTitle() { berry::IWorkbenchWindowConfigurer::Pointer configurer = GetWindowConfigurer(); std::string oldTitle = configurer->GetTitle(); std::string newTitle = ComputeTitle(); if (newTitle != oldTitle) { configurer->SetTitle(newTitle); } } void QmitkExtWorkbenchWindowAdvisor::UpdateTitle(bool editorHidden) { berry::IWorkbenchWindowConfigurer::Pointer configurer = GetWindowConfigurer(); berry::IWorkbenchWindow::Pointer window = configurer->GetWindow(); berry::IEditorPart::Pointer activeEditor; berry::IWorkbenchPage::Pointer currentPage = window->GetActivePage(); berry::IPerspectiveDescriptor::Pointer persp; berry::IAdaptable* input = 0; if (currentPage) { activeEditor = currentPage->GetActiveEditor(); persp = currentPage->GetPerspective(); input = currentPage->GetInput(); } if (editorHidden) { activeEditor = 0; } // Nothing to do if the editor hasn't changed if (activeEditor == lastActiveEditor.Lock() && currentPage == lastActivePage.Lock() && persp == lastPerspective.Lock() && input == lastInput) { return; } if (!lastActiveEditor.Expired()) { lastActiveEditor.Lock()->RemovePropertyListener(editorPropertyListener); } lastActiveEditor = activeEditor; lastActivePage = currentPage; lastPerspective = persp; lastInput = input; if (activeEditor) { activeEditor->AddPropertyListener(editorPropertyListener); } RecomputeTitle(); } void QmitkExtWorkbenchWindowAdvisor::PropertyChange(berry::Object::Pointer /*source*/, int propId) { if (propId == berry::IWorkbenchPartConstants::PROP_TITLE) { if (!lastActiveEditor.Expired()) { std::string newTitle = lastActiveEditor.Lock()->GetPartName(); if (lastEditorTitle != newTitle) { RecomputeTitle(); } } } } void QmitkExtWorkbenchWindowAdvisor::SetPerspectiveExcludeList(std::vector v) { this->perspectiveExcludeList = v; } std::vector QmitkExtWorkbenchWindowAdvisor::GetPerspectiveExcludeList() { return this->perspectiveExcludeList; } void QmitkExtWorkbenchWindowAdvisor::PostWindowClose() { Poco::Path path; berry::IBundle::Pointer bundle = berry::Platform::GetBundle("org.mitk.gui.qt.ext"); berry::Platform::GetStatePath(path, bundle); QString qPath = QString::fromStdString(path.toString()); qPath.append("PreferencesQt.ini"); berry::IWorkbenchWindow::Pointer window = this->GetWindowConfigurer()->GetWindow(); QMainWindow* mainWindow = static_cast (window->GetShell()->GetControl()); QSettings settings(qPath, QSettings::IniFormat); settings.setValue("ToolbarPosition", mainWindow->saveState()); -} \ No newline at end of file +} diff --git a/Modules/Bundles/org.mitk.gui.qt.extapplication/files.cmake b/Modules/Bundles/org.mitk.gui.qt.extapplication/files.cmake index 42b0c621ac..08976692fa 100644 --- a/Modules/Bundles/org.mitk.gui.qt.extapplication/files.cmake +++ b/Modules/Bundles/org.mitk.gui.qt.extapplication/files.cmake @@ -1,56 +1,49 @@ SET(SRC_CPP_FILES QmitkExtApplication.cpp QmitkExtAppWorkbenchAdvisor.cpp ) SET(INTERNAL_CPP_FILES QmitkExtApplicationPlugin.cpp QmitkExtDefaultPerspective.cpp ) SET(MOC_H_FILES ) SET(RESOURCE_FILES # list of resource files which can be used by the plug-in # system without loading the plug-ins shared library, # for example the icon used in the menu and tabs for the # plug-in views in the workbench resources/icon_research.xpm ) SET(RES_FILES # uncomment the following line if you want to use Qt resources resources/QmitkExtApplication.qrc ) SET(CPP_FILES manifest.cpp) foreach(file ${SRC_CPP_FILES}) SET(CPP_FILES ${CPP_FILES} src/${file}) endforeach(file ${SRC_CPP_FILES}) foreach(file ${INTERNAL_CPP_FILES}) SET(CPP_FILES ${CPP_FILES} src/internal/${file}) endforeach(file ${INTERNAL_CPP_FILES}) #----------- Qt Help Collection Project -------------# -FIND_PACKAGE(Subversion) -IF(Subversion_FOUND AND MITK_USE_SUBVERSION) - Subversion_WC_INFO(${PROJECT_SOURCE_DIR} SVN_INFO) - SET(MITK_SVN_REVISION "_${SVN_INFO_WC_REVISION}") -ELSE() - SET(MITK_SVN_REVISION "") -ENDIF() IF (BLUEBERRY_USE_QT_HELP) SET(_plugin_qhcp_input "${CMAKE_CURRENT_SOURCE_DIR}/documentation/MitkExtQtHelpCollectionProject.qhcp") - SET(_plugin_qhcp_output "${PLUGIN_OUTPUT_DIR}/resources/MitkExtQtHelpCollection${MITK_SVN_REVISION}.qhc") + SET(_plugin_qhcp_output "${PLUGIN_OUTPUT_DIR}/resources/MitkExtQtHelpCollection_${MITK_WC_REVISION_HASH}.qhc") ADD_CUSTOM_COMMAND(OUTPUT ${_plugin_qhcp_output} COMMAND ${QT_COLLECTIONGENERATOR_EXECUTABLE} ${_plugin_qhcp_input} -o ${_plugin_qhcp_output} DEPENDS ${_plugin_qhcp_input} ) SET(FILE_DEPENDENCIES ${_plugin_qhcp_output}) ENDIF() diff --git a/Modules/Bundles/org.mitk.gui.qt.extapplication/src/internal/QmitkExtApplicationPlugin.cpp b/Modules/Bundles/org.mitk.gui.qt.extapplication/src/internal/QmitkExtApplicationPlugin.cpp index 3bbb1f0dbf..8bf789aacf 100644 --- a/Modules/Bundles/org.mitk.gui.qt.extapplication/src/internal/QmitkExtApplicationPlugin.cpp +++ b/Modules/Bundles/org.mitk.gui.qt.extapplication/src/internal/QmitkExtApplicationPlugin.cpp @@ -1,64 +1,64 @@ /*========================================================================= Program: BlueBerry Platform Language: C++ Date: $Date$ Version: $Revision$ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html 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 notices for more information. =========================================================================*/ #include "QmitkExtApplicationPlugin.h" #include #include QmitkExtApplicationPlugin* QmitkExtApplicationPlugin::inst = 0; QmitkExtApplicationPlugin::QmitkExtApplicationPlugin() { inst = this; } QmitkExtApplicationPlugin* QmitkExtApplicationPlugin::GetDefault() { return inst; } void QmitkExtApplicationPlugin::Start(berry::IBundleContext::Pointer context) { this->context = context; } berry::IBundleContext::Pointer QmitkExtApplicationPlugin::GetBundleContext() const { return context; } QString QmitkExtApplicationPlugin::GetQtHelpCollectionFile() const { Poco::Path collectionPath = context->GetThisBundle()->GetPath(); collectionPath.pushDirectory("resources"); std::string collectionFilename; std::string na = "n/a"; - if (na != MITK_SVN_REVISION) - collectionFilename = "MitkExtQtHelpCollection_" MITK_SVN_REVISION ".qhc"; + if (na != MITK_REVISION) + collectionFilename = "MitkExtQtHelpCollection_" MITK_REVISION ".qhc"; else collectionFilename = "MitkExtQtHelpCollection.qhc"; collectionPath.setFileName(collectionFilename); QString collectionFile = QString::fromStdString(collectionPath.toString()); if (QFileInfo(collectionFile).exists()) return collectionFile; return QString(""); } diff --git a/Modules/Bundles/org.mitk.gui.qt.python.console/CMakeLists.txt b/Modules/Bundles/org.mitk.gui.qt.python.console/CMakeLists.txt index 3d61e941bc..1aa3382d7b 100644 --- a/Modules/Bundles/org.mitk.gui.qt.python.console/CMakeLists.txt +++ b/Modules/Bundles/org.mitk.gui.qt.python.console/CMakeLists.txt @@ -1,10 +1,12 @@ set(SWIG_PYTHON_WRAPPER _mitkCorePython SwigRuntimePython) -IF(MITK_USE_CTK) - #SET(ALL_INCLUDE_DIRECTORIES ${ALL_INCLUDE_DIRECTORIES} "${MITK_WRAPPING_SOURCE_DIR}" "${MITK_WRAPPING_BINARY_DIR}/Core") - INCLUDE_DIRECTORIES("${MITK_WRAPPING_SOURCE_DIR}/CSwig" "${MITK_WRAPPING_BINARY_DIR}/CSwig/Core") - - MACRO_CREATE_MITK_PLUGIN(QmitkExt CTK) - TARGET_LINK_LIBRARIES(${PLUGIN_TARGET} ${SWIG_PYTHON_WRAPPER}) -ELSE() - MESSAGE("MITK Python support needs CTK. Enable MITK_USE_CTK") +IF(MITK_USE_PYTHON) + IF(MITK_USE_CTK) + #SET(ALL_INCLUDE_DIRECTORIES ${ALL_INCLUDE_DIRECTORIES} "${MITK_WRAPPING_SOURCE_DIR}" "${MITK_WRAPPING_BINARY_DIR}/Core") + INCLUDE_DIRECTORIES("${MITK_WRAPPING_SOURCE_DIR}/CSwig" "${MITK_WRAPPING_BINARY_DIR}/CSwig/Core") + + MACRO_CREATE_MITK_PLUGIN(QmitkExt CTK) + TARGET_LINK_LIBRARIES(${PLUGIN_TARGET} ${SWIG_PYTHON_WRAPPER}) + ELSE() + MESSAGE("MITK Python support needs CTK. Enable MITK_USE_CTK") + ENDIF() ENDIF() diff --git a/Modules/QmitkExt/QmitkAboutDialog/QmitkAboutDialog.cpp b/Modules/QmitkExt/QmitkAboutDialog/QmitkAboutDialog.cpp index 8b90f1a895..ef040537ae 100644 --- a/Modules/QmitkExt/QmitkAboutDialog/QmitkAboutDialog.cpp +++ b/Modules/QmitkExt/QmitkAboutDialog/QmitkAboutDialog.cpp @@ -1,59 +1,59 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2009-07-14 19:11:20 +0200 (Tue, 14 Jul 2009) $ Version: $Revision: 18127 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.html 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 notices for more information. =========================================================================*/ #include "QmitkAboutDialog.h" #include #include #include #include QmitkAboutDialog::QmitkAboutDialog(QWidget* parent, Qt::WindowFlags f) :QDialog(parent, f) { Ui::QmitkAboutDialog gui; gui.setupUi(this); - QString mitkRevision(MITK_SVN_REVISION); - mitkRevision.replace( QRegExp("[^0-9]+(\\d+).*"), "\\1"); + QString mitkRevision(MITK_REVISION); + //mitkRevision.replace( QRegExp("[^0-9]+(\\d+).*"), "\\1"); QString itkVersion = "%1.%2.%3"; itkVersion = itkVersion.arg(ITK_VERSION_MAJOR).arg(ITK_VERSION_MINOR).arg(ITK_VERSION_PATCH); QString vtkVersion = "%1.%2.%3"; vtkVersion = vtkVersion.arg(VTK_MAJOR_VERSION).arg(VTK_MINOR_VERSION).arg(VTK_BUILD_VERSION); gui.m_PropsLabel->setText(gui.m_PropsLabel->text().arg(itkVersion, QT_VERSION_STR, vtkVersion, mitkRevision)); //general //connect( m_GUI->btnQuitApplication,SIGNAL(clicked()), qApp, SLOT(closeAllWindows()) ); } QmitkAboutDialog::~QmitkAboutDialog() { } diff --git a/Modules/SceneSerialization/CMakeLists.txt b/Modules/SceneSerialization/CMakeLists.txt index ca3258841e..5db50034d1 100644 --- a/Modules/SceneSerialization/CMakeLists.txt +++ b/Modules/SceneSerialization/CMakeLists.txt @@ -1,8 +1,8 @@ MITK_CREATE_MODULE( SceneSerialization INCLUDE_DIRS BaseDataSerializer BasePropertySerializer BasePropertyDeserializer DEPENDS Mitk MitkExt SceneSerializationBase PACKAGE_DEPENDS Poco - ADDITIONAL_LIBS PocoFoundation PocoZip + ADDITIONAL_LIBS optimized PocoFoundation debug PocoFoundationd optimized PocoZip debug PocoZipd ) ADD_SUBDIRECTORY(Testing) diff --git a/SuperBuild.cmake b/SuperBuild.cmake index fec323ae41..08d0e577eb 100644 --- a/SuperBuild.cmake +++ b/SuperBuild.cmake @@ -1,262 +1,223 @@ -#PROJECT(MITK-super) -cmake_minimum_required(VERSION 2.8.2) -MESSAGE("In super build") + #----------------------------------------------------------------------------- # Convenient macro allowing to download a file -# +#----------------------------------------------------------------------------- + MACRO(downloadFile url dest) FILE(DOWNLOAD ${url} ${dest} STATUS status) LIST(GET status 0 error_code) LIST(GET status 1 error_msg) IF(error_code) MESSAGE(FATAL_ERROR "error: Failed to download ${url} - ${error_msg}") ENDIF() ENDMACRO() +#----------------------------------------------------------------------------- +# MITK Prerequisites +#----------------------------------------------------------------------------- + +#----------------------------- Qt --------------------------- +if(MITK_USE_QT) + find_package(Qt4 REQUIRED) + set(vtk_QT_ARGS + ${ep_common_args} + -DDESIRED_QT_VERSION:STRING=4 + -DVTK_USE_GUISUPPORT:BOOL=ON + -DVTK_USE_QVTK_QTOPENGL:BOOL=ON + -DVTK_USE_QT:BOOL=ON + -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} + ) +endif() + +#----------------------------------------------------------------------------- +# External project settings +#----------------------------------------------------------------------------- + INCLUDE(ExternalProject) SET(ep_base "${CMAKE_BINARY_DIR}/CMakeExternals") SET_PROPERTY(DIRECTORY PROPERTY EP_BASE ${ep_base}) SET(ep_install_dir ${ep_base}/Install) -SET(ep_build_dir ${ep_base}/Build) -SET(ep_source_dir ${ep_base}/Source) +#SET(ep_build_dir ${ep_base}/Build) +#SET(ep_source_dir ${ep_base}/Source) #SET(ep_parallelism_level) SET(ep_build_shared_libs ON) SET(ep_build_testing OFF) # Compute -G arg for configuring external projects with the same CMake generator: IF(CMAKE_EXTRA_GENERATOR) SET(gen "${CMAKE_EXTRA_GENERATOR} - ${CMAKE_GENERATOR}") ELSE() SET(gen "${CMAKE_GENERATOR}") ENDIF() # Use this value where semi-colons are needed in ep_add args: set(sep "^^") ## IF(MSVC90 OR MSVC10) SET(ep_common_C_FLAGS "${CMAKE_C_FLAGS} /bigobj /MP") SET(ep_common_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj /MP") ELSE() SET(ep_common_C_FLAGS "${CMAKE_C_FLAGS} -DLINUX_EXTRA") SET(ep_common_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLINUX_EXTRA") ENDIF() SET(ep_common_args -DBUILD_TESTING:BOOL=${ep_build_testing} -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir} -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} "-DCMAKE_C_FLAGS:STRING=${ep_common_CXX_FLAGS}" "-DCMAKE_CXX_FLAGS:STRING=${ep_common_CXX_FLAGS}" ) - - #----------------------------------------------------------------------------- -# Prerequisites -# +# ExternalProjects +#----------------------------------------------------------------------------- -if(MITK_USE_QT) - set(vtk_QT_ARGS - ${ep_common_args} - -DDESIRED_QT_VERSION:STRING=4 - -DVTK_USE_GUISUPPORT:BOOL=ON - -DVTK_USE_QVTK_QTOPENGL:BOOL=ON - -DVTK_USE_QT:BOOL=ON - -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} - ) -endif(MITK_USE_QT) +SET(external_projects + VTK + GDCM + ITK + Boost + DCMTK + CTK + ) + +# Include external projects +FOREACH(p ${external_projects}) + INCLUDE(CMakeExternals/${p}.cmake) +ENDFOREACH() -# ----------------------------------------- -# VTK -# -IF(WIN32) - OPTION(VTK_USE_SYSTEM_FREETYPE OFF) -ELSE(WIN32) - OPTION(VTK_USE_SYSTEM_FREETYPE ON) -ENDIF(WIN32) -IF(NOT DEFINED VTK_DIR) - SET(proj vtk) - SET(VTK_DEPENDS ${proj}) - ExternalProject_Add(${proj} - URL http://mitk.org/download/thirdparty/vtk-5.6.1.tar.gz - INSTALL_COMMAND "" - CMAKE_GENERATOR ${gen} - CMAKE_ARGS - ${ep_common_args} - -DVTK_WRAP_TCL:BOOL=OFF - -DVTK_WRAP_PYTHON:BOOL=OFF - -DVTK_WRAP_JAVA:BOOL=OFF - -DBUILD_SHARED_LIBS:BOOL=ON - -DVTK_USE_PARALLEL:BOOL=ON - -DVTK_USE_SYSTEM_FREETYPE:BOOL=${VTK_USE_SYSTEM_FREETYPE} - ${vtk_QT_ARGS} - ) - SET(VTK_DIR ${ep_build_dir}/${proj}) -ENDIF() -## ---------------------------------------- -# DCMTK -IF(MITK_USE_DCMTK) +#----------------------------------------------------------------------------- +# Set superbuild boolean args +#----------------------------------------------------------------------------- - IF(NOT DEFINED DCMTK_DIR) - SET(proj DCMTK) - IF(UNIX) - SET(DCMTK_CXX_FLAGS "-fPIC") - SET(DCMTK_C_FLAGS "-fPIC") - ENDIF(UNIX) - IF(DCMTK_DICOM_ROOT_ID) - SET(DCMTK_CXX_FLAGS "${DCMTK_CXX_FLAGS} -DSITE_UID_ROOT=\\\"${DCMTK_DICOM_ROOT_ID}\\\"") - SET(DCMTK_C_FLAGS "${DCMTK_CXX_FLAGS} -DSITE_UID_ROOT=\\\"${DCMTK_DICOM_ROOT_ID}\\\"") - ENDIF() - ExternalProject_Add(${proj} - URL http://mitk.org/download/thirdparty/dcmtk-3.6.0.tar.gz - CMAKE_GENERATOR ${gen} - CMAKE_ARGS - ${ep_common_args} - -DDCMTK_OVERWRITE_WIN32_COMPILER_FLAGS:BOOL=OFF - -DBUILD_SHARED_LIBS:BOOL=OFF - "-DCMAKE_CXX_FLAGS:STRING=${ep_common_CXX_FLAGS} ${DCMTK_CXX_FLAGS}" - "-DCMAKE_C_FLAGS:STRING=${ep_common_C_FLAGS} ${DCMTK_C_FLAGS}" - -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir}/${proj} +SET(mitk_cmake_boolean_args + BUILD_SHARED_LIBS + WITH_COVERAGE + BUILD_TESTING + + MITK_USE_QT + MITK_INSTALL_RPATH_RELATIVE + MITK_BUILD_ALL_PLUGINS + MITK_BUILD_TUTORIAL + MITK_USE_Boost + MITK_USE_GDCMIO + MITK_USE_BLUEBERRY + MITK_USE_CTK + MITK_USE_DCMTK ) - SET(DCMTK_DIR {ep_install_dir}/${proj}) - ENDIF() -ENDIF() - -# ----------------------------------------- -# CTK -# -IF(MITK_USE_CTK) -IF(NOT DEFINED CTK_DIR) - SET(proj CTK) - # SET(CTK_DEPENDS ${proj}) - ExternalProject_Add(${proj} - GIT_REPOSITORY git://github.com/commontk/CTK.git - INSTALL_COMMAND "" - CMAKE_GENERATOR ${gen} - CMAKE_ARGS - ${ep_common_args} - -DDESIRED_QT_VERSION:STRING=4 - -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} - -DCTK_LIB_DICOM/Widgets:BOOL=ON - ) - SET(CTK_DIR ${ep_build_dir}/${proj}) -ENDIF() -ENDIF(MITK_USE_CTK) + +#----------------------------------------------------------------------------- +# Generate cmake variable names for MITK bundles +#----------------------------------------------------------------------------- -## ----------------------------------------- -# GDCM -# -IF(NOT DEFINED GDCM_DIR) - SET(proj GDCM) - ExternalProject_Add(${proj} - URL http://mitk.org/download/thirdparty/gdcm-2.0.14.tar.gz - INSTALL_COMMAND "" - CMAKE_GENERATOR ${gen} - CMAKE_ARGS - ${ep_common_args} - -DBUILD_SHARED_LIBS:BOOL=ON - -DGDCM_BUILD_SHARED_LIBS:BOOL=ON - -DBUILD_TESTING:BOOL=OFF - -DBUILD_EXAMPLES:BOOL=OFF - ) - SET(GDCM_DIR ${ep_build_dir}/${proj}) - -ENDIF(NOT DEFINED GDCM_DIR) +INCLUDE(mitkSuperBuildPlugins) +FOREACH(plugin ${MITK_SUPERBUILD_PLUGINS}) + LIST(APPEND mitk_cmake_boolean_args MITK_BUILD_${plugin}) + OPTION(MITK_BUILD_${plugin} "Build the MITK ${plugin} plugin" OFF) +ENDFOREACH() -## ----------------------------------------- -# ITK -# -IF(NOT DEFINED ITK_DIR) - SET(proj ITK) - ExternalProject_Add(${proj} - URL http://mitk.org/download/thirdparty/InsightToolkit-3.20.0.tar.gz - INSTALL_COMMAND "" - CMAKE_GENERATOR ${gen} - CMAKE_ARGS - ${ep_common_args} - -DBUILD_TESTING:BOOL=OFF - -DBUILD_EXAMPLES:BOOL=OFF - -DITK_USE_SYSTEM_GDCM:BOOL=ON - -DGDCM_DIR:PATH=${GDCM_DIR} - DEPENDS GDCM - ) +#----------------------------------------------------------------------------- +# Create the final variable containing superbuild boolean args +#----------------------------------------------------------------------------- - SET(ITK_DIR ${ep_build_dir}/${proj}) +SET(mitk_superbuild_boolean_args) +FOREACH(mitk_cmake_arg ${mitk_cmake_boolean_args}) + LIST(APPEND mitk_superbuild_boolean_args -D${mitk_cmake_arg}:BOOL=${${mitk_cmake_arg}}) +ENDFOREACH() -ENDIF() +#----------------------------------------------------------------------------- +# MITK Utilities +#----------------------------------------------------------------------------- +set(proj MITK-Utilities) +ExternalProject_Add(${proj} + DOWNLOAD_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + DEPENDS + # Mandatory dependencies + ${VTK_DEPENDS} + ${ITK_DEPENDS} + # Optionnal dependencies + ${Boost_DEPENDS} + ${CTK_DEPENDS} + ${DCMTK_DEPENDS} + +) #----------------------------------------------------------------------------- # MITK Configure -# +#----------------------------------------------------------------------------- + SET(proj MITK-Configure) ExternalProject_Add(${proj} DOWNLOAD_COMMAND "" CMAKE_GENERATOR ${gen} CMAKE_ARGS - ${ctk_superbuild_boolean_args} + ${mitk_superbuild_boolean_args} -DMITK_USE_SUPERBUILD:BOOL=OFF - -DWITH_COVERAGE:BOOL=${WITH_COVERAGE} -DCTEST_USE_LAUNCHERS:BOOL=${CTEST_USE_LAUNCHERS} -DMITK_SUPERBUILD_BINARY_DIR:PATH=${MITK_BINARY_DIR} -DCMAKE_INSTALL_PREFIX:PATH=${ep_install_dir} -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - "-DCMAKE_CXX_FLAGS:STRING=${ep_common_CXX_FLAGS} ${MITK_CXX_FLAGS}" + "-DCMAKE_CXX_FLAGS:STRING=${ep_common_CXX_FLAGS} ${MITK_CXX_FLAGS}" "-DCMAKE_C_FLAGS:STRING=${ep_common_C_FLAGS} ${MITK_C_FLAGS}" -DMITK_CXX_FLAGS:STRING=${MITK_CXX_FLAGS} -DMITK_C_FLAGS:STRING=${MITK_C_FLAGS} -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} -DMITK_KWSTYLE_EXECUTABLE:FILEPATH=${MITK_KWSTYLE_EXECUTABLE} -DCTK_DIR:PATH=${CTK_DIR} -DDCMTK_DIR:PATH=${DCMTK_DIR} -DVTK_DIR:PATH=${VTK_DIR} # FindVTK expects VTK_DIR -DITK_DIR:PATH=${ITK_DIR} # FindITK expects ITK_DIR - -DBUILD_TESTING:BOOL=${BUILD_TESTING} - -DMITK_USE_BLUEBERRY:BOOL=${MITK_USE_BLUEBERRY} - -DBUILD_EXAMPLES:BOOL=${BUILD_EXAMPLES} - -DMITK_BUILD_TUTORIAL:BOOL=${MITK_BUILD_TUTORIAL} + -DGDCM_DIR:PATH=${GDCM_DIR} + -DBOOST_ROOT:PATH=${BOOST_ROOT} + -DMITK_USE_Boost:BOOL=${MITK_USE_Boost} -DMITK_USE_GDCMIO:BOOL=${MITK_USE_GDCMIO} -DMITK_USE_DCMTK:BOOL=${MITK_USE_DCMTK} -DMITK_USE_QT:BOOL=${MITK_USE_QT} SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} BINARY_DIR ${CMAKE_BINARY_DIR}/MITK-build BUILD_COMMAND "" INSTALL_COMMAND "" DEPENDS - vtk - ITK + MITK-Utilities ) #----------------------------------------------------------------------------- # MITK -# +#----------------------------------------------------------------------------- + #MESSAGE(STATUS SUPERBUILD_EXCLUDE_MITKBUILD_TARGET:${SUPERBUILD_EXCLUDE_MITKBUILD_TARGET}) IF(NOT DEFINED SUPERBUILD_EXCLUDE_MITKBUILD_TARGET OR NOT SUPERBUILD_EXCLUDE_MITKBUILD_TARGET) SET(proj MITK-build) ExternalProject_Add(${proj} DOWNLOAD_COMMAND "" CMAKE_GENERATOR ${gen} SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} BINARY_DIR MITK-build INSTALL_COMMAND "" DEPENDS "MITK-Configure" ) ENDIF() #----------------------------------------------------------------------------- # Custom target allowing to drive the build of MITK project itself -# +#----------------------------------------------------------------------------- + ADD_CUSTOM_TARGET(MITK COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/MITK-build WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/MITK-build ) diff --git a/Utilities/CMakeLists.txt b/Utilities/CMakeLists.txt index 95a71dfef4..695e02dc29 100644 --- a/Utilities/CMakeLists.txt +++ b/Utilities/CMakeLists.txt @@ -1,41 +1,37 @@ -INCLUDE(VTK_ITK.cmake) SUPPRESS_VC8_DEPRECATED_WARNINGS() SUPPRESS_ALL_WARNINGS() -# INCLUDE_DIRECTORIES(${${KITNAME}_INCLUDE_DIRS}) - # most stuff of these uses itk_zlib.h (via mitkIpPic.h) FIND_PACKAGE(ITK) -INCLUDE_DIRECTORIES(${ITK_INCLUDE_DIRS}) -LINK_DIRECTORIES(${ITK_LIBRARY_DIRS}) +INCLUDE(${ITK_USE_FILE}) # some legacy util files include in the old style with prefixed directory, # like #include INCLUDE_DIRECTORIES(.) -SUBDIRS(ann ipSegmentation IIL4MITK pic2vtk tinyxml Poco qwt qxt mbilog glew) +SUBDIRS(ann ipSegmentation IIL4MITK pic2vtk tinyxml Poco qwt qxt mbilog glew vecmath) # mbilog is independent of mitk, and cant use mitk macros # configuring happens through mbilog/mbilogConfig.cmake.in SET(mbilog_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/mbilog" "${CMAKE_CURRENT_BINARY_DIR}/mbilog") CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/mbilog/mbilogConfig.cmake.in" "${MITK_MODULES_CONF_DIR}/mbilogConfig.cmake") # IF(NOT MITK_CHILI_PLUGIN) SUBDIRS(ipPic ipFunc) ADD_SUBDIRECTORY(KWStyle) # ENDIF(NOT MITK_CHILI_PLUGIN) SET(Poco_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Poco CACHE PATH "top-level directory containing the poco include directories. E.g /usr/local/include/ or c:\\poco\\include\\poco-1.3.2" ) SET(Poco_LIBRARY_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} CACHE PATH "top-level directory containing the poco libraries." ) diff --git a/Utilities/IIL4MITK/CMakeLists.txt b/Utilities/IIL4MITK/CMakeLists.txt index d2db1ecd88..ae9abe0443 100644 --- a/Utilities/IIL4MITK/CMakeLists.txt +++ b/Utilities/IIL4MITK/CMakeLists.txt @@ -1,16 +1,16 @@ FIND_PACKAGE(VTK) -APPLY_VTK_FLAGS() +INCLUDE(${VTK_USE_FILE}) # mitkGL.h is in Core/Rendering :( FIND_PACKAGE(OpenGL) IF(NOT OPENGL_FOUND) MESSAGE("GL is required for MITK rendering") ENDIF(NOT OPENGL_FOUND ) INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR}) -INCLUDE_DIRECTORIES(../ipPic ${VTK_INCLUDE_DIRS}) +INCLUDE_DIRECTORIES(../ipPic) ADD_LIBRARY(IIL4MITK ${MITK_WIN32_FORCE_STATIC} image.cpp item.cpp picimage.cpp texture.cpp) TARGET_LINK_LIBRARIES(IIL4MITK ${OPENGL_LIBRARIES} ${IPPIC_LIBRARIES}) MITK_CREATE_MODULE_CONF(IIL4MITK DEPENDS mitkIpPic ) diff --git a/Utilities/Poco/CppUnit/CMakeLists.txt b/Utilities/Poco/CppUnit/CMakeLists.txt index bbeaf8cab1..2f3d00afdf 100755 --- a/Utilities/Poco/CppUnit/CMakeLists.txt +++ b/Utilities/Poco/CppUnit/CMakeLists.txt @@ -1,21 +1,22 @@ set(LIBNAME "CppUnit") #set(LIBNAMED "${LIBNAME}d") aux_source_directory(src SRCS) add_library( ${LIBNAME} ${LIB_MODE} ${SRCS} ) set_target_properties( ${LIBNAME} PROPERTIES # COMPILE_FLAGS ${RELEASE_CXX_FLAGS} VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) #add_library( ${LIBNAMED} ${LIB_MODE} ${SRCS} ) #set_target_properties( ${LIBNAMED} # PROPERTIES COMPILE_FLAGS "${DEBUG_CXX_FLAGS}" # VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} # SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) #target_link_libraries( ${LIBNAMED} ) -IF (WIN32 AND NOT MINGW) - add_subdirectory(WinTestRunner) -ENDIF() +# Needs MFC headers, so exclude it to be able to compile on VS Express Edition +#IF (WIN32 AND NOT MINGW) +# add_subdirectory(WinTestRunner) +#ENDIF() diff --git a/Utilities/VTK_ITK.cmake b/Utilities/VTK_ITK.cmake deleted file mode 100644 index 75cb769eee..0000000000 --- a/Utilities/VTK_ITK.cmake +++ /dev/null @@ -1,33 +0,0 @@ - -SET(SAVED_SHARED_LIBS_STATE ${BUILD_SHARED_LIBS}) - -SET(BUILD_SHARED_LIBS ON) - -# these settings are for ITK/VTK only. Maybe this file has to be moved -# to a subdirectory to prevent collisions with other util libraries if they use -# BUILD_TESTING and BUILD_EXAMPLES as well. -SET(BUILD_TESTING OFF) -SET(BUILD_EXAMPLES OFF) - -# these are very advanced... Please set in CMake Cache, not in GUI. -#SET(MITK_ITK_SOURCE_DIR "" CACHE PATH "An ITK source tree to be used for integrated build with MITK") -#SET(MITK_VTK_SOURCE_DIR "" CACHE PATH "An VTK source tree to be used for integrated build with MITK") -#MARK_AS_ADVANCED(MITK_ITK_SOURCE_DIR) -#MARK_AS_ADVANCED(MITK_VTK_SOURCE_DIR) -IF(EXISTS "${MITK_ITK_SOURCE_DIR}") - ADD_SUBDIRECTORY("${MITK_ITK_SOURCE_DIR}" itk-bin) - SET(ITK_DIR "${CMAKE_CURRENT_BINARY_DIR}/itk-bin" CACHE PATH "ITK for MITK binary dir") - SET(ITK_DIR "${CMAKE_CURRENT_BINARY_DIR}/itk-bin") -ENDIF(EXISTS "${MITK_ITK_SOURCE_DIR}") - -IF(EXISTS "${MITK_VTK_SOURCE_DIR}") - SET(VTK_USE_PARALLEL ON CACHE BOOL "") - SET(VTK_USE_GUISUPPORT ON CACHE BOOL "") - SET(VTK_USE_QVTK ON CACHE BOOL "") - ADD_SUBDIRECTORY("${MITK_VTK_SOURCE_DIR}" vtk-bin) - SET(VTK_DIR "${CMAKE_CURRENT_BINARY_DIR}/vtk-bin" CACHE PATH "VTK for MITK binary dir") - SET(VTK_DIR "${CMAKE_CURRENT_BINARY_DIR}/vtk-bin") -ENDIF(EXISTS "${MITK_VTK_SOURCE_DIR}") - -SET(BUILD_SHARED_LIBS ${SAVED_SHARED_LIBS_STATE}) - diff --git a/Utilities/ipFunc/CMakeLists.txt b/Utilities/ipFunc/CMakeLists.txt index cf4c93a32a..85fc538a7b 100644 --- a/Utilities/ipFunc/CMakeLists.txt +++ b/Utilities/ipFunc/CMakeLists.txt @@ -1,45 +1,46 @@ SET(IPFUNC_FILES AddC.c AddI.c AddSl.c And.c Border.c BorderX.c Box.c Box2d.c Box3d.c Canny.c Close.c CompressM.c Conv.c Convert.c CopyTags.c Curtosis.c CurtosisR.c Dila.c DivC.c DivI.c DrawPoly.c Equal.c Ero.c Error.c Exp.c ExtT.c ExtrC.c ExtrR.c ExtrROI.c Extrema.c FillArea.c Frame.c GaussF.c Grad.c Grav.c Hist.c Histo.c HitMiss.c HitMissI.c Inertia.c Inv.c LN.c Label.c Laplace.c LevWind.c Log.c MakePicName.c Malloc.c Mean.c MeanC.c MeanF.c MeanR.c MeanROI.c Median.c Morph.c MultC.c MultI.c Norm.c NormXY.c Not.c OpCl.c Open.c Or.c Pot.c Range.c Rank.c Refl.c RegGrow.c Roberts.c Rotate.c SDev.c SDevC.c SDevR.c SDevROI.c ScBl.c ScFact.c ScNN.c Scale.c SelInv.c SelMM.c Select.c SetErrno.c SetTag.c Shp.c Skewness.c SkewnessR.c Sobel.c Sqrt.c SubC.c SubI.c Thresh.c Transpose.c Var.c VarC.c VarR.c VarROI.c Window.c WindowR.c Xchange.c ZeroCr.c _BorderX.c _DrawPoly.c ipGetANew.c ) -FIND_PACKAGE(ITK) -INCLUDE_DIRECTORIES(. .. ../ipPic) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../ipPic) ADD_LIBRARY(mitkIpFunc ${MITK_WIN32_FORCE_STATIC} ${IPFUNC_FILES}) TARGET_LINK_LIBRARIES(mitkIpFunc mitkIpPic ) IF(UNIX) TARGET_LINK_LIBRARIES(mitkIpFunc m ) ENDIF(UNIX) MITK_CREATE_MODULE_CONF(mitkIpFunc - INCLUDE_DIRS .. + INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS mitkIpPic ) diff --git a/Utilities/ipPic/CMakeLists.txt b/Utilities/ipPic/CMakeLists.txt index 5a9e2c5391..123ecb1112 100644 --- a/Utilities/ipPic/CMakeLists.txt +++ b/Utilities/ipPic/CMakeLists.txt @@ -1,31 +1,31 @@ FIND_PACKAGE(ITK) -INCLUDE_DIRECTORIES(. .. ) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) ADD_DEFINITIONS(-DMITK_IPPIC_COMPILE) SET(IPPIC_FILES ipPicInfo.c ipPicType.c ipPicAddT.c ipPicQueryT.c ipPicDelT.c ipPicGetT.c ipPicOldGet.c ipPicOldGetH.c ipPicOldGetS.c ipPicGet.c ipPicGetH.c ipPicGetS.c ipPicPut.c ipPicPutS.c ipPicGetMem.c ipPicPutMem.c ipPicCopyS.c ipPicCopyH.c ipPicNew.c ipPicClear.c ipPicFree.c ipPicClone.c ipEndian.c ipFRead.c ipFWrite.c ipError.c ipPicSize.c ipPicElements.c ipPicTSVSize.c ipPicTSVElements.c ) ADD_LIBRARY(mitkIpPic ${MITK_WIN32_FORCE_STATIC} ${IPPIC_FILES}) IF(USE_ITKZLIB) TARGET_LINK_LIBRARIES(mitkIpPic itkzlib) ELSE(USE_ITKZLIB) TARGET_LINK_LIBRARIES(mitkIpPic z) ENDIF(USE_ITKZLIB) MITK_CREATE_MODULE_CONF(mitkIpPic - INCLUDE_DIRS .. + INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/.. ) diff --git a/Utilities/pic2vtk/CMakeLists.txt b/Utilities/pic2vtk/CMakeLists.txt index 3d2b569a09..2da5cf4609 100644 --- a/Utilities/pic2vtk/CMakeLists.txt +++ b/Utilities/pic2vtk/CMakeLists.txt @@ -1,12 +1,11 @@ FIND_PACKAGE(VTK) -APPLY_VTK_FLAGS() +INCLUDE(${VTK_USE_FILE}) -INCLUDE_DIRECTORIES(.. ../ipPic ${VTK_INCLUDE_DIRS}) -LINK_DIRECTORIES(${VTK_LIBRARY_DIRS}) +INCLUDE_DIRECTORIES(.. ../ipPic) ADD_LIBRARY(pic2vtk ${MITK_WIN32_FORCE_STATIC} pic2vtk.cpp) TARGET_LINK_LIBRARIES(pic2vtk mitkIpPic vtkIO) MITK_CREATE_MODULE_CONF(pic2vtk DEPENDS mitkIpPic ) diff --git a/Utilities/vecmath/CMakeLists.txt b/Utilities/vecmath/CMakeLists.txt index 5d9ea3c96e..55cf487746 100644 --- a/Utilities/vecmath/CMakeLists.txt +++ b/Utilities/vecmath/CMakeLists.txt @@ -1,2 +1,2 @@ -MITK_CREATE_MODULE_CONF(vecmath) +MITK_CREATE_MODULE_CONF(vecmath HEADERS_ONLY) diff --git a/mitkVersion.h.in b/mitkVersion.h.in index 3116bd2df2..ae0b3e454f 100644 --- a/mitkVersion.h.in +++ b/mitkVersion.h.in @@ -1,7 +1,8 @@ /* mitkVersion.h this file is generated. Do not change! */ -#define MITK_SVN_REVISION "@MITK_SVN_REVISION@" +#define MITK_REVISION "@MITK_WC_REVISION_HASH@" +#define MITK_REVISION_NAME "@MITK_WC_REVISION_NAME@"