From 17d5e17c090f0e31f3fbbd95f90c2e2eca80647f Mon Sep 17 00:00:00 2001 From: Hans Johnson Date: Fri, 30 Nov 2012 11:42:24 -0600 Subject: [PATCH 01/10] ENH: Make default ITK version ITKv4. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 209a4a167..bd1c65e93 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -235,7 +235,7 @@ mark_as_advanced(Slicer_USE_CTKAPPLAUNCHER) option(Slicer_USE_QtTesting "Integrate QtTesting framework into Slicer." ON) mark_as_advanced(Slicer_USE_QtTesting) -set(ITK_VERSION_MAJOR 3 CACHE STRING "Choose the expected ITK major version to build Slicer (3 or 4).") +set(ITK_VERSION_MAJOR 4 CACHE STRING "Choose the expected ITK major version to build Slicer (3 or 4).") # Set the possible values of ITK major version for cmake-gui set_property(CACHE ITK_VERSION_MAJOR PROPERTY STRINGS "3" "4") if(NOT "${ITK_VERSION_MAJOR}" STREQUAL "3" AND NOT "${ITK_VERSION_MAJOR}" STREQUAL "4") -- GitLab From 9cced5ea30cf959c2a293e91527537a3d3cf166b Mon Sep 17 00:00:00 2001 From: Hans Johnson Date: Fri, 30 Nov 2012 11:25:15 -0600 Subject: [PATCH 02/10] ENH: Replace DicomToNrrd with DWIConvert The new DWIConvert is much more flexible and complete in it's handeling of DWI data. --- .../full_tractography_workflow.py | 8 ++++---- .../Scripts/DICOMPlugins/DICOMDiffusionVolumePlugin.py | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Modules/Scripted/Scripts/DICOM2FullBrainTractography/DICOM2FullBrainTractographyLib/full_tractography_workflow.py b/Modules/Scripted/Scripts/DICOM2FullBrainTractography/DICOM2FullBrainTractographyLib/full_tractography_workflow.py index ee66790c0..e2d38acbc 100644 --- a/Modules/Scripted/Scripts/DICOM2FullBrainTractography/DICOM2FullBrainTractographyLib/full_tractography_workflow.py +++ b/Modules/Scripted/Scripts/DICOM2FullBrainTractography/DICOM2FullBrainTractographyLib/full_tractography_workflow.py @@ -51,7 +51,7 @@ class WorkflowConfiguration: def __init__(self): self.slicerVolumesLogic = slicer.vtkSlicerVolumesLogic() self.slicerVolumesLogic.SetMRMLScene(slicer.mrmlScene) - self.dicomtonrrdconverter_parameter_node = None + self.dwiconvert_parameter_node = None self.diffusionweightedvolumemasking_parameter_node = None self.diffusiontensorestimation_parameter_node = None self.seeding_parameter_node = None @@ -84,12 +84,12 @@ class WorkflowConfiguration: display_error("DICOM to NRRD conversion needs a valid output NRRD file") return False - self.dicomtonrrdconverter_parameter_node = slicer.cli.run( - slicer.modules.dicomtonrrdconverter, self.dicomtonrrdconverter_parameter_node, + self.dwiconvert_parameter_node = slicer.cli.run( + slicer.modules.dwiconvert, self.dwiconvert_parameter_node, data[step_object.id()], wait_for_completion = True) - if self.dicomtonrrdconverter_parameter_node.GetStatusString() == 'Completed': + if self.dwiconvert_parameter_node.GetStatusString() == 'Completed': file_path = data[step_object.id()]['outputVolume'] result_status, node = slicer.util.loadVolume( file_path, diff --git a/Modules/Scripted/Scripts/DICOMPlugins/DICOMDiffusionVolumePlugin.py b/Modules/Scripted/Scripts/DICOMPlugins/DICOMDiffusionVolumePlugin.py index d8108168d..4892b2be4 100755 --- a/Modules/Scripted/Scripts/DICOMPlugins/DICOMDiffusionVolumePlugin.py +++ b/Modules/Scripted/Scripts/DICOMPlugins/DICOMDiffusionVolumePlugin.py @@ -114,10 +114,10 @@ class DICOMDiffusionVolumePluginClass(DICOMPlugin): parameters['inputDicomDirectory'] = os.path.dirname(loadable.files[0]) parameters['outputDirectory'] = slicer.app.temporaryPath parameters['outputVolume'] = slicer.app.temporaryPath + '/dwiImport.nhdr' - if not hasattr(slicer.modules, 'dicomtonrrdconverter'): + if not hasattr(slicer.modules, 'dwiconvert'): print('No diffusion dicom importer module available') return False - dicomDWIConverter = slicer.modules.dicomtonrrdconverter + dicomDWIConverter = slicer.modules.dwiconvert cliNode = slicer.cli.run(dicomDWIConverter, None, parameters, wait_for_completion = True) success = False if cliNode.GetStatusString() == "Completed": -- GitLab From defd0082f4b624bc7aa8cff50f4dcd5e438a08c6 Mon Sep 17 00:00:00 2001 From: Hans Johnson Date: Thu, 29 Nov 2012 15:51:25 -0600 Subject: [PATCH 03/10] ENH: Update ITK/DCMTK to support DWIConvert The DWIConvert program was building a private version of the ITKv4 DCMTK interface. o avoid this, the ITKv4 version was updated to include these. --- CMakeLists.txt | 13 +++----- Modules/CLI/CMakeLists.txt | 12 +++---- SuperBuild.cmake | 10 ------ SuperBuild/DWIConvert.CMakeLists.txt | 1 - SuperBuild/External_DWIConvert.cmake | 47 ---------------------------- SuperBuild/External_ITKv4.cmake | 2 ++ 6 files changed, 12 insertions(+), 73 deletions(-) delete mode 100644 SuperBuild/DWIConvert.CMakeLists.txt delete mode 100644 SuperBuild/External_DWIConvert.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index bd1c65e93..c325f1036 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -255,11 +255,6 @@ CMAKE_DEPENDENT_OPTION(Slicer_USE_SimpleITK "Build Slicer with SimpleITK support #----------------------------------------------------------------------------- # The following option has been added for conveniency so that "extension-like" # module can be enabled/disabled at the superbuild level. -CMAKE_DEPENDENT_OPTION( - Slicer_BUILD_BRAINSTOOLS "Build the BRAINS subset of registration and segmentation tools." ON - "Slicer_BUILD_CLI_SUPPORT AND Slicer_BUILD_CLI" OFF) -mark_as_advanced(Slicer_BUILD_BRAINSTOOLS) - CMAKE_DEPENDENT_OPTION( Slicer_BUILD_ChangeTrackerPy "Build ChangeTrackerPy." ON "Slicer_BUILD_CLI_SUPPORT AND Slicer_BUILD_QTSCRIPTEDMODULES" OFF) @@ -291,10 +286,10 @@ CMAKE_DEPENDENT_OPTION( "Slicer_BUILD_QTSCRIPTEDMODULES" OFF) mark_as_advanced(Slicer_BUILD_SlicerWebGLExport) -## This does not yet build cleanly in the slicer environment, so turn off by default -CMAKE_DEPENDENT_OPTION(Slicer_BUILD_DWIConvert "Build DWIConvert." OFF - "Slicer_BUILD_DICOM_SUPPORT" OFF) -mark_as_advanced(Slicer_BUILD_DWIConvert) +CMAKE_DEPENDENT_OPTION( + Slicer_BUILD_BRAINSTOOLS "Build the BRAINS subset of registration and segmentation tools." ON + "Slicer_BUILD_CLI_SUPPORT AND Slicer_BUILD_CLI" OFF) +mark_as_advanced(Slicer_BUILD_BRAINSTOOLS) #----------------------------------------------------------------------------- # Install no development files by default, but allow the user to get diff --git a/Modules/CLI/CMakeLists.txt b/Modules/CLI/CMakeLists.txt index 8d03b902a..701f0b765 100644 --- a/Modules/CLI/CMakeLists.txt +++ b/Modules/CLI/CMakeLists.txt @@ -139,17 +139,21 @@ if(Slicer_BUILD_BRAINSTOOLS) set(LAUNCH_EXE ${Slicer_LAUNCH_COMMAND}) endif() - set(USE_ANTS OFF CACHE BOOL "Build with ANTS capabilities" ) set(USE_BRAINSFit ON CACHE BOOL "Build BRAINSFit" ) set(USE_BRAINSROIAuto ON CACHE BOOL "Build BRAINSROIAuto" ) set(USE_BRAINSResample ON CACHE BOOL "Build BRAINSResample" ) set(USE_BRAINSDemonWarp ON CACHE BOOL "Build BRAINSDemonWarp ") if("${ITK_VERSION_MAJOR}" GREATER 3) set(USE_BRAINSTransformConvert ON CACHE BOOL "Build BRAINSTransformConvert ") - endif("${ITK_VERSION_MAJOR}" GREATER 3) + set(USE_DWIConvert ON CACHE BOOL "Build DWIConvert ") + else() + set(USE_BRAINSTransformConvert OFF CACHE BOOL "Build BRAINSTransformConvert ") + set(USE_DWIConvert OFF CACHE BOOL "Build DWIConvert ") + endif() ## BRAINSTools comes with some extra tool ## options that should not be compiled by default. + set(USE_ANTS OFF CACHE BOOL "Build with ANTS capabilities" ) set(USE_GTRACT OFF CACHE BOOL "" FORCE) set(USE_BRAINSABC OFF CACHE BOOL "" FORCE) set(USE_BRAINSConstellationDetector OFF CACHE BOOL "" FORCE) @@ -168,7 +172,3 @@ if(Slicer_BUILD_BRAINSTOOLS) ) endif() -if(Slicer_BUILD_DWIConvert) - message("DCMTK_DIR = ${DCMTK_DIR}") - add_subdirectory(${DWIConvert_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/DWIConvert) -endif() diff --git a/SuperBuild.cmake b/SuperBuild.cmake index 0fd6f0c1f..9b43d3f1b 100644 --- a/SuperBuild.cmake +++ b/SuperBuild.cmake @@ -160,10 +160,6 @@ if(Slicer_BUILD_SlicerWebGLExport) list(APPEND Slicer_DEPENDENCIES SlicerWebGLExport) endif() -if(Slicer_BUILD_DWIConvert) - list(APPEND Slicer_DEPENDENCIES DWIConvert) -endif() - SlicerMacroCheckExternalProjectDependency(Slicer) #----------------------------------------------------------------------------- @@ -328,12 +324,6 @@ if(APPLE) -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}) endif() -if(Slicer_BUILD_DWIConvert) - list(APPEND ep_superbuild_extra_args - -DDWIConvert_SOURCE_DIR:PATH=${DWIConvert_SOURCE_DIR} - ) -endif() - #------------------------------------------------------------------------------ # Configure and build Slicer #------------------------------------------------------------------------------ diff --git a/SuperBuild/DWIConvert.CMakeLists.txt b/SuperBuild/DWIConvert.CMakeLists.txt deleted file mode 100644 index 4e2621879..000000000 --- a/SuperBuild/DWIConvert.CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(DWIConvert) diff --git a/SuperBuild/External_DWIConvert.cmake b/SuperBuild/External_DWIConvert.cmake deleted file mode 100644 index 0188f4a6c..000000000 --- a/SuperBuild/External_DWIConvert.cmake +++ /dev/null @@ -1,47 +0,0 @@ - -set(DWIConvert_DEPENDENCIES ITKv4 DCMTK SlicerExecutionModel) - -SlicerMacroCheckExternalProjectDependency(DWIConvert) - -set(proj DWIConvert) - -set(DWIConvert_REPOSITORY - ${git_protocol}://github.com/Chaircrusher/NewDicomToNrrdConverter.git) - -set(DWIConvert_GIT_TAG d8f0cbc604051aaabe30e6b32fbd7e8bdc4f1e88 ) -set(DWIConvert_DCMTK_ARGS -DDCMTK_DIR:PATH=${DCMTK_DIR} ) - -ExternalProject_Add(${proj} - GIT_REPOSITORY ${DWIConvert_REPOSITORY} - GIT_TAG ${DWIConvert_GIT_TAG} - ${slicer_external_update} - SOURCE_DIR ${proj} - BINARY_DIR ${proj}-build - CMAKE_GENERATOR ${gen} - CMAKE_ARGS - -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER} - -DCMAKE_CXX_FLAGS:STRING=${ep_common_cxx_flags} - -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS:STRING=${ep_common_c_flags} - -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DBUILD_SHARED_LIBS:BOOL=ON - -DUSE_SYSTEM_DCMTK:BOOL=${Slicer_BUILD_DICOM_SUPPORT} - -DITK_DIR=${ITK_DIR} - ${DWIConvert_DCMTK_ARGS} - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - DEPENDS - ${DWIConvert_DEPENDENCIES} - ) - -ExternalProject_Add_Step(${proj} InstallSlicerCMakeLists - COMMENT "Install simple CMakeList.txt for DWIConvert" - DEPENDEES download - DEPENDERS configure - COMMAND ${CMAKE_COMMAND} - -E copy ${CMAKE_CURRENT_LIST_DIR}/DWIConvert.CMakeLists.txt - /CMakeLists.txt - ) - -set(DWIConvert_SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}) diff --git a/SuperBuild/External_ITKv4.cmake b/SuperBuild/External_ITKv4.cmake index e1c668a85..7ca18e534 100644 --- a/SuperBuild/External_ITKv4.cmake +++ b/SuperBuild/External_ITKv4.cmake @@ -36,7 +36,9 @@ if(NOT DEFINED ITK_DIR) set(ITKv4_DCMTK_ARGS) if(Slicer_BUILD_DICOM_SUPPORT) set(ITKv4_DCMTK_ARGS + -DITK_USE_SYSTEM_DCMTK:BOOL=ON -DDCMTK_DIR:PATH=${DCMTK_DIR} + -DModule_ITKIODCMTK:BOOL=ON ) endif() -- GitLab From 49f510e3a2c422bd2a9bebadc8da0a592b12ba40 Mon Sep 17 00:00:00 2001 From: Hans Johnson Date: Fri, 30 Nov 2012 16:39:51 -0600 Subject: [PATCH 04/10] ENH: Add DWIConvert to BRAINSTools By adding DWIConvert to BRAINSTools, the logic necessary to support this tool becames much simpler. It will also reduce the burden of maintainance. --- SuperBuild/External_BRAINSTools.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_BRAINSTools.cmake b/SuperBuild/External_BRAINSTools.cmake index 65fc3635d..96d17160a 100644 --- a/SuperBuild/External_BRAINSTools.cmake +++ b/SuperBuild/External_BRAINSTools.cmake @@ -23,7 +23,7 @@ if(NOT DEFINED BRAINSTools_SOURCE_DIR) if(${ITK_VERSION_MAJOR} STREQUAL "3") set(GIT_TAG "fa2159607df370451e7a26d09e4e2a61b6e6c5c8" CACHE STRING "" FORCE) else() - set(GIT_TAG "ff94032edafbc46a95f51db4bce894f0120b5992" CACHE STRING "" FORCE) # 2012-11-12 tag with Slicer work arounds + set(GIT_TAG "9172ac23057f29c352a7d68d62a1297122237a4b" CACHE STRING "" FORCE) # 2012-11-30 tag DWIConvert endif() if(NOT DEFINED git_protocol) -- GitLab From 0bb6271f283be9219b6cf1c5d736d1ef3d2dbe8c Mon Sep 17 00:00:00 2001 From: Hans Johnson Date: Fri, 30 Nov 2012 19:05:13 -0600 Subject: [PATCH 05/10] ENH: Turn off testing of DWIConvert because it takes too long. --- SuperBuild/External_BRAINSTools.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SuperBuild/External_BRAINSTools.cmake b/SuperBuild/External_BRAINSTools.cmake index 96d17160a..26921b5da 100644 --- a/SuperBuild/External_BRAINSTools.cmake +++ b/SuperBuild/External_BRAINSTools.cmake @@ -23,7 +23,7 @@ if(NOT DEFINED BRAINSTools_SOURCE_DIR) if(${ITK_VERSION_MAJOR} STREQUAL "3") set(GIT_TAG "fa2159607df370451e7a26d09e4e2a61b6e6c5c8" CACHE STRING "" FORCE) else() - set(GIT_TAG "9172ac23057f29c352a7d68d62a1297122237a4b" CACHE STRING "" FORCE) # 2012-11-30 tag DWIConvert + set(GIT_TAG "61c4fb25f49dbb8b4b086e87aa75c40fb46177e5" CACHE STRING "" FORCE) # 2012-11-30 tag DWIConvert endif() if(NOT DEFINED git_protocol) -- GitLab From 658b7b1ae5f6bff8c8af3636cd7d9880eaba4b70 Mon Sep 17 00:00:00 2001 From: Hans Johnson Date: Wed, 5 Dec 2012 15:00:04 -0600 Subject: [PATCH 06/10] ENH: Updates to DCMTK to use SharedLibs DCMTK seems to have a static destructor problem when used in different libraries simultaneously. This patch turns on building of shared libs and also updates DCMTK to the November 2012 patch release. --- SuperBuild/External_DCMTK.cmake | 4 ++-- SuperBuild/External_ITKv4.cmake | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/SuperBuild/External_DCMTK.cmake b/SuperBuild/External_DCMTK.cmake index f36f83e74..309da7644 100644 --- a/SuperBuild/External_DCMTK.cmake +++ b/SuperBuild/External_DCMTK.cmake @@ -30,7 +30,7 @@ if(NOT DEFINED DCMTK_DIR) endif() set(DCMTK_REPOSITORY ${git_protocol}://git.dcmtk.org/dcmtk.git) - set(DCMTK_GIT_TAG "ab844899a92f46e2d880c38c85ce098933533aef") + set(DCMTK_GIT_TAG "DCMTK-3.6.1_20121102") ExternalProject_Add(${proj} GIT_REPOSITORY ${DCMTK_REPOSITORY} @@ -49,7 +49,7 @@ if(NOT DEFINED DCMTK_DIR) ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS} ${CMAKE_PROJECT_INCLUDE_EXTERNAL_PROJECT_ARG} -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} - -DBUILD_SHARED_LIBS:BOOL=OFF + -DBUILD_SHARED_LIBS:BOOL=ON -DDCMTK_WITH_DOXYGEN:BOOL=OFF -DDCMTK_WITH_ZLIB:BOOL=OFF # see CTK github issue #25 -DDCMTK_WITH_OPENSSL:BOOL=OFF # see CTK github issue #25 diff --git a/SuperBuild/External_ITKv4.cmake b/SuperBuild/External_ITKv4.cmake index 7ca18e534..61216a229 100644 --- a/SuperBuild/External_ITKv4.cmake +++ b/SuperBuild/External_ITKv4.cmake @@ -36,7 +36,7 @@ if(NOT DEFINED ITK_DIR) set(ITKv4_DCMTK_ARGS) if(Slicer_BUILD_DICOM_SUPPORT) set(ITKv4_DCMTK_ARGS - -DITK_USE_SYSTEM_DCMTK:BOOL=ON + -DITK_USE_SYSTEM_DCMTK:BOOL=${Slicer_BUILD_DICOM_SUPPORT} -DDCMTK_DIR:PATH=${DCMTK_DIR} -DModule_ITKIODCMTK:BOOL=ON ) @@ -103,8 +103,7 @@ if(NOT DEFINED ITK_DIR) -DITK_INSTALL_NO_DEVELOPMENT:BOOL=ON -DITK_BUILD_ALL_MODULES:BOOL=ON -DKWSYS_USE_MD5:BOOL=ON # Required by SlicerExecutionModel - -DUSE_WRAP_ITK:BOOL=OFF #${BUILD_SHARED_LIBS} ## HACK: QUICK CHANGE - -DUSE_SYSTEM_DCMTK:BOOL=${Slicer_BUILD_DICOM_SUPPORT} + -DITK_USE_WRAP_ITK:BOOL=OFF #${BUILD_SHARED_LIBS} ## HACK: QUICK CHANGE ${ITKv4_DCMTK_ARGS} ${ITKv4_WRAP_ARGS} INSTALL_COMMAND "" -- GitLab From 0bdc8ff56b3484428f45663b81e91a0c4d1c7cd1 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Wed, 5 Dec 2012 15:42:52 -0500 Subject: [PATCH 07/10] COMP: Add ITKFactoryRegistration library centralizing ITK IO factory registration WIP --- --- CMake/SlicerConfig.cmake.in | 3 +- CMake/SlicerGenerateSlicerConfig.cmake | 1 + CMake/UseSlicer.cmake.in | 5 ++ CMakeLists.txt | 5 ++ Libs/CMakeLists.txt | 14 ++++- Libs/IGT/CMakeLists.txt | 4 ++ Libs/ITKFactoryRegistration/CMakeLists.txt | 59 +++++++++++++++++++ .../itkFactoryRegistration.cxx | 13 ++++ Libs/MGHImageIO/CMakeLists.txt | 4 ++ Libs/MRML/Core/CMakeLists.txt | 4 ++ Libs/MRML/IDImageIO/CMakeLists.txt | 4 ++ Libs/RemoteIO/CMakeLists.txt | 4 ++ Libs/vtkITK/CMakeLists.txt | 4 ++ Libs/vtkITK/Testing/CMakeLists.txt | 4 ++ .../ExtendedTesting/CMakeLists.txt | 4 ++ .../External_SlicerExecutionModel.cmake | 4 +- 16 files changed, 132 insertions(+), 4 deletions(-) create mode 100644 Libs/ITKFactoryRegistration/CMakeLists.txt create mode 100644 Libs/ITKFactoryRegistration/itkFactoryRegistration.cxx diff --git a/CMake/SlicerConfig.cmake.in b/CMake/SlicerConfig.cmake.in index e762d926f..66a1991e9 100644 --- a/CMake/SlicerConfig.cmake.in +++ b/CMake/SlicerConfig.cmake.in @@ -277,8 +277,9 @@ slicer_config_set_ep( "@SLICERLIBCURL_DIR_CONFIG@" CACHE PATH "Path to Curl build or install directory" FORCE) -# SlicerExecutionModel extra include directories +# SlicerExecutionModel settings set(SlicerExecutionModel_EXTRA_INCLUDE_DIRECTORIES "@SlicerExecutionModel_EXTRA_INCLUDE_DIRECTORIES_CONFIG@") +set(SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES "@SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES_CONFIG@") slicer_config_set_ep( SlicerExecutionModel_DIR diff --git a/CMake/SlicerGenerateSlicerConfig.cmake b/CMake/SlicerGenerateSlicerConfig.cmake index babf48dd7..1404ab491 100644 --- a/CMake/SlicerGenerateSlicerConfig.cmake +++ b/CMake/SlicerGenerateSlicerConfig.cmake @@ -114,6 +114,7 @@ endif() if(Slicer_BUILD_CLI_SUPPORT) set(SlicerExecutionModel_EXTRA_INCLUDE_DIRECTORIES_CONFIG ${SlicerExecutionModel_EXTRA_INCLUDE_DIRECTORIES}) + set(SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES_CONFIG ${SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES}) endif() # Export Targets file. diff --git a/CMake/UseSlicer.cmake.in b/CMake/UseSlicer.cmake.in index 2c4c093a1..9366c15eb 100644 --- a/CMake/UseSlicer.cmake.in +++ b/CMake/UseSlicer.cmake.in @@ -128,6 +128,11 @@ endif() # Prerequisites # -------------------------------------------------------------------------- +if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) +endif() + # By default, the "_USE_FILE" of each slicer external project will be included. # This can be changed by setting the variable Slicer_SKIP_EXTERNAL_PROJECTS_USEFILE to TRUE if(NOT DEFINED Slicer_SKIP_EXTERNAL_PROJECTS_USEFILE) diff --git a/CMakeLists.txt b/CMakeLists.txt index c325f1036..e4f8babd2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -578,6 +578,10 @@ if(${ITK_VERSION_MAJOR} VERSION_LESS ${expected_ITK_VERSION_MAJOR}) " ${ITK_CONFIG}, version: ${ITK_VERSION_MAJOR}.${ITK_VERSION_MINOR}.${ITK_VERSION_PATCH}\n") endif() +if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) +endif() include(${ITK_USE_FILE}) #----------------------------------------------------------------------------- @@ -726,6 +730,7 @@ endif() # SlicerExecutionModel settings #----------------------------------------------------------------------------- set(SlicerExecutionModel_EXTRA_INCLUDE_DIRECTORIES "" CACHE INTERNAL "SlicerExecutionModel extra includes" FORCE) +set(SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES "" CACHE INTERNAL "SlicerExecutionModel extra executable target libraries" FORCE) #----------------------------------------------------------------------------- # Set Slicer buildin libraries *_DIR variables diff --git a/Libs/CMakeLists.txt b/Libs/CMakeLists.txt index f0adc7020..920436328 100644 --- a/Libs/CMakeLists.txt +++ b/Libs/CMakeLists.txt @@ -12,7 +12,19 @@ set(GENERATECLP_USE_MD5 ON) # Order of project directory matters. Project should be topologically ordered # -------------------------------------------------------------------------- -set(dirs +set(dirs ) + +if(${ITK_VERSION_MAJOR} GREATER 3) + list(APPEND dirs + ITKFactoryRegistration + ) + set(SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES + ${SlicerExecutionModel_EXTRA_EXECUTABLE_TARGET_LIBRARIES} ITKFactoryRegistration + CACHE INTERNAL "SlicerExecutionModel extra executable target libraries" FORCE + ) +endif() + +list(APPEND dirs vtkTeem vtkITK FreeSurfer diff --git a/Libs/IGT/CMakeLists.txt b/Libs/IGT/CMakeLists.txt index 49f365f81..48112b887 100644 --- a/Libs/IGT/CMakeLists.txt +++ b/Libs/IGT/CMakeLists.txt @@ -15,6 +15,10 @@ endif() #include(${KWWidgets_USE_FILE}) find_package(ITK REQUIRED) +if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) +endif() include(${ITK_USE_FILE}) if(NOT DEFINED BUILD_SHARED_LIBS) diff --git a/Libs/ITKFactoryRegistration/CMakeLists.txt b/Libs/ITKFactoryRegistration/CMakeLists.txt new file mode 100644 index 000000000..7e33a2510 --- /dev/null +++ b/Libs/ITKFactoryRegistration/CMakeLists.txt @@ -0,0 +1,59 @@ +project(ITKFactoryRegistration) + +cmake_minimum_required(VERSION 2.8.4) + +find_package(ITK REQUIRED) + +# This is the Slicer library in charge of registering the default ITK factories. +set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 0) + +include(${ITK_USE_FILE}) + +# -------------------------------------------------------------------------- +# Sources +# -------------------------------------------------------------------------- +set(srcs + itkFactoryRegistration.cxx + ) + +# -------------------------------------------------------------------------- +# Build library +# -------------------------------------------------------------------------- +set(lib_name ${PROJECT_NAME}) + +add_library(${lib_name} SHARED ${srcs}) + +set(libs + ${ITK_LIBRARIES} + ) +target_link_libraries(${lib_name} ${libs}) + +# Apply user-defined properties to the library target. +if(Slicer_LIBRARY_PROPERTIES) + set_target_properties(${lib_name} PROPERTIES ${Slicer_LIBRARY_PROPERTIES}) +endif() + +# -------------------------------------------------------------------------- +# Export target +# -------------------------------------------------------------------------- +if(NOT DEFINED ${PROJECT_NAME}_EXPORT_FILE) + set(${PROJECT_NAME}_EXPORT_FILE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake) +endif() +export(TARGETS ${lib_name} APPEND FILE ${${PROJECT_NAME}_EXPORT_FILE}) + +# -------------------------------------------------------------------------- +# Install library +# -------------------------------------------------------------------------- +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_BIN_DIR) + set(${PROJECT_NAME}_INSTALL_BIN_DIR bin) +endif() +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_LIB_DIR) + set(${PROJECT_NAME}_INSTALL_LIB_DIR lib/${PROJECT_NAME}) +endif() + +install(TARGETS ${lib_name} + RUNTIME DESTINATION ${${PROJECT_NAME}_INSTALL_BIN_DIR} COMPONENT RuntimeLibraries + LIBRARY DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT RuntimeLibraries + ARCHIVE DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT Development + ) + diff --git a/Libs/ITKFactoryRegistration/itkFactoryRegistration.cxx b/Libs/ITKFactoryRegistration/itkFactoryRegistration.cxx new file mode 100644 index 000000000..85b96d46b --- /dev/null +++ b/Libs/ITKFactoryRegistration/itkFactoryRegistration.cxx @@ -0,0 +1,13 @@ + +// ITK includes +#include +#include + +// The following code is required to ensure that the +// mechanism allowing the ITK factory to be registered is not +// optimized out by the compiler. +int itkFactoryRegistraion(void) +{ + return 0; +} + diff --git a/Libs/MGHImageIO/CMakeLists.txt b/Libs/MGHImageIO/CMakeLists.txt index e36d43072..023a520e4 100644 --- a/Libs/MGHImageIO/CMakeLists.txt +++ b/Libs/MGHImageIO/CMakeLists.txt @@ -12,6 +12,10 @@ if(POLICY CMP0017) endif() find_package(ITK REQUIRED) +if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) +endif() include(${ITK_USE_FILE}) if(NOT DEFINED BUILD_SHARED_LIBS) diff --git a/Libs/MRML/Core/CMakeLists.txt b/Libs/MRML/Core/CMakeLists.txt index 02dc918e9..f4bed7aaf 100644 --- a/Libs/MRML/Core/CMakeLists.txt +++ b/Libs/MRML/Core/CMakeLists.txt @@ -15,6 +15,10 @@ find_package(VTK REQUIRED) include(${VTK_USE_FILE}) find_package(ITK REQUIRED) +if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) +endif() include(${ITK_USE_FILE}) option(MRML_USE_Teem "Build MRML with Teem support." ON) diff --git a/Libs/MRML/IDImageIO/CMakeLists.txt b/Libs/MRML/IDImageIO/CMakeLists.txt index 4230e7d37..40014cd36 100644 --- a/Libs/MRML/IDImageIO/CMakeLists.txt +++ b/Libs/MRML/IDImageIO/CMakeLists.txt @@ -12,6 +12,10 @@ if(POLICY CMP0017) endif() find_package(ITK REQUIRED) +if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) +endif() include(${ITK_USE_FILE}) find_package(VTK REQUIRED) diff --git a/Libs/RemoteIO/CMakeLists.txt b/Libs/RemoteIO/CMakeLists.txt index 650e6746b..3e41d51ee 100644 --- a/Libs/RemoteIO/CMakeLists.txt +++ b/Libs/RemoteIO/CMakeLists.txt @@ -15,6 +15,10 @@ find_package(VTK REQUIRED) include(${VTK_USE_FILE}) find_package(ITK REQUIRED) +if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) +endif() include(${ITK_USE_FILE}) find_package(SLICERLIBCURL REQUIRED) diff --git a/Libs/vtkITK/CMakeLists.txt b/Libs/vtkITK/CMakeLists.txt index be3f5cd1d..b0ae160dd 100644 --- a/Libs/vtkITK/CMakeLists.txt +++ b/Libs/vtkITK/CMakeLists.txt @@ -15,6 +15,10 @@ find_package(VTK REQUIRED) include(${VTK_USE_FILE}) find_package(ITK REQUIRED) +if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) +endif() include(${ITK_USE_FILE}) if(NOT DEFINED BUILD_SHARED_LIBS) diff --git a/Libs/vtkITK/Testing/CMakeLists.txt b/Libs/vtkITK/Testing/CMakeLists.txt index b176c4d83..770b04b79 100644 --- a/Libs/vtkITK/Testing/CMakeLists.txt +++ b/Libs/vtkITK/Testing/CMakeLists.txt @@ -7,6 +7,10 @@ endif(VTK_FOUND) find_package( ITK ) if( ITK_FOUND ) + if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) + endif() include(${ITK_USE_FILE}) else( ITK_FOUND ) message( FATAL_ERROR "Cannot build without ITK" ) diff --git a/Modules/CLI/DicomToNrrdConverter/ExtendedTesting/CMakeLists.txt b/Modules/CLI/DicomToNrrdConverter/ExtendedTesting/CMakeLists.txt index d2ec3710c..4a7c3452c 100644 --- a/Modules/CLI/DicomToNrrdConverter/ExtendedTesting/CMakeLists.txt +++ b/Modules/CLI/DicomToNrrdConverter/ExtendedTesting/CMakeLists.txt @@ -5,6 +5,10 @@ enable_testing() if(NOT ITK_FOUND) find_package(ITK REQUIRED) + if(${ITK_VERSION_MAJOR} GREATER 3) + set(ITK_NO_IO_FACTORY_REGISTER_MANAGER 1) # See Libs/ITKFactoryRegistration/CMakeLists.txt + list(APPEND ITK_LIBRARIES ITKFactoryRegistration) + endif() include(${ITK_USE_FILE}) endif(NOT ITK_FOUND) diff --git a/SuperBuild/External_SlicerExecutionModel.cmake b/SuperBuild/External_SlicerExecutionModel.cmake index fff87de1b..95b6f7383 100644 --- a/SuperBuild/External_SlicerExecutionModel.cmake +++ b/SuperBuild/External_SlicerExecutionModel.cmake @@ -35,8 +35,8 @@ if(NOT DEFINED SlicerExecutionModel_DIR) endif() ExternalProject_Add(${proj} - GIT_REPOSITORY "${git_protocol}://github.com/Slicer/SlicerExecutionModel.git" - GIT_TAG "09df5936ede810dc2cb7ff4f69ec28121362659a" + GIT_REPOSITORY "${git_protocol}://github.com/jcfr/SlicerExecutionModel.git" + GIT_TAG "25c279487bbdee4508f9815115343fc9255a7e40" "${slicer_external_update}" SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj} BINARY_DIR ${proj}-build -- GitLab From 4b12c2b60da034235d986d73ef370b2dad2d3249 Mon Sep 17 00:00:00 2001 From: Hans Johnson Date: Wed, 5 Dec 2012 15:32:10 -0600 Subject: [PATCH 08/10] DO NOT SUBMIT This patch adds debuging information for tracking the number of registered factories. --- Libs/vtkITK/vtkITKArchetypeImageSeriesReader.cxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Libs/vtkITK/vtkITKArchetypeImageSeriesReader.cxx b/Libs/vtkITK/vtkITKArchetypeImageSeriesReader.cxx index 6f3bef285..bf5be008c 100644 --- a/Libs/vtkITK/vtkITKArchetypeImageSeriesReader.cxx +++ b/Libs/vtkITK/vtkITKArchetypeImageSeriesReader.cxx @@ -169,6 +169,8 @@ vtkITKArchetypeImageSeriesReader::RegisterExtraBuiltInFactories() #ifdef ITKV3_COMPATIBILITY itk::ObjectFactoryBase::RegisterFactory( itk::AnalyzeImageIOFactory::New() ); #endif + std::list factories = itk::ObjectFactoryBase::GetRegisteredFactories(); + std::cerr << "Factories size: " << factories.size() << std::endl; itk::ObjectFactoryBase::RegisterFactory( itk::GE5ImageIOFactory::New() ); firstTime = false; } -- GitLab From 99488fd13e289ad5d535615aaf314758479bfe3b Mon Sep 17 00:00:00 2001 From: Hans Johnson Date: Wed, 5 Dec 2012 16:05:08 -0600 Subject: [PATCH 09/10] ENH: First attempt at getting shared libs. The DCMTK shared lib paths are added to launcer. --- CMake/SlicerBlockCTKAppLauncherSettings.cmake | 1 + SuperBuild/External_BRAINSTools.cmake | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CMake/SlicerBlockCTKAppLauncherSettings.cmake b/CMake/SlicerBlockCTKAppLauncherSettings.cmake index 50ca7c620..f30287351 100644 --- a/CMake/SlicerBlockCTKAppLauncherSettings.cmake +++ b/CMake/SlicerBlockCTKAppLauncherSettings.cmake @@ -78,6 +78,7 @@ set(SLICER_LIBRARY_PATHS_BUILD ${ITK_DIR}/bin/ ${Teem_DIR}/bin/ ${LibArchive_DIR}/${LIB_SUBDIR} + ${DCMTK_DIR}/lib /bin/ ) diff --git a/SuperBuild/External_BRAINSTools.cmake b/SuperBuild/External_BRAINSTools.cmake index 26921b5da..c254bf775 100644 --- a/SuperBuild/External_BRAINSTools.cmake +++ b/SuperBuild/External_BRAINSTools.cmake @@ -23,7 +23,7 @@ if(NOT DEFINED BRAINSTools_SOURCE_DIR) if(${ITK_VERSION_MAJOR} STREQUAL "3") set(GIT_TAG "fa2159607df370451e7a26d09e4e2a61b6e6c5c8" CACHE STRING "" FORCE) else() - set(GIT_TAG "61c4fb25f49dbb8b4b086e87aa75c40fb46177e5" CACHE STRING "" FORCE) # 2012-11-30 tag DWIConvert + set(GIT_TAG "82f1c89fbcf9e1a89624e62ebbd3cea6c841f5bf" CACHE STRING "" FORCE) # 2012-12-05 tag DWIConvert endif() if(NOT DEFINED git_protocol) -- GitLab From 1f56491609c6a91d3f73fb79fcbc31f3be37a296 Mon Sep 17 00:00:00 2001 From: Kent Williams Date: Thu, 6 Dec 2012 11:00:08 -0600 Subject: [PATCH 10/10] BUG: Bill Loren's fixes for DCMTK double free errors. --- SuperBuild/DCMTKValgrindFixes.cmake | 171 ++++++++++++++++++++++++++++ SuperBuild/External_DCMTK.cmake | 10 +- 2 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 SuperBuild/DCMTKValgrindFixes.cmake diff --git a/SuperBuild/DCMTKValgrindFixes.cmake b/SuperBuild/DCMTKValgrindFixes.cmake new file mode 100644 index 000000000..d3e889023 --- /dev/null +++ b/SuperBuild/DCMTKValgrindFixes.cmake @@ -0,0 +1,171 @@ +set(oflist ${DCMTK_SOURCE}/ofstd/libsrc/oflist.cc) +set(ofthread ${DCMTK_SOURCE}/ofstd/libsrc/ofthread.cc) + +file(READ ${oflist} code) +string(REPLACE +"OFListBase::~OFListBase() +{ + base_clear(); + if (afterLast) + delete afterLast; +}" +"OFListBase::~OFListBase() +{ + base_clear(); + if (afterLast) + { + delete afterLast; + afterLast = NULL; + } +}" +code "${code}" +) +file(WRITE ${oflist} "${code}") + + + +file(READ ${ofthread} code) +string(REPLACE +"OFThreadSpecificData::~OFThreadSpecificData() +{ +#ifdef WINDOWS_INTERFACE + if (theKey) TlsFree(* OFthread_cast(DWORD *, theKey)); +#elif defined(POSIX_INTERFACE) + delete OFthread_cast(pthread_key_t *, theKey); +#elif defined(SOLARIS_INTERFACE) + delete OFthread_cast(thread_key_t *, theKey); +#else +#endif +}" +"OFThreadSpecificData::~OFThreadSpecificData() +{ +#ifdef WINDOWS_INTERFACE + if (theKey) TlsFree(* OFthread_cast(DWORD *, theKey)); + theKey = NULL; +#elif defined(POSIX_INTERFACE) + delete OFthread_cast(pthread_key_t *, theKey); +#elif defined(SOLARIS_INTERFACE) + delete OFthread_cast(thread_key_t *, theKey); +#else +#endif +} +" +code "${code}") + +string(REPLACE +"OFSemaphore::~OFSemaphore() +{ +#ifdef WINDOWS_INTERFACE + CloseHandle((HANDLE)theSemaphore); +#elif defined(POSIX_INTERFACE) + if (theSemaphore) sem_destroy(OFthread_cast(sem_t *, theSemaphore)); + delete OFthread_cast(sem_t *, theSemaphore); +#elif defined(SOLARIS_INTERFACE) + if (theSemaphore) sema_destroy(OFthread_cast(sema_t *, theSemaphore)); + delete OFthread_cast(sema_t *, theSemaphore); +#else +#endif +}" +"OFSemaphore::~OFSemaphore() +{ +#ifdef WINDOWS_INTERFACE + CloseHandle((HANDLE)theSemaphore); +#elif defined(POSIX_INTERFACE) + if (theSemaphore) + { + sem_destroy(OFthread_cast(sem_t *, theSemaphore)); + delete OFthread_cast(sem_t *, theSemaphore); + theSemaphore = NULL; + } +#elif defined(SOLARIS_INTERFACE) + if (theSemaphore) + { + sema_destroy(OFthread_cast(sema_t *, theSemaphore)); + delete OFthread_cast(sema_t *, theSemaphore); + theSemaphore = NULL; + } +#else +#endif +}" +code "${code}") +string(REPLACE +"OFMutex::~OFMutex() +{ +#ifdef WINDOWS_INTERFACE + CloseHandle((HANDLE)theMutex); +#elif defined(POSIX_INTERFACE) + if (theMutex) pthread_mutex_destroy(OFthread_cast(pthread_mutex_t *, theMutex)); + delete OFthread_cast(pthread_mutex_t *, theMutex); +#elif defined(SOLARIS_INTERFACE) + if (theMutex) mutex_destroy(OFthread_cast(mutex_t *, theMutex)); + delete OFthread_cast(mutex_t *, theMutex); +#else +#endif +} +" +"OFMutex::~OFMutex() +{ +#ifdef WINDOWS_INTERFACE + CloseHandle((HANDLE)theMutex); +#elif defined(POSIX_INTERFACE) + if (theMutex) + { + pthread_mutex_destroy(OFthread_cast(pthread_mutex_t *, theMutex)); + delete OFthread_cast(pthread_mutex_t *, theMutex); + theMutex = NULL; + } +#elif defined(SOLARIS_INTERFACE) + if (theMutex) + { + mutex_destroy(OFthread_cast(mutex_t *, theMutex)); + delete OFthread_cast(mutex_t *, theMutex); + theMutex = NULL; + } +#else +#endif +} +" +code "${code}") +string(REPLACE +"OFReadWriteLock::~OFReadWriteLock() +{ +#if defined(WINDOWS_INTERFACE) || defined(POSIX_INTERFACE_WITHOUT_RWLOCK) + delete OFthread_cast(OFReadWriteLockHelper *, theLock); +#elif defined(POSIX_INTERFACE) + if (theLock) pthread_rwlock_destroy(OFthread_cast(pthread_rwlock_t *, theLock)); + delete OFthread_cast(pthread_rwlock_t *, theLock); +#elif defined(SOLARIS_INTERFACE) + if (theLock) rwlock_destroy(OFthread_cast(rwlock_t *, theLock)); + delete OFthread_cast(rwlock_t *, theLock); +#else +#endif +} +" + +"OFReadWriteLock::~OFReadWriteLock() +{ +#if defined(WINDOWS_INTERFACE) || defined(POSIX_INTERFACE_WITHOUT_RWLOCK) + delete OFthread_cast(OFReadWriteLockHelper *, theLock); +#elif defined(POSIX_INTERFACE) + if (theLock) + { + pthread_rwlock_destroy(OFthread_cast(pthread_rwlock_t *, theLock)); + delete OFthread_cast(pthread_rwlock_t *, theLock); + theLock = 0; + } +#elif defined(SOLARIS_INTERFACE) + if (theLock) + { + rwlock_destroy(OFthread_cast(rwlock_t *, theLock)); + delete OFthread_cast(rwlock_t *, theLock); + theLock = 0; + } +#else +#endif +} +" + +code "${code}") + +file(WRITE ${ofthread} "${code}") + diff --git a/SuperBuild/External_DCMTK.cmake b/SuperBuild/External_DCMTK.cmake index 309da7644..1dd7c8b59 100644 --- a/SuperBuild/External_DCMTK.cmake +++ b/SuperBuild/External_DCMTK.cmake @@ -30,7 +30,7 @@ if(NOT DEFINED DCMTK_DIR) endif() set(DCMTK_REPOSITORY ${git_protocol}://git.dcmtk.org/dcmtk.git) - set(DCMTK_GIT_TAG "DCMTK-3.6.1_20121102") + set(DCMTK_GIT_TAG "148fc86171e0bee332a5fabd36d213f76e775a8b") ExternalProject_Add(${proj} GIT_REPOSITORY ${DCMTK_REPOSITORY} @@ -63,6 +63,14 @@ if(NOT DEFINED DCMTK_DIR) ${DCMTK_DEPENDENCIES} ) + ExternalProject_Add_Step(${proj} ValgrindFixes + DEPENDEES download + DEPENDERS configure + COMMAND ${CMAKE_COMMAND} + -DDCMTK_SOURCE= + -P ${CMAKE_CURRENT_LIST_DIR}/DCMTKValgrindFixes.cmake + WORKING_DIRECTORY + ) set(DCMTK_DIR ${CMAKE_BINARY_DIR}/${proj}-install) else() # The project is provided with DCMTK_DIR, nevertheless since other project may depend on DCMTK_DIR, -- GitLab