Salome HOME
d52d44683a40f3dc99ce4805c54280197b00deee
[modules/gui.git] / CMakeLists.txt
1 # Copyright (C) 2012-2013  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.
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 PROJECT(SalomeGUI C CXX)
21
22 # Ensure a proper linker behavior:
23 CMAKE_POLICY(SET CMP0003 NEW)
24
25 #set(CMAKE_PREFIX_PATH "")
26 #set(_compo QtCore QtGui)
27 #find_package(Qt4 REQUIRED COMPONENTS _compo)
28
29 # Versioning
30 # ===========
31 # Project name, upper case
32 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
33
34 SET(${PROJECT_NAME_UC}_MAJOR_VERSION 7)
35 SET(${PROJECT_NAME_UC}_MINOR_VERSION 2)
36 SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
37 SET(${PROJECT_NAME_UC}_VERSION
38   ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
39 # Temporary backward compatibility:
40 SET(VERSION ${${PROJECT_NAME_UC}_VERSION})
41 SET(VERSION_DEV "0")
42
43 # Find KERNEL
44 # ===========
45 SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR} CACHE PATH "Path to the Salome KERNEL")
46 IF(EXISTS ${KERNEL_ROOT_DIR})
47   LIST(APPEND CMAKE_MODULE_PATH "${KERNEL_ROOT_DIR}/salome_adm/cmake_files")
48   INCLUDE(SalomeMacros)
49   FIND_PACKAGE(SalomeKERNEL REQUIRED)
50 ELSE(EXISTS ${KERNEL_ROOT_DIR})
51   MESSAGE(FATAL_ERROR "We absolutely need a Salome KERNEL, please define KERNEL_ROOT_DIR")
52 ENDIF(EXISTS ${KERNEL_ROOT_DIR})
53
54
55 # Platform setup
56 # ==============
57 INCLUDE(SalomeSetupPlatform)   # From KERNEL
58 # Always build libraries as shared objects:
59 SET(BUILD_SHARED_LIBS TRUE)
60 # Local macros:
61 LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/adm_local/cmake_files")
62
63 # User options
64 # (some options have already been defined in KERNEL) 
65 # ============
66 OPTION(SALOME_USE_MPI "Use MPI containers" ${SALOME_USE_MPI})
67 OPTION(SALOME_BUILD_DOC "Generate SALOME GUI documentation" ${SALOME_BUILD_DOC})
68 OPTION(SALOME_BUILD_TESTS "Build SALOME tests" ${SALOME_BUILD_TESTS})
69
70 # Advanced options:
71 OPTION(SALOME_LIGHT_ONLY "Build SALOME Light only (no CORBA)" ${SALOME_LIGHT_ONLY})
72
73 OPTION(SALOME_USE_VTKVIEWER "Enable VTK visualization (Mandatory in classic configurations)" ON)
74 OPTION(SALOME_USE_SALOMEOBJECT "Enable Salome Object (Mandatory in classic configurations)" ON)
75 OPTION(SALOME_USE_OCCVIEWER "Enable OCC visualization (Mandatory in classic configurations)" ON)
76 OPTION(SALOME_USE_GLVIEWER "Enable OpenGL visualization (Mandatory in classic configurations)" ON)
77 OPTION(SALOME_USE_PLOT2DVIEWER "Enable Plot2D visualization (Mandatory in classic configurations)" ON)
78 OPTION(SALOME_USE_PYCONSOLE "Enable Python GUI interface (Mandatory in classic configurations)" ON)
79 OPTION(SALOME_USE_SUPERVGRAPHVIEWER "Enable Supervision visualization (Mandatory in classic configurations)" ON)
80 OPTION(SALOME_USE_QXGRAPHVIEWER "Enable QX graph visualization (Mandatory in classic configurations)" ON)
81
82 MARK_AS_ADVANCED(SALOME_LIGHT_ONLY SALOME_USE_LIBBATCH SALOME_USE_VTKVIEWER SALOME_USE_VTKVIEWER)
83 MARK_AS_ADVANCED(SALOME_USE_SALOMEOBJECT SALOME_USE_OCCVIEWER SALOME_USE_GLVIEWER SALOME_USE_PLOT2DVIEWER)
84 MARK_AS_ADVANCED(SALOME_USE_PYCONSOLE SALOME_USE_SUPERVGRAPHVIEWER SALOME_USE_QXGRAPHVIEWER)
85
86 # Prerequisites
87 # =============
88 # Find "big" prerequisites first - they reference themselves many others
89 #   -> this can help finding the smaller prerequisites and detect conficts.
90 # In our case KERNEL has already loaded many prereq:
91
92 ##
93 ## From KERNEL:
94 ##
95
96 # Various
97 FIND_PACKAGE(SalomePython REQUIRED)
98 FIND_PACKAGE(SalomePThread REQUIRED)
99 FIND_PACKAGE(SalomeSWIG REQUIRED)
100 FIND_PACKAGE(SalomeLibXml2 REQUIRED)
101 FIND_PACKAGE(SalomeBoost REQUIRED)
102 FIND_PACKAGE(SalomeHDF5 REQUIRED COMPONENTS C)
103
104 # Other KERNEL optionals:
105 IF(SALOME_USE_MPI)
106   FIND_PACKAGE(SalomeMPI REQUIRED)
107 ENDIF()
108 IF(NOT SALOME_LIGHT_ONLY)
109   FIND_PACKAGE(SalomeOmniORB REQUIRED)
110 ENDIF() 
111 IF(SALOME_BUILD_TESTS)
112   ENABLE_TESTING()
113   FIND_PACKAGE(SalomeCppUnit REQUIRED)  
114 ENDIF()
115 IF(SALOME_BUILD_DOC)
116   FIND_PACKAGE(SalomeDoxygen REQUIRED)
117   FIND_PACKAGE(SalomeGraphviz)          # Remains optional even here.
118   FIND_PACKAGE(SalomeSphinx REQUIRED)
119 ENDIF()
120
121 ##
122 ## GUI specifics
123 ##
124
125 FIND_PACKAGE(SalomeSIP REQUIRED)  # should come after Python
126
127 # Qt4
128 FIND_PACKAGE(SalomeQt4 REQUIRED COMPONENTS QtCore QtGui QtXml QtWebKit QtOpenGL)
129 INCLUDE(${QT_USE_FILE})
130
131 FIND_PACKAGE(SalomePyQt4 REQUIRED) 
132
133 # Optional prerequisites for GUI
134 IF(SALOME_USE_OCCVIEWER)
135   FIND_PACKAGE(SalomeCAS REQUIRED)
136 ENDIF()
137 IF(SALOME_USE_GLVIEWER)
138   FIND_PACKAGE(SalomeOpenGL REQUIRED) 
139 ENDIF()
140 IF(SALOME_USE_VTKVIEWER)
141   # Required components are listed in the FindSalomeVTK.cmake file: 
142   FIND_PACKAGE(SalomeVTK 6.0 REQUIRED) 
143 ENDIF()
144 IF(SALOME_USE_PLOT2DVIEWER)
145   FIND_PACKAGE(SalomeQwt REQUIRED)  
146 ENDIF()
147
148 # Directories
149 # (default values taken from KERNEL)
150 # ===========
151 SET(SALOME_INSTALL_BINS "${SALOME_INSTALL_BINS}" CACHE PATH "Install path: SALOME binaries")
152 SET(SALOME_INSTALL_LIBS "${SALOME_INSTALL_LIBS}" CACHE PATH "Install path: SALOME libs")
153 SET(SALOME_INSTALL_IDLS "${SALOME_INSTALL_IDLS}" CACHE PATH "Install path: SALOME IDL files")
154 SET(SALOME_INSTALL_HEADERS "${SALOME_INSTALL_HEADERS}" CACHE PATH "Install path: SALOME headers")
155 SET(SALOME_INSTALL_SCRIPT_SCRIPTS "${SALOME_INSTALL_SCRIPT_SCRIPTS}" CACHE PATH 
156    "Install path: SALOME scripts")
157 SET(SALOME_INSTALL_SCRIPT_DATA "${SALOME_INSTALL_SCRIPT_DATA}" CACHE PATH 
158    "Install path: SALOME script data")
159 SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH 
160    "Install path: SALOME Python scripts")
161 SET(SALOME_INSTALL_APPLISKEL_SCRIPTS "${SALOME_INSTALL_APPLISKEL_SCRIPTS}" CACHE PATH 
162    "Install path: SALOME application skeleton - scripts")
163 SET(SALOME_INSTALL_APPLISKEL_PYTHON "${SALOME_INSTALL_APPLISKEL_PYTHON}" CACHE PATH 
164    "Install path: SALOME application skeleton - Python")
165 SET(SALOME_INSTALL_PYTHON "${SALOME_INSTALL_PYTHON}" CACHE PATH "Install path: SALOME Python stuff")
166 SET(SALOME_INSTALL_PYTHON_SHARED "${SALOME_INSTALL_PYTHON_SHARED}" CACHE PATH 
167    "Install path: SALOME Python shared modules")
168 SET(SALOME_INSTALL_CMAKE "${SALOME_INSTALL_CMAKE}" CACHE PATH "Install path: SALOME CMake files")
169 SET(SALOME_INSTALL_CMAKE_LOCAL "${SALOME_INSTALL_CMAKE_LOCAL}" CACHE PATH 
170     "Install path: local SALOME CMake files") 
171
172 SET(SALOME_INSTALL_RES "${SALOME_INSTALL_RES}" CACHE PATH "Install path: SALOME resources")
173
174 # Specific to GUI:
175 SET(SALOME_GUI_INSTALL_PARAVIEW_LIBS lib/paraview CACHE PATH 
176     "Install path: SALOME GUI ParaView libraries")
177 SET(SALOME_GUI_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/gui" CACHE PATH 
178     "Install path: SALOME GUI specific data")
179 SET(SALOME_GUI_INSTALL_RES_SCRIPTS "${SALOME_INSTALL_RES}/gui" CACHE PATH 
180     "Install path: SALOME GUI scripts")
181 SET(SALOME_GUI_INSTALL_PLUGINS share/salome/plugins/gui CACHE PATH 
182     "Install path: SALOME GUI plugins")
183
184 MARK_AS_ADVANCED(SALOME_INSTALL_BINS SALOME_INSTALL_LIBS SALOME_INSTALL_IDLS SALOME_INSTALL_HEADERS)
185 MARK_AS_ADVANCED(SALOME_INSTALL_SCRIPT_SCRIPTS SALOME_INSTALL_SCRIPT_DATA SALOME_INSTALL_SCRIPT_PYTHON)
186 MARK_AS_ADVANCED(SALOME_INSTALL_APPLISKEL_SCRIPTS  SALOME_INSTALL_APPLISKEL_PYTHON SALOME_INSTALL_CMAKE SALOME_INSTALL_CMAKE_LOCAL SALOME_INSTALL_RES)
187 MARK_AS_ADVANCED(SALOME_INSTALL_PYTHON SALOME_INSTALL_PYTHON_SHARED)
188 MARK_AS_ADVANCED(SALOME_GUI_INSTALL_PARAVIEW_LIBS SALOME_GUI_INSTALL_RES_DATA SALOME_GUI_INSTALL_RES_SCRIPTS SALOME_GUI_INSTALL_PLUGINS)
189
190 # Sources 
191 # ========
192 IF(NOT SALOME_LIGHT_ONLY)
193   SET(IDLDIR idl)
194 ENDIF()
195
196 SET(SUBDIRS
197   ${IDLDIR}
198   adm_local
199   resources
200   src
201   doc
202   bin
203   tools)
204   
205 FOREACH(dir ${SUBDIRS})
206   ADD_SUBDIRECTORY(${dir})
207 ENDFOREACH(dir ${SUBDIRS})
208
209 # Header configuration
210 # ====================
211 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))" ${${PROJECT_NAME_UC}_VERSION}
212   OUTPUT_VARIABLE XVERSION)
213
214 SET(input ${CMAKE_CURRENT_SOURCE_DIR}/GUI_version.h.in)
215 SET(output ${CMAKE_CURRENT_BINARY_DIR}/GUI_version.h)
216 MESSAGE(STATUS "Creation of ${output}")
217 CONFIGURE_FILE(${input} ${output} @ONLY)
218 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/GUI_version.h DESTINATION ${SALOME_INSTALL_HEADERS})
219
220 # Configuration export
221 # (here only the level 1 prerequisites are exposed)
222 # ====================
223 INCLUDE(CMakePackageConfigHelpers)
224
225 # List of targets in this project we want to make visible to the rest of the world.
226 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
227 SET(_${PROJECT_NAME}_exposed_targets 
228     caf CAM CASCatch  DDS Event GLViewer  LightApp  LogWindow ObjBrowser  
229     OCCViewer OpenGLUtils Plot2d  PyConsole PyInterp  QDS qtx QxScene SalomeApp 
230     SalomeIDLGUI  SalomeObject  SalomePrs SalomePyQtGUILight  SalomePyQtGUI 
231     SalomePyQt  SalomePy  SalomeSession SalomeStyle SOCC  SPlot2d std SUITApp suit  
232     SUPERVGraph SVTK  ToolsGUI  ViewerTools VTKViewer   vtkTools  SalomeGuiHelpers  
233     SalomeTreeData
234 )
235
236 IF(SALOME_BUILD_TESTS)
237   LIST(APPEND _${PROJECT_NAME}_exposed_targets SalomeAppTest) 
238 ENDIF()
239
240 # Add all targets to the build-tree export set
241 EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
242   FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
243
244 # Create the configuration files:
245 #   - in the build tree:
246
247 #      Ensure the variables are always defined for the configure:
248 SET(CPPUNIT_ROOT_DIR "${CPPUNIT_ROOT_DIR}")
249  
250 SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}/include")
251 CONFIGURE_PACKAGE_CONFIG_FILE(adm_local/cmake_files/${PROJECT_NAME}Config.cmake.in 
252     ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
253     INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE}"
254     PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE CMAKE_INSTALL_PREFIX
255        KERNEL_ROOT_DIR)
256
257 #   - in the install tree:
258 #       Get the relative path of the include directory so 
259 #       we can register it in the generated configuration files:
260 SET(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
261 CONFIGURE_PACKAGE_CONFIG_FILE(adm_local/cmake_files/${PROJECT_NAME}Config.cmake.in 
262     ${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake
263     INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE}"
264     PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE CMAKE_INSTALL_PREFIX 
265        KERNEL_ROOT_DIR)
266
267 WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
268     VERSION ${${PROJECT_NAME_UC}_VERSION}
269     COMPATIBILITY AnyNewerVersion)
270   
271 # Install the CMake configuration files:
272 INSTALL(FILES
273   "${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake"
274   "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
275   DESTINATION "${SALOME_INSTALL_CMAKE}")
276
277 # Install the export set for use with the install-tree
278 INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE}" 
279         FILE ${PROJECT_NAME}Targets.cmake)