Warning, /geant4/examples/extended/medical/DICOM/CMakeLists.txt is written in an unsupported language. File is not indexed.
0001 #----------------------------------------------------------------------------
0002 # Setup the project
0003 cmake_minimum_required(VERSION 3.16...3.27)
0004 project(DICOM)
0005
0006 option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON)
0007 if(WITH_GEANT4_UIVIS)
0008 find_package(Geant4 REQUIRED ui_all vis_all)
0009 else()
0010 find_package(Geant4 REQUIRED)
0011 endif()
0012
0013 #----------------------------------------------------------------------------
0014 # DICOM configure options
0015 #
0016 include(CMakeDependentOption)
0017 # this macro checks for environment variable ${VAR} and sets ENV_${VAR} if
0018 # if is a non-empty string. If empty string and ${VAR} is defined in CMake
0019 # cache, then set ENV_${VAR} to it's value
0020 # NOTE: environment variable, if set, overrides cache value
0021 macro(check_environment VAR)
0022 set(ENV_${VAR} "$ENV{${VAR}}")
0023 if("${ENV_${VAR}}" STREQUAL "" AND DEFINED ${VAR})
0024 set(ENV_${VAR} ${${VAR}})
0025 else()
0026 set(ENV_${VAR} OFF) # default to off
0027 endif()
0028 endmacro(check_environment VAR)
0029
0030 check_environment(DICOM_USE_DCMTK)
0031 check_environment(DICOM_USE_HEAD)
0032 # enable option if environment variable set (backwards-compat)
0033 option(DICOM_USE_DCMTK "DICOM with DCMTK support" ${ENV_DICOM_USE_DCMTK})
0034 option(DICOM_USE_HEAD "Download DICOM_HEAD data" ${ENV_DICOM_USE_HEAD})
0035
0036 if(DICOM_USE_HEAD)
0037 add_definitions(-DDICOM_USE_HEAD)
0038 endif()
0039
0040
0041 #----------------------------------------------------------------------------
0042 # Setup Geant4 include directories and compile definitions
0043 #
0044 include(${Geant4_USE_FILE})
0045 include("${PROJECT_SOURCE_DIR}/dicomReader/cmake/DICOMUtilities.cmake")
0046
0047 #----------------------------------------------------------------------------
0048 # Add dicomReader subdirectory
0049 #
0050 if(DICOM_USE_DCMTK)
0051 message(STATUS "${PROJECT_NAME}: Using DCMTK")
0052 find_package(DCMTK REQUIRED)
0053 add_definitions(-DG4_DCMTK)
0054 add_subdirectory(dicomReader)
0055 set(DICOM_READER_LIBRARY dicomReader${_geant4_lib_use_suffix})
0056 endif()
0057
0058 #----------------------------------------------------------------------------
0059 # Download DICOM_HEAD data
0060 #
0061 # enable option if environment variable set (backwards-compat)
0062 if(DICOM_USE_HEAD)
0063 message(STATUS "${PROJECT_NAME}: Enabling DICOM_HEAD data download")
0064 set(CMAKE_MODULE_PATH
0065 ${PROJECT_SOURCE_DIR}/cmake
0066 ${CMAKE_MODULE_PATH})
0067 include(DownloadDICOMData)
0068 endif()
0069
0070 #----------------------------------------------------------------------------
0071 # Locate sources and headers for this project
0072 #
0073 include_directories(${PROJECT_SOURCE_DIR}/include
0074 ${PROJECT_SOURCE_DIR}/dicomReader/include
0075 ${Geant4_INCLUDE_DIR}
0076 ${DCMTK_INCLUDE_DIRS})
0077
0078 file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc)
0079 file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh)
0080
0081 # List any source specific properties here
0082
0083
0084
0085 #----------------------------------------------------------------------------
0086 # Add the executable, and link it to the Geant4 libraries
0087 #
0088 dicom_build_library(
0089 BUILD_SHARED ${Geant4_shared_FOUND}
0090 BUILD_STATIC ${Geant4_static_FOUND}
0091 OUTPUT_NAME DICOM
0092 TARGET_NAME DICOM-library
0093 SOURCES ${headers} ${sources}
0094 LINK_LIBRARIES ${Geant4_LIBRARIES} ${DICOM_READER_LIBRARY} ${DCMTK_LIBRARIES})
0095
0096 # DICOM-library-target is set in dicom_build_library
0097 add_executable(DICOM DICOM.cc)
0098 target_link_libraries(DICOM DICOM::library)
0099
0100
0101 #----------------------------------------------------------------------------
0102 # Copy all scripts to the build directory, i.e. the directory in which we
0103 # build DICOM. This is so that we can run the executable directly because it
0104 # relies on these scripts being in the current working directory.
0105 #
0106
0107 # the macros
0108 set(DICOM_MACROS run.mac vis.mac)
0109
0110 # original set of DICOM data
0111 set(DICOM_SCRIPTS
0112 1.dcm 2.dcm 3.dcm
0113 1.g4 2.g4 3.g4
0114 1.g4dcm 2.g4dcm 3.g4dcm
0115 ColourMap.dat CT2Density.dat
0116 Data.dat.new Data.dat.old
0117 Data.dat.new_dens Data.partial.dat
0118 )
0119
0120 # new DICOM data (in share directory)
0121 set(DICOM_SHARE
0122 AltData.dat SixSlice.dat
0123 IM-0003-0001.dcm IM-0003-0003.dcm IM-0003-0005.dcm IM-0003-0007.dcm IM-0003-0009.dcm
0124 IM-0003-0002.dcm IM-0003-0004.dcm IM-0003-0006.dcm IM-0003-0008.dcm IM-0003-0010.dcm
0125 )
0126
0127 # copy over scripts
0128 foreach(_script ${DICOM_SCRIPTS})
0129 configure_file(
0130 ${PROJECT_SOURCE_DIR}/${_script}
0131 ${PROJECT_BINARY_DIR}/${_script}
0132 COPYONLY)
0133 endforeach()
0134
0135 # copy either Data.dat.old or Data.dat.new to Data.dat based on build settings
0136 if(DICOM_USE_DCMTK)
0137 configure_file(${PROJECT_SOURCE_DIR}/Data.dat.new
0138 ${PROJECT_BINARY_DIR}/Data.dat COPYONLY)
0139 else()
0140 configure_file(${PROJECT_SOURCE_DIR}/Data.dat.old
0141 ${PROJECT_BINARY_DIR}/Data.dat COPYONLY)
0142 endif()
0143
0144 # copy over files in share
0145 foreach(_script ${DICOM_SHARE})
0146 configure_file(
0147 ${PROJECT_SOURCE_DIR}/share/${_script}
0148 ${PROJECT_BINARY_DIR}/${_script}
0149 COPYONLY)
0150 endforeach()
0151
0152 # copy over macros
0153 foreach(_script ${DICOM_MACROS})
0154 configure_file(
0155 ${PROJECT_SOURCE_DIR}/${_script}
0156 ${PROJECT_BINARY_DIR}/${_script}
0157 COPYONLY)
0158 endforeach()
0159
0160 # ensure files have correct compile definitions
0161 if(DICOM_USE_DCMTK)
0162 set_source_files_properties( ${sources}
0163 PROPERTIES COMPILE_DEFINITIONS G4_DCMTK)
0164 endif()
0165
0166 #----------------------------------------------------------------------------
0167 # Configuration for export and installation
0168 #
0169 include(CMakePackageConfigHelpers)
0170 include(GNUInstallDirs)
0171
0172 #----------------------------------------------------------------------------
0173 # Configuration for build tree
0174 #
0175 export(TARGETS ${${PROJECT_NAME}_INSTALL_LIBRARIES}
0176 FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Build.cmake)
0177
0178 set(PROJECT_TARGETS_FILE ${PROJECT_NAME}Build.cmake)
0179 set(PACKAGE_INCLUDE_INSTALL_DIR ${PROJECT_SOURCE_DIR}/include)
0180 set(PACKAGE_INIT
0181 "macro(set_and_check _var _file)
0182 set(\${_var} \"\${_file}\")
0183 if(NOT EXISTS \"\${_file}\")
0184 message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\")
0185 endif()
0186 endmacro()
0187
0188 macro(check_required_components _NAME)
0189 foreach(comp \${\${_NAME}_FIND_COMPONENTS})
0190 if(NOT \${_NAME}_\${comp}_FOUND)
0191 if(\${_NAME}_FIND_REQUIRED_\${comp})
0192 set(\${_NAME}_FOUND FALSE)
0193 endif()
0194 endif()
0195 endforeach()
0196 endmacro()
0197 ")
0198
0199 configure_file(
0200 ${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
0201 ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake @ONLY)
0202
0203 write_basic_package_version_file(
0204 ${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
0205 VERSION ${Geant4_VERSION}
0206 COMPATIBILITY SameMajorVersion )
0207
0208 unset(PACKAGE_INIT)
0209
0210 #----------------------------------------------------------------------------
0211 # Install the project under CMAKE_INSTALL_PREFIX
0212 #
0213 # by default install the package configuration to the Geant4 installation tree
0214 set(${PROJECT_NAME}_DIR ${CMAKE_INSTALL_LIBDIR}/Geant4-${Geant4_VERSION}
0215 CACHE PATH "${PROJECT_NAME} installation")
0216
0217 install(FILES ${headers} DESTINATION include/${PROJECT_NAME})
0218 install(TARGETS DICOM DESTINATION bin)
0219 install(TARGETS ${${PROJECT_NAME}_INSTALL_LIBRARIES}
0220 DESTINATION ${CMAKE_INSTALL_LIBDIR} EXPORT ${PROJECT_NAME}Targets)
0221 install(EXPORT ${PROJECT_NAME}Targets DESTINATION ${${PROJECT_NAME}_DIR})
0222
0223 set(PROJECT_TARGETS_FILE ${PROJECT_NAME}Targets.cmake)
0224 set(INCLUDE_INSTALL_DIR include/${PROJECT_NAME})
0225 set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
0226
0227 configure_package_config_file(
0228 ${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
0229 ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}Config.cmake
0230 INSTALL_DESTINATION ${${PROJECT_NAME}_DIR}
0231 PATH_VARS INCLUDE_INSTALL_DIR LIB_INSTALL_DIR)
0232
0233 write_basic_package_version_file(
0234 ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}ConfigVersion.cmake
0235 VERSION ${Geant4_VERSION}
0236 COMPATIBILITY SameMajorVersion )
0237
0238 install(FILES ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}Config.cmake
0239 ${PROJECT_BINARY_DIR}/InstallTreeFiles/${PROJECT_NAME}ConfigVersion.cmake
0240 DESTINATION ${${PROJECT_NAME}_DIR} )
0241
0242 set(MSG "DICOM settings:")
0243 set(MSG "${MSG}\n - DICOM_USE_DCMTK: ${DICOM_USE_DCMTK}")
0244 set(MSG "${MSG}\n - DICOM_USE_HEAD: ${DICOM_USE_HEAD}")
0245 message(STATUS "${MSG}")