Salome HOME
cmake files
[modules/med.git] / medtool / CMakeLists.txt
1 # Copyright (C) 2015  CEA/DEN, EDF R&D
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
18 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2 FATAL_ERROR)
19 #INCLUDE(CMakeDependentOption)
20 PROJECT(MEDCoupling C CXX)
21
22 # Ensure a proper linker behavior:
23 CMAKE_POLICY(SET CMP0003 NEW)
24
25 # Versioning
26 # ===========
27 # Project name, upper case
28 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
29
30 SET(${PROJECT_NAME_UC}_MAJOR_VERSION 1)
31 SET(${PROJECT_NAME_UC}_MINOR_VERSION 0)
32 SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
33 SET(${PROJECT_NAME_UC}_VERSION
34   ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
35 SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
36
37 # Our own set of macros:
38 LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_files")
39 INCLUDE(MEDCouplingMacros)
40
41 #
42 # User options
43 # ============
44 INCLUDE(CMakeDependentOption)
45 OPTION(MEDCOUPLING_MED_MICROMED "Build MED without MED file dependancy." OFF)
46 OPTION(MEDCOUPLING_MED_ENABLE_PYTHON "Build PYTHON bindings." ON)
47 OPTION(MEDCOUPLING_MED_ENABLE_PARTITIONER "Build MEDPartitioner." ON)
48 OPTION(MEDCOUPLING_MED_ENABLE_RENUMBER "Build Renumber." ON)
49 OPTION(MEDCOUPLING_MED_WITH_FILE_EXAMPLES "Install examples of files containing meshes and fields of different formats." ON)
50 OPTION(MEDCOUPLING_USE_MPI "(Use MPI containers) - For MED this triggers the build of ParaMEDMEM." OFF)
51 OPTION(MEDCOUPLING_BUILD_TESTS "Build MED tests." ON)
52 OPTION(MEDCOUPLING_BUILD_DOC "Build MED doc." ON)
53 CMAKE_DEPENDENT_OPTION(MEDCOUPLING_MED_PARTITIONER_METIS "Enable metis graph library in MEDPartitioner." ON "MEDCOUPLING_MED_ENABLE_PARTITIONER" OFF)
54 CMAKE_DEPENDENT_OPTION(MEDCOUPLING_MED_PARTITIONER_SCOTCH "Enable scotch graph library in MEDPartitioner." ON "MEDCOUPLING_MED_ENABLE_PARTITIONER;NOT MEDCOUPLING_USE_MPI" OFF)
55 CMAKE_DEPENDENT_OPTION(MEDCOUPLING_MED_PARTITIONER_PARMETIS "Enable parmetis graph library in MEDPartitioner." ON "MEDCOUPLING_MED_ENABLE_PARTITIONER;MEDCOUPLING_USE_MPI" OFF)
56 IF(WIN32)
57   CMAKE_DEPENDENT_OPTION(MEDCOUPLING_MED_MEDLOADER_USE_XDR "Enable use of XDR for SauvReader." ON "NOT MEDCOUPLING_MED_MICROMED" OFF)
58 ENDIF(WIN32)
59
60 #
61 # Set list of prerequisites
62 # =========================
63
64 IF(NOT MEDCOUPLING_MED_MICROMED)
65   FIND_PACKAGE(HDF5 REQUIRED)
66   FIND_PACKAGE(MEDFile REQUIRED)
67   # XDR stuff
68   IF(NOT WIN32)
69     FIND_PACKAGE(XDR REQUIRED)
70   ELSE(NOT WIN32)
71     IF(MEDCOUPLING_MED_MEDLOADER_USE_XDR)
72       FIND_PACKAGE(XDR REQUIRED)
73     ENDIF(MEDCOUPLING_MED_MEDLOADER_USE_XDR)
74   ENDIF(NOT WIN32)
75   # End of XDR Stuff
76   IF(MEDCOUPLING_MED_ENABLE_PARTITIONER)
77     IF(DEFINED ENV{LIBXML2_ROOT_DIR})
78       SET(LIBXML2_ROOT_DIR $ENV{LIBXML2_ROOT_DIR} CACHE PATH "Path to the LibXml2.")
79       LIST(APPEND CMAKE_PREFIX_PATH "${LIBXML2_ROOT_DIR}")
80     ENDIF()
81     FIND_PACKAGE(LibXml2)
82     IF(MEDCOUPLING_MED_PARTITIONER_METIS)
83       FIND_PACKAGE(Metis)
84       ADD_DEFINITIONS("-DMED_ENABLE_METIS")
85     ENDIF(MEDCOUPLING_MED_PARTITIONER_METIS)
86     IF(MEDCOUPLING_MED_PARTITIONER_SCOTCH)
87       FIND_PACKAGE(Scotch)
88       ADD_DEFINITIONS("-DMED_ENABLE_SCOTCH")
89     ENDIF(MEDCOUPLING_MED_PARTITIONER_SCOTCH)
90   ENDIF(MEDCOUPLING_MED_ENABLE_PARTITIONER)
91 ENDIF(NOT MEDCOUPLING_MED_MICROMED)
92
93 ENABLE_TESTING() # let it outsite because even if MEDCOUPLING_BUILD_TESTS is OFF, python tests that not need additional compilation can be run.
94
95 IF(MEDCOUPLING_BUILD_TESTS)
96   FIND_PACKAGE(CppUnit)
97 ENDIF(MEDCOUPLING_BUILD_TESTS)
98
99 IF(MEDCOUPLING_USE_MPI)
100   FIND_PACKAGE(MPI REQUIRED)
101   ADD_DEFINITIONS("-DHAVE_MPI")
102   SET(MPI_INCLUDE_DIRS ${MPI_C_INCLUDE_PATH} ${MPI_CXX_INCLUDE_PATH})
103   SET(MPI_LIBRARIES ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES})
104   SET(MPI_DEFINITIONS "${MPI_CXX_COMPILE_FLAGS}")
105
106   IF(MEDCOUPLING_MED_PARTITIONER_PARMETIS)
107     FIND_PACKAGE(ParMetis)
108     ADD_DEFINITIONS("-DMED_ENABLE_PARMETIS")
109   ENDIF(MEDCOUPLING_MED_PARTITIONER_PARMETIS)
110 ENDIF(MEDCOUPLING_USE_MPI)
111
112 IF(MEDCOUPLING_MED_ENABLE_RENUMBER)
113   IF(DEFINED ENV{BOOST_ROOT_DIR})
114     SET(BOOST_ROOT_DIR $ENV{BOOST_ROOT_DIR} CACHE PATH "Path to the Boost.")
115     LIST(APPEND CMAKE_PREFIX_PATH "${BOOST_ROOT_DIR}")
116   ENDIF()
117   SET(Boost_USE_STATIC_LIBS        OFF)
118   SET(Boost_USE_MULTITHREADED      ON)
119   SET(Boost_USE_STATIC_RUNTIME     OFF)
120   SET(Boost_NO_BOOST_CMAKE         ON)
121   FIND_PACKAGE(Boost)
122 ENDIF(MEDCOUPLING_MED_ENABLE_RENUMBER)
123
124 IF(MEDCOUPLING_BUILD_DOC)
125   FIND_PACKAGE(Doxygen)
126   FIND_PACKAGE(Graphviz)
127   FIND_PACKAGE(Sphinx)
128 ENDIF(MEDCOUPLING_BUILD_DOC)
129
130 IF(MEDCOUPLING_MED_ENABLE_PYTHON)
131   FIND_PACKAGE(PythonInterp)
132   GET_FILENAME_COMPONENT(_python_dir "${PYTHON_EXECUTABLE}" PATH)
133   GET_FILENAME_COMPONENT(CMAKE_INCLUDE_PATH "${_python_dir}/../include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}" ABSOLUTE)
134   GET_FILENAME_COMPONENT(CMAKE_LIBRARY_PATH "${_python_dir}/../lib" ABSOLUTE)
135   SET(PythonLibs_FIND_VERSION "${PYTHON_VERSION}")
136   FIND_PACKAGE(PythonLibs)
137
138   FIND_PACKAGE(SWIG)
139   # Set the extra flags for SWIG for numpy and scipy
140   SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY)
141   IF(NUMPY_FOUND)
142     SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "-DWITH_NUMPY")
143   ENDIF(NUMPY_FOUND)
144   IF(SCIPY_FOUND)
145     SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "${SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY};-DWITH_SCIPY")
146   ENDIF(SCIPY_FOUND)
147 ENDIF(MEDCOUPLING_MED_ENABLE_PYTHON)
148
149 # Directories
150 #
151 # Directories have to be given after prerequisites (to be able to use
152 # Python version string for example).
153 # ===========
154 SET(MEDCOUPLING_INSTALL_BINS bin CACHE PATH "Install path: MEDCoupling binaries")
155 SET(MEDCOUPLING_INSTALL_LIBS lib CACHE PATH "Install path: MEDCoupling libs")
156 SET(MEDCOUPLING_INSTALL_HEADERS include CACHE PATH "Install path: MEDCoupling headers")
157 SET(MEDCOUPLING_INSTALL_SCRIPT_SCRIPTS ${MEDCOUPLING_INSTALL_BINS} CACHE PATH "Install path: MEDCoupling scripts")
158 SET(MEDCOUPLING_INSTALL_TESTS tests CACHE PATH "Install path: MEDCoupling tests")
159 # SET(MEDCOUPLING_INSTALL_SCRIPT_DATA ${MEDCOUPLING_INSTALL_BINS} CACHE PATH "Install path: MEDCoupling script data")
160 SET(MEDCOUPLING_INSTALL_SCRIPT_PYTHON ${MEDCOUPLING_INSTALL_BINS} CACHE PATH "Install path: MEDCoupling Python scripts")
161 SET(MEDCOUPLING_INSTALL_CMAKE_LOCAL cmake_files CACHE PATH "Install path: local MEDCoupling CMake files")
162
163 IF(MEDCOUPLING_MED_ENABLE_PYTHON)
164   SET(_pydir lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
165   SET(MEDCOUPLING_INSTALL_PYTHON ${_pydir} CACHE PATH "Install path: MEDCoupling Python stuff")
166   SET(MEDCOUPLING_INSTALL_PYTHON_SHARED ${MEDCOUPLING_INSTALL_PYTHON}/shared_modules CACHE PATH
167     "Install path: MEDCoupling Python shared modules")
168 ENDIF(MEDCOUPLING_MED_ENABLE_PYTHON)
169
170 SET(MEDCOUPLING_INSTALL_RES share/resources CACHE PATH "Install path: MEDCoupling resources")
171 SET(MEDCOUPLING_INSTALL_DOC share/doc CACHE PATH "Install path: MEDCoupling documentation")
172
173 # Med specific:
174
175 SET(MEDCOUPLING_INSTALL_RES_DATA "${MEDCOUPLING_INSTALL_RES}/med" CACHE PATH "Install path: MEDCoupling specific data")
176 #SET(MEDCOUPLING_MED_INSTALL_RES_SCRIPTS "${MEDCOUPLING_INSTALL_RES}/med" CACHE PATH "Install path: MEDCouplng specific scripts")
177
178 MARK_AS_ADVANCED(MEDCOUPLING_INSTALL_BINS MEDCOUPLING_INSTALL_LIBS MEDCOUPLING_INSTALL_IDLS MEDCOUPLING_INSTALL_HEADERS)
179 MARK_AS_ADVANCED(MEDCOUPLING_INSTALL_SCRIPT_SCRIPTS MEDCOUPLING_INSTALL_SCRIPT_DATA MEDCOUPLING_INSTALL_SCRIPT_PYTHON)
180 MARK_AS_ADVANCED(MEDCOUPLING_INSTALL_APPLISKEL_SCRIPTS  MEDCOUPLING_INSTALL_APPLISKEL_PYTHON MEDCOUPLING_INSTALL_CMAKE MEDCOUPLING_INSTALL_CMAKE_LOCAL MEDCOUPLING_INSTALL_RES)
181 MARK_AS_ADVANCED(MEDCOUPLING_INSTALL_PYTHON MEDCOUPLING_INSTALL_PYTHON_SHARED MEDCOUPLING_MED_INSTALL_RES_DATA MEDCOUPLING_MED_INSTALL_RES_SCRIPTS MEDCOUPLING_INSTALL_DOC)
182
183 # Header configuration
184 # ====================
185 MEDCOUPLING_XVERSION(${PROJECT_NAME})
186 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/MEDCoupling_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/MEDCoupling_version.h)
187 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/MEDCoupling_version.h DESTINATION ${MEDCOUPLING_INSTALL_HEADERS})
188
189 # Accumulate environment variables for MED module
190 #SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${MEDCOUPLING_INSTALL_BINS}
191 #                                                 ${CMAKE_INSTALL_PREFIX}/${MEDCOUPLING_INSTALL_PYTHON})
192 #SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${MEDCOUPLING_INSTALL_LIBS})
193
194
195 # Sources
196 # ========
197 IF(WIN32)
198   ADD_DEFINITIONS("-D_USE_MATH_DEFINES")
199 ENDIF(WIN32)
200
201 ADD_SUBDIRECTORY(src)
202 ADD_SUBDIRECTORY(cmake_files)
203
204 IF(MEDCOUPLING_BUILD_DOC)
205   ADD_SUBDIRECTORY(doc)
206 ENDIF(MEDCOUPLING_BUILD_DOC)
207
208 IF(NOT MEDCOUPLING_MED_MICROMED)
209   IF(MEDCOUPLING_MED_WITH_FILE_EXAMPLES)
210     ADD_SUBDIRECTORY(resources)
211   ENDIF(MEDCOUPLING_MED_WITH_FILE_EXAMPLES)
212 ENDIF(NOT MEDCOUPLING_MED_MICROMED)
213
214 # Configuration export
215 # ====================
216
217 # List of targets in this project we want to make visible to the rest of the world.
218 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
219 SET(_${PROJECT_NAME}_exposed_targets
220    interpkernel medcoupling medcouplingremapper)
221
222 IF(NOT MEDCOUPLING_MED_MICROMED)
223   LIST(APPEND _${PROJECT_NAME}_exposed_targets medloader)
224   IF(MEDCOUPLING_MED_ENABLE_RENUMBER)
225     LIST(APPEND _${PROJECT_NAME}_exposed_targets renumbercpp)
226   ENDIF()
227   IF(MEDCOUPLING_MED_ENABLE_PARTITIONER)
228     LIST(APPEND _${PROJECT_NAME}_exposed_targets medpartitionercpp)
229     IF(MEDCOUPLING_BUILD_TESTS)
230       LIST(APPEND _${PROJECT_NAME}_exposed_targets MEDPARTITIONERTest)
231     ENDIF()
232   ENDIF()
233   IF(MEDCOUPLING_BUILD_TESTS)
234     LIST(APPEND _${PROJECT_NAME}_exposed_targets InterpKernelTest)
235   ENDIF()
236 ENDIF()
237
238 IF(MEDCOUPLING_USE_MPI)
239   LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedmem)
240   IF(NOT MEDCOUPLING_MED_MICROMED)
241     LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedloader)
242   ENDIF()
243   IF(MEDCOUPLING_BUILD_TESTS)
244     IF(NOT MEDCOUPLING_MED_MICROMED)
245       LIST(APPEND _${PROJECT_NAME}_exposed_targets ParaMEDMEMTest)
246     ENDIF()
247   ENDIF()
248 ENDIF()
249
250 # Add all targets to the build-tree export set
251
252 EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
253   FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
254
255 # Create the configuration files:
256 #   - in the build tree:
257
258 #      Ensure the variables are always defined for the configure (even if empty):
259 # SET(KERNEL_ROOT_DIR "${KERNEL_ROOT_DIR}")
260 # SET(GUI_ROOT_DIR "${GUI_ROOT_DIR}")
261 # SET(MEDFILE_ROOT_DIR "${MEDFILE_ROOT_DIR}")
262 # SET(MPI_ROOT_DIR "${MPI_ROOT_DIR}")
263 # SET(HDF5_ROOT_DIR "${HDF5_ROOT_DIR}")
264 # SET(OMNIORB_ROOT_DIR "${OMNIORB_ROOT_DIR}")
265 # SET(PTHREAD_ROOT_DIR "${PTHREAD_ROOT_DIR}")
266 # SET(BOOST_ROOT_DIR "${BOOST_ROOT_DIR}")
267 # SET(SWIG_ROOT_DIR "${SWIG_ROOT_DIR}")
268 # SET(PYTHON_ROOT_DIR "${PYTHON_ROOT_DIR}")
269 # SET(CPPUNIT_ROOT_DIR "${CPPUNIT_ROOT_DIR}")
270 # SET(GRAPHVIZ_ROOT_DIR "${GRAPHVIZ_ROOT_DIR}")
271 # SET(DOXYGEN_ROOT_DIR "${DOXYGEN_ROOT_DIR}")
272 # SET(SPHINX_ROOT_DIR "${SPHINX_ROOT_DIR}")
273
274 # SET(METIS_ROOT_DIR "${METIS_ROOT_DIR}")
275 # SET(PARMETIS_ROOT_DIR "${PARMETIS_ROOT_DIR}")
276 # SET(SCOTCH_ROOT_DIR "${SCOTCH_ROOT_DIR}")
277 # SET(XDR_ROOT_DIR "${XDR_ROOT_DIR}")
278
279 #   - in the install tree:
280 #       Get the relative path of the include directory so
281 #       we can register it in the generated configuration files:
282 SET(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
283
284 # Build variables that will be expanded when configuring Salome<MODULE>Config.cmake:
285 # SALOME_CONFIGURE_PREPARE(Metis ParMetis Scotch XDR CAS Qt4 CppUnit Graphviz Doxygen Sphinx MPI omniORB
286 #                          PThread Boost libXml2 Python HDF5 MEDFile)
287
288 # INCLUDE(CMakePackageConfigHelpers)
289 # CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in
290 #     ${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake
291 #     INSTALL_DESTINATION "${MEDCOUPLING_INSTALL_CMAKE}_LOCAL"
292 #     PATH_VARS CONF_INCLUDE_DIRS MEDCOUPLING_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX
293 #        KERNEL_ROOT_DIR GUI_ROOT_DIR MEDFILE_ROOT_DIR MPI_ROOT_DIR
294 #        HDF5_ROOT_DIR OMNIORB_ROOT_DIR PTHREAD_ROOT_DIR BOOST_ROOT_DIR
295 #        SWIG_ROOT_DIR PYTHON_ROOT_DIR CPPUNIT_ROOT_DIR GRAPHVIZ_ROOT_DIR DOXYGEN_ROOT_DIR
296 #        SPHINX_ROOT_DIR METIS_ROOT_DIR PARMETIS_ROOT_DIR SCOTCH_ROOT_DIR XDR_ROOT_DIR)
297
298 #WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
299 #    VERSION ${${PROJECT_NAME_UC}_VERSION}
300 #    COMPATIBILITY AnyNewerVersion)
301
302 # Install the CMake configuration files:
303 # INSTALL(FILES
304 #   "${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake"
305 #   "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
306 #   DESTINATION "${MEDCOUPLING_INSTALL_CMAKE_LOCAL}")
307
308 # Install the export set for use with the install-tree
309 #INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${MEDCOUPLING_INSTALL_CMAKE_LOCAL}"
310 #        FILE ${PROJECT_NAME}Targets.cmake)