Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/cmake/Modules/G4CMakeSettings.cmake

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

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