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: << 116 # Custom ``validate_no_module_cycles`` and ``v << 117 # are declared if Python3.9 is available. << 118 # These runs the geant4_module_check.py Python << 119 # inconsistencies in the module dependency gra << 120 find_package(Python3 3.9 QUIET COMPONENTS Inte << 121 if(Python3_FOUND) << 122 set(G4MODULE_VALIDATION_CMD Python3::Interpr << 123 ${PROJECT_SOURCE_DIR}/cmake/Modules/geant4 << 124 -db ${PROJECT_BINARY_DIR}/G4ModuleInterfac << 125 << 126 add_custom_target(validate_no_module_cycles << 127 COMMAND ${G4MODULE_VALIDATION_CMD} --find- << 128 COMMENT "Checking for cycles in declared s << 129 ) << 130 << 131 add_custom_target(validate_module_consistenc << 132 COMMAND ${G4MODULE_VALIDATION_CMD} --find- << 133 COMMENT "Checking for inconsistencies in d << 134 USES_TERMINAL << 135 ) << 136 endif() << 137 << 138 #--------------------------------------------- 115 #----------------------------------------------------------------------- 139 #.rst: 116 #.rst: 140 # General Installation Settings 117 # General Installation Settings 141 # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 118 # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 142 # 119 # 143 # Geant4 custom defaults 120 # Geant4 custom defaults 144 121 145 set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PA 122 set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH 146 "Read-only architecture-independent data roo 123 "Read-only architecture-independent data root (share)") 147 124 148 set(CMAKE_INSTALL_DATADIR 125 set(CMAKE_INSTALL_DATADIR 149 "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME << 126 "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}-${${PROJECT_NAME}_VERSION}" CACHE PATH 150 "Read-only architecture-independent data (DA << 127 "Read-only architecture-independent data (DATAROOTDIR/${PROJECT_NAME}-${${PROJECT_NAME}_VERSION})") 151 128 152 # 129 # 153 # CMake's builtin `GNUInstallDirs` module is u 130 # CMake's builtin `GNUInstallDirs` module is used to set and provide variables 154 # for the destinations to which for executable 131 # for the destinations to which for executables, libraries and other files 155 # should be installed. 132 # should be installed. 156 # 133 # 157 include(GNUInstallDirs) 134 include(GNUInstallDirs) 158 135 159 # Check for non-relocatable install directorie 136 # Check for non-relocatable install directories 160 foreach(dir 137 foreach(dir 161 BINDIR 138 BINDIR 162 LIBDIR 139 LIBDIR 163 INCLUDEDIR 140 INCLUDEDIR 164 DATAROOTDIR 141 DATAROOTDIR 165 DATADIR 142 DATADIR 166 MANDIR 143 MANDIR 167 DOCDIR 144 DOCDIR 168 ) 145 ) 169 if(IS_ABSOLUTE ${CMAKE_INSTALL_${dir}}) 146 if(IS_ABSOLUTE ${CMAKE_INSTALL_${dir}}) 170 set(CMAKE_INSTALL_IS_NONRELOCATABLE 1) 147 set(CMAKE_INSTALL_IS_NONRELOCATABLE 1) 171 endif() 148 endif() 172 endforeach() 149 endforeach() 173 150 174 #.rst: 151 #.rst: 175 # The following CMake variables are additional 152 # The following CMake variables are additionally set to control install 176 # policy and reporting: 153 # policy and reporting: 177 154 178 #.rst: 155 #.rst: 179 # - ``CMAKE_INSTALL_MESSAGE`` : ``LAZY`` 156 # - ``CMAKE_INSTALL_MESSAGE`` : ``LAZY`` 180 # 157 # 181 # - Only report new or updated files install 158 # - Only report new or updated files installed by the ``install`` target. 182 # 159 # 183 set(CMAKE_INSTALL_MESSAGE LAZY) 160 set(CMAKE_INSTALL_MESSAGE LAZY) 184 161 185 #.rst: 162 #.rst: 186 # An `uninstall` target is provided to assist 163 # An `uninstall` target is provided to assist in removing previously installed 187 # files. It will not remove any installed dire 164 # files. It will not remove any installed directories per standard behaviour. 188 # Note that if files are removed from the inst 165 # Note that if files are removed from the install manifest between invocations 189 # of the `install` and `uninstall` targets, th 166 # of the `install` and `uninstall` targets, they will *not* be removed by the 190 # latter. 167 # latter. 191 # 168 # 192 include(CMakeUninstallTarget) 169 include(CMakeUninstallTarget) 193 170