Import Geant4 10.4.0 source tree

This commit is contained in:
Gabriele Cosmo
2017-12-08 12:52:30 +01:00
parent 98e455a940
commit fc6af9e721
2166 changed files with 276760 additions and 100873 deletions
+125
View File
@@ -31,6 +31,131 @@ add this in the documentation for the changed file as [BUGFIX #BUGNUMBER].
----------------------------------------------------------
30th November 2017 - Gabriele Cosmo (cmake-V10-03-49)
- Replaced USolids specific flags with VecGeom in Geant4OptionalComponents.cmake.
From now on VecGeomConfig.cmake will be required and used instead of
USolidsConfig.cmake, as well as VecGeom_DIR instead of USolids_DIR.
29th November 2017 - Ben Morgan (cmake-V10-03-48)
- Bugfix: Restore reporting of GEANT4_BUILD_CXXSTD.
27th November 2017 - Ben Morgan (cmake-V10-03-47)
- Remove obsolete FindROOT module
10th November 2017 - Gunter Folger (cmake-V10-03-46)
- Switch to new dataset G4PhotonEvaporation5.2
10th November 2017 - Gabriele Cosmo (cmake-V10-03-45)
- G4ConfigureGNUMakeHelpers.cmake: corrected setting of USOLIDS_BASE_DIR
path for GNUmake.
7th November 2017 - Ben Morgan (cmake-V10-03-44)
- Modules/Geant4OptionalComponents.cmake:
When using HDF5 with Multithreaded Geant4, check
that found install of HDF5 was built with thread
safety. Require HDF5 >= 1.8.
3rd November 2017 - Ben Morgan (cmake-V10-03-43)
- BUGFIX: Make HDF5 component checkable by clients
- Templates/Geant4Config.cmake.in : Add "hdf5" component
with associated boolean Geant4_hdf5_FOUND.
- Templates/geant4-config.in: add "hdf5" feature
27th October 2017 - Gunter Folger (cmake-V10-03-42)
- Switch to new dataset G4EMLOW 7.3
25th October 2017 - Ben Morgan (cmake-V10-03-41)
- Modules/Geant4LibraryBuildOptions.cmake:
Add new advanced build option GEANT4_BUILD_MUONIC_ATOMS_IN_USE,
requested by Krzysztof Genser and Makoto Asai. OFF by default,
when ON, adds G4MUTOMS_INUSE to compile definitions. As the
code protected by the symbol only appears in .cc files, do
not export this definition to clinet side build settings.
- Templates/geant4-config.in, Templates/Geant4Config.cmake.in
Record use of GEANT4_BUILD_MUONIC_ATOMS_IN_USE as a feature
and component respectively. Neither affects the build settings,
it's simply a report on whether the option was used or not.
19th October 2017 - Gunter Folger (cmake-V10-03-40)
- Switch to new dataset G4EMLOW 7.2
19th October 2017 - Gunter Folger (cmake-V10-03-39)
- Switch to new dataset G4ABLA 3.1
16th October 2017 - Gabriele Cosmo (cmake-V10-03-38)
- Modules/Geant4OptionalComponents.cmake: add HYPE flag to enable
wrapping of G4Hype in GEANT4_USOLIDS_SHAPES.
Coworks with tag geom-specific-V10-03-21.
26th September 2017 - Gunter Folger (cmake-V10-03-37)
- Switch to new datasets:
- G4ENSDFSTATE2.2
- G4PhotonEvaporation5.1
- G4RadioactiveDecay5.2
13th September 2017 - Ben Morgan (cmake-V10-03-36)
- Modules/Geant4OptionalComponents.cmake: Require system expat version
>= 2.0.1. Identified in Bugzilla #2003. g4tools uses expat functions
only present in 2.0.1 or higher. Though Geant4 supported systems all
meet this requirement, check expat version and error out if version
is < 2.0.1. On error, report information on cause and how to rectify.
11th September 2017 - Ben Morgan (cmake-V10-03-35)
- Modules/G4CMakeMain.cmake: Remove GEANT4_BUILD_EXAMPLES option.
Add GEANT4_INSTALL_EXAMPLES option. Advanced and ON by default,
thia is for use by developers who wish to save time/space by not
installing all the example code.
7th September 2017 - Ben Morgan (cmake-V10-03-34)
- Modules/G4DeveloperAPI_OLD.cmake: Set INSTALL_RPATH on macOS
Requested by Fons Rademackers. Loading Geant4 dylibs in Python
can lead to resolution errors as they cannot locate each other.
Append "@loader_path" to the INSTALL_RPATH for all Geant4 libraries.
This will expand to the directory of the library being loaded, which
will contain the other Geant4 libraries. Append is used to that
users may still supply CMAKE_INSTALL_RPATH at configure time,
and this will be preferred.
5th September 2017 - Gunter Folger (cmake-V10-03-33)
- Modules/Geant4DatasetDefinitions.cmake: switch to G4EMLOW7.1
23rd August 2017 - Gunter Folger (cmake-V10-03-32)
- Modules/Geant4DatasetDefinitions.cmake: switch to G4EMLOW7.0
3rd August 2017 - Ben Morgan (cmake-V10-03-31)
- Create a G4HDF INTERFACE target for uniform access to HDF5 headers
and libraries at build, test and install time. It is not completely
relocatable as the target hardcodes header/library paths. However,
it creates a single point of access so that adding relocation
will require minimal changes, limited to the cmake category.
27th July 2017 - Ivana Hrivnacova (cmake-V10-03-30)
- Removed FindHdf5.cmake as the find module is provided with CMake
27th July 2017 - Ivana Hrivnacova (cmake-V10-03-29)
- Modules/Geant4OptionalComponents.cmake : Add new GEANT4_USE_HDF5
option, OFF by defaults, to allow user to enable Hdf5 support
in analysis library.
18th July 2017 - Andrea Dotti (cmake-V10-03-27,-28)
- Modules/FindStatTest.cmake fix logic to set
STATTEST_FOUND==FALSE if GEANT4_ENABLE_TESTING==FALSE
17th July 2017 - Gabriele Cosmo (cmake-V10-03-26)
- Modules/G4ConfigureGNUMakeHelpers, Modules/Geant4InterfaceOptions.cmake:
corrected Qt setup for GNUmake builds, avoid setting QTLIBS and GLQTLIBS
as already handled by the GNUmake system for Qt4 and Qt5.
11th July 2017 - Gabriele Cosmo (cmake-V10-03-25)
- Modules/Geant4OptionalComponents.cmake: add PARA flag to enable
wrapping of G4Para in GEANT4_USOLIDS_SHAPES.
Coworks with tag geom-csg-V10-03-29.
10th July 2017 - Gabriele Cosmo (cmake-V10-03-24)
- Modules/Geant4OptionalComponents.cmake: add CTUBS flag to enable
wrapping of G4CutTubs in GEANT4_USOLIDS_SHAPES.
Coworks with tag geom-csg-V10-03-28.
12th June 2017 - Ben Morgan (cmake-V10-03-23)
- Remove support for modulefile generation, as not used and
generated files not compatible with relocatability. It's
-197
View File
@@ -1,197 +0,0 @@
# - Finds ROOT instalation
# This module sets up ROOT information
# It defines:
# ROOT_FOUND If the ROOT is found
# ROOT_INCLUDE_DIR PATH to the include directory (deprecated)
# ROOT_INCLUDE_DIRS PATH to the include directory
# ROOT_LIBRARIES Most common libraries
# ROOT_LIBRARY_DIR PATH to the library directory
# ROOT_BIN_DIR PATH to the excutables directory
# ROOT_PYTHONVER Compatible python version string
# First search for ROOTConfig.cmake on the path defined via user setting
# ROOT_DIR
if(EXISTS ${ROOT_DIR}/ROOTConfig.cmake)
include(${ROOT_DIR}/ROOTConfig.cmake)
message(STATUS "Found ROOT CMake configuration in ${ROOT_DIR}")
set(ROOT_INCLUDE_DIR ${ROOT_INCLUDE_DIRS})
set(ROOT_FOUND TRUE)
return()
endif()
find_program(ROOT_CONFIG_EXECUTABLE root-config
PATHS ${ROOTSYS}/bin $ENV{ROOTSYS}/bin)
if(NOT ROOT_CONFIG_EXECUTABLE)
set(ROOT_FOUND FALSE)
else()
set(ROOT_FOUND TRUE)
execute_process(
COMMAND ${ROOT_CONFIG_EXECUTABLE} --prefix
OUTPUT_VARIABLE ROOTSYS
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
COMMAND ${ROOT_CONFIG_EXECUTABLE} --version
OUTPUT_VARIABLE ROOT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
COMMAND ${ROOT_CONFIG_EXECUTABLE} --incdir
OUTPUT_VARIABLE ROOT_INCLUDE_DIRS
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
COMMAND ${ROOT_CONFIG_EXECUTABLE} --libs
OUTPUT_VARIABLE ROOT_LIBRARIES
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
COMMAND ${ROOT_CONFIG_EXECUTABLE} --python-version
OUTPUT_VARIABLE ROOT_PYTHONVER
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
COMMAND ${ROOT_CONFIG_EXECUTABLE} --bindir
OUTPUT_VARIABLE ROOT_BIN_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
#set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -lThread -lMinuit -lHtml -lVMC -lEG -lGeom -lTreePlayer -lXMLIO -lProof)
#set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -lProofPlayer -lMLP -lSpectrum -lEve -lRGL -lGed -lXMLParser -lPhysics)
set(ROOT_LIBRARY_DIR ${ROOTSYS}/lib)
set(ROOT_INCLUDE_DIR ${ROOT_INCLUDE_DIRS})
# Make variables changeble to the advanced user
mark_as_advanced(ROOT_CONFIG_EXECUTABLE)
if(NOT ROOT_FIND_QUIETLY)
message(STATUS "Found ROOT ${ROOT_VERSION} in ${ROOTSYS}")
endif()
endif()
if (NOT ROOT_FOUND)
if (ROOT_FIND_REQUIRED)
message(FATAL_ERROR "ROOT required, but not found")
endif (ROOT_FIND_REQUIRED)
endif()
include(CMakeParseArguments)
find_program(ROOTCINT_EXECUTABLE rootcint PATHS $ENV{ROOTSYS}/bin)
find_program(GENREFLEX_EXECUTABLE genreflex PATHS $ENV{ROOTSYS}/bin)
find_package(GCCXML)
#----------------------------------------------------------------------------
# function ROOT_GENERATE_DICTIONARY( dictionary
# header1 header2 ...
# LINKDEF linkdef1 ...
# OPTIONS opt1...)
function(ROOT_GENERATE_DICTIONARY dictionary)
CMAKE_PARSE_ARGUMENTS(ARG "" "" "LINKDEF;OPTIONS" "" ${ARGN})
#---Get the list of header files-------------------------
set(headerfiles)
foreach(fp ${ARG_UNPARSED_ARGUMENTS})
file(GLOB files ${fp})
if(files)
foreach(f ${files})
if(NOT f MATCHES LinkDef)
set(headerfiles ${headerfiles} ${f})
endif()
endforeach()
else()
set(headerfiles ${headerfiles} ${fp})
endif()
endforeach()
#---Get the list of include directories------------------
# Filter out UNIX system directory to workaround bug in
# rootcint (info from Andrea Dotti, and info from post:
# http://root.cern.ch/phpBB3/viewtopic.php?f=3&t=15086
get_directory_property(incdirs INCLUDE_DIRECTORIES)
set(includedirs)
foreach( d ${incdirs})
if(NOT ${d} STREQUAL "/usr/include")
set(includedirs ${includedirs} -I${d})
endif()
endforeach()
#---Get LinkDef.h file------------------------------------
set(linkdefs)
foreach( f ${ARG_LINKDEF})
if( IS_ABSOLUTE ${f})
set(linkdefs ${linkdefs} ${f})
else()
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/inc/${f})
set(linkdefs ${linkdefs} ${CMAKE_CURRENT_SOURCE_DIR}/inc/${f})
else()
set(linkdefs ${linkdefs} ${CMAKE_CURRENT_SOURCE_DIR}/${f})
endif()
endif()
endforeach()
#---call rootcint------------------------------------------
add_custom_command(OUTPUT ${dictionary}.cxx ${dictionary}.h
COMMAND ${ROOTCINT_EXECUTABLE} -cint -f ${dictionary}.cxx
-c ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs}
DEPENDS ${headerfiles} ${linkdefs})
endfunction()
#----------------------------------------------------------------------------
# function REFLEX_GENERATE_DICTIONARY(dictionary
# header1 header2 ...
# SELECTION selectionfile ...
# OPTIONS opt1...)
function(REFLEX_GENERATE_DICTIONARY dictionary)
CMAKE_PARSE_ARGUMENTS(ARG "" "" "SELECTION;OPTIONS" "" ${ARGN})
#---Get the list of header files-------------------------
set(headerfiles)
foreach(fp ${ARG_UNPARSED_ARGUMENTS})
file(GLOB files ${fp})
if(files)
foreach(f ${files})
set(headerfiles ${headerfiles} ${f})
endforeach()
else()
set(headerfiles ${headerfiles} ${fp})
endif()
endforeach()
#---Get Selection file------------------------------------
if(IS_ABSOLUTE ${ARG_SELECTION})
set(selectionfile ${ARG_SELECTION})
else()
set(selectionfile ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_SELECTION})
endif()
#---Get the list of include directories------------------
get_directory_property(incdirs INCLUDE_DIRECTORIES)
set(includedirs)
foreach( d ${incdirs})
set(includedirs ${includedirs} -I${d})
endforeach()
#---Get preprocessor definitions--------------------------
get_directory_property(defs COMPILE_DEFINITIONS)
foreach( d ${defs})
set(definitions ${definitions} -D${d})
endforeach()
#---Names and others---------------------------------------
set(gensrcdict ${dictionary}.cpp)
if(MSVC)
set(gccxmlopts "--gccxmlopt=\"--gccxml-compiler cl\"")
elseif(APPLE)
set(gccxmlopts "--gccxmlopt=--gccxml-compiler g++ ")
else()
set(gccxmlopts)
endif()
#set(rootmapname ${dictionary}Dict.rootmap)
#set(rootmapopts --rootmap=${rootmapname} --rootmap-lib=${libprefix}${dictionary}Dict)
#---Check GCCXML and get path-----------------------------
if(GCCXML)
get_filename_component(gccxmlpath ${GCCXML} PATH)
else()
message(WARNING "GCCXML not found. Install and setup your environment to find 'gccxml' executable")
endif()
#---Actual command----------------------------------------
add_custom_command(OUTPUT ${gensrcdict} ${rootmapname}
COMMAND ${GENREFLEX_EXECUTABLE} ${headerfiles} -o ${gensrcdict} ${gccxmlopts} ${rootmapopts} --select=${selectionfile}
--gccxmlpath=${gccxmlpath} ${ARG_OPTIONS} ${includedirs} ${definitions}
DEPENDS ${headerfiles} ${selectionfile})
endfunction()
+70 -64
View File
@@ -5,8 +5,8 @@
#
# STATTEST_FOUND - Application found
# STATTEST_APP - Application
# STATTEST_CMD - Command line to run the application
# STATTEST_ADD_TEST - Helper function to define a ctest using
# STATTEST_CMD - Command line to run the application
# STATTEST_ADD_TEST - Helper function to define a ctest using
# StatTest (Only if we are using for G4 testing)
#
# Variables used by this module, which can change the default behaviour
@@ -14,6 +14,13 @@
#
# STATTEST_ROOT_DIR Root directory to StatTest package
#
if(NOT GEANT4_ENABLE_TESTING)
#No meaning for this if not testing
SET(STATTEST_FOUND FALSE)
return()
endif()
#Search application
#Note that the second suggested path is G4 specific...
find_path(STATTEST_APP_DIR
@@ -23,7 +30,7 @@ find_path(STATTEST_APP_DIR
)
#If we didn't find it there, fall back to some standard search paths
find_path(STATTEST_APP_DIR NAMES StatTest/StatTestVersion.py)
find_path(STATTEST_APP_DIR NAMES StatTestVersion.py)
####
#### Run-time dependencies...
@@ -32,102 +39,101 @@ find_path(STATTEST_APP_DIR NAMES StatTest/StatTestVersion.py)
find_package(ROOT QUIET)
if(NOT ROOT_FOUND)
MESSAGE(STATUS "StatTest: ROOT package not found --> StatTest package disabled")
set(STATTEST_FOUND FALSE)
set(_root_isok FALSE)
else()
set(_root_isok TRUE)
# - Check if python interpreter is correct version
# (the one compatible with root)
find_package(PythonInterp ${ROOT_PYTHONVER} QUIET)
if(NOT PYTHONINTERP_FOUND)
MESSAGE(STATUS "StatTest: Python interpreter of version ${ROOT_PYTHONVER} not found --> StatTest package disabled")
set(STATTEST_FOUND FALSE)
set(_python_isok FALSE)
else()
set(STATTEST_FOUND TRUE)
set(_python_isok TRUE)
endif()
endif()
# - Check if python interpreter is correct version
# (the one compatible with root)
find_package(PythonInterp ${ROOT_PYTHONVER} QUIET)
if(NOT PYTHONINTERP_FOUND)
MESSAGE(STATUS "StatTest: Python interpreter of version ${ROOT_PYTHONVER} not found --> StatTest package disabled")
set(_python_isok FALSE)
else()
set(_python_isok TRUE)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
StatTest
DEFAULT_MSG
STATTEST_APP_DIR
_root_isok
_python_isok
StatTest
DEFAULT_MSG
STATTEST_APP_DIR
_root_isok
_python_isok
)
if(STATTEST_FOUND)
set(STATTEST_APP ${STATTEST_APP_DIR}/runtests.py)
set(STATTEST_CMD ${PYTHON_EXECUTABLE} ${STATTEST_APP})
if(GEANT4_ENABLE_TESTING)
# Let's create a function that helps in building tests for
# regression testing
# function STATTEST_ADD_TEST(<name>
# G4TEST testname
# CONFIG conffile
# INPUT inputfile
# [DEBUG]
# [TEXT] #Input is text file instead of root
# [REFERENCE reference]
# [LABELS label1 label2 ...]
# [IMG filename])
function(STATTEST_ADD_TEST stattest)
CMAKE_PARSE_ARGUMENTS(ARG "DEBUG;TEXT"
# Let's create a function that helps in building tests for
# regression testing
# function STATTEST_ADD_TEST(<name>
# G4TEST testname
# CONFIG conffile
# INPUT inputfile
# [DEBUG]
# [TEXT] #Input is text file instead of root
# [REFERENCE reference]
# [LABELS label1 label2 ...]
# [IMG filename])
function(STATTEST_ADD_TEST stattest)
CMAKE_PARSE_ARGUMENTS(ARG "DEBUG;TEXT"
"CONFIG;INPUT;REFERENCE;G4TEST;IMG"
"LABELS" ${ARGN}
)
#check mandatory arguments
list(LENGTH ARG_CONFIG _len)
if(_len LESS 1)
)
#check mandatory arguments
list(LENGTH ARG_CONFIG _len)
if(_len LESS 1)
message(FATAL_ERROR "STATTEST_ADD_TEST: conffile is mandatory")
endif()
endif()
list(LENGTH ARG_INPUT _len)
if(_len LESS 1)
list(LENGTH ARG_INPUT _len)
if(_len LESS 1)
message(FATAL_ERROR "STATTEST_ADD_TEST: inputfile is mandatory")
endif()
endif()
list(LENGTH ARG_G4TEST _len)
if(_len LESS 1)
list(LENGTH ARG_G4TEST _len)
if(_len LESS 1)
message(FATAL_ERROR "STATTEST_ADD_TEST: testname is mandatory")
endif()
endif()
#Set basic command line
if(ARG_IMG)
#Set basic command line
if(ARG_IMG)
set(_command ${STATTEST_CMD} -g ${ARG_IMG})
else()
else()
set(_command ${STATTEST_CMD})
endif()
endif()
if(ARG_TEXT)
set(_command ${_command} "-T")
endif()
if(ARG_TEXT)
set(_command ${_command} "-T")
endif()
#Mandatory parameters
set(_command ${_command} ${ARG_CONFIG} ${ARG_INPUT})
if(ARG_REFERENCE)
#Mandatory parameters
set(_command ${_command} ${ARG_CONFIG} ${ARG_INPUT})
if(ARG_REFERENCE)
set(_command ${_command} ${ARG_REFERENCE})
endif()
endif()
if(ARG_LABELS)
if(ARG_LABELS)
set(_labels ${ARG_LABELS})
else()
else()
set(_labels "")
endif()
endif()
include(Geant4CTest)
include(Geant4CTest)
#Now build G4 test
GEANT4_ADD_TEST(${stattest}
#Now build G4 test
GEANT4_ADD_TEST(${stattest}
COMMAND ${_command}
DEPENDS ${ARG_G4TEST}
LABELS ${_labels}
)
endfunction()
endif(GEANT4_ENABLE_TESTING)
endfunction()
endif(STATTEST_FOUND)
mark_as_advanced(STATTEST_APP_DIR)
+20 -1
View File
@@ -155,6 +155,8 @@ enum_option(GEANT4_BUILD_CXXSTD
string(REGEX REPLACE "^c\\+\\+" "" GEANT4_BUILD_CXXSTD "${GEANT4_BUILD_CXXSTD}")
mark_as_advanced(GEANT4_BUILD_CXXSTD)
geant4_add_feature(GEANT4_BUILD_CXXSTD "Compiling against C++ Standard '${GEANT4_BUILD_CXXSTD}'")
# Require at least C++11 with no extensions and the following features
set(CMAKE_CXX_EXTENSIONS OFF)
@@ -306,6 +308,24 @@ if(GEANT4_BUILD_VERBOSE_CODE)
add_definitions(-DG4VERBOSE)
endif()
#.rst:
# - ``GEANT4_BUILD_MUONIC_ATOMS_IN_USE`` (Default: OFF)
#
# - Switched off by default to improve performance when not using
# Muonic Atom code. It should be switched on if the project requires
# support for Muonic Atoms.
# Mark as advanced because most users should not need to worry about it
#
option(GEANT4_BUILD_MUONIC_ATOMS_IN_USE
"Enable turning on some if statements in track and event code. Switch on if using new Muonic Atom code."
OFF)
mark_as_advanced(GEANT4_BUILD_MUONIC_ATOMS_IN_USE)
# TODO: Migrate this to header
if(GEANT4_BUILD_MUONIC_ATOMS_IN_USE)
add_definitions(-DG4MUATOMS_INUSE)
endif()
#.rst:
# - ``GEANT4_BUILD_MSVC_MP`` (Windows only, Default: OFF)
#
@@ -324,7 +344,6 @@ if(MSVC)
endif()
#-----------------------------------------------------------------------
#.rst:
# Library Mode and Link Options
+11 -16
View File
@@ -114,25 +114,20 @@ endif()
#-----------------------------------------------------------------------
# - Examples build/install
# NB: Build of examples is a *testing* proceedure. It is *not* intended
# that examples be built and installed as part of a full Geant4 install.
option(GEANT4_BUILD_EXAMPLES "Build all the examples of the project" OFF)
GEANT4_ADD_FEATURE(GEANT4_BUILD_EXAMPLES "Build all the examples of the project")
mark_as_advanced(GEANT4_BUILD_EXAMPLES)
# ON by default for end users. Developers can switch this OFF if they
# need to save time/space
option(GEANT4_INSTALL_EXAMPLES "Install code and documentation for Geant4 examples" ON)
mark_as_advanced(GEANT4_INSTALL_EXAMPLES)
if(GEANT4_BUILD_EXAMPLES)
set(Geant4_DIR ${CMAKE_BINARY_DIR} CACHE PATH "Current build directory")
add_subdirectory(examples)
if(GEANT4_INSTALL_EXAMPLES)
install(DIRECTORY examples
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/Geant4-${Geant4_VERSION}
COMPONENT Examples
PATTERN "CVS" EXCLUDE
PATTERN ".svn" EXCLUDE
)
endif()
# - Install example code to datarootdir
install(DIRECTORY examples
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/Geant4-${Geant4_VERSION}
COMPONENT Examples
PATTERN "CVS" EXCLUDE
PATTERN ".svn" EXCLUDE
)
#-----------------------------------------------------------------------
# - CPack-aging
include(Geant4CPackBase)
+4 -7
View File
@@ -160,12 +160,9 @@ set(CMAKE_MODULE_PATH \${CMAKE_MODULE_PATH} ${CMAKE_MODULE_PATH})
# Geant4 data used in build tree
geant4_export_datasets(BUILD GEANT4_DATASET_DESCRIPTIONS)
# Export targets from the build tree. We rely on the GEANT4_EXPORTED_TARGETS
# global property to list these for us.
#
get_property(__geant4_exported_targets GLOBAL PROPERTY GEANT4_EXPORTED_TARGETS)
export(TARGETS ${__geant4_exported_targets}
# Export targets in the Geant4LibraryDepends export set from the build tree
# No longer need GEANT4_EXPORTED_TARGETS global property to list these for us.
export(EXPORT Geant4LibraryDepends
FILE ${PROJECT_BINARY_DIR}/Geant4LibraryDepends.cmake
)
@@ -190,7 +187,7 @@ configure_file(
COPYONLY
)
foreach(_mod AIDA HepMC Pythia6 ROOT StatTest TBB)
foreach(_mod AIDA HepMC Pythia6 StatTest TBB)
configure_file(
${PROJECT_SOURCE_DIR}/cmake/Modules/Find${_mod}.cmake
${PROJECT_BINARY_DIR}/Modules/Find${_mod}.cmake
@@ -531,7 +531,7 @@ macro(_g4tc_configure_tc_variables SHELL_FAMILY SCRIPT_NAME)
# Derive base dir from include path, NB, not 100% robust as Geant4GNUmake makes
# significant assumptions about how USolids was installed
get_filename_component(_USOLIDS_INCLUDE_DIR "${USOLIDS_INCLUDE_DIRS}" REALPATH)
get_filename_component(_USOLIDS_BASE_DIR "${_USOLIDS_INCLUDE_DIR}" DIRECTORY)
get_filename_component(_USOLIDS_BASE_DIR "${VECGEOM_INSTALL_DIR}" REALPATH)
_g4tc_setenv_command(GEANT4_TC_USOLIDS_BASE_DIR ${SHELL_FAMILY} USOLIDS_BASE_DIR "${_USOLIDS_BASE_DIR}")
if(GEANT4_USE_ALL_USOLIDS)
@@ -562,14 +562,6 @@ macro(_g4tc_configure_tc_variables SHELL_FAMILY SCRIPT_NAME)
if(GEANT4_USE_QT)
_g4tc_setenv_command(GEANT4_TC_QTHOME ${SHELL_FAMILY} QTHOME ${G4QTHOME})
_g4tc_setenv_command(GEANT4_TC_QTLIBPATH ${SHELL_FAMILY} QTLIBPATH ${G4QTLIBPATH})
if(QT4_FOUND)
set(GEANT4_TC_QTLIBS "#Geant4Make automatically handles QTLIBS for Qt4")
set(GEANT4_TC_GLQTLIBS "#Geant4Make automatically handles GLQTLIBS for Qt4")
else()
_g4tc_setenv_command(GEANT4_TC_QTLIBS ${SHELL_FAMILY} QTLIBS "\"-L${G4QTLIBPATH} ${G4QTLIBLIST}\"")
_g4tc_setenv_command(GEANT4_TC_GLQTLIBS ${SHELL_FAMILY} GLQTLIBS "\"-L${G4QTLIBPATH} ${G4GLQTLIBLIST}\"")
endif()
_g4tc_setenv_command(GEANT4_TC_G4UI_USE_QT ${SHELL_FAMILY} G4UI_USE_QT 1)
_g4tc_setenv_command(GEANT4_TC_G4VIS_USE_OPENGLQT ${SHELL_FAMILY} G4VIS_USE_OPENGLQT 1)
@@ -123,6 +123,13 @@ if(NOT GEANT4_BUILD_GRANULAR_LIBS AND UNIX)
set(G4_BUILTWITH_MULTITHREADING "no")
endif()
# - Muonic Atom support
if(GEANT4_BUILD_MUONIC_ATOMS_IN_USE)
set(G4_BUILTWITH_MUONIC_ATOMS "yes")
else()
set(G4_BUILTWITH_MUONIC_ATOMS "no")
endif()
# - CLHEP
if(GEANT4_USE_SYSTEM_CLHEP)
set(G4_BUILTWITH_CLHEP "no")
@@ -204,6 +211,13 @@ if(NOT GEANT4_BUILD_GRANULAR_LIBS AND UNIX)
set(G4_BUILTWITH_FREETYPE "no")
endif()
# - Freetype
if(GEANT4_USE_HDF5)
set(G4_BUILTWITH_HDF5 "yes")
else()
set(G4_BUILTWITH_HDF5 "no")
endif()
# - Qt
if(GEANT4_USE_QT)
set(G4_BUILTWITH_QT "yes")
+8 -3
View File
@@ -307,16 +307,21 @@ macro(geant4_library_target)
set_target_properties(${G4LIBTARGET_NAME}
PROPERTIES CLEAN_DIRECT_OUTPUT 1)
# Always use '@rpath' in install names of libraries. This is the
# most flexible mechanism for
# Use '@rpath' in install names of libraries on macOS to provide relocatibility
set_target_properties(${G4LIBTARGET_NAME}
PROPERTIES MACOSX_RPATH 1
)
# Add '@loader_path' to INSTALL_RPATH on macOS so that Geant4
# libraries self-locate each other whilst remaining relocatable
if(APPLE)
set_property(TARGET ${G4LIBTARGET_NAME}
APPEND PROPERTY INSTALL_RPATH "@loader_path"
)
endif()
# Install the library - note the use of RUNTIME, LIBRARY and ARCHIVE
# this helps with later DLL builds.
# Export to standard depends file for later install
# NEEDS WORK TO REMOVE HARDCODED LIB/BIN DIR
install(TARGETS ${G4LIBTARGET_NAME}
EXPORT Geant4LibraryDepends
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Runtime
+10 -10
View File
@@ -18,31 +18,31 @@ geant4_add_dataset(
# - Low energy electromagnetics
geant4_add_dataset(
NAME G4EMLOW
VERSION 6.54
VERSION 7.3
FILENAME G4EMLOW
EXTENSION tar.gz
ENVVAR G4LEDATA
MD5SUM 9d9b5207861fbed0aebddb7f89384151
MD5SUM 0446e7f53af993343956e5d3900157b8
)
# - Photon evaporation
geant4_add_dataset(
NAME PhotonEvaporation
VERSION 5.0
VERSION 5.2
FILENAME G4PhotonEvaporation
EXTENSION tar.gz
ENVVAR G4LEVELGAMMADATA
MD5SUM d796cc6d8c65d010f8f0e1641408b89d
MD5SUM 37c5dea9614a07885050350d071a6973
)
# - Radioisotopes
geant4_add_dataset(
NAME RadioactiveDecay
VERSION 5.1.1
VERSION 5.2
FILENAME G4RadioactiveDecay
EXTENSION tar.gz
ENVVAR G4RADIOACTIVEDATA
MD5SUM d298454d2217359b7b3d1050c9ac34fc
MD5SUM e035ed77e12be3a69c2d32806d1b5cde
)
# - Neutron XS
@@ -88,20 +88,20 @@ geant4_add_dataset(
# - ABLA
geant4_add_dataset(
NAME G4ABLA
VERSION 3.0
VERSION 3.1
FILENAME G4ABLA
EXTENSION tar.gz
ENVVAR G4ABLADATA
MD5SUM d7049166ef74a592cb97df0ed4b757bd
MD5SUM 180f1f5d937733b207f8d5677f76296e
)
# - ENSDFSTATE
geant4_add_dataset(
NAME G4ENSDFSTATE
VERSION 2.1
VERSION 2.2
FILENAME G4ENSDFSTATE
EXTENSION tar.gz
ENVVAR G4ENSDFSTATEDATA
MD5SUM 95d970b97885aeafaa8909f29997b0df
MD5SUM 495439cf600225753d7bd99825e5c6bc
)
@@ -106,8 +106,6 @@ if(GEANT4_USE_QT)
set(QT_USE_FILE "${PROJECT_BINARY_DIR}/Geant4UseQt5.cmake")
configure_file("${Qt5_USE_FILE_IN}" "${QT_USE_FILE}" @ONLY)
get_target_property(QT_QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} IMPORTED_LOCATION)
set(G4QTLIBLIST "-lQt5PrintSupport -lQt5Widgets -lQt5Gui -lQt5Core")
set(G4GLQTLIBLIST "-lQt5OpenGL ${G4QTLIBLIST}")
else()
unset(Qt5Core_DIR CACHE)
unset(Qt5Gui_DIR CACHE)
+76 -14
View File
@@ -14,8 +14,8 @@
# ZLIB - Control use of internal G4zlib, or locate external ZLIB
# GDML - Requires external XercesC
# G3TOG4 - UNIX only
# USOLIDS - Allow use of USolids classes in geometry, and must find
# external USolids install
# USOLIDS - Allow use of VecGeom classes in geometry, and must find
# external VecGeom install
# FREETYPE - For analysis module, find external FreeType install
#-----------------------------------------------------------------------
@@ -113,8 +113,24 @@ else()
option(GEANT4_USE_SYSTEM_EXPAT "Use system Expat library" ON)
if(GEANT4_USE_SYSTEM_EXPAT)
# If system package requested, make damn sure we find it
# If system package requested, find it or fail
find_package(EXPAT REQUIRED)
# Check version requirement externally to provide information
# on using internal expat.
if(${EXPAT_VERSION_STRING} VERSION_LESS "2.0.1")
set(__badexpat_include_dir ${EXPAT_INCLUDE_DIR})
set(__badexpat_library ${EXPAT_LIBRARY})
unset(EXPAT_FOUND)
unset(EXPAT_INCLUDE_DIR CACHE)
unset(EXPAT_LIBRARY CACHE)
message(FATAL_ERROR
"Detected system expat header and library:
EXPAT_INCLUDE_DIR = ${__badexpat_include_dir}
EXPAT_LIBRARY = ${__badexpat_library}
are of insufficient version '${EXPAT_VERSION_STRING}' (Required >= 2.0.1)
Set the above CMake variables to point to an expat install of the required version, or set GEANT4_USE_SYSTEM_EXPAT to OFF to use Geant4's packaged version.")
endif()
else()
set(EXPAT_FOUND TRUE)
set(GEANT4_USE_BUILTIN_EXPAT TRUE)
@@ -191,18 +207,21 @@ if(UNIX)
endif()
#-----------------------------------------------------------------------
# Optional support for USolids - Requires USolids package
# Optional support for VecGeom - Requires VecGeom package
# GEANT4_USE_USOLIDS is a list argument which must take values:
# - Empty/CMake boolean false : DEFAULT, do not replace G4 solids with USolids
# - ALL/CMake boolean true : Replace all G4 solids with USolids
# - List : Replace listed G4 solids with Usolids equivalents. Valid elements are
# - Empty/CMake boolean false : DEFAULT, do not replace G4 solids with VecGeom
# - ALL/CMake boolean true : Replace all G4 solids with VecGeom
# - List : Replace listed G4 solids with VecGeom equivalents. Valid elements are
set(GEANT4_USOLIDS_SHAPES
BOX
CONS
CTUBS
EXTRUDEDSOLID
HYPE
GENERICPOLYCONE
GENERICTRAP
ORB
PARA
PARABOLOID
POLYCONE
POLYHEDRA
@@ -214,7 +233,7 @@ set(GEANT4_USOLIDS_SHAPES
TUBS
)
set(GEANT4_USE_USOLIDS OFF CACHE STRING "EXPERIMENTAL: List Geant4 solids to replace with USolids equivalents (ALL;${GEANT4_USOLIDS_SHAPES})")
set(GEANT4_USE_USOLIDS OFF CACHE STRING "EXPERIMENTAL: List Geant4 solids to replace with VecGeom equivalents (ALL;${GEANT4_USOLIDS_SHAPES})")
mark_as_advanced(GEANT4_USE_USOLIDS)
# - Must be a CMake list - no real way to enforce this
@@ -242,28 +261,28 @@ if(NOT GEANT4_USE_ALL_USOLIDS AND GEANT4_USE_USOLIDS)
endif()
# - G4USolids setup
# - Geant4 USolids/VecGom setup
if(GEANT4_USE_ALL_USOLIDS OR GEANT4_USE_PARTIAL_USOLIDS)
find_package(USolids REQUIRED)
find_package(VecGeom REQUIRED)
if(GEANT4_USE_ALL_USOLIDS)
set(GEANT4_USOLIDS_COMPILE_DEFINITIONS "-DG4GEOM_USE_USOLIDS")
GEANT4_ADD_FEATURE(GEANT4_USE_USOLIDS "Replacing all Geant4 solids with USolids equivalents (EXPERIMENTAL)")
GEANT4_ADD_FEATURE(GEANT4_USE_USOLIDS "Replacing Geant4 solids with all VecGeom equivalents (EXPERIMENTAL)")
else()
set(GEANT4_USOLIDS_COMPILE_DEFINITIONS "-DG4GEOM_USE_PARTIAL_USOLIDS")
foreach(__g4_usolid_shape ${GEANT4_USE_PARTIAL_USOLIDS_SHAPE_LIST})
list(APPEND GEANT4_USOLIDS_COMPILE_DEFINITIONS "-DG4GEOM_USE_U${__g4_usolid_shape}")
endforeach()
GEANT4_ADD_FEATURE(GEANT4_USE_USOLIDS "Replacing Geant4 solids with USolids equivalents for ${GEANT4_USE_PARTIAL_USOLIDS_SHAPE_LIST} (EXPERIMENTAL)")
GEANT4_ADD_FEATURE(GEANT4_USE_USOLIDS "Replacing Geant4 solids with VecGeom equivalents for ${GEANT4_USE_PARTIAL_USOLIDS_SHAPE_LIST} (EXPERIMENTAL)")
endif()
list (APPEND GEANT4_USOLIDS_COMPILE_DEFINITIONS ${VECGEOM_DEFINITIONS})
# Combined definitions
add_definitions(${GEANT4_USOLIDS_COMPILE_DEFINITIONS})
# Add USolids inc dirs here - can be removed once USolids supports
# Add VecGeom inc dirs here - can be removed once VecGeom supports
# INTERFACE_INCLUDE_DIRECTORIES
include_directories(${USOLIDS_INCLUDE_DIRS} ${VECGEOM_EXTERNAL_INCLUDES})
include_directories(${VECGEOM_INCLUDE_DIR} ${VECGEOM_EXTERNAL_INCLUDES})
endif()
@@ -279,3 +298,46 @@ endif()
GEANT4_ADD_FEATURE(GEANT4_USE_FREETYPE "Building Geant4 analysis library with Freetype support")
#-----------------------------------------------------------------------
# Optional support for HDF5
# - Requires external HDF5 1.8 or higher install
# - Install must be MT safe if building Geant4 in MT mode
#
option(GEANT4_USE_HDF5 "Build Geant4 analysis library with HDF5 support" OFF)
mark_as_advanced(GEANT4_USE_HDF5)
if(GEANT4_USE_HDF5)
find_package(HDF5 1.8 REQUIRED)
# If we're in MT mode, found HDF5 must also support MT
if(GEANT4_BUILD_MULTITHREADED)
include(CheckCXXSymbolExists)
set(CMAKE_REQUIRED_INCLUDES "${HDF5_INCLUDE_DIRS}")
check_cxx_symbol_exists(H5_HAVE_THREADSAFE "H5pubconf.h" GEANT4_HAVE_H5_HAVE_THREADSAFE)
unset(CMAKE_REQUIRED_INCLUDES)
if(NOT GEANT4_HAVE_H5_HAVE_THREADSAFE)
message(FATAL_ERROR
"Found an install of HDF5, but it was not built with support for thread safety. "
"Either build Geant4 in single threaded mode, or use/reinstall HDF5 with "
"thread safety enabled. See HDF5's install guides, available from https://support.hdfgroup.org/HDF5/release/, for instructions on this.\n"
)
endif()
endif()
# As FindHDF5 does not yet supply imported targets, we
# create an internal INTERFACE target to wrap these.
# This still hard-codes include/library paths, but limits it
# to one place. Later, we'll create proper imported targets
# with re-finds but for now this is the best minimally invasive proceedure
add_library(G4HDF5 INTERFACE)
target_include_directories(G4HDF5 INTERFACE ${HDF5_INCLUDE_DIRS})
target_link_libraries(G4HDF5 INTERFACE ${HDF5_LIBRARIES})
install(TARGETS G4HDF5 EXPORT Geant4LibraryDepends)
# Override HDF5_LIBRARIES for back compatibility
set(HDF5_LIBRARIES G4HDF5)
endif()
GEANT4_ADD_FEATURE(GEANT4_USE_HDF5 "Building Geant4 analysis library with HDF5 support")
+13
View File
@@ -70,6 +70,7 @@
# gdml (GDML support)
# g3tog4 (Geant3 geometry call list reader library)
# freetype (G4analysis library has freetype support)
# hdf5 (G4analysis library has HDF5 support)
#
# ui_tcsh (TCsh Style Application Command Line Interface)
# ui_win32 (WIN32 Style Application Command Line Interface)
@@ -306,6 +307,12 @@ if(Geant4_multithreaded_FOUND)
set(Geant4_TLS_MODEL "@GEANT4_BUILD_TLS_MODEL@")
endif()
# - Muonic Atom support
set(Geant4_muonic_atoms_FOUND @GEANT4_BUILD_MUONIC_ATOMS_IN_USE@)
if(Geant4_muonic_atoms_FOUND)
list(REMOVE_ITEM Geant4_FIND_COMPONENTS muonic_atoms)
endif()
# - GDML
set(Geant4_gdml_FOUND @GEANT4_USE_GDML@)
if(Geant4_gdml_FOUND)
@@ -333,6 +340,12 @@ if(Geant4_freetype_FOUND)
list(REMOVE_ITEM Geant4_FIND_COMPONENTS freetype)
endif()
# - HDF5
set(Geant4_hdf5_FOUND @GEANT4_USE_HDF5@)
if(Geant4_hdf5_FOUND)
list(REMOVE_ITEM Geant4_FIND_COMPONENTS hdf5)
endif()
# - UI : TCSH
set(Geant4_ui_tcsh_FOUND @UNIX@)
if(Geant4_ui_tcsh_FOUND)
+11
View File
@@ -124,6 +124,10 @@ libs="-lG4interfaces \
geant4_uses_opengl="no"
geant4_uses_x11="no"
# - Muonic Atom support
have_muonic_atoms="@G4_BUILTWITH_MUONIC_ATOMS@"
feature_list="${feature_list} muonic_atoms[${have_muonic_atoms}]"
# - CLHEP
have_clhep="@G4_BUILTWITH_CLHEP@"
feature_list="${feature_list} clhep[${have_clhep}]"
@@ -171,6 +175,10 @@ fi
have_freetype="@G4_BUILTWITH_FREETYPE@"
feature_list="${feature_list} freetype[${have_freetype}]"
# - HDF5
have_hdf5="@G4_BUILTWITH_HDF5@"
feature_list="${feature_list} hdf5[${have_hdf5}]"
# - G3toG4
have_g3tog4="@G4_BUILTWITH_G3TOG4@"
feature_list="${feature_list} g3tog4[${have_g3tog4}]"
@@ -564,6 +572,9 @@ while test $# -gt 0 ; do
freetype)
echo ${have_freetype}
;;
hdf5)
echo ${have_hdf5}
;;
g3tog4)
echo ${have_g3tog4}
;;