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) << 109 # Get implicit search paths 108 # Get implicit search paths 110 get_system_include_dirs(_cxx_compiler_dirs) 109 get_system_include_dirs(_cxx_compiler_dirs) 111 110 112 # Setup variables needed for expansion in co 111 # Setup variables needed for expansion in configuration file 113 # - C++ Filesystem, if needed << 114 if(GEANT4_CXX_FILESYSTEM_LIBRARY) << 115 set(G4_LINK_CXX_FILESYSTEM "-l${GEANT4_CXX << 116 endif() << 117 << 118 # - Static libs 112 # - Static libs 119 if(BUILD_STATIC_LIBS) 113 if(BUILD_STATIC_LIBS) 120 set(G4_BUILTWITH_STATICLIBS "yes") 114 set(G4_BUILTWITH_STATICLIBS "yes") 121 else() 115 else() 122 set(G4_BUILTWITH_STATICLIBS "no") 116 set(G4_BUILTWITH_STATICLIBS "no") 123 endif() 117 endif() 124 118 125 # - Multithreading 119 # - Multithreading 126 if(GEANT4_BUILD_MULTITHREADED) 120 if(GEANT4_BUILD_MULTITHREADED) 127 set(G4_BUILTWITH_MULTITHREADING "yes") 121 set(G4_BUILTWITH_MULTITHREADING "yes") 128 else() 122 else() 129 set(G4_BUILTWITH_MULTITHREADING "no") 123 set(G4_BUILTWITH_MULTITHREADING "no") 130 endif() 124 endif() 131 125 132 # - PHP_AS_HP << 133 if(GEANT4_BUILD_PHP_AS_HP) << 134 set(G4_BUILTWITH_PHP_AS_HP "yes") << 135 else() << 136 set(G4_BUILTWITH_PHP_AS_HP "no") << 137 endif() << 138 << 139 # - Smart Stack 126 # - Smart Stack 140 if(GEANT4_USE_SMARTSTACK) 127 if(GEANT4_USE_SMARTSTACK) 141 set(G4_BUILTWITH_SMARTSTACK "yes") 128 set(G4_BUILTWITH_SMARTSTACK "yes") 142 else() 129 else() 143 set(G4_BUILTWITH_SMARTSTACK "no") 130 set(G4_BUILTWITH_SMARTSTACK "no") 144 endif() 131 endif() 145 132 146 # - CLHEP 133 # - CLHEP 147 if(GEANT4_USE_SYSTEM_CLHEP) 134 if(GEANT4_USE_SYSTEM_CLHEP) 148 set(G4_BUILTWITH_CLHEP "no") 135 set(G4_BUILTWITH_CLHEP "no") 149 #inc path 136 #inc path 150 get_filename_component(G4_SYSTEM_CLHEP_INC 137 get_filename_component(G4_SYSTEM_CLHEP_INCLUDE_DIR "${CLHEP_INCLUDE_DIR}" ABSOLUTE) 151 138 152 #libpath 139 #libpath 153 list(GET CLHEP_LIBRARIES 0 _zeroth_clhep_l 140 list(GET CLHEP_LIBRARIES 0 _zeroth_clhep_lib) 154 get_target_property(_system_clhep_libdir " 141 get_target_property(_system_clhep_libdir "${_zeroth_clhep_lib}" LOCATION) 155 get_filename_component(_system_clhep_libdi 142 get_filename_component(_system_clhep_libdir "${_system_clhep_libdir}" REALPATH) 156 get_filename_component(_system_clhep_libdi 143 get_filename_component(_system_clhep_libdir "${_system_clhep_libdir}" DIRECTORY) 157 set(G4_SYSTEM_CLHEP_LIBRARIES "-L${_system 144 set(G4_SYSTEM_CLHEP_LIBRARIES "-L${_system_clhep_libdir}") 158 145 159 foreach(_clhep_lib ${CLHEP_LIBRARIES}) 146 foreach(_clhep_lib ${CLHEP_LIBRARIES}) 160 get_target_property(_curlib "${_clhep_li 147 get_target_property(_curlib "${_clhep_lib}" LOCATION) 161 get_filename_component(_curlib "${_curli 148 get_filename_component(_curlib "${_curlib}" NAME) 162 string(REGEX REPLACE "^lib(.*)\\.(so|a|d 149 string(REGEX REPLACE "^lib(.*)\\.(so|a|dylib|lib|dll)$" "\\1" _curlib "${_curlib}") 163 set(G4_SYSTEM_CLHEP_LIBRARIES "${G4_SYST 150 set(G4_SYSTEM_CLHEP_LIBRARIES "${G4_SYSTEM_CLHEP_LIBRARIES} -l${_curlib}") 164 endforeach() 151 endforeach() 165 else() 152 else() 166 set(G4_BUILTWITH_CLHEP "yes") 153 set(G4_BUILTWITH_CLHEP "yes") 167 endif() 154 endif() 168 155 169 # - EXPAT 156 # - EXPAT 170 if(GEANT4_USE_SYSTEM_EXPAT) 157 if(GEANT4_USE_SYSTEM_EXPAT) 171 set(G4_BUILTWITH_EXPAT "no") 158 set(G4_BUILTWITH_EXPAT "no") 172 else() 159 else() 173 set(G4_BUILTWITH_EXPAT "yes") 160 set(G4_BUILTWITH_EXPAT "yes") 174 endif() 161 endif() 175 162 176 # - ZLIB 163 # - ZLIB 177 if(GEANT4_USE_SYSTEM_ZLIB) 164 if(GEANT4_USE_SYSTEM_ZLIB) 178 set(G4_BUILTWITH_ZLIB "no") 165 set(G4_BUILTWITH_ZLIB "no") 179 else() 166 else() 180 set(G4_BUILTWITH_ZLIB "yes") 167 set(G4_BUILTWITH_ZLIB "yes") 181 endif() 168 endif() 182 169 183 # - PTL << 184 if(GEANT4_USE_SYSTEM_PTL) << 185 set(G4_BUILTWITH_PTL "no") << 186 else() << 187 set(G4_BUILTWITH_PTL "yes") << 188 endif() << 189 << 190 # - GDML 170 # - GDML 191 if(GEANT4_USE_GDML) 171 if(GEANT4_USE_GDML) 192 set(G4_BUILTWITH_GDML "yes") 172 set(G4_BUILTWITH_GDML "yes") 193 set(G4_XERCESC_INCLUDE_DIRS ${XercesC_INCL 173 set(G4_XERCESC_INCLUDE_DIRS ${XercesC_INCLUDE_DIR}) 194 list(REMOVE_DUPLICATES G4_XERCESC_INCLUDE_ 174 list(REMOVE_DUPLICATES G4_XERCESC_INCLUDE_DIRS) 195 if(_cxx_compiler_dirs) << 175 list(REMOVE_ITEM G4_XERCESC_INCLUDE_DIRS ${_cxx_compiler_dirs}) 196 list(REMOVE_ITEM G4_XERCESC_INCLUDE_DIRS << 197 endif() << 198 176 199 set(G4_XERCESC_CFLAGS ) 177 set(G4_XERCESC_CFLAGS ) 200 foreach(_dir ${G4_XERCESC_INCLUDE_DIRS}) 178 foreach(_dir ${G4_XERCESC_INCLUDE_DIRS}) 201 set(G4_XERCESC_CFLAGS "${G4_XERCESC_CFLA 179 set(G4_XERCESC_CFLAGS "${G4_XERCESC_CFLAGS} -I${_dir}") 202 endforeach() 180 endforeach() 203 else() 181 else() 204 set(G4_BUILTWITH_GDML "no") 182 set(G4_BUILTWITH_GDML "no") 205 endif() 183 endif() 206 184 207 # - G3ToG4 185 # - G3ToG4 208 if(GEANT4_USE_G3TOG4) 186 if(GEANT4_USE_G3TOG4) 209 set(G4_BUILTWITH_G3TOG4 "yes") 187 set(G4_BUILTWITH_G3TOG4 "yes") 210 else() 188 else() 211 set(G4_BUILTWITH_G3TOG4 "no") 189 set(G4_BUILTWITH_G3TOG4 "no") 212 endif() 190 endif() 213 191 214 # - USolids 192 # - USolids 215 if(GEANT4_USE_USOLIDS OR GEANT4_USE_PARTIAL_ 193 if(GEANT4_USE_USOLIDS OR GEANT4_USE_PARTIAL_USOLIDS) 216 set(G4_BUILTWITH_USOLIDS "yes") 194 set(G4_BUILTWITH_USOLIDS "yes") 217 get_target_property(G4_USOLIDS_INCLUDE_DIR << 195 set(G4_USOLIDS_INCLUDE_DIRS "${USOLIDS_INCLUDE_DIRS} ${VECGEOM_EXTERNAL_INCLUDES}") 218 list(REMOVE_DUPLICATES G4_USOLIDS_INCLUDE_ 196 list(REMOVE_DUPLICATES G4_USOLIDS_INCLUDE_DIRS) >> 197 list(REMOVE_ITEM G4_USOLIDS_INCLUDE_DIRS ${_cxx_compiler_dirs}) >> 198 >> 199 string(REPLACE ";" " " G4_USOLIDS_CFLAGS "${VECGEOM_DEFINITIONS}") 219 foreach(_dir ${G4_USOLIDS_INCLUDE_DIRS}) 200 foreach(_dir ${G4_USOLIDS_INCLUDE_DIRS}) 220 set(G4_USOLIDS_CFLAGS "${G4_USOLIDS_CFLA 201 set(G4_USOLIDS_CFLAGS "${G4_USOLIDS_CFLAGS} -I${_dir}") 221 endforeach() 202 endforeach() 222 # NB: should ALSO account for VecGeom havi << 223 # this is better handled through proper pk << 224 else() 203 else() 225 set(G4_BUILTWITH_USOLIDS "no") 204 set(G4_BUILTWITH_USOLIDS "no") 226 endif() 205 endif() 227 206 228 # - Freetype 207 # - Freetype 229 if(GEANT4_USE_FREETYPE) 208 if(GEANT4_USE_FREETYPE) 230 set(G4_BUILTWITH_FREETYPE "yes") 209 set(G4_BUILTWITH_FREETYPE "yes") 231 else() 210 else() 232 set(G4_BUILTWITH_FREETYPE "no") 211 set(G4_BUILTWITH_FREETYPE "no") 233 endif() 212 endif() 234 213 235 # - HDF5 << 214 # - Freetype 236 if(GEANT4_USE_HDF5) 215 if(GEANT4_USE_HDF5) 237 set(G4_BUILTWITH_HDF5 "yes") 216 set(G4_BUILTWITH_HDF5 "yes") 238 else() 217 else() 239 set(G4_BUILTWITH_HDF5 "no") 218 set(G4_BUILTWITH_HDF5 "no") 240 endif() 219 endif() 241 220 242 # - Qt 221 # - Qt 243 if(GEANT4_USE_QT) 222 if(GEANT4_USE_QT) 244 set(G4_BUILTWITH_QT "yes") 223 set(G4_BUILTWITH_QT "yes") 245 set(_qtcomps Core Gui Widgets OpenGL) << 224 if(QT4_FOUND) 246 if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL << 225 set(G4_QT_INCLUDE_DIRS ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTOPENGL_INCLUDE_DIR}) 247 list(APPEND _qtcomp 3DCore 3DExtras 3DRe << 226 else() >> 227 set(G4_QT_INCLUDE_DIRS ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5OpenGL_INCLUDE_DIRS} ${Qt5PrintSupport_INCLUDE_DIRS}) 248 endif() 228 endif() 249 229 250 set(G4_QT_INCLUDE_DIRS ) << 251 foreach(_qtc ${_qtcomps}) << 252 list(APPEND G4_QT_INCLUDE_DIRS ${Qt${QT_ << 253 endforeach() << 254 << 255 list(REMOVE_DUPLICATES G4_QT_INCLUDE_DIRS) 230 list(REMOVE_DUPLICATES G4_QT_INCLUDE_DIRS) 256 if(_cxx_compiler_dirs) << 231 list(REMOVE_ITEM G4_QT_INCLUDE_DIRS ${_cxx_compiler_dirs}) 257 list(REMOVE_ITEM G4_QT_INCLUDE_DIRS ${_c << 258 endif() << 259 232 260 set(G4_QT_CFLAGS ) 233 set(G4_QT_CFLAGS ) 261 foreach(_dir ${G4_QT_INCLUDE_DIRS}) 234 foreach(_dir ${G4_QT_INCLUDE_DIRS}) 262 set(G4_QT_CFLAGS "${G4_QT_CFLAGS} -I${_d 235 set(G4_QT_CFLAGS "${G4_QT_CFLAGS} -I${_dir}") 263 endforeach() 236 endforeach() 264 237 265 if(APPLE AND G4_QT_CFLAGS MATCHES "QtCore\ << 266 set(G4_QT_CFLAGS "${G4_QT_CFLAGS} -F${G4 << 267 endif() << 268 else() 238 else() 269 set(G4_BUILTWITH_QT "no") 239 set(G4_BUILTWITH_QT "no") 270 endif() 240 endif() 271 241 272 # - QT3D << 242 # - Wt 273 if(GEANT4_USE_QT3D) << 243 #if(GEANT4_USE_WT) 274 set(G4_BUILTWITH_QT3D "yes") << 244 # set(G4_BUILTWITH_WT "yes") 275 else() << 245 # set(G4_WT_INCLUDE_DIRS ${Wt_INCLUDE_DIR} ${Boost_INCLUDE_DIR} ) 276 set(G4_BUILTWITH_QT3D "no") << 246 277 endif() << 247 # set(G4_WT_CFLAGS ) >> 248 # foreach(_dir ${G4_WT_INCLUDE_DIRS}) >> 249 # set(G4_WT_CFLAGS "${G4_WT_CFLAGS} -I${_dir}") >> 250 # endforeach() >> 251 >> 252 #else() >> 253 # set(G4_BUILTWITH_WT "no") >> 254 #endif() 278 255 279 # - Motif 256 # - Motif 280 if(GEANT4_USE_XM) 257 if(GEANT4_USE_XM) 281 set(G4_BUILTWITH_MOTIF "yes") 258 set(G4_BUILTWITH_MOTIF "yes") 282 set(G4_CONFIG_NEEDS_X11 TRUE) 259 set(G4_CONFIG_NEEDS_X11 TRUE) 283 else() 260 else() 284 set(G4_BUILTWITH_MOTIF "no") 261 set(G4_BUILTWITH_MOTIF "no") 285 endif() 262 endif() 286 263 287 # - RayTracerX 264 # - RayTracerX 288 if(GEANT4_USE_RAYTRACER_X11) 265 if(GEANT4_USE_RAYTRACER_X11) 289 set(G4_BUILTWITH_RAYTRACERX11 "yes") 266 set(G4_BUILTWITH_RAYTRACERX11 "yes") 290 set(G4_CONFIG_NEEDS_X11 TRUE) 267 set(G4_CONFIG_NEEDS_X11 TRUE) 291 else() 268 else() 292 set(G4_BUILTWITH_RAYTRACERX11 "no") 269 set(G4_BUILTWITH_RAYTRACERX11 "no") 293 endif() 270 endif() 294 271 295 # - OpenGL X11 272 # - OpenGL X11 296 if(GEANT4_USE_OPENGL_X11) 273 if(GEANT4_USE_OPENGL_X11) 297 set(G4_BUILTWITH_OPENGLX11 "yes") 274 set(G4_BUILTWITH_OPENGLX11 "yes") 298 set(G4_CONFIG_NEEDS_X11 TRUE) 275 set(G4_CONFIG_NEEDS_X11 TRUE) 299 else() 276 else() 300 set(G4_BUILTWITH_OPENGLX11 "no") 277 set(G4_BUILTWITH_OPENGLX11 "no") 301 endif() 278 endif() 302 279 303 # - OpenInventor 280 # - OpenInventor 304 if(GEANT4_USE_INVENTOR) 281 if(GEANT4_USE_INVENTOR) 305 set(G4_BUILTWITH_INVENTOR "yes") 282 set(G4_BUILTWITH_INVENTOR "yes") 306 else() 283 else() 307 set(G4_BUILTWITH_INVENTOR "no") 284 set(G4_BUILTWITH_INVENTOR "no") 308 endif() 285 endif() 309 286 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 287 # 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 288 # paths to get a clean set suitable for inclusion 319 if(G4_CONFIG_NEEDS_X11) 289 if(G4_CONFIG_NEEDS_X11) 320 set(_raw_x11_includes ${X11_INCLUDE_DIR}) 290 set(_raw_x11_includes ${X11_INCLUDE_DIR}) 321 list(REMOVE_DUPLICATES _raw_x11_includes) 291 list(REMOVE_DUPLICATES _raw_x11_includes) 322 if(_cxx_compiler_dirs) << 292 list(REMOVE_ITEM _raw_x11_includes ${_cxx_compiler_dirs}) 323 list(REMOVE_ITEM _raw_x11_includes ${_cx << 324 endif() << 325 set(G4_X11_CFLAGS ) 293 set(G4_X11_CFLAGS ) 326 foreach(_p ${_raw_x11_includes}) 294 foreach(_p ${_raw_x11_includes}) 327 set(G4_X11_CFLAGS "-I${_p} ${G4_X11_CFLA 295 set(G4_X11_CFLAGS "-I${_p} ${G4_X11_CFLAGS}") 328 endforeach() 296 endforeach() 329 endif() 297 endif() 330 298 331 # Configure the script 299 # Configure the script 332 # - BUILD TREE 300 # - BUILD TREE 333 # Ouch, the include path will be LONG, but a 301 # Ouch, the include path will be LONG, but at least we always have 334 # absolute paths... 302 # absolute paths... 335 set(GEANT4_CONFIG_SELF_LOCATION "# BUILD TRE 303 set(GEANT4_CONFIG_SELF_LOCATION "# BUILD TREE IS NON-RELOCATABLE") 336 set(GEANT4_CONFIG_INSTALL_PREFIX "${PROJECT_ 304 set(GEANT4_CONFIG_INSTALL_PREFIX "${PROJECT_BINARY_DIR}") 337 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 305 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 338 # NB: this only works for *single* mode gene 306 # NB: this only works for *single* mode generators. With multimode 339 # generators, which mode to use is not clear 307 # generators, which mode to use is not clear... 340 set(GEANT4_CONFIG_LIBDIR ${CMAKE_LIBRARY_OUT 308 set(GEANT4_CONFIG_LIBDIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) 341 309 342 get_property(__geant4_buildtree_include_dirs 310 get_property(__geant4_buildtree_include_dirs GLOBAL PROPERTY 343 GEANT4_BUILDTREE_INCLUDE_DIRS) 311 GEANT4_BUILDTREE_INCLUDE_DIRS) 344 312 345 foreach(_dir ${__geant4_buildtree_include_di 313 foreach(_dir ${__geant4_buildtree_include_dirs}) 346 set(GEANT4_CONFIG_INCLUDE_DIRS "${GEANT4_C 314 set(GEANT4_CONFIG_INCLUDE_DIRS "${GEANT4_CONFIG_INCLUDE_DIRS} \\ 347 ${_dir}") 315 ${_dir}") 348 endforeach() 316 endforeach() 349 317 350 # - Data 318 # - Data 351 geant4_export_datasets(BUILD GEANT4_CONFIG_D 319 geant4_export_datasets(BUILD GEANT4_CONFIG_DATASET_DESCRIPTIONS) 352 320 353 # Configure the build tree script 321 # Configure the build tree script 354 configure_file( << 322 # If we're on CMake 2.8 and above, we try to use file(COPY) to create an 355 ${PROJECT_SOURCE_DIR}/cmake/Templates/gean << 323 # executable script 356 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTO << 324 # Not sure if version check is o.k., but I'll be shocked if we ever see 357 @ONLY << 325 # a CMake 2.7 in the wild... 358 ) << 326 if(${CMAKE_VERSION} VERSION_GREATER 2.7) >> 327 configure_file( >> 328 ${CMAKE_SOURCE_DIR}/cmake/Templates/geant4-config.in >> 329 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/geant4-config >> 330 @ONLY >> 331 ) 359 332 360 file(COPY << 333 file(COPY 361 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTO << 334 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/geant4-config 362 DESTINATION ${PROJECT_BINARY_DIR} << 335 DESTINATION ${PROJECT_BINARY_DIR} 363 FILE_PERMISSIONS << 336 FILE_PERMISSIONS 364 OWNER_READ OWNER_WRITE OWNER_EXECUTE << 337 OWNER_READ OWNER_WRITE OWNER_EXECUTE 365 GROUP_READ GROUP_EXECUTE << 338 GROUP_READ GROUP_EXECUTE 366 WORLD_READ WORLD_EXECUTE << 339 WORLD_READ WORLD_EXECUTE 367 ) << 340 ) >> 341 else() >> 342 # Changing permissions is awkward, so just configure and document >> 343 # that you have to do 'sh geant4-config' in this case. >> 344 configure_file( >> 345 ${CMAKE_SOURCE_DIR}/cmake/Templates/geant4-config.in >> 346 ${PROJECT_BINARY_DIR}/geant4-config >> 347 @ONLY >> 348 ) >> 349 endif() 368 350 369 # - Install Tree 351 # - Install Tree 370 # Much easier :-) 352 # Much easier :-) 371 # Non-Relocatable case... 353 # Non-Relocatable case... 372 if(CMAKE_INSTALL_IS_NONRELOCATABLE) 354 if(CMAKE_INSTALL_IS_NONRELOCATABLE) 373 # Hardcoded paths 355 # Hardcoded paths 374 set(GEANT4_CONFIG_INSTALL_PREFIX "${CMAKE_ 356 set(GEANT4_CONFIG_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 375 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 357 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 376 set(GEANT4_CONFIG_LIBDIR "${CMAKE_INSTALL_ 358 set(GEANT4_CONFIG_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}") 377 set(GEANT4_CONFIG_INCLUDE_DIRS "${CMAKE_IN 359 set(GEANT4_CONFIG_INCLUDE_DIRS "${CMAKE_INSTALL_FULL_INCLUDEDIR}/Geant4") 378 else() 360 else() 379 # Calculate base of self contained install 361 # Calculate base of self contained install based on relative path from 380 # CMAKE_INSTALL_FULL_BINDIR to CMAKE_INSTA 362 # CMAKE_INSTALL_FULL_BINDIR to CMAKE_INSTALL_PREFIX. 381 file(RELATIVE_PATH _bin_to_prefix ${CMAKE_ 363 file(RELATIVE_PATH _bin_to_prefix ${CMAKE_INSTALL_FULL_BINDIR} ${CMAKE_INSTALL_PREFIX}) 382 # Strip any trailing path separators just 364 # Strip any trailing path separators just for neatness. 383 string(REGEX REPLACE "[/\\]$" "" _bin_to_p 365 string(REGEX REPLACE "[/\\]$" "" _bin_to_prefix "${_bin_to_prefix}") 384 366 385 set(GEANT4_CONFIG_INSTALL_PREFIX "$scriptl 367 set(GEANT4_CONFIG_INSTALL_PREFIX "$scriptloc/${_bin_to_prefix}") 386 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 368 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 387 set(GEANT4_CONFIG_LIBDIR "\${prefix}/${CMA 369 set(GEANT4_CONFIG_LIBDIR "\${prefix}/${CMAKE_INSTALL_LIBDIR}") 388 set(GEANT4_CONFIG_INCLUDE_DIRS "\${prefix} 370 set(GEANT4_CONFIG_INCLUDE_DIRS "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}/Geant4") 389 endif() 371 endif() 390 372 391 # - Data 373 # - Data 392 geant4_export_datasets(INSTALL GEANT4_CONFIG 374 geant4_export_datasets(INSTALL GEANT4_CONFIG_DATASET_DESCRIPTIONS) 393 375 394 # Configure the install tree script 376 # Configure the install tree script 395 configure_file( 377 configure_file( 396 ${PROJECT_SOURCE_DIR}/cmake/Templates/gean << 378 ${CMAKE_SOURCE_DIR}/cmake/Templates/geant4-config.in 397 ${PROJECT_BINARY_DIR}/InstallTreeFiles/gea 379 ${PROJECT_BINARY_DIR}/InstallTreeFiles/geant4-config 398 @ONLY 380 @ONLY 399 ) 381 ) 400 382 401 # Install it 383 # Install it 402 install(FILES ${PROJECT_BINARY_DIR}/InstallT 384 install(FILES ${PROJECT_BINARY_DIR}/InstallTreeFiles/geant4-config 403 DESTINATION ${CMAKE_INSTALL_BINDIR} 385 DESTINATION ${CMAKE_INSTALL_BINDIR} 404 PERMISSIONS 386 PERMISSIONS 405 OWNER_READ OWNER_WRITE OWNER_EXECUTE 387 OWNER_READ OWNER_WRITE OWNER_EXECUTE 406 GROUP_READ GROUP_EXECUTE 388 GROUP_READ GROUP_EXECUTE 407 WORLD_READ WORLD_EXECUTE 389 WORLD_READ WORLD_EXECUTE 408 COMPONENT Development 390 COMPONENT Development 409 ) 391 ) 410 << 411 # Win32 helper file geant4-config.cmd << 412 if(WIN32) << 413 # No configuration just a copy << 414 configure_file( << 415 ${PROJECT_SOURCE_DIR}/cmake/Templates/ge << 416 ${PROJECT_BINARY_DIR}/InstallTreeFiles/g << 417 @ONLY << 418 ) << 419 << 420 # Install helper << 421 install(FILES ${PROJECT_BINARY_DIR}/Instal << 422 DESTINATION ${CMAKE_INSTALL_BINDIR} << 423 PERMISSIONS << 424 OWNER_READ OWNER_WRITE OWNER_EXECUTE << 425 GROUP_READ GROUP_EXECUTE << 426 WORLD_READ WORLD_EXECUTE << 427 COMPONENT Development << 428 ) << 429 endif() << 430 endif() 392 endif() >> 393