Salome HOME
first part of the porting on OCCT 7.0
[modules/hydro.git] / CMakeLists.txt
1 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR)
2 INCLUDE(CMakeDependentOption)
3
4 PROJECT(SalomeHYDRO C CXX)
5
6 # Ensure a proper linker behavior:
7 CMAKE_POLICY(SET CMP0003 NEW)
8
9 # Versioning
10 # ===========
11 # Project name, upper case
12 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
13
14 SET(${PROJECT_NAME_UC}_MAJOR_VERSION 1)
15 SET(${PROJECT_NAME_UC}_MINOR_VERSION 5)
16 SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
17 SET(${PROJECT_NAME_UC}_VERSION
18   ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
19 SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
20
21 IF(WIN32)
22   ADD_DEFINITIONS(-DWNT)
23 ENDIF(WIN32)
24
25
26 # Common CMake macros
27 # ===================
28 SET(CONFIGURATION_ROOT_DIR $ENV{CONFIGURATION_ROOT_DIR} CACHE PATH "Path to the Salome CMake configuration files")
29 IF(EXISTS ${CONFIGURATION_ROOT_DIR})
30   LIST(APPEND CMAKE_MODULE_PATH "${CONFIGURATION_ROOT_DIR}/cmake")
31   INCLUDE(SalomeMacros)
32 ELSE()
33   MESSAGE(FATAL_ERROR "We absolutely need the Salome CMake configuration files, please define CONFIGURATION_ROOT_DIR !")
34 ENDIF()
35
36 # Find KERNEL
37 # ==============
38 SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR} CACHE PATH "Path to the Salome KERNEL")
39 IF( EXISTS ${KERNEL_ROOT_DIR} )
40   LIST(APPEND CMAKE_MODULE_PATH "${KERNEL_ROOT_DIR}/salome_adm/cmake_files")
41   INCLUDE(SalomeMacros)
42   FIND_PACKAGE(SalomeKERNEL REQUIRED)
43   ADD_DEFINITIONS(${KERNEL_DEFINITIONS})
44   INCLUDE_DIRECTORIES(${KERNEL_INCLUDE_DIRS})
45 ELSE( EXISTS ${KERNEL_ROOT_DIR} )
46   MESSAGE(FATAL_ERROR "We absolutely need a Salome KERNEL, please define KERNEL_ROOT_DIR or turn option SALOME_HYDRO_USE_KERNEL to OFF !")
47 ENDIF( EXISTS ${KERNEL_ROOT_DIR} )
48
49 # Find SALOME GUI (optional)
50 # ==============
51 OPTION(SALOME_BUILD_GUI "Build GUI of HYDRO" ON)
52 IF(SALOME_BUILD_GUI)
53   SET(GUI_ROOT_DIR $ENV{GUI_ROOT_DIR} CACHE PATH "Path to the Salome GUI")
54   IF(EXISTS ${GUI_ROOT_DIR})
55     LIST(APPEND CMAKE_MODULE_PATH "${GUI_ROOT_DIR}/adm_local/cmake_files")
56     FIND_PACKAGE(SalomeGUI)
57   ELSE(EXISTS ${GUI_ROOT_DIR})
58     MESSAGE(FATAL_ERROR "We absolutely need a Salome GUI, please define GUI_ROOT_DIR or turn option SALOME_BUILD_GUI to OFF !")
59   ENDIF(EXISTS ${GUI_ROOT_DIR})
60   SALOME_LOG_OPTIONAL_PACKAGE(SalomeGUI SALOME_BUILD_GUI)
61 ENDIF(SALOME_BUILD_GUI)
62
63 # Find GEOM
64 # ===========
65 SET(GEOM_ROOT_DIR $ENV{GEOM_ROOT_DIR} CACHE PATH "Path to the Salome GEOM")
66 IF(EXISTS ${GEOM_ROOT_DIR})
67   LIST(APPEND CMAKE_MODULE_PATH "${GEOM_ROOT_DIR}/adm_local/cmake_files")
68   FIND_PACKAGE(SalomeGEOM REQUIRED)
69   ADD_DEFINITIONS(${GEOM_DEFINITIONS})
70   INCLUDE_DIRECTORIES(${GEOM_INCLUDE_DIRS})
71   IF(SALOME_BUILD_GUI)
72     IF(NOT SALOME_GEOM_BUILD_GUI)
73       MESSAGE(FATAL_ERROR "We absolutely need a Salome GEOM with GUI, please set SALOME_BUILD_GUI=ON in GEOM module")
74     ENDIF(NOT SALOME_GEOM_BUILD_GUI)
75   ENDIF(SALOME_BUILD_GUI)
76 ELSE(EXISTS ${GEOM_ROOT_DIR})
77   MESSAGE(FATAL_ERROR "We absolutely need a Salome GEOM, please define GEOM_ROOT_DIR")
78 ENDIF(EXISTS ${GEOM_ROOT_DIR})
79
80 # Platform setup
81 # ==============
82 INCLUDE(SalomeSetupPlatform)   # From SalomeMacros
83 # Always build libraries as shared objects:
84 SET(BUILD_SHARED_LIBS TRUE)
85 # Local macros:
86 LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/adm/cmake")
87
88 # User options
89 # ============
90 # (some options may have already been defined in KERNEL) 
91 OPTION(SALOME_BUILD_DOC "Generate HYDRO documentation" ON)
92 OPTION(SALOME_BUILD_TESTS "Build HYDRO tests" ON)
93
94 # Prerequisites
95 # =============
96 # Find "big" prerequisites first - they reference themselves many others
97 #   -> this can helps to find the smaller prerequisites and detect conflicts.
98 # In our case KERNEL may have already loaded many prerequisites which are also used in HYDRO:
99
100 ##
101 ## From KERNEL:
102 ##
103
104 # Mandatory products:
105
106 FIND_PACKAGE(SalomePythonInterp REQUIRED)
107 FIND_PACKAGE(SalomePythonLibs REQUIRED)
108 FIND_PACKAGE(SalomeCAS     REQUIRED)
109 FIND_PACKAGE(SalomeVTK     REQUIRED)
110 FIND_PACKAGE(SalomeOmniORB REQUIRED)
111
112 # Optional products:
113
114 IF(SALOME_BUILD_TESTS)
115   ENABLE_TESTING()
116   FIND_PACKAGE(SalomeCppUnit)
117   SALOME_LOG_OPTIONAL_PACKAGE(CppUnit SALOME_BUILD_TESTS)  
118 ENDIF()
119
120 IF(SALOME_BUILD_DOC)
121   IF(SALOME_USE_MPI)
122     FIND_PACKAGE(SalomeMPI) # needed for doc generation by Sphinx
123     SALOME_LOG_OPTIONAL_PACKAGE(MPI SALOME_BUILD_DOC)
124   ENDIF()  
125   FIND_PACKAGE(SalomeDoxygen)
126   FIND_PACKAGE(SalomeSphinx)
127   SALOME_LOG_OPTIONAL_PACKAGE(Doxygen SALOME_BUILD_DOC)
128   SALOME_LOG_OPTIONAL_PACKAGE(Sphinx SALOME_BUILD_DOC)
129 ENDIF()
130
131 ##
132 ## From GUI:
133 ##
134
135 FIND_PACKAGE(SalomeSIP REQUIRED)  # should come after Python and before PyQt4
136
137 # Qt
138 IF(NOT SALOME_GUI_BUILD_WITH_QT5)
139   FIND_PACKAGE(SalomeQt4 REQUIRED COMPONENTS QtCore QtGui QtXml QtWebKit QtOpenGL QtNetwork QtTest)
140   SET(QT_ROOT_DIR "${QT4_ROOT_DIR}")
141   SALOME_CONFIGURE_PREPARE(HYDROData HYDROGUI HYDROPy Qt4 PyQt4)
142 ELSE()
143   FIND_PACKAGE(SalomeQt5 REQUIRED)
144   SET(QT_ROOT_DIR "${QT5_ROOT_DIR}")
145   SALOME_CONFIGURE_PREPARE(HYDROData HYDROGUI HYDROPy Qt5 PyQt5)
146 ENDIF()
147
148 # PyQt
149 IF(NOT SALOME_GUI_BUILD_WITH_QT5)
150   FIND_PACKAGE(SalomePyQt4 REQUIRED)
151   SET(PYQT_ROOT_DIR "${PYQT4_ROOT_DIR}")
152 ELSE()
153   FIND_PACKAGE(SalomePyQt5 REQUIRED)
154   SET(PYQT_ROOT_DIR "${PYQT5_ROOT_DIR}")
155 ENDIF()
156
157 # Detection summary:
158 SALOME_PACKAGE_REPORT_AND_CHECK()
159
160 # Directories
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_LOCAL adm/cmake CACHE PATH 
176   "Install path: local SALOME CMake files") 
177 SET(SALOME_INSTALL_AMCONFIG_LOCAL adm/unix CACHE PATH
178   "Install path: local SALOME config files (obsolete, to be removed)")
179
180 SET(SALOME_INSTALL_RES "${SALOME_INSTALL_RES}" CACHE PATH "Install path: SALOME resources")
181 SET(SALOME_INSTALL_DOC "${SALOME_INSTALL_DOC}" CACHE PATH "Install path: SALOME documentation")
182
183 # Specific to HYDRO:
184 SET(SALOME_HYDRO_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/hydro" CACHE PATH 
185   "Install path: SALOME HYDRO specific data")
186 SET(SALOME_HYDRO_INSTALL_RES_SCRIPTS "${SALOME_INSTALL_RES}/hydro" CACHE PATH 
187   "Install path: SALOME HYDRO scripts")
188 SET(SALOME_HYDRO_INSTALL_SAMPLES share/salome/hydrosamples CACHE PATH
189   "Install path: SALOME HYDRO samples")
190 MARK_AS_ADVANCED(
191   SALOME_HYDRO_INSTALL_RES_DATA
192   SALOME_HYDRO_INSTALL_RES_SCRIPTS
193   SALOME_HYDRO_INSTALL_SAMPLES
194   )
195
196 # Sources 
197 # ========
198 ADD_SUBDIRECTORY (src/shapelib)
199 ADD_SUBDIRECTORY (src/HYDROData)
200 ADD_SUBDIRECTORY (src/HYDROGUI)
201 ADD_SUBDIRECTORY (src/HYDROPy)
202 ADD_SUBDIRECTORY (src/HYDROTools)
203 ADD_SUBDIRECTORY (src/HYDRO_tests)
204 IF(SALOME_BUILD_DOC)
205   ADD_SUBDIRECTORY(doc)
206 ENDIF()
207
208 # Header configuration
209 # ====================
210 SALOME_XVERSION(${PROJECT_NAME})
211 SALOME_CONFIGURE_FILE(HYDRO_version.h.in HYDRO_version.h INSTALL ${SALOME_INSTALL_HEADERS})
212
213 # Configuration export
214 # (here only the level 1 prerequisites are exposed)
215 # ====================
216 INCLUDE(CMakePackageConfigHelpers)
217
218 # List of targets in this project we want to make visible to the rest of the world.
219 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
220 SET(_${PROJECT_NAME}_exposed_targets 
221   shapelib HYDROData HYDROPy
222 )
223
224 IF(SALOME_BUILD_TESTS)
225   #LIST(APPEND _${PROJECT_NAME}_exposed_targets <insert_test_targets_here>)
226 ENDIF(SALOME_BUILD_TESTS)
227
228 IF(SALOME_BUILD_GUI)
229   LIST(APPEND _${PROJECT_NAME}_exposed_targets 
230     HYDROGUI 
231   )
232 ENDIF(SALOME_BUILD_GUI)
233
234 # Add all targets to the build-tree export set
235 EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
236   FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
237
238 # Create the configuration files:
239 #   - in the build tree:
240
241 #      Ensure the variables are always defined for the configure:
242 SET(KERNEL_ROOT_DIR "${KERNEL_ROOT_DIR}")
243 SET(GUI_ROOT_DIR "${GUI_ROOT_DIR}")
244 SET(SIP_ROOT_DIR "${SIP_ROOT_DIR}")
245 SET(QT4_ROOT_DIR "${QT4_ROOT_DIR}")
246 SET(PYQT4_ROOT_DIR "${PYQT4_ROOT_DIR}")
247 SET(CAS_ROOT_DIR "${CAS_ROOT_DIR}")
248  
249 SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}/include")
250 CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in 
251     ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
252     INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
253     PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX
254     KERNEL_ROOT_DIR GUI_ROOT_DIR SIP_ROOT_DIR QT4_ROOT_DIR PYQT4_ROOT_DIR CAS_ROOT_DIR)
255
256 #   - in the install tree (VSR 16/08/2013: TEMPORARILY COMMENT THIS - TO REMOVE?):
257 #       Get the relative path of the include directory so 
258 #       we can register it in the generated configuration files:
259 #SET(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
260 #CONFIGURE_PACKAGE_CONFIG_FILE(adm_local/cmake_files/${PROJECT_NAME}Config.cmake.in 
261 #    ${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake
262 #    INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
263 #    PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX 
264 #    KERNEL_ROOT_DIR GUI_ROOT_DIR SIP_ROOT_DIR QT4_ROOT_DIR PYQT4_ROOT_DIR EXPAT_ROOT_DIR QSCINTILLA_ROOT_DIR)
265
266 WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
267     VERSION ${${PROJECT_NAME_UC}_VERSION}
268     COMPATIBILITY AnyNewerVersion)
269   
270 # Install the CMake configuration files:
271 INSTALL(FILES
272   "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
273   "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
274   DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}")
275
276 # Install the export set for use with the install-tree
277 INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}" 
278         FILE ${PROJECT_NAME}Targets.cmake)
279
280
281
282 SET(_bin_scripts bin/hydro_setenv.py)
283 SALOME_INSTALL_SCRIPTS("${_bin_scripts}" ${SALOME_INSTALL_SCRIPT_SCRIPTS})
284