1 # Copyright (C) 2012-2020 CEA/DEN, EDF R&D, OPEN CASCADE
3 # This library is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU Lesser General Public
5 # License as published by the Free Software Foundation; either
6 # version 2.1 of the License, or (at your option) any later version.
8 # This library is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 # Lesser General Public License for more details.
13 # You should have received a copy of the GNU Lesser General Public
14 # License along with this library; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR)
20 PROJECT(SalomeSMESH C CXX)
22 INCLUDE(CMakeDependentOption)
26 # Project name, upper case
27 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
29 SET(${PROJECT_NAME_UC}_MAJOR_VERSION 9)
30 SET(${PROJECT_NAME_UC}_MINOR_VERSION 6)
31 SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
32 SET(${PROJECT_NAME_UC}_VERSION
33 ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
34 SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
38 SET(CONFIGURATION_ROOT_DIR $ENV{CONFIGURATION_ROOT_DIR} CACHE PATH "Path to the Salome CMake configuration files")
39 IF(EXISTS ${CONFIGURATION_ROOT_DIR})
40 LIST(APPEND CMAKE_MODULE_PATH "${CONFIGURATION_ROOT_DIR}/cmake")
41 INCLUDE(SalomeMacros NO_POLICY_SCOPE)
43 MESSAGE(FATAL_ERROR "We absolutely need the Salome CMake configuration files, please define CONFIGURATION_ROOT_DIR !")
48 SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR} CACHE PATH "Path to the Salome KERNEL")
49 IF(EXISTS ${KERNEL_ROOT_DIR})
50 FIND_PACKAGE(SalomeKERNEL REQUIRED)
51 KERNEL_WITH_CORBA() #check whether KERNEL built with CORBA
52 ADD_DEFINITIONS(${KERNEL_DEFINITIONS})
53 INCLUDE_DIRECTORIES(${KERNEL_INCLUDE_DIRS})
54 ELSE(EXISTS ${KERNEL_ROOT_DIR})
55 MESSAGE(FATAL_ERROR "We absolutely need a Salome KERNEL, please define KERNEL_ROOT_DIR")
56 ENDIF(EXISTS ${KERNEL_ROOT_DIR})
60 INCLUDE(SalomeSetupPlatform) # From KERNEL
61 # Always build libraries as shared objects:
62 SET(BUILD_SHARED_LIBS TRUE)
66 OPTION(SALOME_BUILD_TESTS "Build SALOME tests" ON)
67 OPTION(SALOME_BUILD_DOC "Generate SALOME SMESH documentation" ON)
70 OPTION(SALOME_BUILD_GUI "Enable GUI" ON)
71 OPTION(SALOME_SMESH_USE_CGNS "Enable import/export to CGNS format" OFF)
72 OPTION(SALOME_SMESH_USE_TBB "Enable parallel computation" OFF)
73 OPTION(SALOME_SMESH_DYNLOAD_LOCAL "Load plug-ins' symbols locally (Linux only)" ON)
74 OPTION(SMESH_USE_MESHGEMS_HYPOSET "Prefer MeshGems algorithms in sets of hypotheses" OFF)
75 CMAKE_DEPENDENT_OPTION(SALOME_SMESH_BUILD_FRENCH_DOC "Generate SALOME SMESH French documentation" OFF
76 "SALOME_BUILD_DOC" OFF)
78 IF(SALOME_SMESH_DYNLOAD_LOCAL)
79 ADD_DEFINITIONS(-DDYNLOAD_LOCAL)
80 ENDIF(SALOME_SMESH_DYNLOAD_LOCAL)
82 IF(SMESH_USE_MESHGEMS_HYPOSET)
83 SET(SMESH_USE_MESHGEMS_HYPOSET_VAR "true")
84 ELSE(SMESH_USE_MESHGEMS_HYPOSET)
85 SET(SMESH_USE_MESHGEMS_HYPOSET_VAR "false")
86 ENDIF(SMESH_USE_MESHGEMS_HYPOSET)
88 #On Linux use Fortran to compile MEFISTO2D
90 ENABLE_LANGUAGE(Fortran)
91 SET(SALOME_SMESH_ENABLE_MEFISTO ON)
92 ADD_DEFINITIONS(-DENABLE_MEFISTO)
95 MARK_AS_ADVANCED(SALOME_BUILD_GUI SALOME_SMESH_USE_CGNS SALOME_SMESH_USE_TBB SALOME_SMESH_DYNLOAD_LOCAL SMESH_USE_MESHGEMS_HYPOSET)
99 # Find "big" prerequisites first - they reference themselves many others
100 # -> this can help finding the smaller prerequisites and detect conflicts.
101 # In our case KERNEL has already loaded many prereq:
109 FIND_PACKAGE(SalomePythonInterp REQUIRED)
110 FIND_PACKAGE(SalomePythonLibs REQUIRED)
112 FIND_PACKAGE(SalomePThread REQUIRED)
114 FIND_PACKAGE(SalomeSWIG REQUIRED)
116 FIND_PACKAGE(SalomeBoost REQUIRED)
118 FIND_PACKAGE(SalomeOmniORB REQUIRED)
119 FIND_PACKAGE(SalomeOmniORBPy REQUIRED)
121 FIND_PACKAGE(SalomeLibXml2 REQUIRED)
123 FIND_PACKAGE(SalomeHDF5 REQUIRED COMPONENTS C)
125 # Other KERNEL optionals:
126 IF(SALOME_BUILD_TESTS)
128 FIND_PACKAGE(SalomeCppUnit)
129 SALOME_LOG_OPTIONAL_PACKAGE(CppUnit SALOME_BUILD_TESTS)
132 FIND_PACKAGE(SalomeDoxygen)
133 SET(Sphinx_EXTENSIONS sphinxcontrib.napoleon)
134 FIND_PACKAGE(SalomeSphinx)
135 SALOME_LOG_OPTIONAL_PACKAGE(Doxygen SALOME_BUILD_DOC)
136 SALOME_LOG_OPTIONAL_PACKAGE(Sphinx SALOME_BUILD_DOC)
141 SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR} CACHE PATH "Path to the Salome GUI")
142 IF(EXISTS ${GUI_ROOT_DIR})
143 FIND_PACKAGE(SalomeGUI)
144 SALOME_GUI_WITH_CORBA() #check whether GUI built with CORBA
145 SALOME_GUI_MODE(SALOME_USE_VTKVIEWER SALOME_USE_SALOMEOBJECT
146 OPTIONAL SALOME_USE_PLOT2DVIEWER SALOME_USE_PYCONSOLE)
148 ## Prerequisites From GUI:
151 FIND_PACKAGE(SalomeQt5 REQUIRED)
153 FIND_PACKAGE(SalomeSIP REQUIRED) # should come after Python and before PyQt5
155 FIND_PACKAGE(SalomePyQt5 REQUIRED)
157 FIND_PACKAGE(SalomeQwt REQUIRED)
158 ELSE(EXISTS ${GUI_ROOT_DIR})
159 MESSAGE(FATAL_ERROR "GUI_ROOT_DIR is not well defined, SMESH will be built without GUI!!!")
160 ENDIF(EXISTS ${GUI_ROOT_DIR})
161 SALOME_LOG_OPTIONAL_PACKAGE(SalomeGUI SALOME_BUILD_GUI)
162 ENDIF(SALOME_BUILD_GUI)
166 SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR} CACHE PATH "Path to the Salome GEOM")
167 IF(EXISTS ${GEOM_ROOT_DIR})
168 FIND_PACKAGE(SalomeGEOM REQUIRED)
169 ADD_DEFINITIONS(${GEOM_DEFINITIONS})
170 INCLUDE_DIRECTORIES(${GEOM_INCLUDE_DIRS})
172 IF(NOT SALOME_GEOM_BUILD_GUI)
173 MESSAGE(FATAL_ERROR "We absolutely need a Salome GEOM with GUI, please set SALOME_BUILD_GUI=ON in GEOM module")
174 ENDIF(NOT SALOME_GEOM_BUILD_GUI)
175 ENDIF(SALOME_BUILD_GUI)
176 ELSE(EXISTS ${GEOM_ROOT_DIR})
177 MESSAGE(FATAL_ERROR "We absolutely need a Salome GEOM, please define GEOM_ROOT_DIR")
178 ENDIF(EXISTS ${GEOM_ROOT_DIR})
182 SET(WITH_SHAPER_STUDY OFF)
183 SET(SHAPERSTUDY_ROOT_DIR $ENV{SHAPERSTUDY_ROOT_DIR} CACHE PATH "Path to the Salome SHAPERSTUDY")
184 IF(EXISTS ${SHAPERSTUDY_ROOT_DIR})
185 FIND_PACKAGE(SalomeSHAPERSTUDY)
186 IF(SalomeSHAPERSTUDY_FOUND)
187 SET(WITH_SHAPER_STUDY ON)
189 ENDIF(EXISTS ${SHAPERSTUDY_ROOT_DIR})
190 IF(NOT WITH_SHAPER_STUDY AND SALOME_BUILD_TESTS)
191 MESSAGE(WARNING "SHAPERSTUDY is not found; the corresponding tests will be omitted")
196 SET(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} CACHE PATH "Path to the MEDCoupling tool")
197 IF(EXISTS ${MEDCOUPLING_ROOT_DIR})
198 FIND_PACKAGE(SalomeMEDCoupling REQUIRED) # will reload HDF5, MEDFile, XDR, etc ...
199 ELSE(EXISTS ${MEDCOUPLING_ROOT_DIR})
200 MESSAGE(FATAL_ERROR "We absolutely need the MEDCoupling tool, please define MEDCOUPLING_ROOT_DIR !")
201 ENDIF(EXISTS ${MEDCOUPLING_ROOT_DIR})
207 # VTK is obligatiry for the SMESH
208 FIND_PACKAGE(SalomeVTK REQUIRED)
210 FIND_PACKAGE(SalomeOpenCASCADE REQUIRED)
212 IF(SALOME_SMESH_USE_CGNS)
213 FIND_PACKAGE(SalomeCGNS)
214 SALOME_LOG_OPTIONAL_PACKAGE(CGNS SALOME_SMESH_USE_CGNS)
215 ADD_DEFINITIONS(-DWITH_CGNS)
216 ENDIF(SALOME_SMESH_USE_CGNS)
218 IF(SALOME_SMESH_USE_TBB)
219 FIND_PACKAGE(SalomeTBB)
220 SALOME_LOG_OPTIONAL_PACKAGE(TBB SALOME_SMESH_USE_TBB)
221 ADD_DEFINITIONS(-DWITH_TBB)
222 ENDIF(SALOME_SMESH_USE_TBB)
224 FIND_PACKAGE(SalomeMEDFile REQUIRED)
226 #On Windows use f2c to generate C MEFISTO2D code
228 SET(SALOME_SMESH_ENABLE_MEFISTO OFF)
229 FIND_PACKAGE(Salomef2c QUIET)
231 ADD_DEFINITIONS(-DENABLE_MEFISTO)
232 SET(SALOME_SMESH_ENABLE_MEFISTO ON)
233 MESSAGE(STATUS "Build MEFISTO2D mesher using Fortran to C generator")
235 MESSAGE(FATAL "Fortran to C generator is not found: MEFISTO2D mesher cannot be compiled! Please define F2C_ROOT_DIR !")
239 IF(SALOME_SMESH_ENABLE_MEFISTO)
240 SET(MEFISTO2D_NAME "MEFISTO_2D")
241 ELSE(SALOME_SMESH_ENABLE_MEFISTO)
242 SET(MEFISTO2D_NAME "NOT_FOUND")
243 ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
246 SALOME_PACKAGE_REPORT_AND_CHECK()
249 # (default values taken from KERNEL)
251 SET(SALOME_INSTALL_BINS "${SALOME_INSTALL_BINS}" CACHE PATH "Install path: SALOME binaries")
252 SET(SALOME_INSTALL_LIBS "${SALOME_INSTALL_LIBS}" CACHE PATH "Install path: SALOME libs")
253 SET(SALOME_INSTALL_IDLS "${SALOME_INSTALL_IDLS}" CACHE PATH "Install path: SALOME IDL files")
254 SET(SALOME_INSTALL_HEADERS "${SALOME_INSTALL_HEADERS}" CACHE PATH "Install path: SALOME headers")
255 SET(SALOME_INSTALL_SCRIPT_SCRIPTS "${SALOME_INSTALL_SCRIPT_SCRIPTS}" CACHE PATH
256 "Install path: SALOME scripts")
257 SET(SALOME_INSTALL_SCRIPT_DATA "${SALOME_INSTALL_SCRIPT_DATA}" CACHE PATH
258 "Install path: SALOME script data")
259 SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH
260 "Install path: SALOME Python scripts")
261 SET(SALOME_INSTALL_APPLISKEL_SCRIPTS "${SALOME_INSTALL_APPLISKEL_SCRIPTS}" CACHE PATH
262 "Install path: SALOME application skeleton - scripts")
263 SET(SALOME_INSTALL_APPLISKEL_PYTHON "${SALOME_INSTALL_APPLISKEL_PYTHON}" CACHE PATH
264 "Install path: SALOME application skeleton - Python")
265 SET(SALOME_INSTALL_PYTHON "${SALOME_INSTALL_PYTHON}" CACHE PATH "Install path: SALOME Python stuff")
266 SET(SALOME_INSTALL_PYTHON_SHARED "${SALOME_INSTALL_PYTHON_SHARED}" CACHE PATH
267 "Install path: SALOME Python shared modules")
268 SET(SALOME_INSTALL_CMAKE_LOCAL "${SALOME_INSTALL_CMAKE_LOCAL}" CACHE PATH
269 "Install path: local SALOME CMake files")
270 SET(SALOME_INSTALL_AMCONFIG_LOCAL "${SALOME_INSTALL_AMCONFIG_LOCAL}" CACHE PATH
271 "Install path: local SALOME config files (obsolete, to be removed)")
272 SET(SALOME_INSTALL_RES "${SALOME_INSTALL_RES}" CACHE PATH "Install path: SALOME resources")
273 SET(SALOME_INSTALL_DOC "${SALOME_INSTALL_DOC}" CACHE PATH "Install path: SALOME documentation")
276 SET(SALOME_SMESH_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/smesh" CACHE PATH
277 "Install path: SALOME SMESH specific data")
278 SET(SALOME_SMESH_INSTALL_PLUGINS share/salome/plugins/smesh CACHE PATH
279 "Install path: SALOME SMESH plugins")
281 MARK_AS_ADVANCED(SALOME_INSTALL_BINS SALOME_INSTALL_LIBS SALOME_INSTALL_IDLS SALOME_INSTALL_HEADERS)
282 MARK_AS_ADVANCED(SALOME_INSTALL_SCRIPT_SCRIPTS SALOME_INSTALL_SCRIPT_DATA SALOME_INSTALL_SCRIPT_PYTHON)
283 MARK_AS_ADVANCED(SALOME_INSTALL_APPLISKEL_SCRIPTS SALOME_INSTALL_APPLISKEL_PYTHON SALOME_INSTALL_CMAKE_LOCAL SALOME_INSTALL_RES)
284 MARK_AS_ADVANCED(SALOME_INSTALL_PYTHON SALOME_INSTALL_PYTHON_SHARED)
285 MARK_AS_ADVANCED(SALOME_INSTALL_AMCONFIG_LOCAL SALOME_INSTALL_DOC)
286 MARK_AS_ADVANCED(SALOME_SMESH_INSTALL_RES_DATA SALOME_SMESH_INSTALL_PLUGINS)
289 # SET(SALOME_ADAPT_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/adapt" CACHE PATH
290 # "Install path: SALOME ADAPT specific data")
291 SET(SALOME_ADAPT_INSTALL_SAMPLES share/salome/adaptsamples CACHE PATH
292 "Install path: SALOME ADAPT samples")
293 SET(SALOME_ADAPT_INSTALL_TEST ${SALOME_INSTALL_SCRIPT_SCRIPTS}/test CACHE PATH
294 "Install path: SALOME ADAPT Test files")
295 SET(SALOME_ADAPT_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/adapt" CACHE PATH
296 "Install path: SALOME ADAPT specific data")
298 # Accumulate environment variables for SMESH module
299 SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_BINS}
300 ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON}
301 ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON_SHARED})
302 SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_LIBS})
307 ADD_SUBDIRECTORY(idl)
308 ADD_SUBDIRECTORY(adm_local)
309 ADD_SUBDIRECTORY(resources)
310 ADD_SUBDIRECTORY(bin)
311 ADD_SUBDIRECTORY(src)
313 ADD_SUBDIRECTORY(doc)
315 IF(SALOME_BUILD_TESTS)
316 ADD_SUBDIRECTORY(test)
319 # Header configuration
320 # ====================
321 SALOME_XVERSION(${PROJECT_NAME})
322 SALOME_CONFIGURE_FILE(SMESH_version.h.in SMESH_version.h INSTALL ${SALOME_INSTALL_HEADERS})
324 # Configuration export
325 # (here only the level 1 prerequisites are exposed)
326 # ====================
327 INCLUDE(CMakePackageConfigHelpers)
329 # List of targets in this project we want to make visible to the rest of the world.
330 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
331 SET(_${PROJECT_NAME}_exposed_targets
332 SMESHControls MeshDriver MeshDriverDAT MeshDriverGMF MeshDriverMED
333 MeshDriverSTL MeshDriverUNV MEDWrapper
334 SMDS SMESHimpl SMESHEngine SMESHClient SMESHDS
335 SMESHUtils StdMeshers StdMeshersEngine MeshJobManagerEngine
336 SPADDERPluginTesterEngine SalomeIDLSMESH SalomeIDLSPADDER
337 ADAPTEngine ADAPTFrontTrack ADAPTImpl
340 IF(SALOME_SMESH_ENABLE_MEFISTO)
341 LIST(APPEND _${PROJECT_NAME}_exposed_targets
343 ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
346 LIST(APPEND _${PROJECT_NAME}_exposed_targets
347 SMESHObject SMESHFiltersSelection SMESH PluginUtils StdMeshersGUI ADAPTGUI
349 ENDIF(SALOME_BUILD_GUI)
351 IF(SALOME_SMESH_USE_CGNS)
352 LIST(APPEND _${PROJECT_NAME}_exposed_targets
355 ENDIF(SALOME_SMESH_USE_CGNS)
357 # Add all targets to the build-tree export set
358 EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
359 FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
361 # Create the configuration files:
362 # - in the build tree:
364 # Ensure the variables are always defined for the configure:
365 SET(GEOM_ROOT_DIR "${GEOM_ROOT_DIR}")
366 SET(MEDFILE_ROOT_DIR "${MEDFILE_ROOT_DIR}")
367 SET(CGNS_ROOT_DIR "${CGNS_ROOT_DIR}")
368 SET(TBB_ROOT_DIR "${TBB_ROOT_DIR}")
370 SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}/include")
372 # Build variables that will be expanded when configuring Salome<MODULE>Config.cmake:
373 SALOME_CONFIGURE_PREPARE(CGNS TBB MEDFile)
375 CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in
376 ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
377 INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
378 PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX
379 GEOM_ROOT_DIR MEDFILE_ROOT_DIR CGNS_ROOT_DIR TBB_ROOT_DIR)
381 WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
382 VERSION ${${PROJECT_NAME_UC}_VERSION}
383 COMPATIBILITY AnyNewerVersion)
385 # Install the CMake configuration files:
387 "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
388 "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
389 DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}")
391 # Install the export set for use with the install-tree
392 INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
393 FILE ${PROJECT_NAME}Targets.cmake)