Back to home page

EIC code displayed by LXR

 
 

    


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}")