# Make sure this file is included only once by creating globally unique varibles # based on the name of this included file. get_filename_component(CMAKE_CURRENT_LIST_FILENAME ${CMAKE_CURRENT_LIST_FILE} NAME_WE) if(${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED) return() endif() set(${CMAKE_CURRENT_LIST_FILENAME}_FILE_INCLUDED 1) ## External_${extProjName}.cmake files can be recurisvely included, ## and cmake variables are global, so when including sub projects it ## is important make the extProjName and proj variables ## appear to stay constant in one of these files. ## Store global variables before overwriting (then restore at end of this file.) ProjectDependancyPush(CACHED_extProjName ${extProjName}) ProjectDependancyPush(CACHED_proj ${proj}) # Make sure that the ExtProjName/IntProjName variables are unique globally # even if other External_${ExtProjName}.cmake files are sourced by # SlicerMacroCheckExternalProjectDependency set(extProjName ITK) #The find_package known name set(proj ITKv5) #This local name set(${extProjName}_REQUIRED_VERSION ${${extProjName}_VERSION_MAJOR}) #If a required version is necessary, then set this, else leave blank #if(${USE_SYSTEM_${extProjName}}) # unset(${extProjName}_DIR CACHE) #endif() # Sanity checks if(DEFINED ${extProjName}_DIR AND NOT EXISTS ${${extProjName}_DIR}) message(FATAL_ERROR "${extProjName}_DIR variable is defined but corresponds to non-existing directory (${${extProjName}_DIR})") endif() # Set dependency list set(${proj}_DEPENDENCIES "") if(${PROJECT_NAME}_BUILD_DICOM_SUPPORT) list(APPEND ${proj}_DEPENDENCIES DCMTK JPEG TIFF) endif() # Include dependent projects if any SlicerMacroCheckExternalProjectDependency(${proj}) if(NOT DEFINED ${extProjName}_DIR AND NOT ${USE_SYSTEM_${extProjName}}) #message(STATUS "${__indent}Adding project ${proj}") # Set CMake OSX variable to pass down the external project set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS) if(APPLE) list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES} -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT} -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}) endif() ### --- Project specific additions here set(${proj}_DCMTK_ARGS) if(${PROJECT_NAME}_BUILD_DICOM_SUPPORT) set(${proj}_DCMTK_ARGS -DITK_USE_SYSTEM_DCMTK:BOOL=ON -DDCMTK_DIR:PATH=${DCMTK_DIR} -DModule_ITKDCMTK:BOOL=ON -DModule_ITKIODCMTK:BOOL=ON ) endif() if(${PROJECT_NAME}_BUILD_FFTWF_SUPPORT) set(${proj}_FFTWF_ARGS -DITK_USE_FFTWF:BOOL=ON ) endif() if(${PROJECT_NAME}_BUILD_FFTWD_SUPPORT) set(${proj}_FFTWD_ARGS -DITK_USE_FFTWD:BOOL=ON ) endif() if(${extProjName}_BUILD_MINC_SUPPORT) set(${proj}_MINC_ARGS -DModule_ITKIOMINC:BOOL=ON -DModule_ITKIOTransformMINC:BOOL=ON -DModule_ITKMINC:BOOL=ON ) endif() set(${proj}_WRAP_ARGS) #if(foo) #set(${proj}_WRAP_ARGS # -DINSTALL_WRAP_ITK_COMPATIBILITY:BOOL=OFF # -DWRAP_float:BOOL=ON # -DWRAP_unsigned_char:BOOL=ON # -DWRAP_signed_short:BOOL=ON # -DWRAP_unsigned_short:BOOL=ON # -DWRAP_complex_float:BOOL=ON # -DWRAP_vector_float:BOOL=ON # -DWRAP_covariant_vector_float:BOOL=ON # -DWRAP_rgb_signed_short:BOOL=ON # -DWRAP_rgb_unsigned_char:BOOL=ON # -DWRAP_rgb_unsigned_short:BOOL=ON # -DWRAP_ITK_TCL:BOOL=OFF # -DWRAP_ITK_JAVA:BOOL=OFF # -DWRAP_ITK_PYTHON:BOOL=ON # -DPYTHON_EXECUTABLE:PATH=${${CMAKE_PROJECT_NAME}_PYTHON_EXECUTABLE} # -DPYTHON_INCLUDE_DIR:PATH=${${CMAKE_PROJECT_NAME}_PYTHON_INCLUDE} # -DPYTHON_LIBRARY:FILEPATH=${${CMAKE_PROJECT_NAME}_PYTHON_LIBRARY} # ) #endif() # HACK This code fixes a loony problem with HDF5 -- it doesn't # link properly if -fopenmp is used. string(REPLACE "-fopenmp" "" ITK_CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") string(REPLACE "-fopenmp" "" ITK_CMAKE_CXX_FLAGS "${CMAKE_CX_FLAGS}") set(${proj}_CMAKE_OPTIONS -DBUILD_TESTING:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/staging -DITK_LEGACY_REMOVE:BOOL=ON -DITK_FUTURE_LEGACY_REMOVE:BOOL=OFF -DITKV3_COMPATIBILITY:BOOL=OFF -DITK_BUILD_DEFAULT_MODULES:BOOL=ON -DITK_USE_SYSTEM_PNG=${ITK_USE_SYSTEM_PNG} -DITK_C_OPTIMIZATION_FLAGS:STRING=${ITK_C_OPTIMIZATION_FLAGS} -DITK_CXX_OPTIMIZATION_FLAGS:STRING=${ITK_CXX_OPTIMIZATION_FLAGS} # -DITK_MODULE_Core:BOOL=ON # -DITK_MODULE_IO:BOOL=ON # -DITK_MODULE_Filtering:BOOL=ON # -DITK_MODULE_Registration:BOOL=ON #-DITK_INSTALL_NO_DEVELOPMENT:BOOL=ON -DKWSYS_USE_MD5:BOOL=ON # Required by SlicerExecutionModel -DITK_WRAPPING:BOOL=OFF #${BUILD_SHARED_LIBS} ## HACK: QUICK CHANGE -DModule_MGHIO:BOOL=ON -DModule_ITKReview:BOOL=ON -DModule_GenericLabelInterpolator:BOOL=ON -DModule_AdaptiveDenoising:BOOL=ON ${${proj}_DCMTK_ARGS} ${${proj}_WRAP_ARGS} ${${proj}_FFTWF_ARGS} ${${proj}_FFTWD_ARGS} ${${proj}_MINC_ARGS} ) if( USE_VTK STREQUAL "ON" ) list(APPEND ${proj}_CMAKE_OPTIONS -DModule_ITKVtkGlue:BOOL=ON) if( USE_SYSTEM_VTK STREQUAL "OFF" ) list(INSERT CMAKE_PREFIX_PATH 0 ${CMAKE_BINARY_DIR}/staging) list(APPEND ${proj}_CMAKE_OPTIONS -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}) endif() list(APPEND ${proj}_DEPENDENCIES VTK) else() list(APPEND ${proj}_CMAKE_OPTIONS -DModule_ITKVtkGlue:BOOL=OFF) endif() ### --- End Project specific additions set(${proj}_REPOSITORY ${git_protocol}://github.com/InsightSoftwareConsortium/ITK.git) set(${proj}_GIT_TAG 0913f2a962d28eb5725a50a17304c4652ca6cfdc) # v5.4.3, 2025-04-02 set(ITK_VERSION_ID ITK-5.4) ### NOTE: When updating GIT_TAG, also update ITK_VERSION_ID if ITK version has changed ExternalProject_Add(${proj} GIT_REPOSITORY ${${proj}_REPOSITORY} GIT_TAG ${${proj}_GIT_TAG} SOURCE_DIR ${proj} BINARY_DIR ${proj}-build LOG_CONFIGURE 0 # Wrap configure in script to ignore log output from dashboards LOG_BUILD 0 # Wrap build in script to to ignore log output from dashboards LOG_TEST 0 # Wrap test in script to to ignore log output from dashboards LOG_INSTALL 0 # Wrap install in script to to ignore log output from dashboards ${cmakeversion_external_update} "${cmakeversion_external_update_value}" CMAKE_GENERATOR ${gen} CMAKE_ARGS -Wno-dev --no-warn-unused-cli ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS} ${COMMON_EXTERNAL_PROJECT_ARGS} ${${proj}_CMAKE_OPTIONS} -DCMAKE_GENERATOR_PLATFORM:STRING=${CMAKE_GENERATOR_PLATFORM} ## We really do want to install in order to limit # of include paths INSTALL_COMMAND "" DEPENDS ${${proj}_DEPENDENCIES} ) set(${extProjName}_DIR ${CMAKE_BINARY_DIR}/staging/${CMAKE_INSTALL_LIBDIR}/cmake/${ITK_VERSION_ID}) else() if(${USE_SYSTEM_${extProjName}}) find_package(${extProjName} ${ITK_VERSION_MAJOR} REQUIRED) if(NOT ${extProjName}_DIR) message(FATAL_ERROR "To use the system ${extProjName}, set ${extProjName}_DIR") endif() message("USING the system ${extProjName}, set ${extProjName}_DIR=${${extProjName}_DIR}") endif() # The project is provided using ${extProjName}_DIR, nevertheless since other # project may depend on ${extProjName}, let's add an 'empty' one SlicerMacroEmptyExternalProject(${proj} "${${proj}_DEPENDENCIES}") endif() list(APPEND ${CMAKE_PROJECT_NAME}_SUPERBUILD_EP_VARS ${extProjName}_DIR:PATH) ProjectDependancyPop(CACHED_extProjName extProjName) ProjectDependancyPop(CACHED_proj proj)