Salome HOME
Bos #20438: [CEA] SIGSEGV in SHAPER and GEOM in Pipe binormal. Correction to obtain...
[modules/geom.git] / CMakeLists.txt
1 # Copyright (C) 2013-2021  CEA/DEN, EDF R&D, OPEN CASCADE
2 #
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.
7 #
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.
12 #
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
16 #
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 #
19 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR)
20 INCLUDE(CMakeDependentOption)
21
22 PROJECT(SalomeGEOM C CXX)
23
24 # Versioning
25 # ===========
26 # Project name, upper case
27 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
28
29 SET(${PROJECT_NAME_UC}_MAJOR_VERSION 9)
30 SET(${PROJECT_NAME_UC}_MINOR_VERSION 7)
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)
35
36 # Common CMake macros
37 # ===================
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)
42 ELSE()
43   MESSAGE(FATAL_ERROR "We absolutely need the Salome CMake configuration files, please define CONFIGURATION_ROOT_DIR !")
44 ENDIF()
45
46 # Find KERNEL
47 # ===========
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})
57
58 # Platform setup
59 # ==============
60 INCLUDE(SalomeSetupPlatform)   # From KERNEL
61 # Always build libraries as shared objects:
62 SET(BUILD_SHARED_LIBS TRUE)
63
64 # User options
65 # ============
66 OPTION(SALOME_BUILD_DOC "Generate SALOME GEOM documentation" ON)
67 OPTION(SALOME_BUILD_TESTS "Build SALOME tests" ON)
68
69 # Advanced options:
70 OPTION(SALOME_BUILD_GUI "Enable GUI" ON)
71 CMAKE_DEPENDENT_OPTION(SALOME_GEOM_USE_OPENCV "Enable shape recognition from picture" OFF
72                        "SALOME_BUILD_GUI" OFF)
73 CMAKE_DEPENDENT_OPTION(SALOME_GEOM_USE_VTK "Enable VTK-dependent functionality" ON
74                        "NOT SALOME_BUILD_GUI" ON)
75 MARK_AS_ADVANCED(SALOME_BUILD_GUI SALOME_GEOM_USE_OPENCV SALOME_GEOM_USE_VTK)
76
77 # Prerequisites
78 # =============
79 # Find "big" prerequisites first - they reference themselves many others
80 #   -> this can help find the smaller prerequisites and detect conflicts.
81 # In our case KERNEL has already loaded many prereq:
82
83 ##
84 ## From KERNEL:
85 ##
86
87 # Various
88 FIND_PACKAGE(SalomePythonInterp REQUIRED)
89 FIND_PACKAGE(SalomePythonLibs REQUIRED)
90 FIND_PACKAGE(SalomePThread REQUIRED)
91 FIND_PACKAGE(SalomeSWIG REQUIRED)
92 FIND_PACKAGE(SalomeBoost REQUIRED)
93 FIND_PACKAGE(SalomeOmniORB REQUIRED)
94 FIND_PACKAGE(SalomeOmniORBPy REQUIRED)
95 FIND_PACKAGE(SalomeLibXml2 REQUIRED)
96 FIND_PACKAGE(SalomeHDF5 REQUIRED COMPONENTS C)
97
98 # Other KERNEL optionals:
99 IF(SALOME_BUILD_TESTS)
100   ENABLE_TESTING()
101   FIND_PACKAGE(SalomeCppUnit)
102   SALOME_LOG_OPTIONAL_PACKAGE(CppUnit SALOME_BUILD_TESTS)
103 ENDIF()
104 IF(SALOME_BUILD_DOC)
105   FIND_PACKAGE(SalomeDoxygen)
106   FIND_PACKAGE(SalomeGraphviz)
107   SALOME_LOG_OPTIONAL_PACKAGE(Doxygen SALOME_BUILD_DOC)
108   SALOME_LOG_OPTIONAL_PACKAGE(Graphviz SALOME_BUILD_DOC)
109 ENDIF()
110
111 # Find GUI (optional)
112 IF(SALOME_BUILD_GUI)
113   SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR} CACHE PATH "Path to the Salome GUI")
114   IF(EXISTS ${GUI_ROOT_DIR})
115     FIND_PACKAGE(SalomeGUI)
116     SALOME_GUI_WITH_CORBA() #check whether GUI built with CORBA
117     SALOME_GUI_MODE(SALOME_USE_OCCVIEWER SALOME_USE_VTKVIEWER SALOME_USE_SALOMEOBJECT
118                     OPTIONAL SALOME_USE_PLOT2DVIEWER SALOME_USE_GRAPHICSVIEW SALOME_USE_PYCONSOLE)
119     ADD_DEFINITIONS(${GUI_DEFINITIONS})
120     INCLUDE_DIRECTORIES(${GUI_INCLUDE_DIRS})
121   ELSE(EXISTS ${GUI_ROOT_DIR})
122     MESSAGE(STATUS "GUI_ROOT_DIR is not well defined, GEOM will be built without GUI!!!")
123   ENDIF(EXISTS ${GUI_ROOT_DIR})
124   SALOME_LOG_OPTIONAL_PACKAGE(SalomeGUI SALOME_BUILD_GUI)
125 ENDIF(SALOME_BUILD_GUI)
126
127 ##
128 ## Prerequisites From GUI:
129 ##
130
131 IF(SALOME_BUILD_GUI)
132   # Qt
133   FIND_PACKAGE(SalomeQt5 REQUIRED)
134   # PyQt
135   FIND_PACKAGE(SalomePyQt5 REQUIRED)
136 ENDIF(SALOME_BUILD_GUI)
137
138 ##
139 ## GEOM specifics
140 ##
141
142 FIND_PACKAGE(SalomeOpenCASCADE REQUIRED)
143
144 IF(SALOME_GEOM_USE_VTK)
145   FIND_PACKAGE(SalomeVTK REQUIRED)
146   ADD_DEFINITIONS(-DWITH_VTK)
147 ENDIF(SALOME_GEOM_USE_VTK)
148
149 # OpenCV
150 IF(SALOME_GEOM_USE_OPENCV)
151   FIND_PACKAGE(SalomeOpenCV)
152   SALOME_LOG_OPTIONAL_PACKAGE(OpenCV SALOME_GEOM_USE_OPENCV)
153   ADD_DEFINITIONS(-DWITH_OPENCV)
154 ENDIF(SALOME_GEOM_USE_OPENCV)
155
156 # Detection summary:
157 SALOME_PACKAGE_REPORT_AND_CHECK()
158
159 # Directories
160 # (default values taken from KERNEL)
161 # ===========
162 SET(SALOME_INSTALL_BINS "${SALOME_INSTALL_BINS}" CACHE PATH "Install path: SALOME binaries")
163 SET(SALOME_INSTALL_LIBS "${SALOME_INSTALL_LIBS}" CACHE PATH "Install path: SALOME libs")
164 SET(SALOME_INSTALL_IDLS "${SALOME_INSTALL_IDLS}" CACHE PATH "Install path: SALOME IDL files")
165 SET(SALOME_INSTALL_HEADERS "${SALOME_INSTALL_HEADERS}" CACHE PATH "Install path: SALOME headers")
166 SET(SALOME_INSTALL_SCRIPT_SCRIPTS "${SALOME_INSTALL_SCRIPT_SCRIPTS}" CACHE PATH
167    "Install path: SALOME scripts")
168 SET(SALOME_INSTALL_SCRIPT_DATA "${SALOME_INSTALL_SCRIPT_DATA}" CACHE PATH
169    "Install path: SALOME script data")
170 SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH
171    "Install path: SALOME Python scripts")
172 SET(SALOME_INSTALL_PYTHON "${SALOME_INSTALL_PYTHON}" CACHE PATH "Install path: SALOME Python stuff")
173 SET(SALOME_INSTALL_PYTHON_SHARED "${SALOME_INSTALL_PYTHON_SHARED}" CACHE PATH
174    "Install path: SALOME Python shared modules")
175 SET(SALOME_INSTALL_CMAKE "${SALOME_INSTALL_CMAKE}" CACHE PATH "Install path: SALOME CMake files")
176 SET(SALOME_INSTALL_CMAKE_LOCAL "${SALOME_INSTALL_CMAKE_LOCAL}" CACHE PATH
177     "Install path: local SALOME CMake files")
178 SET(SALOME_INSTALL_AMCONFIG_LOCAL "${SALOME_INSTALL_AMCONFIG_LOCAL}" CACHE PATH
179   "Install path: local SALOME config files (obsolete, to be removed)")
180
181 SET(SALOME_INSTALL_RES "${SALOME_INSTALL_RES}" CACHE PATH "Install path: SALOME resources")
182 SET(SALOME_INSTALL_DOC "${SALOME_INSTALL_DOC}" CACHE PATH "Install path: SALOME documentation")
183
184 # Specific to GEOM:
185 SET(SALOME_GEOM_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/geom" CACHE PATH
186     "Install path: SALOME GEOM specific data")
187 SET(SALOME_GEOM_INSTALL_RES_SCRIPTS "${SALOME_INSTALL_RES}/geom" CACHE PATH
188     "Install path: SALOME GEOM scripts")
189 SET(SALOME_GEOM_INSTALL_PLUGINS share/salome/plugins/geom CACHE PATH
190     "Install path: SALOME GEOM plugins")
191
192 MARK_AS_ADVANCED(SALOME_INSTALL_BINS SALOME_INSTALL_LIBS SALOME_INSTALL_IDLS SALOME_INSTALL_HEADERS)
193 MARK_AS_ADVANCED(SALOME_INSTALL_SCRIPT_SCRIPTS SALOME_INSTALL_SCRIPT_DATA SALOME_INSTALL_SCRIPT_PYTHON)
194 MARK_AS_ADVANCED(SALOME_INSTALL_APPLISKEL_SCRIPTS  SALOME_INSTALL_APPLISKEL_PYTHON SALOME_INSTALL_CMAKE SALOME_INSTALL_CMAKE_LOCAL SALOME_INSTALL_RES)
195 MARK_AS_ADVANCED(SALOME_INSTALL_PYTHON SALOME_INSTALL_PYTHON_SHARED)
196 MARK_AS_ADVANCED(SALOME_GEOM_INSTALL_RES_DATA SALOME_GEOM_INSTALL_RES_SCRIPTS SALOME_GEOM_INSTALL_PLUGINS)
197 MARK_AS_ADVANCED(SALOME_INSTALL_AMCONFIG_LOCAL SALOME_INSTALL_DOC)
198
199 # Accumulate environment variables for GEOM module
200 SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_BINS}
201                                                  ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON}
202                                                  ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON_SHARED})
203 SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_LIBS})
204
205 # Sources
206 # ========
207 ADD_SUBDIRECTORY(idl)
208
209 ADD_SUBDIRECTORY(adm_local)
210 ADD_SUBDIRECTORY(resources)
211 ADD_SUBDIRECTORY(bin)
212 ADD_SUBDIRECTORY(src)
213 IF(SALOME_BUILD_DOC)
214   ADD_SUBDIRECTORY(doc)
215 ENDIF()
216
217 # Header configuration
218 # ====================
219 SALOME_XVERSION(${PROJECT_NAME})
220 SALOME_CONFIGURE_FILE(GEOM_version.h.in GEOM_version.h INSTALL ${SALOME_INSTALL_HEADERS})
221
222 # Configuration export
223 # (here only the level 1 prerequisites are exposed)
224 # ====================
225 INCLUDE(CMakePackageConfigHelpers)
226
227 # List of targets in this project we want to make visible to the rest of the world.
228 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
229 SET(_${PROJECT_NAME}_exposed_targets
230   GEOMArchimede BlockFix GEOMbasic GEOMAlgo GEOMClient GEOMImpl
231   GEOMUtils GEOMEngine GEOM_SupervEngine GEOMSketcher
232   SalomeIDLGEOM SalomeIDLGEOMSuperv SalomeIDLAdvancedGEOM ShHealOper XAO AdvancedEngine
233   SalomeIDLSTLPlugin SalomeIDLBREPPlugin SalomeIDLSTEPPlugin SalomeIDLIGESPlugin SalomeIDLXAOPlugin
234   STLPluginEngine BREPPluginEngine STEPPluginEngine IGESPluginEngine XAOPluginEngine
235 )
236 IF(SALOME_BUILD_GUI)
237   LIST(APPEND _${PROJECT_NAME}_exposed_targets
238     AdvancedGUI BasicGUI BlocksGUI BooleanGUI BuildGUI DisplayGUI DlgRef CurveCreator EntityGUI GEOMBase
239     GEOMFiltersSelection GEOM GEOMToolsGUI GenerationGUI GroupGUI Material MeasureGUI GEOMObject
240     OperationGUI PrimitiveGUI RepairGUI TransformationGUI
241     STLPluginGUI BREPPluginGUI STEPPluginGUI IGESPluginGUI XAOPluginGUI VTKPluginGUI
242     )
243   IF(SALOME_USE_GRAPHICSVIEW)
244     LIST(APPEND _${PROJECT_NAME}_exposed_targets DependencyTree)
245   ENDIF(SALOME_USE_GRAPHICSVIEW)
246 ENDIF(SALOME_BUILD_GUI)
247
248 IF(SALOME_GEOM_USE_VTK)
249   LIST(APPEND _${PROJECT_NAME}_exposed_targets
250     OCC2VTK
251     VTKPluginEngine
252     SalomeIDLVTKPlugin
253     )
254 ENDIF(SALOME_GEOM_USE_VTK)
255
256 IF(SALOME_GEOM_USE_OPENCV)
257   LIST(APPEND _${PROJECT_NAME}_exposed_targets
258     GEOMShapeRec
259     )
260 ENDIF(SALOME_GEOM_USE_OPENCV)
261
262 # Add all targets to the build-tree export set
263 EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
264   FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
265
266 # Create the configuration files:
267 #   - in the build tree:
268
269 #      Ensure the variables are always defined for the configure:
270 SET(KERNEL_ROOT_DIR "${KERNEL_ROOT_DIR}")
271 SET(GUI_ROOT_DIR "${GUI_ROOT_DIR}")
272 SET(OPENCASCADE_ROOT_DIR "${OPENCASCADE_ROOT_DIR}")
273 SET(VTK_ROOT_DIR "${VTK_ROOT_DIR}")
274 SET(OPENCV_ROOT_DIR "${OPENCV_ROOT_DIR}")
275
276 SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}/include")
277
278 # Build variables that will be expanded when configuring Salome<MODULE>Config.cmake:
279 SALOME_CONFIGURE_PREPARE(OpenCV OpenCASCADE VTK)
280
281 CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in
282     ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
283     INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
284     PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX
285     KERNEL_ROOT_DIR GUI_ROOT_DIR OPENCASCADE_ROOT_DIR VTK_ROOT_DIR OPENCV_ROOT_DIR)
286
287 #   - in the install tree (VSR 16/08/2013: TEMPORARILY COMMENT THIS - TO REMOVE?):
288 #       Get the relative path of the include directory so
289 #       we can register it in the generated configuration files:
290 #SET(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
291 #CONFIGURE_PACKAGE_CONFIG_FILE(adm_local/cmake_files/${PROJECT_NAME}Config.cmake.in
292 #    ${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake
293 #    INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE}"
294 #    PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE CMAKE_INSTALL_PREFIX
295 #    KERNEL_ROOT_DIR GUI_ROOT_DIR OPENCASCADE_ROOT_DIR VTK_ROOT_DIR OPENCV_ROOT_DIR)
296
297 WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
298     VERSION ${${PROJECT_NAME_UC}_VERSION}
299     COMPATIBILITY AnyNewerVersion)
300
301 # Install the CMake configuration files:
302 INSTALL(FILES
303   "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
304   "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
305   DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}")
306
307 # Install the export set for use with the install-tree
308 INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
309         FILE ${PROJECT_NAME}Targets.cmake)
310
311 # Application tests
312 INSTALL(FILES CTestTestfileInstall.cmake
313   DESTINATION ${SALOME_INSTALL_SCRIPT_SCRIPTS}/test
314   RENAME CTestTestfile.cmake)