Geant4 Cross Reference |
1 #.rst: 1 #.rst: 2 # G4CMakeSettings.cmake 2 # G4CMakeSettings.cmake 3 # --------------------- 3 # --------------------- 4 # 4 # 5 # Set defaults for core CMake behaviour useful 5 # Set defaults for core CMake behaviour useful or required for building, 6 # testing and installing Geant4. 6 # testing and installing Geant4. 7 7 8 #--------------------------------------------- 8 #----------------------------------------------------------------- 9 # License and Disclaimer 9 # License and Disclaimer 10 # 10 # 11 # The Geant4 software is copyright of the C 11 # The Geant4 software is copyright of the Copyright Holders of 12 # the Geant4 Collaboration. It is provided u 12 # the Geant4 Collaboration. It is provided under the terms and 13 # conditions of the Geant4 Software License, 13 # conditions of the Geant4 Software License, included in the file 14 # LICENSE and available at http://cern.ch/gea 14 # LICENSE and available at http://cern.ch/geant4/license . These 15 # include a list of copyright holders. 15 # include a list of copyright holders. 16 # 16 # 17 # Neither the authors of this software system, 17 # Neither the authors of this software system, nor their employing 18 # institutes,nor the agencies providing financ 18 # institutes,nor the agencies providing financial support for this 19 # work make any representation or warranty, 19 # work make any representation or warranty, express or implied, 20 # regarding this software system or assume a 20 # regarding this software system or assume any liability for its 21 # use. Please see the license in the file LI 21 # use. Please see the license in the file LICENSE and URL above 22 # for the full disclaimer and the limitation o 22 # for the full disclaimer and the limitation of liability. 23 # 23 # 24 # This code implementation is the result of 24 # This code implementation is the result of the scientific and 25 # technical work of the GEANT4 collaboration. 25 # technical work of the GEANT4 collaboration. 26 # By using, copying, modifying or distribut 26 # By using, copying, modifying or distributing the software (or 27 # any work based on the software) you agree 27 # any work based on the software) you agree to acknowledge its 28 # use in resulting scientific publications 28 # use in resulting scientific publications, and indicate your 29 # acceptance of all terms of the Geant4 Softwa 29 # acceptance of all terms of the Geant4 Software license. 30 # 30 # 31 #--------------------------------------------- 31 #----------------------------------------------------------------- 32 32 33 if(NOT __G4CMAKESETTINGS_INCLUDED) 33 if(NOT __G4CMAKESETTINGS_INCLUDED) 34 set(__G4CMAKESETTINGS_INCLUDED TRUE) 34 set(__G4CMAKESETTINGS_INCLUDED TRUE) 35 else() 35 else() 36 return() 36 return() 37 endif() 37 endif() 38 38 39 #--------------------------------------------- 39 #----------------------------------------------------------------------- 40 #.rst: 40 #.rst: 41 # General Configuration Settings 41 # General Configuration Settings 42 # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 42 # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 43 # 43 # 44 # The following CMake modules and variables ar 44 # The following CMake modules and variables are used to control configuration time 45 # behaviour such as location of dependencies. 45 # behaviour such as location of dependencies. 46 # 46 # 47 47 48 #.rst: 48 #.rst: 49 # - ``G4CMakeUtilities` 49 # - ``G4CMakeUtilities` 50 # 50 # 51 # - Included to provide additional macros an 51 # - Included to provide additional macros and functions 52 # 52 # 53 include(G4CMakeUtilities) 53 include(G4CMakeUtilities) 54 54 55 # 55 # 56 # - ``CMAKE_EXPORT_NO_PACKAGE_REGISTRY`` : ON 56 # - ``CMAKE_EXPORT_NO_PACKAGE_REGISTRY`` : ON 57 # - ``CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`` 57 # - ``CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY`` : ON 58 # - ``CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REG 58 # - ``CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY`` : ON 59 # 59 # 60 # - These variables are set to ensure that C 60 # - These variables are set to ensure that CMake never creates or searches 61 # for config files in any package registry 61 # for config files in any package registry. This prevents the 62 # :cmake:command:`find_package <cmake:comm 62 # :cmake:command:`find_package <cmake:command:find_package>` 63 # command from locating potentially spurio 63 # command from locating potentially spurious config files. 64 # 64 # 65 set(CMAKE_EXPORT_NO_PACKAGE_REGISTRY ON) 65 set(CMAKE_EXPORT_NO_PACKAGE_REGISTRY ON) 66 set(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY ON) 66 set(CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY ON) 67 set(CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGIS 67 set(CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY ON) 68 68 69 #--------------------------------------------- 69 #----------------------------------------------------------------------- 70 #.rst: 70 #.rst: 71 # General Build Settings 71 # General Build Settings 72 # ^^^^^^^^^^^^^^^^^^^^^^ 72 # ^^^^^^^^^^^^^^^^^^^^^^ 73 # 73 # 74 # The following CMake variables and options ar 74 # The following CMake variables and options are configured by default 75 # when including this module: 75 # when including this module: 76 # 76 # 77 # - ``CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE 77 # - ``CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE`` : ON 78 # 78 # 79 # - Force project directories to appear firs 79 # - Force project directories to appear first in any list of include paths. 80 # This applies to both full paths and thos 80 # This applies to both full paths and those created by generator expressions. 81 # 81 # 82 set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE O 82 set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON) 83 83 84 #.rst: 84 #.rst: 85 # - ``CMAKE_LINK_DEPENDS_NO_SHARED`` : ON 85 # - ``CMAKE_LINK_DEPENDS_NO_SHARED`` : ON 86 # 86 # 87 # - Do not relink a target to any shared lib 87 # - Do not relink a target to any shared library dependencies when 88 # only the shared library implementation h 88 # only the shared library implementation has changed. 89 # 89 # 90 set(CMAKE_LINK_DEPENDS_NO_SHARED ON) 90 set(CMAKE_LINK_DEPENDS_NO_SHARED ON) 91 91 92 #.rst: 92 #.rst: 93 # A custom ``validate_sources`` targets is dec 93 # A custom ``validate_sources`` targets is declared to compare files listed 94 # in `sources.cmake` scripts with on-disk file 94 # in `sources.cmake` scripts with on-disk files. As sources.cmake lists 95 # source files of Geant4 explicitely, we can o 95 # source files of Geant4 explicitely, we can often a mismatch can occur 96 # between this list and what's actually on dis 96 # between this list and what's actually on disk. 97 # 97 # 98 # The ``validate_sources`` target executes a C 98 # The ``validate_sources`` target executes a CMake script to 99 # check for these errors and report mismatches 99 # check for these errors and report mismatches. It fails with FATAL_ERROR 100 # if any mismatch is found, but will not do so 100 # if any mismatch is found, but will not do so until it has reported 101 # all errors. 101 # all errors. 102 # Configure the script 102 # Configure the script 103 configure_file( 103 configure_file( 104 ${PROJECT_SOURCE_DIR}/cmake/Templates/geant4 104 ${PROJECT_SOURCE_DIR}/cmake/Templates/geant4_validate_sources.cmake.in 105 ${PROJECT_BINARY_DIR}/geant4_validate_source 105 ${PROJECT_BINARY_DIR}/geant4_validate_sources.cmake 106 @ONLY 106 @ONLY 107 ) 107 ) 108 108 109 # Create the target 109 # Create the target 110 add_custom_target(validate_sources 110 add_custom_target(validate_sources 111 COMMAND ${CMAKE_COMMAND} -P ${PROJECT_BINARY 111 COMMAND ${CMAKE_COMMAND} -P ${PROJECT_BINARY_DIR}/geant4_validate_sources.cmake 112 COMMENT "Validating Geant4 Module Source Lis 112 COMMENT "Validating Geant4 Module Source Lists" 113 ) 113 ) 114 114 115 #.rst: 115 #.rst: 116 # Custom ``validate_no_module_cycles`` and ``v 116 # Custom ``validate_no_module_cycles`` and ``validate_module_consistency`` targets 117 # are declared if Python3.9 is available. 117 # are declared if Python3.9 is available. 118 # These runs the geant4_module_check.py Python 118 # These runs the geant4_module_check.py Python script to check for cycles or 119 # inconsistencies in the module dependency gra 119 # inconsistencies in the module dependency graph and declarations. 120 find_package(Python3 3.9 QUIET COMPONENTS Inte 120 find_package(Python3 3.9 QUIET COMPONENTS Interpreter) 121 if(Python3_FOUND) 121 if(Python3_FOUND) 122 set(G4MODULE_VALIDATION_CMD Python3::Interpr 122 set(G4MODULE_VALIDATION_CMD Python3::Interpreter 123 ${PROJECT_SOURCE_DIR}/cmake/Modules/geant4 123 ${PROJECT_SOURCE_DIR}/cmake/Modules/geant4_module_check.py 124 -db ${PROJECT_BINARY_DIR}/G4ModuleInterfac 124 -db ${PROJECT_BINARY_DIR}/G4ModuleInterfaceMap.csv) 125 125 126 add_custom_target(validate_no_module_cycles 126 add_custom_target(validate_no_module_cycles 127 COMMAND ${G4MODULE_VALIDATION_CMD} --find- 127 COMMAND ${G4MODULE_VALIDATION_CMD} --find-cycles 128 COMMENT "Checking for cycles in declared s 128 COMMENT "Checking for cycles in declared source module dependencies" 129 ) 129 ) 130 130 131 add_custom_target(validate_module_consistenc 131 add_custom_target(validate_module_consistency 132 COMMAND ${G4MODULE_VALIDATION_CMD} --find- 132 COMMAND ${G4MODULE_VALIDATION_CMD} --find-inconsistencies 133 COMMENT "Checking for inconsistencies in d 133 COMMENT "Checking for inconsistencies in declared source module dependencies" 134 USES_TERMINAL 134 USES_TERMINAL 135 ) 135 ) 136 endif() 136 endif() 137 137 138 #--------------------------------------------- 138 #----------------------------------------------------------------------- 139 #.rst: 139 #.rst: 140 # General Installation Settings 140 # General Installation Settings 141 # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 141 # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 142 # 142 # 143 # Geant4 custom defaults 143 # Geant4 custom defaults 144 144 145 set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PA 145 set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH 146 "Read-only architecture-independent data roo 146 "Read-only architecture-independent data root (share)") 147 147 148 set(CMAKE_INSTALL_DATADIR 148 set(CMAKE_INSTALL_DATADIR 149 "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME 149 "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}" CACHE PATH 150 "Read-only architecture-independent data (DA 150 "Read-only architecture-independent data (DATAROOTDIR/${PROJECT_NAME})") 151 151 152 # 152 # 153 # CMake's builtin `GNUInstallDirs` module is u 153 # CMake's builtin `GNUInstallDirs` module is used to set and provide variables 154 # for the destinations to which for executable 154 # for the destinations to which for executables, libraries and other files 155 # should be installed. 155 # should be installed. 156 # 156 # 157 include(GNUInstallDirs) 157 include(GNUInstallDirs) 158 158 159 # Check for non-relocatable install directorie 159 # Check for non-relocatable install directories 160 foreach(dir 160 foreach(dir 161 BINDIR 161 BINDIR 162 LIBDIR 162 LIBDIR 163 INCLUDEDIR 163 INCLUDEDIR 164 DATAROOTDIR 164 DATAROOTDIR 165 DATADIR 165 DATADIR 166 MANDIR 166 MANDIR 167 DOCDIR 167 DOCDIR 168 ) 168 ) 169 if(IS_ABSOLUTE ${CMAKE_INSTALL_${dir}}) 169 if(IS_ABSOLUTE ${CMAKE_INSTALL_${dir}}) 170 set(CMAKE_INSTALL_IS_NONRELOCATABLE 1) 170 set(CMAKE_INSTALL_IS_NONRELOCATABLE 1) 171 endif() 171 endif() 172 endforeach() 172 endforeach() 173 173 174 #.rst: 174 #.rst: 175 # The following CMake variables are additional 175 # The following CMake variables are additionally set to control install 176 # policy and reporting: 176 # policy and reporting: 177 177 178 #.rst: 178 #.rst: 179 # - ``CMAKE_INSTALL_MESSAGE`` : ``LAZY`` 179 # - ``CMAKE_INSTALL_MESSAGE`` : ``LAZY`` 180 # 180 # 181 # - Only report new or updated files install 181 # - Only report new or updated files installed by the ``install`` target. 182 # 182 # 183 set(CMAKE_INSTALL_MESSAGE LAZY) 183 set(CMAKE_INSTALL_MESSAGE LAZY) 184 184 185 #.rst: 185 #.rst: 186 # An `uninstall` target is provided to assist 186 # An `uninstall` target is provided to assist in removing previously installed 187 # files. It will not remove any installed dire 187 # files. It will not remove any installed directories per standard behaviour. 188 # Note that if files are removed from the inst 188 # Note that if files are removed from the install manifest between invocations 189 # of the `install` and `uninstall` targets, th 189 # of the `install` and `uninstall` targets, they will *not* be removed by the 190 # latter. 190 # latter. 191 # 191 # 192 include(CMakeUninstallTarget) 192 include(CMakeUninstallTarget) 193 193