diff --git a/CMake/SlicerBlockCTKAppLauncherSettings.cmake b/CMake/SlicerBlockCTKAppLauncherSettings.cmake index 50ca7c6207c114df764798a6ec0adf0ed8fb89b3..f302873512165f192eef4ff52bab51c6158dff0f 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/CMake/SlicerConfig.cmake.in b/CMake/SlicerConfig.cmake.in index e762d926f6fed2e417c6806120dc3ff3f3f99258..66a1991e91ccd53aa6b36218840e42165171c0da 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 babf48dd7fa7e2831546ee509ecda72e8a2c1418..1404ab49111bad9b3818c4e488fc99a6baf1a208 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 2c4c093a11f334f656c99a344d4b4f99ae2e8f5f..9366c15eb0e979cf27ee2f7f5f136643fbe3ae72 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 209a4a1678d5212fb7c73c8a77de92f821801fcc..e4f8babd277c562c7567ed0639937c75654938f1 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") @@ -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 @@ -583,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}) #----------------------------------------------------------------------------- @@ -731,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 f0adc7020d3bfd1c36d9091cb0eb7b625a97e9bf..920436328d1bc8020bd15686bee29375d6ef6bbb 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 49f365f813294a060d0f6188bdb5829f2bfb5765..48112b88784512700fde1c8f22f643e88f46132d 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 0000000000000000000000000000000000000000..7e33a251092a82b0023fd249374183ddda406569 --- /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 0000000000000000000000000000000000000000..85b96d46bb545688e7d71522f7d4d65dce846e9c --- /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 e36d43072af60ea94cdd452f6866d2e102ff6fa6..023a520e4cb3cc26ef71326bbed940072f86f8f2 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 02dc918e91ad704ad540385eeed5846c25fde441..f4bed7aaff86c9337b22b3a800b8a9fd6e29a34d 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 4230e7d3753d4c348bac06a195cba3c654ecf778..40014cd367a85ea75d361c4d79ce0e5ebad3a7a0 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 650e6746bcdbad767dae693d90952145cd299262..3e41d51eea1bd97a2df879b8ffd8f496004b9b23 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 be3f5cd1d89e137a0991372b75666dfcb34c4b50..b0ae160dd9fbcb9a390be663427e389608da187f 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 b176c4d83d1c3b1c2a03e0d8d149a5b1c3df3346..770b04b79830503da7e4063d54271b8c8ad5f52a 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/Libs/vtkITK/vtkITKArchetypeImageSeriesReader.cxx b/Libs/vtkITK/vtkITKArchetypeImageSeriesReader.cxx index 6f3bef285521204234f0b9469c9617ddf79ffe2d..bf5be008c6bc18a9301177808e8ee7187497d21f 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; } diff --git a/Modules/CLI/CMakeLists.txt b/Modules/CLI/CMakeLists.txt index 8d03b902a3427c90ddc9f8f908e5487128a8ef6f..701f0b765c0084c3fa181acbd8594b9b48c758bf 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/Modules/CLI/DicomToNrrdConverter/ExtendedTesting/CMakeLists.txt b/Modules/CLI/DicomToNrrdConverter/ExtendedTesting/CMakeLists.txt index d2ec3710c01eb5a6831050f2a68ffb776249c52d..4a7c3452c87f13d9dd2078d2853dd76de1561af8 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/Modules/Scripted/Scripts/DICOM2FullBrainTractography/DICOM2FullBrainTractographyLib/full_tractography_workflow.py b/Modules/Scripted/Scripts/DICOM2FullBrainTractography/DICOM2FullBrainTractographyLib/full_tractography_workflow.py index ee66790c033e95c80508b6da37bc2b05c2fdda3d..e2d38acbcfe52b4fe25712f4fec81fe8bc6db1db 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 d8108168d7e1b022f9e6b87035f959ba9db02b7c..4892b2be4d556b6f9857bab2dc120c7976a4e0ef 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": diff --git a/SuperBuild.cmake b/SuperBuild.cmake index 0fd6f0c1fd6d5d01233c672ad9b7aff68e152eac..9b43d3f1b9ef7f29283cc503d2677da47b697816 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/DCMTKValgrindFixes.cmake b/SuperBuild/DCMTKValgrindFixes.cmake new file mode 100644 index 0000000000000000000000000000000000000000..d3e889023e9c52b475def5fe4b533f505b53b5bd --- /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/DWIConvert.CMakeLists.txt b/SuperBuild/DWIConvert.CMakeLists.txt deleted file mode 100644 index 4e2621879275f70f12351c5739e315a831f73253..0000000000000000000000000000000000000000 --- a/SuperBuild/DWIConvert.CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(DWIConvert) diff --git a/SuperBuild/External_BRAINSTools.cmake b/SuperBuild/External_BRAINSTools.cmake index 65fc3635d7da4def615abb0bd326bd6e0f2b01c5..c254bf7751186e5c03afc04b8737105f3cc3360e 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 "82f1c89fbcf9e1a89624e62ebbd3cea6c841f5bf" CACHE STRING "" FORCE) # 2012-12-05 tag DWIConvert endif() if(NOT DEFINED git_protocol) diff --git a/SuperBuild/External_DCMTK.cmake b/SuperBuild/External_DCMTK.cmake index f36f83e747478aa45cdd04f1589b6bd6db32f8f6..1dd7c8b596a8f96f7ffa2d70e836f630ce6cd7d2 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 "148fc86171e0bee332a5fabd36d213f76e775a8b") 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 @@ -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, diff --git a/SuperBuild/External_DWIConvert.cmake b/SuperBuild/External_DWIConvert.cmake deleted file mode 100644 index 0188f4a6c245b12f92508003204cfaeea48ab95c..0000000000000000000000000000000000000000 --- 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 e1c668a85411c9000c037b7ab76ff25b52234ea2..61216a22964c38f2707a2eca1fc608cfa3ad7490 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=${Slicer_BUILD_DICOM_SUPPORT} -DDCMTK_DIR:PATH=${DCMTK_DIR} + -DModule_ITKIODCMTK:BOOL=ON ) endif() @@ -101,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 "" diff --git a/SuperBuild/External_SlicerExecutionModel.cmake b/SuperBuild/External_SlicerExecutionModel.cmake index fff87de1b39be12bc2b9dfac78047d9d012f4576..95b6f73830d6bba9b6f4ed4855cfc01237cecf7e 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