-
-ENABLE_TESTING()
-SET(VERSION "7.1.0")
-SET(VERSION_DEV "1")
-
-SET(BUILD_SHARED_LIBS true)
-
-SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR} CACHE PATH "Path to the Salome KERNEL")
-IF(EXISTS ${KERNEL_ROOT_DIR})
- INCLUDE(${KERNEL_ROOT_DIR}/salome_adm/cmake_files/FindKERNEL.cmake)
-ELSE(EXISTS ${KERNEL_ROOT_DIR})
- MESSAGE(FATAL_ERROR "We absolutely need a Salome KERNEL, please define KERNEL_ROOT_DIR")
-ENDIF(EXISTS ${KERNEL_ROOT_DIR})
-
-STRING(REPLACE "\\" "/" KERNEL_ROOT_DIR ${KERNEL_ROOT_DIR})
-
-# directories for packages detection
-SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${KERNEL_ROOT_DIR}/salome_adm/cmake_files ${CMAKE_SOURCE_DIR}/adm_local/cmake_files)
-
-find_package(PLATFORM)
-
-
-# Threads
-SET(CMAKE_THREAD_PREFER_PTHREAD)
-find_package(Threads REQUIRED)
-
-
-# required prerequisites from KERNEL
-
-find_package(SalomePYTHON)
-find_package(SalomeSWIG)
-find_package(SalomeLIBXML2)
-find_package(SalomeHDF5)
-find_package(SalomeBOOST)
-
-# required prerequisites for GUI
-
-find_package(SalomeQT4)
-find_package(SalomeSIP)
-find_package(SalomePYQT4)
-
-# optional prerequisites from KERNEL
-
-if(SALOME_USE_MPI OR HDF5_IS_PARALLEL)
- find_package(SalomeMPI)
-endif(SALOME_USE_MPI OR HDF5_IS_PARALLEL)
-
-if(SALOME_USE_CORBA)
- find_package(OMNIORB)
-endif(SALOME_USE_CORBA)
-
-if(SALOME_USE_TEST)
- find_package(SalomeCPPUNIT)
-endif(SALOME_USE_TEST)
-
-if(SALOME_USE_DOC)
- find_package(SalomeDOXYGEN)
- find_package(SalomeSPHINX)
-endif(SALOME_USE_DOC)
-
-if(SALOME_USE_LIBBATCH)
- find_package(LIBBATCH)
-endif(SALOME_USE_LIBBATCH)
-
-
-# optional prerequisites for GUI
-
-if(SALOME_USE_OCCVIEWER)
- find_package(SalomeCAS)
-endif(SALOME_USE_OCCVIEWER)
-
-if(SALOME_USE_GLVIEWER)
- find_package(OpenGL REQUIRED)
-endif(SALOME_USE_GLVIEWER)
-
-if(SALOME_USE_VTKVIEWER)
- find_package(SalomeVTK)
-endif(SALOME_USE_VTKVIEWER)
-
-if(SALOME_USE_PLOT2DVIEWER)
- find_package(SalomeQWT)
-endif(SALOME_USE_PLOT2DVIEWER)
-
-EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} -c "import sys; t=sys.argv[-1].split(\".\") ; t[:]=(int(elt) for elt in t) ; sys.stdout.write(\"0x%02x%02x%02x\"%tuple(t))" ${VERSION}
- OUTPUT_VARIABLE XVERSION)
-
-SET(GUI_salomebin_BINS bin/salome)
-
-SET(GUI_salomelib_LIBS lib/salome)
-SET(GUI_paraviewlib_LIBS lib/paraview)
-
-SET(GUI_salomeinclude_HEADERS include/salome)
-
-SET(GUI_salomeres_DATA share/salome/resources/gui)
-
-SET(GUI_salomeres_SCRIPTS share/salome/resources/gui)
-
-SET(GUI_salomepluginsdir share/salome/plugins/gui)
-
-SET(GUI_salomescript_SCRIPTS bin/salome)
-
-SET(GUI_salomescript_DATA bin/salome)
-
-SET(GUI_salomescript_PYTHON bin/salome)
-SET(KERNEL_salomescript_PYTHON ${GUI_salomescript_PYTHON})
-
-SET(GUI_appliskel_SCRIPTS bin/salome/appliskel)
-
-SET(GUI_appliskel_PYTHON bin/salome/appliskel)
-
-SET(GUI_pythondir lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
-
-SET(GUI_salomepythondir ${GUI_pythondir}/salome)
-SET(KERNEL_salomepythondir ${GUI_salomepythondir})
-
-SET(GUI_sharedpkgpython_PYTHON ${GUI_salomepythondir}/shared_modules)
-
-SET(GUI_admlocalcmake adm_local/cmake_files)
-
-SET(IDLDIR)
-IF(SALOME_USE_CORBA)
- SET(IDLDIR idl)
-ENDIF(SALOME_USE_CORBA)
-
-SET(SUBDIRS
- ${IDLDIR}
- adm_local
- resources
- src
- doc
- bin
- tools
+OPTION(SALOME_USE_PVVIEWER "Enable ParaView visualization (Mandatory in classic configurations)" ON)
+
+CMAKE_DEPENDENT_OPTION(SALOME_USE_SALOMEOBJECT "Enable Salome Object (Mandatory in classic configurations)" ON
+ "SALOME_LIGHT_ONLY" ON)
+
+MARK_AS_ADVANCED(SALOME_LIGHT_ONLY SALOME_USE_VTKVIEWER SALOME_USE_GRAPHICSVIEW SALOME_USE_PVVIEWER)
+MARK_AS_ADVANCED(SALOME_USE_SALOMEOBJECT SALOME_USE_OCCVIEWER SALOME_USE_GLVIEWER SALOME_USE_PLOT2DVIEWER)
+MARK_AS_ADVANCED(SALOME_USE_PYCONSOLE SALOME_USE_QXGRAPHVIEWER SALOME_USE_PYVIEWER)
+
+# Prerequisites
+# =============
+# Find "big" prerequisites first - they reference themselves many others
+# -> this can help finding the smaller prerequisites and detect conficts.
+# In our case KERNEL has already loaded many prereq which are also used in GUI:
+
+##
+## From KERNEL:
+##
+
+# Various
+FIND_PACKAGE(SalomePythonInterp REQUIRED)
+FIND_PACKAGE(SalomePythonLibs REQUIRED)
+FIND_PACKAGE(SalomePThread REQUIRED)
+FIND_PACKAGE(SalomeSWIG REQUIRED)
+FIND_PACKAGE(SalomeBoost REQUIRED)
+FIND_PACKAGE(SalomeHDF5 REQUIRED COMPONENTS C)
+
+# Other KERNEL optionals:
+IF(NOT SALOME_LIGHT_ONLY)
+ FIND_PACKAGE(SalomeOmniORB REQUIRED)
+ FIND_PACKAGE(SalomeOmniORBPy REQUIRED)
+ELSE()
+ ADD_DEFINITIONS("-DGUI_DISABLE_CORBA")
+ENDIF()
+IF(SALOME_BUILD_TESTS)
+ ENABLE_TESTING()
+ FIND_PACKAGE(SalomeCppUnit)
+ SALOME_LOG_OPTIONAL_PACKAGE(CppUnit SALOME_BUILD_TESTS)
+ENDIF()
+IF(SALOME_BUILD_DOC)
+ FIND_PACKAGE(SalomeDoxygen)
+ FIND_PACKAGE(SalomeGraphviz)
+ FIND_PACKAGE(SalomeSphinx)
+ SALOME_LOG_OPTIONAL_PACKAGE(Doxygen SALOME_BUILD_DOC)
+ SALOME_LOG_OPTIONAL_PACKAGE(Graphviz SALOME_BUILD_DOC)
+ SALOME_LOG_OPTIONAL_PACKAGE(Sphinx SALOME_BUILD_DOC)
+ENDIF()
+
+##
+## GUI specifics
+##
+
+FIND_PACKAGE(SalomeSIP REQUIRED) # should come after Python and before PyQt
+
+# Build with GUI observers feature
+IF(SALOME_GUI_USE_OBSERVERS)
+ ADD_DEFINITIONS(-DWITH_SALOMEDS_OBSERVER)
+ENDIF()
+
+# Single-study GUI
+IF(SALOME_USE_SINGLE_DESKTOP)
+ ADD_DEFINITIONS(-DSINGLE_DESKTOP)
+ENDIF()
+
+# OpenCASCADE
+FIND_PACKAGE(SalomeOpenCASCADE REQUIRED)
+
+# OpenGL
+IF(SALOME_USE_OCCVIEWER OR SALOME_USE_VTKVIEWER OR SALOME_USE_GLVIEWER)
+ FIND_PACKAGE(SalomeOpenGL REQUIRED)
+ENDIF()
+
+# Qt
+IF(NOT SALOME_BUILD_WITH_QT5)
+ FIND_PACKAGE(SalomeQt4 REQUIRED COMPONENTS QtCore QtGui QtXml QtWebKit QtOpenGL QtNetwork)
+ ADD_DEFINITIONS("-DUSE_SALOME_STYLE")
+ SET(QT_SALOME_VERSION 4)
+ SET(SALOME_GUI_ENABLE_QTXWEBBROWSER TRUE)
+ELSE()
+ FIND_PACKAGE(SalomeQt5 REQUIRED)
+ SET(QT_SALOME_VERSION 5)
+ SET(SALOME_GUI_ENABLE_QTXWEBBROWSER TRUE)
+ IF(NOT "${QT_VERSION}" VERSION_LESS "5.6.0")
+ # Check that WebEngineWidgets component was found
+ IF(NOT Qt5WebEngineWidgets_FOUND)
+ SET(SALOME_GUI_ENABLE_QTXWEBBROWSER FALSE)
+ ADD_DEFINITIONS("-DDISABLE_QTXWEBBROWSER")
+ MESSAGE("Qt5WebEngineWidgets is not found, SALOME internal help browser will be unavailable !")
+ ENDIF()
+ ENDIF()
+ENDIF()
+
+# PyQt
+IF (NOT SALOME_BUILD_WITH_QT5)
+ FIND_PACKAGE(SalomePyQt4 REQUIRED)
+ELSE()
+ FIND_PACKAGE(SalomePyQt5 REQUIRED)
+ENDIF()
+
+# Optional packages for GUI and their pre-requisites
+
+# - GL viewer: no prereqs
+IF(NOT SALOME_USE_GLVIEWER)
+ ADD_DEFINITIONS("-DDISABLE_GLVIEWER")
+ENDIF()
+
+# - OCC viewer: no prereqs
+IF(NOT SALOME_USE_OCCVIEWER)
+ ADD_DEFINITIONS("-DDISABLE_OCCVIEWER")
+ENDIF()
+
+# - PV viewer: ParaView
+IF (SALOME_USE_PVVIEWER)
+ FIND_PACKAGE(SalomeParaView)
+ SALOME_LOG_OPTIONAL_PACKAGE(ParaView SALOME_USE_PVVIEWER)
+ELSE()
+ ADD_DEFINITIONS("-DDISABLE_PVVIEWER")
+ENDIF()
+
+# - VTK viewer: VTK
+IF(SALOME_USE_VTKVIEWER)
+ # Required components are listed in the FindSalomeVTK.cmake file:
+ FIND_PACKAGE(SalomeVTK)
+ SALOME_LOG_OPTIONAL_PACKAGE(VTK SALOME_USE_VTKVIEWER)
+ IF(${VTK_RENDERING_BACKEND} STREQUAL "OpenGL2")
+ ADD_DEFINITIONS("-DVTK_OPENGL2")
+ SET(SALOME_GUI_USE_OPENGL2 TRUE)
+ ENDIF()
+ELSE()
+ ADD_DEFINITIONS("-DDISABLE_VTKVIEWER")
+ENDIF()
+
+
+# - Plot2d viewer: Qwt
+IF(SALOME_USE_PLOT2DVIEWER)
+ FIND_PACKAGE(SalomeQwt)
+ SALOME_LOG_OPTIONAL_PACKAGE(Qwt SALOME_USE_PLOT2DVIEWER)
+ELSE()
+ ADD_DEFINITIONS("-DDISABLE_PLOT2DVIEWER")
+ENDIF()
+
+# - Graphics viewer: no prereqs
+IF (NOT SALOME_USE_GRAPHICSVIEW)
+ ADD_DEFINITIONS("-DDISABLE_GRAPHICSVIEW")
+ENDIF()
+
+# - Python editor: no prereqs
+IF (NOT SALOME_USE_PYVIEWER)
+ ADD_DEFINITIONS("-DDISABLE_PYVIEWER")
+ENDIF()
+
+# - Python console: no prereqs
+IF(SALOME_USE_PYCONSOLE)
+ # Build with obsolete Python module's methods
+ ADD_DEFINITIONS(-DCALL_OLD_METHODS)
+ELSE()
+ ADD_DEFINITIONS("-DDISABLE_PYCONSOLE")
+ENDIF()
+
+# - Qx viewer: no prereqs
+IF(NOT SALOME_USE_QXGRAPHVIEWER)
+ ADD_DEFINITIONS("-DDISABLE_QXGRAPHVIEWER")
+ENDIF()
+
+# - SALOME object: no prereqs
+IF(NOT SALOME_USE_SALOMEOBJECT)
+ ADD_DEFINITIONS("-DDISABLE_SALOMEOBJECT")
+ENDIF()
+
+# Detection summary:
+SALOME_PACKAGE_REPORT_AND_CHECK()
+
+# Directories
+# (default values taken from KERNEL)
+# ===========
+
+SET(SALOME_INSTALL_BINS "${SALOME_INSTALL_BINS}" CACHE PATH "Install path: SALOME binaries")
+SET(SALOME_INSTALL_LIBS "${SALOME_INSTALL_LIBS}" CACHE PATH "Install path: SALOME libs")
+SET(SALOME_INSTALL_IDLS "${SALOME_INSTALL_IDLS}" CACHE PATH "Install path: SALOME IDL files")
+SET(SALOME_INSTALL_HEADERS "${SALOME_INSTALL_HEADERS}" CACHE PATH "Install path: SALOME headers")
+SET(SALOME_INSTALL_SCRIPT_SCRIPTS "${SALOME_INSTALL_SCRIPT_SCRIPTS}" CACHE PATH
+ "Install path: SALOME scripts")
+SET(SALOME_INSTALL_SCRIPT_DATA "${SALOME_INSTALL_SCRIPT_DATA}" CACHE PATH
+ "Install path: SALOME script data")
+SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH
+ "Install path: SALOME Python scripts")
+SET(SALOME_INSTALL_PYTHON "${SALOME_INSTALL_PYTHON}" CACHE PATH "Install path: SALOME Python stuff")
+SET(SALOME_INSTALL_PYTHON_SHARED "${SALOME_INSTALL_PYTHON_SHARED}" CACHE PATH
+ "Install path: SALOME Python shared modules")
+SET(SALOME_INSTALL_CMAKE "${SALOME_INSTALL_CMAKE}" CACHE PATH "Install path: SALOME CMake files")
+SET(SALOME_INSTALL_CMAKE_LOCAL "${SALOME_INSTALL_CMAKE_LOCAL}" CACHE PATH
+ "Install path: local SALOME CMake files")
+SET(SALOME_INSTALL_AMCONFIG_LOCAL "${SALOME_INSTALL_AMCONFIG_LOCAL}" CACHE PATH
+ "Install path: local SALOME config files (obsolete, to be removed)")
+
+SET(SALOME_INSTALL_RES "${SALOME_INSTALL_RES}" CACHE PATH "Install path: SALOME resources")
+SET(SALOME_INSTALL_DOC "${SALOME_INSTALL_DOC}" CACHE PATH "Install path: SALOME documentation")
+
+# Specific to GUI:
+SET(SALOME_GUI_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/gui" CACHE PATH
+ "Install path: SALOME GUI specific data")
+SET(SALOME_GUI_INSTALL_RES_SCRIPTS "${SALOME_INSTALL_RES}/gui" CACHE PATH
+ "Install path: SALOME GUI scripts")
+SET(SALOME_GUI_INSTALL_PLUGINS share/salome/plugins/gui CACHE PATH
+ "Install path: SALOME GUI plugins")
+
+MARK_AS_ADVANCED(SALOME_INSTALL_BINS SALOME_INSTALL_LIBS SALOME_INSTALL_IDLS SALOME_INSTALL_HEADERS)
+MARK_AS_ADVANCED(SALOME_INSTALL_SCRIPT_SCRIPTS SALOME_INSTALL_SCRIPT_DATA SALOME_INSTALL_SCRIPT_PYTHON)
+MARK_AS_ADVANCED(SALOME_INSTALL_APPLISKEL_SCRIPTS SALOME_INSTALL_APPLISKEL_PYTHON SALOME_INSTALL_CMAKE SALOME_INSTALL_CMAKE_LOCAL SALOME_INSTALL_RES)
+MARK_AS_ADVANCED(SALOME_INSTALL_PYTHON SALOME_INSTALL_PYTHON_SHARED)
+MARK_AS_ADVANCED(SALOME_GUI_INSTALL_RES_DATA SALOME_GUI_INSTALL_RES_SCRIPTS SALOME_GUI_INSTALL_PLUGINS)
+MARK_AS_ADVANCED(SALOME_INSTALL_AMCONFIG_LOCAL SALOME_INSTALL_DOC)
+
+# Accumulate environment variables for GUI module
+SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_BINS}
+ ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON}
+ ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON_SHARED})
+SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_LIBS})
+
+# Sources
+# ========
+IF(NOT SALOME_LIGHT_ONLY)
+ ADD_SUBDIRECTORY(idl)
+ENDIF()
+
+ADD_SUBDIRECTORY(adm_local)
+ADD_SUBDIRECTORY(resources)
+ADD_SUBDIRECTORY(src)
+IF(SALOME_BUILD_DOC)
+ ADD_SUBDIRECTORY(doc)
+ENDIF()
+ADD_SUBDIRECTORY(bin)
+ADD_SUBDIRECTORY(tools)
+
+# Header configuration
+# ====================
+SALOME_XVERSION(${PROJECT_NAME})
+SALOME_CONFIGURE_FILE(GUI_version.h.in GUI_version.h INSTALL ${SALOME_INSTALL_HEADERS})
+
+# Configuration export
+# (here only the level 1 prerequisites are exposed)
+# ====================
+INCLUDE(CMakePackageConfigHelpers)
+
+# List of targets in this project we want to make visible to the rest of the world.
+# They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
+SET(_${PROJECT_NAME}_exposed_targets
+ CAM CASCatch DDS Event LightApp LogWindow ObjBrowser
+ QDS qtx SalomePrs SalomeStyle std SUITApp suit ViewerTools ViewerData
+ ImageComposer