Geant4 Cross Reference |
1 #.rst: 2 # G4ConfigurePkgConfigHelpers 3 # --------------------------- 4 # 5 # This module configures and installs pkg-conf 6 # geant4-config program to help clients compil 7 # the Geant4 libraries. 8 # 9 # The geant4-config script provides an sh base 10 # information on the Geant4 installation, incl 11 # version number, compiler and linker flags. 12 # 13 # The script is generated from a template file 14 # known bindir as an executable. 15 # 16 # Paths are always hardcoded in the build tree 17 # intended to be relocatable. 18 # The Install Tree script uses self-location b 19 # {root,clhep}-config is the install itself is 20 # absolute paths are encoded. 21 # 22 # 23 24 #--------------------------------------------- 25 # License and Disclaimer 26 # 27 # The Geant4 software is copyright of the C 28 # the Geant4 Collaboration. It is provided u 29 # conditions of the Geant4 Software License, 30 # LICENSE and available at http://cern.ch/gea 31 # include a list of copyright holders. 32 # 33 # Neither the authors of this software system, 34 # institutes,nor the agencies providing financ 35 # work make any representation or warranty, 36 # regarding this software system or assume a 37 # use. Please see the license in the file LI 38 # for the full disclaimer and the limitation o 39 # 40 # This code implementation is the result of 41 # technical work of the GEANT4 collaboration. 42 # By using, copying, modifying or distribut 43 # any work based on the software) you agree 44 # use in resulting scientific publications 45 # acceptance of all terms of the Geant4 Softwa 46 # 47 #--------------------------------------------- 48 49 50 #--------------------------------------------- 51 # function get_system_include_dirs 52 # return list of directories our C++ 53 # by default. 54 # 55 # The idea comes from CMake's inbuilt 56 # for the Eclipse and CodeBlocks gene 57 # our own function because the CMake 58 # so we can't rely on it. 59 function(get_system_include_dirs _dirs) 60 # Only for GCC, Clang and Intel 61 if("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU OR 62 # Proceed 63 file(WRITE "${PROJECT_BINARY_DIR}/CMakeFil 64 65 # Save locale, them to "C" english locale 66 set(_orig_lc_all $ENV{LC_ALL}) 67 set(_orig_lc_messages $ENV{LC_MESSAGES}) 68 set(_orig_lang $ENV{LANG}) 69 70 set(ENV{LC_ALL} C) 71 set(ENV{LC_MESSAGES} C) 72 set(ENV{LANG} C) 73 74 execute_process(COMMAND ${CMAKE_CXX_COMPIL 75 WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/ 76 ERROR_VARIABLE _cxxOutput 77 OUTPUT_VARIABLE _cxxStdout 78 ) 79 80 file(REMOVE "${PROJECT_BINARY_DIR}/CMakeFi 81 82 # Parse and extract search dirs 83 set(_resultIncludeDirs ) 84 if( "${_cxxOutput}" MATCHES "> search star 85 string(REGEX MATCHALL "[^\n]+\n" _includ 86 foreach(nextLine ${_includeLines}) 87 string(REGEX REPLACE "\\(framework dir 88 string(STRIP "${nextLineNoFramework}" 89 list(APPEND _resultIncludeDirs "${_inc 90 endforeach() 91 endif() 92 93 # Restore original locale 94 set(ENV{LC_ALL} ${_orig_lc_all}) 95 set(ENV{LC_MESSAGES} ${_orig_lc_messages}) 96 set(ENV{LANG} ${_orig_lang}) 97 98 set(${_dirs} ${_resultIncludeDirs} PARENT_ 99 else() 100 set(${_dirs} "" PARENT_SCOPE) 101 endif() 102 endfunction() 103 104 #--------------------------------------------- 105 # Only create script if we have a global libra 106 # 107 #if(NOT GEANT4_BUILD_GRANULAR_LIBS AND UNIX) 108 if(NOT GEANT4_BUILD_GRANULAR_LIBS) 109 # Get implicit search paths 110 get_system_include_dirs(_cxx_compiler_dirs) 111 112 # Setup variables needed for expansion in co 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 119 if(BUILD_STATIC_LIBS) 120 set(G4_BUILTWITH_STATICLIBS "yes") 121 else() 122 set(G4_BUILTWITH_STATICLIBS "no") 123 endif() 124 125 # - Multithreading 126 if(GEANT4_BUILD_MULTITHREADED) 127 set(G4_BUILTWITH_MULTITHREADING "yes") 128 else() 129 set(G4_BUILTWITH_MULTITHREADING "no") 130 endif() 131 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 140 if(GEANT4_USE_SMARTSTACK) 141 set(G4_BUILTWITH_SMARTSTACK "yes") 142 else() 143 set(G4_BUILTWITH_SMARTSTACK "no") 144 endif() 145 146 # - CLHEP 147 if(GEANT4_USE_SYSTEM_CLHEP) 148 set(G4_BUILTWITH_CLHEP "no") 149 #inc path 150 get_filename_component(G4_SYSTEM_CLHEP_INC 151 152 #libpath 153 list(GET CLHEP_LIBRARIES 0 _zeroth_clhep_l 154 get_target_property(_system_clhep_libdir " 155 get_filename_component(_system_clhep_libdi 156 get_filename_component(_system_clhep_libdi 157 set(G4_SYSTEM_CLHEP_LIBRARIES "-L${_system 158 159 foreach(_clhep_lib ${CLHEP_LIBRARIES}) 160 get_target_property(_curlib "${_clhep_li 161 get_filename_component(_curlib "${_curli 162 string(REGEX REPLACE "^lib(.*)\\.(so|a|d 163 set(G4_SYSTEM_CLHEP_LIBRARIES "${G4_SYST 164 endforeach() 165 else() 166 set(G4_BUILTWITH_CLHEP "yes") 167 endif() 168 169 # - EXPAT 170 if(GEANT4_USE_SYSTEM_EXPAT) 171 set(G4_BUILTWITH_EXPAT "no") 172 else() 173 set(G4_BUILTWITH_EXPAT "yes") 174 endif() 175 176 # - ZLIB 177 if(GEANT4_USE_SYSTEM_ZLIB) 178 set(G4_BUILTWITH_ZLIB "no") 179 else() 180 set(G4_BUILTWITH_ZLIB "yes") 181 endif() 182 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 191 if(GEANT4_USE_GDML) 192 set(G4_BUILTWITH_GDML "yes") 193 set(G4_XERCESC_INCLUDE_DIRS ${XercesC_INCL 194 list(REMOVE_DUPLICATES G4_XERCESC_INCLUDE_ 195 if(_cxx_compiler_dirs) 196 list(REMOVE_ITEM G4_XERCESC_INCLUDE_DIRS 197 endif() 198 199 set(G4_XERCESC_CFLAGS ) 200 foreach(_dir ${G4_XERCESC_INCLUDE_DIRS}) 201 set(G4_XERCESC_CFLAGS "${G4_XERCESC_CFLA 202 endforeach() 203 else() 204 set(G4_BUILTWITH_GDML "no") 205 endif() 206 207 # - G3ToG4 208 if(GEANT4_USE_G3TOG4) 209 set(G4_BUILTWITH_G3TOG4 "yes") 210 else() 211 set(G4_BUILTWITH_G3TOG4 "no") 212 endif() 213 214 # - USolids 215 if(GEANT4_USE_USOLIDS OR GEANT4_USE_PARTIAL_ 216 set(G4_BUILTWITH_USOLIDS "yes") 217 get_target_property(G4_USOLIDS_INCLUDE_DIR 218 list(REMOVE_DUPLICATES G4_USOLIDS_INCLUDE_ 219 foreach(_dir ${G4_USOLIDS_INCLUDE_DIRS}) 220 set(G4_USOLIDS_CFLAGS "${G4_USOLIDS_CFLA 221 endforeach() 222 # NB: should ALSO account for VecGeom havi 223 # this is better handled through proper pk 224 else() 225 set(G4_BUILTWITH_USOLIDS "no") 226 endif() 227 228 # - Freetype 229 if(GEANT4_USE_FREETYPE) 230 set(G4_BUILTWITH_FREETYPE "yes") 231 else() 232 set(G4_BUILTWITH_FREETYPE "no") 233 endif() 234 235 # - HDF5 236 if(GEANT4_USE_HDF5) 237 set(G4_BUILTWITH_HDF5 "yes") 238 else() 239 set(G4_BUILTWITH_HDF5 "no") 240 endif() 241 242 # - Qt 243 if(GEANT4_USE_QT) 244 set(G4_BUILTWITH_QT "yes") 245 set(_qtcomps Core Gui Widgets OpenGL) 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 255 list(REMOVE_DUPLICATES G4_QT_INCLUDE_DIRS) 256 if(_cxx_compiler_dirs) 257 list(REMOVE_ITEM G4_QT_INCLUDE_DIRS ${_c 258 endif() 259 260 set(G4_QT_CFLAGS ) 261 foreach(_dir ${G4_QT_INCLUDE_DIRS}) 262 set(G4_QT_CFLAGS "${G4_QT_CFLAGS} -I${_d 263 endforeach() 264 265 if(APPLE AND G4_QT_CFLAGS MATCHES "QtCore\ 266 set(G4_QT_CFLAGS "${G4_QT_CFLAGS} -F${G4 267 endif() 268 else() 269 set(G4_BUILTWITH_QT "no") 270 endif() 271 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 280 if(GEANT4_USE_XM) 281 set(G4_BUILTWITH_MOTIF "yes") 282 set(G4_CONFIG_NEEDS_X11 TRUE) 283 else() 284 set(G4_BUILTWITH_MOTIF "no") 285 endif() 286 287 # - RayTracerX 288 if(GEANT4_USE_RAYTRACER_X11) 289 set(G4_BUILTWITH_RAYTRACERX11 "yes") 290 set(G4_CONFIG_NEEDS_X11 TRUE) 291 else() 292 set(G4_BUILTWITH_RAYTRACERX11 "no") 293 endif() 294 295 # - OpenGL X11 296 if(GEANT4_USE_OPENGL_X11) 297 set(G4_BUILTWITH_OPENGLX11 "yes") 298 set(G4_CONFIG_NEEDS_X11 TRUE) 299 else() 300 set(G4_BUILTWITH_OPENGLX11 "no") 301 endif() 302 303 # - OpenInventor 304 if(GEANT4_USE_INVENTOR) 305 set(G4_BUILTWITH_INVENTOR "yes") 306 else() 307 set(G4_BUILTWITH_INVENTOR "no") 308 endif() 309 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 318 # paths to get a clean set suitable for incl 319 if(G4_CONFIG_NEEDS_X11) 320 set(_raw_x11_includes ${X11_INCLUDE_DIR}) 321 list(REMOVE_DUPLICATES _raw_x11_includes) 322 if(_cxx_compiler_dirs) 323 list(REMOVE_ITEM _raw_x11_includes ${_cx 324 endif() 325 set(G4_X11_CFLAGS ) 326 foreach(_p ${_raw_x11_includes}) 327 set(G4_X11_CFLAGS "-I${_p} ${G4_X11_CFLA 328 endforeach() 329 endif() 330 331 # Configure the script 332 # - BUILD TREE 333 # Ouch, the include path will be LONG, but a 334 # absolute paths... 335 set(GEANT4_CONFIG_SELF_LOCATION "# BUILD TRE 336 set(GEANT4_CONFIG_INSTALL_PREFIX "${PROJECT_ 337 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 338 # NB: this only works for *single* mode gene 339 # generators, which mode to use is not clear 340 set(GEANT4_CONFIG_LIBDIR ${CMAKE_LIBRARY_OUT 341 342 get_property(__geant4_buildtree_include_dirs 343 GEANT4_BUILDTREE_INCLUDE_DIRS) 344 345 foreach(_dir ${__geant4_buildtree_include_di 346 set(GEANT4_CONFIG_INCLUDE_DIRS "${GEANT4_C 347 ${_dir}") 348 endforeach() 349 350 # - Data 351 geant4_export_datasets(BUILD GEANT4_CONFIG_D 352 353 # Configure the build tree script 354 configure_file( 355 ${PROJECT_SOURCE_DIR}/cmake/Templates/gean 356 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTO 357 @ONLY 358 ) 359 360 file(COPY 361 ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTO 362 DESTINATION ${PROJECT_BINARY_DIR} 363 FILE_PERMISSIONS 364 OWNER_READ OWNER_WRITE OWNER_EXECUTE 365 GROUP_READ GROUP_EXECUTE 366 WORLD_READ WORLD_EXECUTE 367 ) 368 369 # - Install Tree 370 # Much easier :-) 371 # Non-Relocatable case... 372 if(CMAKE_INSTALL_IS_NONRELOCATABLE) 373 # Hardcoded paths 374 set(GEANT4_CONFIG_INSTALL_PREFIX "${CMAKE_ 375 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 376 set(GEANT4_CONFIG_LIBDIR "${CMAKE_INSTALL_ 377 set(GEANT4_CONFIG_INCLUDE_DIRS "${CMAKE_IN 378 else() 379 # Calculate base of self contained install 380 # CMAKE_INSTALL_FULL_BINDIR to CMAKE_INSTA 381 file(RELATIVE_PATH _bin_to_prefix ${CMAKE_ 382 # Strip any trailing path separators just 383 string(REGEX REPLACE "[/\\]$" "" _bin_to_p 384 385 set(GEANT4_CONFIG_INSTALL_PREFIX "$scriptl 386 set(GEANT4_CONFIG_INSTALL_EXECPREFIX \"\") 387 set(GEANT4_CONFIG_LIBDIR "\${prefix}/${CMA 388 set(GEANT4_CONFIG_INCLUDE_DIRS "\${prefix} 389 endif() 390 391 # - Data 392 geant4_export_datasets(INSTALL GEANT4_CONFIG 393 394 # Configure the install tree script 395 configure_file( 396 ${PROJECT_SOURCE_DIR}/cmake/Templates/gean 397 ${PROJECT_BINARY_DIR}/InstallTreeFiles/gea 398 @ONLY 399 ) 400 401 # Install it 402 install(FILES ${PROJECT_BINARY_DIR}/InstallT 403 DESTINATION ${CMAKE_INSTALL_BINDIR} 404 PERMISSIONS 405 OWNER_READ OWNER_WRITE OWNER_EXECUTE 406 GROUP_READ GROUP_EXECUTE 407 WORLD_READ WORLD_EXECUTE 408 COMPONENT Development 409 ) 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()