Geant4 Cross Reference |
1 #.rst: 1 #.rst: 2 # G4ConfigurePkgConfigHelpers 2 # G4ConfigurePkgConfigHelpers 3 # --------------------------- 3 # --------------------------- 4 # 4 # 5 # This module configures and installs pkg-conf 5 # This module configures and installs pkg-config scripts and the 6 # geant4-config program to help clients compil 6 # geant4-config program to help clients compile and link against 7 # the Geant4 libraries. 7 # the Geant4 libraries. 8 # 8 # 9 # The geant4-config script provides an sh base 9 # The geant4-config script provides an sh based interface to provide 10 # information on the Geant4 installation, incl 10 # information on the Geant4 installation, including installation prefix, 11 # version number, compiler and linker flags. 11 # version number, compiler and linker flags. 12 # 12 # 13 # The script is generated from a template file 13 # The script is generated from a template file and then installed to the 14 # known bindir as an executable. 14 # known bindir as an executable. 15 # 15 # 16 # Paths are always hardcoded in the build tree 16 # Paths are always hardcoded in the build tree version as this is never 17 # intended to be relocatable. 17 # intended to be relocatable. 18 # The Install Tree script uses self-location b 18 # The Install Tree script uses self-location based on that in 19 # {root,clhep}-config is the install itself is 19 # {root,clhep}-config is the install itself is relocatable, otherwise 20 # absolute paths are encoded. 20 # absolute paths are encoded. 21 # 21 # 22 # 22 # 23 23 24 #--------------------------------------------- 24 #----------------------------------------------------------------- 25 # License and Disclaimer 25 # License and Disclaimer 26 # 26 # 27 # The Geant4 software is copyright of the C 27 # The Geant4 software is copyright of the Copyright Holders of 28 # the Geant4 Collaboration. It is provided u 28 # the Geant4 Collaboration. It is provided under the terms and 29 # conditions of the Geant4 Software License, 29 # conditions of the Geant4 Software License, included in the file 30 # LICENSE and available at http://cern.ch/gea 30 # LICENSE and available at http://cern.ch/geant4/license . These 31 # include a list of copyright holders. 31 # include a list of copyright holders. 32 # 32 # 33 # Neither the authors of this software system, 33 # Neither the authors of this software system, nor their employing 34 # institutes,nor the agencies providing financ 34 # institutes,nor the agencies providing financial support for this 35 # work make any representation or warranty, 35 # work make any representation or warranty, express or implied, 36 # regarding this software system or assume a 36 # regarding this software system or assume any liability for its 37 # use. Please see the license in the file LI 37 # use. Please see the license in the file LICENSE and URL above 38 # for the full disclaimer and the limitation o 38 # for the full disclaimer and the limitation of liability. 39 # 39 # 40 # This code implementation is the result of 40 # This code implementation is the result of the scientific and 41 # technical work of the GEANT4 collaboration. 41 # technical work of the GEANT4 collaboration. 42 # By using, copying, modifying or distribut 42 # By using, copying, modifying or distributing the software (or 43 # any work based on the software) you agree 43 # any work based on the software) you agree to acknowledge its 44 # use in resulting scientific publications 44 # use in resulting scientific publications, and indicate your 45 # acceptance of all terms of the Geant4 Softwa 45 # acceptance of all terms of the Geant4 Software license. 46 # 46 # 47 #--------------------------------------------- 47 #----------------------------------------------------------------- 48 48 49 49 50 #--------------------------------------------- 50 #----------------------------------------------------------------------- 51 # function get_system_include_dirs 51 # function get_system_include_dirs 52 # return list of directories our C++ 52 # return list of directories our C++ compiler searches 53 # by default. 53 # by default. 54 # 54 # 55 # The idea comes from CMake's inbuilt 55 # The idea comes from CMake's inbuilt technique to do this 56 # for the Eclipse and CodeBlocks gene 56 # for the Eclipse and CodeBlocks generators, but we implement 57 # our own function because the CMake 57 # our own function because the CMake functionality is internal 58 # so we can't rely on it. 58 # so we can't rely on it. 59 function(get_system_include_dirs _dirs) 59 function(get_system_include_dirs _dirs) 60 # Only for GCC, Clang and Intel 60 # Only for GCC, Clang and Intel 61 if("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU OR 61 if("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU OR "${CMAKE_CXX_COMPILER_ID}" MATCHES Clang OR "${CMAKE_CXX_COMPILER_ID}" MATCHES Intel) 62 # Proceed 62 # Proceed 63 file(WRITE "${PROJECT_BINARY_DIR}/CMakeFil << 63 file(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/g4dummy" "\n") 64 64 65 # Save locale, them to "C" english locale 65 # Save locale, them to "C" english locale so we can parse in English 66 set(_orig_lc_all $ENV{LC_ALL}) 66 set(_orig_lc_all $ENV{LC_ALL}) 67 set(_orig_lc_messages $ENV{LC_MESSAGES}) 67 set(_orig_lc_messages $ENV{LC_MESSAGES}) 68 set(_orig_lang $ENV{LANG}) 68 set(_orig_lang $ENV{LANG}) 69 69 70 set(ENV{LC_ALL} C) 70 set(ENV{LC_ALL} C) 71 set(ENV{LC_MESSAGES} C) 71 set(ENV{LC_MESSAGES} C) 72 set(ENV{LANG} C) 72 set(ENV{LANG} C) 73 73 74 execute_process(COMMAND ${CMAKE_CXX_COMPIL 74 execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -v -E -x c++ -dD g4dummy 75 WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/ << 75 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles 76 ERROR_VARIABLE _cxxOutput 76 ERROR_VARIABLE _cxxOutput 77 OUTPUT_VARIABLE _cxxStdout 77 OUTPUT_VARIABLE _cxxStdout 78 ) 78 ) 79 79 80 file(REMOVE "${PROJECT_BINARY_DIR}/CMakeFi << 80 file(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/g4dummy") 81 81 82 # Parse and extract search dirs 82 # Parse and extract search dirs 83 set(_resultIncludeDirs ) 83 set(_resultIncludeDirs ) 84 if( "${_cxxOutput}" MATCHES "> search star 84 if( "${_cxxOutput}" MATCHES "> search starts here[^\n]+\n *(.+ *\n) *End of (search) list" ) 85 string(REGEX MATCHALL "[^\n]+\n" _includ 85 string(REGEX MATCHALL "[^\n]+\n" _includeLines "${CMAKE_MATCH_1}") 86 foreach(nextLine ${_includeLines}) 86 foreach(nextLine ${_includeLines}) 87 string(REGEX REPLACE "\\(framework dir 87 string(REGEX REPLACE "\\(framework directory\\)" "" nextLineNoFramework "${nextLine}") 88 string(STRIP "${nextLineNoFramework}" 88 string(STRIP "${nextLineNoFramework}" _includePath) 89 list(APPEND _resultIncludeDirs "${_inc 89 list(APPEND _resultIncludeDirs "${_includePath}") 90 endforeach() 90 endforeach() 91 endif() 91 endif() 92 92 93 # Restore original locale 93 # Restore original locale 94 set(ENV{LC_ALL} ${_orig_lc_all}) 94 set(ENV{LC_ALL} ${_orig_lc_all}) 95 set(ENV{LC_MESSAGES} ${_orig_lc_messages}) 95 set(ENV{LC_MESSAGES} ${_orig_lc_messages}) 96 set(ENV{LANG} ${_orig_lang}) 96 set(ENV{LANG} ${_orig_lang}) 97 97 98 set(${_dirs} ${_resultIncludeDirs} PARENT_ 98 set(${_dirs} ${_resultIncludeDirs} PARENT_SCOPE) 99 else() 99 else() 100 set(${_dirs} "" PARENT_SCOPE) 100 set(${_dirs} "" PARENT_SCOPE) 101 endif() 101 endif() 102 endfunction() 102 endfunction() 103 103 104 #--------------------------------------------- 104 #----------------------------------------------------------------------- 105 # Only create script if we have a global libra 105 # Only create script if we have a global library build... 106 # 106 # 107 #if(NOT GEANT4_BUILD_GRANULAR_LIBS AND UNIX) 107 #if(NOT GEANT4_BUILD_GRANULAR_LIBS AND UNIX) 108 if(NOT GEANT4_BUILD_GRANULAR_LIBS) 108 if(NOT GEANT4_BUILD_GRANULAR_LIBS) 109 # Get implicit search paths 109 # Get implicit search paths 110 get_system_include_dirs(_cxx_compiler_dirs) 110 get_system_include_dirs(_cxx_compiler_dirs) 111 111 112 # Setup variables needed for expansion in co 112 # Setup variables needed for expansion in configuration file 113 # - C++ Filesystem, if needed 113 # - C++ Filesystem, if needed 114 if(GEANT4_CXX_FILESYSTEM_LIBRARY) 114 if(GEANT4_CXX_FILESYSTEM_LIBRARY) 115 set(G4_LINK_CXX_FILESYSTEM "-l${GEANT4_CXX 115 set(G4_LINK_CXX_FILESYSTEM "-l${GEANT4_CXX_FILESYSTEM_LIBRARY}") 116 endif() 116 endif() 117 117 118 # - Static libs 118 # - Static libs 119 if(BUILD_STATIC_LIBS) 119 if(BUILD_STATIC_LIBS) 120 set(G4_BUILTWITH_STATICLIBS "yes") 120 set(G4_BUILTWITH_STATICLIBS "yes") 121 else() 121 else() 122 set(G4_BUILTWITH_STATICLIBS "no") 122 set(G4_BUILTWITH_STATICLIBS "no") 123 endif() 123 endif() 124 124 125 # - Multithreading 125 # - Multithreading 126 if(GEANT4_BUILD_MULTITHREADED) 126 if(GEANT4_BUILD_MULTITHREADED) 127 set(G4_BUILTWITH_MULTITHREADING "yes") 127 set(G4_BUILTWITH_MULTITHREADING "yes") 128 else() 128 else() 129 set(G4_BUILTWITH_MULTITHREADING "no") 129 set(G4_BUILTWITH_MULTITHREADING "no") 130 endif() 130 endif() 131 131 132 # - PHP_AS_HP 132 # - PHP_AS_HP 133 if(GEANT4_BUILD_PHP_AS_HP) 133 if(GEANT4_BUILD_PHP_AS_HP) 134 set(G4_BUILTWITH_PHP_AS_HP "yes") 134 set(G4_BUILTWITH_PHP_AS_HP "yes") 135 else() 135 else() 136 set(G4_BUILTWITH_PHP_AS_HP "no") 136 set(G4_BUILTWITH_PHP_AS_HP "no") 137 endif() 137 endif() 138 138 139 # - Smart Stack 139 # - Smart Stack 140 if(GEANT4_USE_SMARTSTACK) 140 if(GEANT4_USE_SMARTSTACK) 141 set(G4_BUILTWITH_SMARTSTACK "yes") 141 set(G4_BUILTWITH_SMARTSTACK "yes") 142 else() 142 else() 143 set(G4_BUILTWITH_SMARTSTACK "no") 143 set(G4_BUILTWITH_SMARTSTACK "no") 144 endif() 144 endif() 145 145 146 # - CLHEP 146 # - CLHEP 147 if(GEANT4_USE_SYSTEM_CLHEP) 147 if(GEANT4_USE_SYSTEM_CLHEP) 148 set(G4_BUILTWITH_CLHEP "no") 148 set(G4_BUILTWITH_CLHEP "no") 149 #inc path 149 #inc path 150 get_filename_component(G4_SYSTEM_CLHEP_INC 150 get_filename_component(G4_SYSTEM_CLHEP_INCLUDE_DIR "${CLHEP_INCLUDE_DIR}" ABSOLUTE) 151 151 152 #libpath 152 #libpath 153 list(GET CLHEP_LIBRARIES 0 _zeroth_clhep_l 153 list(GET CLHEP_LIBRARIES 0 _zeroth_clhep_lib) 154 get_target_property(_system_clhep_libdir " 154 get_target_property(_system_clhep_libdir "${_zeroth_clhep_lib}" LOCATION) 155 get_filename_component(_system_clhep_libdi 155 get_filename_component(_system_clhep_libdir "${_system_clhep_libdir}" REALPATH) 156 get_filename_component(_system_clhep_libdi 156 get_filename_component(_system_clhep_libdir "${_system_clhep_libdir}" DIRECTORY) 157 set(G4_SYSTEM_CLHEP_LIBRARIES "-L${_system 157 set(G4_SYSTEM_CLHEP_LIBRARIES "-L${_system_clhep_libdir}") 158 158 159 foreach(_clhep_lib ${CLHEP_LIBRARIES}) 159 foreach(_clhep_lib ${CLHEP_LIBRARIES}) 160 get_target_property(_curlib "${_clhep_li 160 get_target_property(_curlib "${_clhep_lib}" LOCATION) 161 get_filename_component(_curlib "${_curli 161 get_filename_component(_curlib "${_curlib}" NAME) 162 string(REGEX REPLACE "^lib(.*)\\.(so|a|d 162 string(REGEX REPLACE "^lib(.*)\\.(so|a|dylib|lib|dll)$" "\\1" _curlib "${_curlib}") 163 set(G4_SYSTEM_CLHEP_LIBRARIES "${G4_SYST 163 set(G4_SYSTEM_CLHEP_LIBRARIES "${G4_SYSTEM_CLHEP_LIBRARIES} -l${_curlib}") 164 endforeach() 164 endforeach() 165 else() 165 else() 166 set(G4_BUILTWITH_CLHEP "yes") 166 set(G4_BUILTWITH_CLHEP "yes") 167 endif() 167 endif() 168 168 169 # - EXPAT 169 # - EXPAT 170 if(GEANT4_USE_SYSTEM_EXPAT) 170 if(GEANT4_USE_SYSTEM_EXPAT) 171 set(G4_BUILTWITH_EXPAT "no") 171 set(G4_BUILTWITH_EXPAT "no") 172 else() 172 else() 173 set(G4_BUILTWITH_EXPAT "yes") 173 set(G4_BUILTWITH_EXPAT "yes") 174 endif() 174 endif() 175 175 176 # - ZLIB 176 # - ZLIB 177 if(GEANT4_USE_SYSTEM_ZLIB) 177 if(GEANT4_USE_SYSTEM_ZLIB) 178 set(G4_BUILTWITH_ZLIB "no") 178 set(G4_BUILTWITH_ZLIB "no") 179 else() 179 else() 180 set(G4_BUILTWITH_ZLIB "yes") 180 set(G4_BUILTWITH_ZLIB "yes") 181 endif() 181 endif() 182 182 183 # - PTL 183 # - PTL 184 if(GEANT4_USE_SYSTEM_PTL) 184 if(GEANT4_USE_SYSTEM_PTL) 185 set(G4_BUILTWITH_PTL "no") 185 set(G4_BUILTWITH_PTL "no") 186 else() 186 else() 187 set(G4_BUILTWITH_PTL "yes") 187 set(G4_BUILTWITH_PTL "yes") 188 endif() 188 endif() 189 189 190 # - GDML 190 # - GDML 191 if(GEANT4_USE_GDML) 191 if(GEANT4_USE_GDML) 192 set(G4_BUILTWITH_GDML "yes") 192 set(G4_BUILTWITH_GDML "yes") 193 set(G4_XERCESC_INCLUDE_DIRS ${XercesC_INCL 193 set(G4_XERCESC_INCLUDE_DIRS ${XercesC_INCLUDE_DIR}) 194 list(REMOVE_DUPLICATES G4_XERCESC_INCLUDE_ 194 list(REMOVE_DUPLICATES G4_XERCESC_INCLUDE_DIRS) 195 if(_cxx_compiler_dirs) 195 if(_cxx_compiler_dirs) 196 list(REMOVE_ITEM G4_XERCESC_INCLUDE_DIRS 196 list(REMOVE_ITEM G4_XERCESC_INCLUDE_DIRS ${_cxx_compiler_dirs}) 197 endif() 197 endif() 198 198 199 set(G4_XERCESC_CFLAGS ) 199 set(G4_XERCESC_CFLAGS ) 200 foreach(_dir ${G4_XERCESC_INCLUDE_DIRS}) 200 foreach(_dir ${G4_XERCESC_INCLUDE_DIRS}) 201 set(G4_XERCESC_CFLAGS "${G4_XERCESC_CFLA 201 set(G4_XERCESC_CFLAGS "${G4_XERCESC_CFLAGS} -I${_dir}") 202 endforeach() 202 endforeach() 203 else() 203 else() 204 set(G4_BUILTWITH_GDML "no") 204 set(G4_BUILTWITH_GDML "no") 205 endif() 205 endif() 206 206 207 # - G3ToG4 207 # - G3ToG4 208 if(GEANT4_USE_G3TOG4) 208 if(GEANT4_USE_G3TOG4) 209 set(G4_BUILTWITH_G3TOG4 "yes") 209 set(G4_BUILTWITH_G3TOG4 "yes") 210 else() 210 else() 211 set(G4_BUILTWITH_G3TOG4 "no") 211 set(G4_BUILTWITH_G3TOG4 "no") 212 endif() 212 endif() 213 213 214 # - USolids 214 # - USolids 215 if(GEANT4_USE_USOLIDS OR GEANT4_USE_PARTIAL_ 215 if(GEANT4_USE_USOLIDS OR GEANT4_USE_PARTIAL_USOLIDS) 216 set(G4_BUILTWITH_USOLIDS "yes") 216 set(G4_BUILTWITH_USOLIDS "yes") 217 get_target_property(G4_USOLIDS_INCLUDE_DIR 217 get_target_property(G4_USOLIDS_INCLUDE_DIRS VecGeom::vecgeom INTERFACE_INCLUDE_DIRECTORIES) 218 list(REMOVE_DUPLICATES G4_USOLIDS_INCLUDE_ 218 list(REMOVE_DUPLICATES G4_USOLIDS_INCLUDE_DIRS) 219 foreach(_dir ${G4_USOLIDS_INCLUDE_DIRS}) 219 foreach(_dir ${G4_USOLIDS_INCLUDE_DIRS}) 220 set(G4_USOLIDS_CFLAGS "${G4_USOLIDS_CFLA 220 set(G4_USOLIDS_CFLAGS "${G4_USOLIDS_CFLAGS} -I${_dir}") 221 endforeach() 221 endforeach() 222 # NB: should ALSO account for VecGeom havi 222 # NB: should ALSO account for VecGeom having compile_options, but 223 # this is better handled through proper pk 223 # this is better handled through proper pkg-config support 224 else() 224 else() 225 set(G4_BUILTWITH_USOLIDS "no") 225 set(G4_BUILTWITH_USOLIDS "no") 226 endif() 226 endif() 227 227 228 # - Freetype 228 # - Freetype 229 if(GEANT4_USE_FREETYPE) 229 if(GEANT4_USE_FREETYPE) 230 set(G4_BUILTWITH_FREETYPE "yes") 230 set(G4_BUILTWITH_FREETYPE "yes") 231 else() 231 else() 232 set(G4_BUILTWITH_FREETYPE "no") 232 set(G4_BUILTWITH_FREETYPE "no") 233 endif() 233 endif() 234 234 235 # - HDF5 235 # - HDF5 236 if(GEANT4_USE_HDF5) 236 if(GEANT4_USE_HDF5) 237 set(G4_BUILTWITH_HDF5 "yes") 237 set(G4_BUILTWITH_HDF5 "yes") 238 else() 238 else() 239 set(G4_BUILTWITH_HDF5 "no") 239 set(G4_BUILTWITH_HDF5 "no") 240 endif() 240 endif() 241 241 242 # - Qt 242 # - Qt 243 if(GEANT4_USE_QT) 243 if(GEANT4_USE_QT) 244 set(G4_BUILTWITH_QT "yes") 244 set(G4_BUILTWITH_QT "yes") 245 set(_qtcomps Core Gui Widgets OpenGL) << 245 set(G4_QT_INCLUDE_DIRS ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5OpenGL_INCLUDE_DIRS} ${Qt5PrintSupport_INCLUDE_DIRS} ${Qt53DCore_INCLUDE_DIRS} ${Qt53DExtras_INCLUDE_DIRS} ${Qt53DRender_INCLUDE_DIRS}) 246 if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL << 247 list(APPEND _qtcomp 3DCore 3DExtras 3DRe << 248 endif() << 249 << 250 set(G4_QT_INCLUDE_DIRS ) << 251 foreach(_qtc ${_qtcomps}) << 252 list(APPEND G4_QT_INCLUDE_DIRS ${Qt${QT_ << 253 endforeach() << 254 246 255 list(REMOVE_DUPLICATES G4_QT_INCLUDE_DIRS) 247 list(REMOVE_DUPLICATES G4_QT_INCLUDE_DIRS) 256 if(_cxx_compiler_dirs) 248 if(_cxx_compiler_dirs) 257 list(REMOVE_ITEM G4_QT_INCLUDE_DIRS ${_c 249 list(REMOVE_ITEM G4_QT_INCLUDE_DIRS ${_cxx_compiler_dirs}) 258 endif() 250 endif() 259 251 260 set(G4_QT_CFLAGS ) 252 set(G4_QT_CFLAGS ) 261 foreach(_dir ${G4_QT_INCLUDE_DIRS}) 253 foreach(_dir ${G4_QT_INCLUDE_DIRS}) 262 set(G4_QT_CFLAGS "${G4_QT_CFLAGS} -I${_d 254 set(G4_QT_CFLAGS "${G4_QT_CFLAGS} -I${_dir}") 263 endforeach() 255 endforeach() 264 256 265 if(APPLE AND G4_QT_CFLAGS MATCHES "QtCore\ << 266 set(G4_QT_CFLAGS "${G4_QT_CFLAGS} -F${G4 << 267 endif() << 268 else() 257 else() 269 set(G4_BUILTWITH_QT "no") 258 set(G4_BUILTWITH_QT "no") 270 endif() 259 endif() 271 260 272 # - QT3D << 273 if(GEANT4_USE_QT3D) << 274 set(G4_BUILTWITH_QT3D "yes") << 275 else() << 276 set(G4_BUILTWITH_QT3D "no") << 277 endif() << 278 << 279 # - Motif 261 # - Motif 280 if(GEANT4_USE_XM) 262 if(GEANT4_USE_XM) 281 set(G4_BUILTWITH_MOTIF "yes") 263 set(G4_BUILTWITH_MOTIF "yes") 282 set(G4_CONFIG_NEEDS_X11 TRUE) 264 set(G4_CONFIG_NEEDS_X11 TRUE) 283 else() 265 else() 284 set(G4_BUILTWITH_MOTIF "no") 266 set(G4_BUILTWITH_MOTIF "no") 285 endif() 267 endif() 286 268 287 # - RayTracerX 269 # - RayTracerX 288 if(GEANT4_USE_RAYTRACER_X11) 270 if(GEANT4_USE_RAYTRACER_X11) 289 set(G4_BUILTWITH_RAYTRACERX11 "yes") 271 set(G4_BUILTWITH_RAYTRACERX11 "yes") 290 set(G4_CONFIG_NEEDS_X11 TRUE) 272 set(G4_CONFIG_NEEDS_X11 TRUE) 291 else() 273 else() 292 set(G4_BUILTWITH_RAYTRACERX11 "no") 274 set(G4_BUILTWITH_RAYTRACERX11 "no") 293 endif() 275 endif() 294 276 295 # - OpenGL X11 277 # - OpenGL X11 296 if(GEANT4_USE_OPENGL_X11) 278 if(GEANT4_USE_OPENGL_X11) 297 set(G4_BUILTWITH_OPENGLX11 "yes") 279 set(G4_BUILTWITH_OPENGLX11 "yes") 298 set(G4_CONFIG_NEEDS_X11 TRUE) 280 set(G4_CONFIG_NEEDS_X11 TRUE) 299 else() 281 else() 300 set(G4_BUILTWITH_OPENGLX11 "no") 282 set(G4_BUILTWITH_OPENGLX11 "no") 301 endif() 283 endif() 302 284 303 # - OpenInventor 285 # - OpenInventor 304 if(GEANT4_USE_INVENTOR) 286 if(GEANT4_USE_INVENTOR) 305 set(G4_BUILTWITH_INVENTOR "yes") 287 set(G4_BUILTWITH_INVENTOR "yes") 306 else() 288 else() 307 set(G4_BUILTWITH_INVENTOR "no") 289 set(G4_BUILTWITH_INVENTOR "no") 308 endif() 290 endif() 309 291 310 # - VTK << 311 if(GEANT4_USE_VTK) << 312 set(G4_BUILTWITH_VTK "yes") << 313 else() << 314 set(G4_BUILTWITH_VTK "no") << 315 endif() << 316 << 317 # If we have a module that uses X11, We have 292 # If we have a module that uses X11, We have to play with the X11 318 # paths to get a clean set suitable for incl 293 # paths to get a clean set suitable for inclusion 319 if(G4_CONFIG_NEEDS_X11) 294 if(G4_CONFIG_NEEDS_X11) 320 set(_raw_x11_includes ${X11_INCLUDE_DIR}) 295 set(_raw_x11_includes ${X11_INCLUDE_DIR}) 321 list(REMOVE_DUPLICATES _raw_x11_includes) 296 list(REMOVE_DUPLICATES _raw_x11_includes) 322 if(_cxx_compiler_dirs) 297 if(_cxx_compiler_dirs) 323 list(REMOVE_ITEM _raw_x11_includes ${_cx 298 list(REMOVE_ITEM _raw_x11_includes ${_cxx_compiler_dirs}) 324 endif() 299 endif() 325 set(G4_X11_CFLAGS ) 300 set(G4_X11_CFLAGS ) 326 foreach(_p ${_raw_x11_includes}) 301 foreach(_p ${_raw_x11_includes}) 327 set(G4_X11_CFLAGS "-I${_p} ${G4_X11_CFLA 302 set(G4_X11_CFLAGS "-I${_p} ${G4_X11_CFLAGS}") 328 endforeach() 303 endforeach() 329 endif() 304 endif() 330 305 331 # Configure the script 306 # Configure the script 332 # - BUILD TREE 307 # - BUILD TREE 333 # Ouch, the include path will be LONG, but a 308 # Ouch, the include path will be LONG, but at least we always have 334 # absolute paths... 309 # absolute paths... 335 set(GEANT4_CONFIG_SELF_LOCATION "# BUILD TRE 310 set(GEANT4_CONFIG_SELF_LOCATION "# BUILD TREE IS NON-RELOCATABLE") 336 set(GEANT4_CONFIG_INSTALL_PREFIX "${PROJECT_ 311 set(GEANT4_CONFIG_INSTALL_PREFIX "${PROJECT_BINARY_DIR}") 337 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 312 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 338 # NB: this only works for *single* mode gene 313 # NB: this only works for *single* mode generators. With multimode 339 # generators, which mode to use is not clear 314 # generators, which mode to use is not clear... 340 set(GEANT4_CONFIG_LIBDIR ${CMAKE_LIBRARY_OUT 315 set(GEANT4_CONFIG_LIBDIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) 341 316 342 get_property(__geant4_buildtree_include_dirs 317 get_property(__geant4_buildtree_include_dirs GLOBAL PROPERTY 343 GEANT4_BUILDTREE_INCLUDE_DIRS) 318 GEANT4_BUILDTREE_INCLUDE_DIRS) 344 319 345 foreach(_dir ${__geant4_buildtree_include_di 320 foreach(_dir ${__geant4_buildtree_include_dirs}) 346 set(GEANT4_CONFIG_INCLUDE_DIRS "${GEANT4_C 321 set(GEANT4_CONFIG_INCLUDE_DIRS "${GEANT4_CONFIG_INCLUDE_DIRS} \\ 347 ${_dir}") 322 ${_dir}") 348 endforeach() 323 endforeach() 349 324 350 # - Data 325 # - Data 351 geant4_export_datasets(BUILD GEANT4_CONFIG_D 326 geant4_export_datasets(BUILD GEANT4_CONFIG_DATASET_DESCRIPTIONS) 352 327 353 # Configure the build tree script 328 # Configure the build tree script 354 configure_file( 329 configure_file( 355 ${PROJECT_SOURCE_DIR}/cmake/Templates/gean << 330 ${CMAKE_SOURCE_DIR}/cmake/Templates/geant4-config.in 356 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTO 331 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/geant4-config 357 @ONLY 332 @ONLY 358 ) 333 ) 359 334 360 file(COPY 335 file(COPY 361 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTO 336 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/geant4-config 362 DESTINATION ${PROJECT_BINARY_DIR} 337 DESTINATION ${PROJECT_BINARY_DIR} 363 FILE_PERMISSIONS 338 FILE_PERMISSIONS 364 OWNER_READ OWNER_WRITE OWNER_EXECUTE 339 OWNER_READ OWNER_WRITE OWNER_EXECUTE 365 GROUP_READ GROUP_EXECUTE 340 GROUP_READ GROUP_EXECUTE 366 WORLD_READ WORLD_EXECUTE 341 WORLD_READ WORLD_EXECUTE 367 ) 342 ) 368 343 369 # - Install Tree 344 # - Install Tree 370 # Much easier :-) 345 # Much easier :-) 371 # Non-Relocatable case... 346 # Non-Relocatable case... 372 if(CMAKE_INSTALL_IS_NONRELOCATABLE) 347 if(CMAKE_INSTALL_IS_NONRELOCATABLE) 373 # Hardcoded paths 348 # Hardcoded paths 374 set(GEANT4_CONFIG_INSTALL_PREFIX "${CMAKE_ 349 set(GEANT4_CONFIG_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 375 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 350 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 376 set(GEANT4_CONFIG_LIBDIR "${CMAKE_INSTALL_ 351 set(GEANT4_CONFIG_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}") 377 set(GEANT4_CONFIG_INCLUDE_DIRS "${CMAKE_IN 352 set(GEANT4_CONFIG_INCLUDE_DIRS "${CMAKE_INSTALL_FULL_INCLUDEDIR}/Geant4") 378 else() 353 else() 379 # Calculate base of self contained install 354 # Calculate base of self contained install based on relative path from 380 # CMAKE_INSTALL_FULL_BINDIR to CMAKE_INSTA 355 # CMAKE_INSTALL_FULL_BINDIR to CMAKE_INSTALL_PREFIX. 381 file(RELATIVE_PATH _bin_to_prefix ${CMAKE_ 356 file(RELATIVE_PATH _bin_to_prefix ${CMAKE_INSTALL_FULL_BINDIR} ${CMAKE_INSTALL_PREFIX}) 382 # Strip any trailing path separators just 357 # Strip any trailing path separators just for neatness. 383 string(REGEX REPLACE "[/\\]$" "" _bin_to_p 358 string(REGEX REPLACE "[/\\]$" "" _bin_to_prefix "${_bin_to_prefix}") 384 359 385 set(GEANT4_CONFIG_INSTALL_PREFIX "$scriptl 360 set(GEANT4_CONFIG_INSTALL_PREFIX "$scriptloc/${_bin_to_prefix}") 386 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 361 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 387 set(GEANT4_CONFIG_LIBDIR "\${prefix}/${CMA 362 set(GEANT4_CONFIG_LIBDIR "\${prefix}/${CMAKE_INSTALL_LIBDIR}") 388 set(GEANT4_CONFIG_INCLUDE_DIRS "\${prefix} 363 set(GEANT4_CONFIG_INCLUDE_DIRS "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}/Geant4") 389 endif() 364 endif() 390 365 391 # - Data 366 # - Data 392 geant4_export_datasets(INSTALL GEANT4_CONFIG 367 geant4_export_datasets(INSTALL GEANT4_CONFIG_DATASET_DESCRIPTIONS) 393 368 394 # Configure the install tree script 369 # Configure the install tree script 395 configure_file( 370 configure_file( 396 ${PROJECT_SOURCE_DIR}/cmake/Templates/gean << 371 ${CMAKE_SOURCE_DIR}/cmake/Templates/geant4-config.in 397 ${PROJECT_BINARY_DIR}/InstallTreeFiles/gea 372 ${PROJECT_BINARY_DIR}/InstallTreeFiles/geant4-config 398 @ONLY 373 @ONLY 399 ) 374 ) 400 375 401 # Install it 376 # Install it 402 install(FILES ${PROJECT_BINARY_DIR}/InstallT 377 install(FILES ${PROJECT_BINARY_DIR}/InstallTreeFiles/geant4-config 403 DESTINATION ${CMAKE_INSTALL_BINDIR} 378 DESTINATION ${CMAKE_INSTALL_BINDIR} 404 PERMISSIONS 379 PERMISSIONS 405 OWNER_READ OWNER_WRITE OWNER_EXECUTE 380 OWNER_READ OWNER_WRITE OWNER_EXECUTE 406 GROUP_READ GROUP_EXECUTE 381 GROUP_READ GROUP_EXECUTE 407 WORLD_READ WORLD_EXECUTE 382 WORLD_READ WORLD_EXECUTE 408 COMPONENT Development 383 COMPONENT Development 409 ) 384 ) 410 385 411 # Win32 helper file geant4-config.cmd 386 # Win32 helper file geant4-config.cmd 412 if(WIN32) 387 if(WIN32) 413 # No configuration just a copy 388 # No configuration just a copy 414 configure_file( 389 configure_file( 415 ${PROJECT_SOURCE_DIR}/cmake/Templates/ge << 390 ${CMAKE_SOURCE_DIR}/cmake/Templates/geant4-config-cmd.in 416 ${PROJECT_BINARY_DIR}/InstallTreeFiles/g 391 ${PROJECT_BINARY_DIR}/InstallTreeFiles/geant4-config.cmd 417 @ONLY 392 @ONLY 418 ) 393 ) 419 394 420 # Install helper 395 # Install helper 421 install(FILES ${PROJECT_BINARY_DIR}/Instal 396 install(FILES ${PROJECT_BINARY_DIR}/InstallTreeFiles/geant4-config.cmd 422 DESTINATION ${CMAKE_INSTALL_BINDIR} 397 DESTINATION ${CMAKE_INSTALL_BINDIR} 423 PERMISSIONS 398 PERMISSIONS 424 OWNER_READ OWNER_WRITE OWNER_EXECUTE 399 OWNER_READ OWNER_WRITE OWNER_EXECUTE 425 GROUP_READ GROUP_EXECUTE 400 GROUP_READ GROUP_EXECUTE 426 WORLD_READ WORLD_EXECUTE 401 WORLD_READ WORLD_EXECUTE 427 COMPONENT Development 402 COMPONENT Development 428 ) 403 ) 429 endif() 404 endif() 430 endif() 405 endif()