Warning, /geant4/cmake/Modules/G4InterfaceOptions.cmake is written in an unsupported language. File is not indexed.
0001 # - Configure options for Geant4 UI/Vis requiring Third Party Libraries
0002 # All core Interfaces not requiring third party support are built
0003 # automatically with platform differences taken into account.
0004 # These are:
0005 #
0006 # UI Category : Always built on supported platforms
0007 # G4UIterminal : UNIX, WIN32
0008 # + - G4UItcsh : UNIX only.
0009 # + - G4UIcsh : UNIX, WIN32
0010 # G4UIWin32 : WIN32
0011 #
0012 # UI category : Built on supported platforms when Third Party
0013 # library(libraries) available
0014 # G4UIQt : UNIX, WIN32 (Requires : Qt5)
0015 # G4UIXm : UNIX
0016 #
0017 # Vis Category: Always built on supported platforms
0018 # DAWNFILE : UNIX, Win32
0019 # ...
0020 # gMocren
0021 # HepRep
0022 # RayTracer
0023 # Tree
0024 # VRML
0025 #
0026 # Vis Category : Built on supported platforms when Third Party
0027 # library(libraries) available
0028 # OpenGL : UNIX, WIN32
0029 # OpenInventor : UNIX WIN32
0030 #
0031 # Rather than separate the UI and visualization options, we simply ask if
0032 # the user wants to build support for a particular tool, e.g. Qt.
0033 #
0034 # Specific UI/Vis options are also handled here.
0035 #
0036
0037 #-----------------------------------------------------------------------
0038 # Select options first because these are interdependent
0039 #
0040 # - Coin3D/So{XT,Win,Qt}
0041 option(GEANT4_USE_INVENTOR "Build Geant4 OpenInventor Xt/Win Visualization Driver" OFF)
0042 geant4_add_feature(GEANT4_USE_INVENTOR "Build OpenInventor Xt/Win Driver")
0043
0044 option(GEANT4_USE_INVENTOR_QT "Build Geant4 OpenInventor Qt Visualization Driver" OFF)
0045 geant4_add_feature(GEANT4_USE_INVENTOR_QT "Build OpenInventor Qt Driver")
0046
0047 # GEANT4_USE_INVENTOR is a dual-purpose variable - it marks use of Xt/Win driver for
0048 # user, and marks enablement of G4OpenInventor internally. Check that user-set options
0049 # are consistent before setting *internal* value
0050 if(GEANT4_USE_INVENTOR AND GEANT4_USE_INVENTOR_QT)
0051 message(FATAL_ERROR "Only one of GEANT4_USE_INVENTOR and GEANT4_USE_INVENTOR_QT can be set ON, but both are ON.")
0052 endif()
0053
0054 # User settings o.k., so mark that we're enabling G4OpenInventor
0055 if(GEANT4_USE_INVENTOR_QT)
0056 set(GEANT4_USE_INVENTOR ON)
0057 endif()
0058
0059 # - Qt
0060 # May be required by Coin driver
0061 # Selection also enables ToolsSG driver
0062 option(GEANT4_USE_QT "Build Geant4 with Qt support" OFF)
0063 if(GEANT4_USE_INVENTOR_QT AND NOT GEANT4_USE_QT)
0064 set(GEANT4_USE_QT ON CACHE BOOL "Build Geant4 with Qt support" FORCE)
0065 message(STATUS "Forcing GEANT4_USE_QT to ON, required by selection of GEANT4_USE_INVENTOR_QT as ON")
0066 endif()
0067
0068 # We default to Qt6 if available, but allow the user to select Qt5
0069 set(GEANT4_USE_QT_QT6 ON)
0070
0071 cmake_dependent_option(GEANT4_USE_QT_QT5 "Require Qt5 when building Qt support" OFF "GEANT4_USE_QT" OFF)
0072 if(GEANT4_USE_QT_QT5)
0073 set(GEANT4_USE_QT_QT6 OFF)
0074 endif()
0075
0076 # - Vtk
0077 option(GEANT4_USE_VTK "Build Geant4 with VTK visualisation" OFF)
0078 if(GEANT4_USE_VTK)
0079 find_package(VTK 9 REQUIRED COMPONENTS
0080 CommonColor
0081 InteractionStyle
0082 IOExport
0083 IOGeometry
0084 IOLegacy
0085 IOPLY
0086 GUISupportQt
0087 RenderingVolumeOpenGL2
0088 )
0089 geant4_save_package_variables(VTK VTK_DIR)
0090 endif()
0091 geant4_add_feature(GEANT4_USE_VTK "Using VTK for visualisation")
0092
0093 # - Unix only
0094 if(UNIX)
0095 # - Motif UI/Vis
0096 # May be required by Coin Vis driver
0097 # Selection also enables ToolsSG driver Xt backend
0098 option(GEANT4_USE_XM "Build Geant4 with Motif (X11) support" OFF)
0099 if((GEANT4_USE_INVENTOR AND NOT GEANT4_USE_INVENTOR_QT)
0100 AND NOT GEANT4_USE_XM)
0101 set(GEANT4_USE_XM ON CACHE BOOL "Build Geant4 with Motif (X11) support" FORCE)
0102 message(STATUS "Forcing GEANT4_USE_XM to ON, required by Inventor driver")
0103 endif()
0104 geant4_add_feature(GEANT4_USE_XM "Build Geant4 with Xm Support")
0105
0106 # - OpenGL/X11 Vis Driver
0107 # Selection also enables ToolsSG driver X11 backend
0108 option(GEANT4_USE_OPENGL_X11 "Build Geant4 OpenGL driver with X11 support" OFF)
0109 geant4_add_feature(GEANT4_USE_OPENGL_X11 "Build Geant4 OpenGL driver with X11 support")
0110
0111 # RayTracer driver with X11 support
0112 option(GEANT4_USE_RAYTRACER_X11 "Build RayTracer driver with X11 support" OFF)
0113 geant4_add_feature(GEANT4_USE_RAYTRACER_X11 "Build RayTracer driver with X11 support")
0114 endif()
0115
0116 # Windows only
0117 if(WIN32)
0118 option(GEANT4_USE_OPENGL_WIN32 "Build OpenGL driver with Win32 support" OFF)
0119 geant4_add_feature(GEANT4_USE_OPENGL_WIN32 "Build OpenGL driver with Win32 support")
0120 endif()
0121
0122 #-----------------------------------------------------------------------
0123 # Find dependencies
0124 #
0125 # Prefer Legacy GL when using CMake >= 3.10
0126 set(OpenGL_GL_PREFERENCE "LEGACY")
0127
0128 # - Coin plus So{Xt,Qt,Win}
0129 if(GEANT4_USE_INVENTOR)
0130 find_package(Coin 4.0.0 REQUIRED)
0131 geant4_save_package_variables(Inventor Coin_DIR)
0132
0133 # Helper to hand-check version because SoXXX use an exact version strategy
0134 # in their CMake config files
0135 function(check_sobind_version _binding _minversion)
0136 if(${_binding}_VERSION VERSION_LESS "${_minversion}")
0137 message(FATAL_ERROR "Found ${_binding}, version: ${${_binding}_VERSION}, but Geant4 requires versions >= ${_minversion}\n"
0138 "${_binding} found at:\n ${${_binding}_DIR}\n")
0139 endif()
0140 endfunction()
0141
0142 if(GEANT4_USE_INVENTOR_QT)
0143 find_package(SoQt REQUIRED)
0144 check_sobind_version(SoQt 1.6.0)
0145 geant4_save_package_variables(Inventor SoQt_DIR)
0146 else()
0147 if(UNIX)
0148 find_package(SoXt REQUIRED)
0149 check_sobind_version(SoXt 1.4.0)
0150 geant4_save_package_variables(Inventor SoXt_DIR)
0151 set(GEANT4_USE_INVENTOR_XT ON)
0152 elseif(WIN32)
0153 find_package(SoWin REQUIRED)
0154 check_sobind_version(SoWin 1.4.0)
0155 geant4_save_package_variables(Inventor SoWin_DIR)
0156 set(GEANT4_USE_INVENTOR_WIN ON)
0157 endif()
0158 endif()
0159 endif()
0160
0161 # - Qt5/6
0162 if(GEANT4_USE_QT)
0163 # Use versioned targets to support Qt5 < 5.15
0164 # 5.9 is selected as the min version to support based on the system version on CentOS7
0165 # Once 5.15 is the minimum version, the "Qt${QT_VERSION_MAJOR}_..." variables can be dropped
0166 # - https://doc.qt.io/qt-6/cmake-manual.html
0167 # TODO:
0168 # - Because VTK and SoQt use Qt themselves, we may want to consider checking that we
0169 # have a consistent link to the same Qt version
0170 if(GEANT4_USE_QT_QT5)
0171 find_package(QT 5.9 NAMES Qt5 COMPONENTS Core REQUIRED)
0172 else()
0173 find_package(QT NAMES Qt6 COMPONENTS Core REQUIRED)
0174 endif()
0175
0176 find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets OpenGL REQUIRED)
0177
0178 geant4_save_package_variables(Qt${QT_VERSION_MAJOR}
0179 Qt${QT_VERSION_MAJOR}_DIR
0180 Qt${QT_VERSION_MAJOR}Core_DIR
0181 Qt${QT_VERSION_MAJOR}Gui_DIR
0182 Qt${QT_VERSION_MAJOR}Widgets_DIR
0183 Qt${QT_VERSION_MAJOR}OpenGL_DIR)
0184
0185 # RayTracerQT
0186 set(GEANT4_USE_RAYTRACER_QT ON)
0187
0188 # G4OpenGL and G4ToolsSG also require OpenGLWidgets in Qt6
0189 if(QT_VERSION_MAJOR GREATER 5)
0190 find_package(Qt${QT_VERSION_MAJOR}OpenGLWidgets REQUIRED)
0191 geant4_save_package_variables(Qt${QT_VERSION_MAJOR} Qt${QT_VERSION_MAJOR}OpenGLWidgets_DIR)
0192 endif()
0193
0194 get_target_property(QT_QMAKE_EXECUTABLE Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION)
0195 geant4_add_feature(GEANT4_USE_QT "Build Geant4 with Qt${QT_VERSION_MAJOR} support")
0196
0197 # Qt3D is only supported on 5.15 and above, but always on if available
0198 set(QT3D_MINIMUM_VERSION 5.15.0)
0199 set(GEANT4_USE_QT3D OFF)
0200
0201 if(QT_VERSION VERSION_GREATER_EQUAL QT3D_MINIMUM_VERSION)
0202 find_package(Qt${QT_VERSION_MAJOR}3DCore ${QT_VERSION} EXACT QUIET)
0203 find_package(Qt${QT_VERSION_MAJOR}3DExtras ${QT_VERSION} EXACT QUIET)
0204 find_package(Qt${QT_VERSION_MAJOR}3DRender ${QT_VERSION} EXACT QUIET)
0205
0206 # Forward correct minimum version to CMake/etc files
0207 set(QT3D_MINIMUM_VERSION ${QT_VERSION})
0208
0209 if(Qt${QT_VERSION_MAJOR}3DCore_FOUND AND Qt${QT_VERSION_MAJOR}3DExtras_FOUND AND Qt${QT_VERSION_MAJOR}3DRender_FOUND)
0210 set(GEANT4_USE_QT3D ON)
0211 geant4_save_package_variables(Qt${QT_VERSION_MAJOR}
0212 Qt${QT_VERSION_MAJOR}3DCore_DIR
0213 Qt${QT_VERSION_MAJOR}3DExtras_DIR
0214 Qt${QT_VERSION_MAJOR}3DRender_DIR)
0215 geant4_add_feature(GEANT4_USE_QT3D "Build Geant4 Qt3D driver")
0216 else()
0217 set(_g4_qt3d_missing)
0218 if(NOT Qt${QT_VERSION_MAJOR}3DCore_FOUND)
0219 list(APPEND _g4_qt3d_missing "Qt${QT_VERSION_MAJOR}3DCore")
0220 endif()
0221 if(NOT Qt${QT_VERSION_MAJOR}3DExtras_FOUND)
0222 list(APPEND _g4_qt3d_missing "Qt${QT_VERSION_MAJOR}3DExtras")
0223 endif()
0224 if(NOT Qt${QT_VERSION_MAJOR}3DRender_FOUND)
0225 list(APPEND _g4_qt3d_missing "Qt${QT_VERSION_MAJOR}3DRender")
0226 endif()
0227
0228 message(STATUS "Disabling Geant4 Qt3D driver, missing Qt packages: ${_g4_qt3d_missing}")
0229 endif()
0230 endif()
0231 # Variables for export to GNUmake
0232 execute_process(COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_PREFIX OUTPUT_VARIABLE G4QTHOME OUTPUT_STRIP_TRAILING_WHITESPACE)
0233 execute_process(COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_LIBS OUTPUT_VARIABLE G4QTLIBPATH OUTPUT_STRIP_TRAILING_WHITESPACE)
0234 endif()
0235
0236 # - OpenGL
0237 if(GEANT4_USE_INVENTOR
0238 OR GEANT4_USE_QT
0239 OR GEANT4_USE_OPENGL_X11
0240 OR GEANT4_USE_XM
0241 OR GEANT4_USE_OPENGL_WIN32)
0242 find_package(OpenGL REQUIRED)
0243 geant4_save_package_variables(OpenGL OPENGL_INCLUDE_DIR OPENGL_gl_LIBRARY)
0244
0245 # X11 drivers on macOS need XQuartzGL
0246 if(APPLE AND
0247 (GEANT4_USE_INVENTOR_XT
0248 OR GEANT4_USE_OPENGL_X11
0249 OR GEANT4_USE_XM))
0250 find_package(XQuartzGL REQUIRED)
0251 geant4_save_package_variables(XQuartzGL XQuartzGL_INCLUDE_DIR XQuartzGL_gl_LIBRARY)
0252 endif()
0253
0254 # Enable G4OpenGL driver
0255 if(GEANT4_USE_INVENTOR
0256 OR GEANT4_USE_QT
0257 OR GEANT4_USE_OPENGL_X11
0258 OR GEANT4_USE_OPENGL_WIN32)
0259 set(GEANT4_USE_OPENGL ON)
0260 endif()
0261 endif()
0262
0263 if(UNIX)
0264 # - X11
0265 if(GEANT4_USE_OPENGL_X11
0266 OR GEANT4_USE_RAYTRACER_X11
0267 OR GEANT4_USE_XM
0268 OR GEANT4_USE_INVENTOR_XT)
0269 find_package(X11 REQUIRED)
0270 include("${CMAKE_CURRENT_LIST_DIR}/G4X11Shim.cmake")
0271
0272 # Check for additional required X11 libraries
0273 if(NOT X11_Xmu_FOUND)
0274 message(FATAL_ERROR "could not find X11 Xmu library and/or headers")
0275 endif()
0276
0277 if(NOT X11_Xt_FOUND)
0278 message(FATAL_ERROR "could not find X11 Xt library and/or headers")
0279 endif()
0280
0281 geant4_save_package_variables(X11
0282 X11_X11_INCLUDE_PATH
0283 X11_X11_LIB
0284 X11_ICE_INCLUDE_PATH
0285 X11_ICE_LIB
0286 X11_SM_INCLUDE_PATH
0287 X11_SM_LIB
0288 X11_Xext_INCLUDE_PATH
0289 X11_Xext_LIB
0290 X11_Xmu_INCLUDE_PATH
0291 X11_Xmu_LIB
0292 X11_Xt_INCLUDE_PATH
0293 X11_Xt_LIB)
0294 endif()
0295
0296 # - Motif
0297 if(GEANT4_USE_XM)
0298 find_package(Motif REQUIRED)
0299 include("${CMAKE_CURRENT_LIST_DIR}/G4MotifShim.cmake")
0300 geant4_save_package_variables(Motif MOTIF_INCLUDE_DIR MOTIF_LIBRARIES)
0301 endif()
0302 endif()