1 # Copyright (C) 2015 CEA/DEN, EDF R&D
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
18 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2 FATAL_ERROR)
19 #INCLUDE(CMakeDependentOption)
20 PROJECT(MEDtool C CXX)
22 # Ensure a proper linker behavior:
23 CMAKE_POLICY(SET CMP0003 NEW)
27 # Project name, upper case
28 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
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)
37 # Our own set of macros:
38 LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_files")
39 INCLUDE(MEDtoolMacros)
43 #INCLUDE(SalomeSetupPlatform)
48 INCLUDE(CMakeDependentOption)
49 OPTION(MEDTOOL_MED_MICROMED "Build MED without MED file dependancy." OFF)
50 OPTION(MEDTOOL_MED_ENABLE_PYTHON "Build PYTHON bindings." ON)
51 OPTION(MEDTOOL_MED_ENABLE_PARTITIONER "Build MEDPartitioner." ON)
52 OPTION(MEDTOOL_MED_ENABLE_RENUMBER "Build Renumber." ON)
53 OPTION(MEDTOOL_MED_WITH_FILE_EXAMPLES "Install examples of files containing meshes and fields of different formats." ON)
54 OPTION(MEDTOOL_USE_MPI "(Use MPI containers) - For MED this triggers the build of ParaMEDMEM." OFF)
55 OPTION(MEDTOOL_BUILD_TESTS "Build MED tests." ON)
56 OPTION(MEDTOOL_BUILD_DOC "Build MED doc." ON)
57 CMAKE_DEPENDENT_OPTION(MEDTOOL_MED_PARTITIONER_METIS "Enable metis graph library in MEDPartitioner." ON "MEDTOOL_MED_ENABLE_PARTITIONER" OFF)
58 CMAKE_DEPENDENT_OPTION(MEDTOOL_MED_PARTITIONER_SCOTCH "Enable scotch graph library in MEDPartitioner." ON "MEDTOOL_MED_ENABLE_PARTITIONER;NOT MEDTOOL_USE_MPI" OFF)
59 CMAKE_DEPENDENT_OPTION(MEDTOOL_MED_PARTITIONER_PARMETIS "Enable parmetis graph library in MEDPartitioner." ON "MEDTOOL_MED_ENABLE_PARTITIONER;MEDTOOL_USE_MPI" OFF)
61 CMAKE_DEPENDENT_OPTION(MEDTOOL_MED_MEDLOADER_USE_XDR "Enable use of XDR for SauvReader." ON "NOT MEDTOOL_MED_MICROMED" OFF)
65 # Set list of prerequisites
66 # =========================
68 LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_files")
70 IF(NOT MEDTOOL_MED_MICROMED)
71 #FIND_PACKAGE(SalomeHDF5 REQUIRED)
72 #FIND_PACKAGE(SalomeMEDFile REQUIRED)
73 FIND_PACKAGE(HDF5 REQUIRED)
74 FIND_PACKAGE(MEDFile REQUIRED)
77 #FIND_PACKAGE(SalomeXDR REQUIRED)
78 FIND_PACKAGE(XDR REQUIRED)
80 IF(MEDTOOL_MED_MEDLOADER_USE_XDR)
81 #FIND_PACKAGE(SalomeXDR REQUIRED)
82 FIND_PACKAGE(XDR REQUIRED)
83 ENDIF(MEDTOOL_MED_MEDLOADER_USE_XDR)
86 IF(MEDTOOL_MED_ENABLE_PARTITIONER)
87 #FIND_PACKAGE(SalomeLibXml2)
88 #SALOME_LOG_OPTIONAL_PACKAGE(LibXml2 MEDTOOL_MED_ENABLE_PARTITIONER)
89 IF(DEFINED ENV{LIBXML2_ROOT_DIR})
90 SET(LIBXML2_ROOT_DIR $ENV{LIBXML2_ROOT_DIR} CACHE PATH "Path to the LibXml2.")
91 LIST(APPEND CMAKE_PREFIX_PATH "${LIBXML2_ROOT_DIR}")
94 IF(MEDTOOL_MED_PARTITIONER_METIS)
95 #FIND_PACKAGE(SalomeMetis)
96 #SALOME_LOG_OPTIONAL_PACKAGE(Metis MEDTOOL_MED_PARTITIONER_METIS)
98 ADD_DEFINITIONS("-DMED_ENABLE_METIS")
99 ENDIF(MEDTOOL_MED_PARTITIONER_METIS)
100 IF(MEDTOOL_MED_PARTITIONER_SCOTCH)
101 #FIND_PACKAGE(SalomeScotch)
102 #SALOME_LOG_OPTIONAL_PACKAGE(Scotch MEDTOOL_MED_PARTITIONER_SCOTCH)
104 ADD_DEFINITIONS("-DMED_ENABLE_SCOTCH")
105 ENDIF(MEDTOOL_MED_PARTITIONER_SCOTCH)
106 ENDIF(MEDTOOL_MED_ENABLE_PARTITIONER)
107 ENDIF(NOT MEDTOOL_MED_MICROMED)
109 ENABLE_TESTING() # let it outsite because even if MEDTOOL_BUILD_TESTS is OFF, python tests that not need additional compilation can be run.
111 IF(MEDTOOL_BUILD_TESTS)
112 #FIND_PACKAGE(SalomeCppUnit)
113 #SALOME_LOG_OPTIONAL_PACKAGE(CppUnit MEDTOOL_BUILD_TESTS)
114 FIND_PACKAGE(CppUnit)
115 ENDIF(MEDTOOL_BUILD_TESTS)
118 #FIND_PACKAGE(SalomeMPI REQUIRED)
119 FIND_PACKAGE(MPI REQUIRED)
120 ADD_DEFINITIONS("-DHAVE_MPI")
121 SET(MPI_INCLUDE_DIRS ${MPI_C_INCLUDE_PATH} ${MPI_CXX_INCLUDE_PATH})
122 SET(MPI_LIBRARIES ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES})
123 SET(MPI_DEFINITIONS "${MPI_CXX_COMPILE_FLAGS}")
125 IF(MEDTOOL_MED_PARTITIONER_PARMETIS)
126 #FIND_PACKAGE(SalomeParMetis)
127 FIND_PACKAGE(ParMetis)
128 #SALOME_LOG_OPTIONAL_PACKAGE(ParMetis MEDTOOL_MED_PARTITIONER_PARMETIS)
129 ADD_DEFINITIONS("-DMED_ENABLE_PARMETIS")
130 ENDIF(MEDTOOL_MED_PARTITIONER_PARMETIS)
131 ENDIF(MEDTOOL_USE_MPI)
133 IF(MEDTOOL_MED_ENABLE_RENUMBER)
134 #FIND_PACKAGE(SalomeBoost)
135 #SALOME_LOG_OPTIONAL_PACKAGE(Boost MEDTOOL_MED_ENABLE_RENUMBER)
136 IF(DEFINED ENV{BOOST_ROOT_DIR})
137 SET(BOOST_ROOT_DIR $ENV{BOOST_ROOT_DIR} CACHE PATH "Path to the Boost.")
138 LIST(APPEND CMAKE_PREFIX_PATH "${BOOST_ROOT_DIR}")
140 SET(Boost_USE_STATIC_LIBS OFF)
141 SET(Boost_USE_MULTITHREADED ON)
142 SET(Boost_USE_STATIC_RUNTIME OFF)
143 SET(Boost_NO_BOOST_CMAKE ON)
144 #SET(SalomeBoost_FIND_COMPONENTS filesystem regex signals system thread date_time chrono)
146 ENDIF(MEDTOOL_MED_ENABLE_RENUMBER)
148 IF(MEDTOOL_BUILD_DOC)
149 #FIND_PACKAGE(SalomeDoxygen)
150 #FIND_PACKAGE(SalomeGraphviz)
151 #FIND_PACKAGE(SalomeSphinx)
152 #SALOME_LOG_OPTIONAL_PACKAGE(Doxygen MEDTOOL_BUILD_DOC)
153 #SALOME_LOG_OPTIONAL_PACKAGE(Graphviz MEDTOOL_BUILD_DOC)
154 #SALOME_LOG_OPTIONAL_PACKAGE(Sphinx MEDTOOL_BUILD_DOC)
155 FIND_PACKAGE(Doxygen)
156 IF(DEFINED ENV{GRAPHVIZ_ROOT_DIR})
157 SET(GRAPHVIZ_ROOT_DIR $ENV{GRAPHVIZ_ROOT_DIR} CACHE PATH "Path to the Graphviz.")
158 LIST(APPEND CMAKE_PREFIX_PATH "${GRAPHVIZ_ROOT_DIR}")
160 FIND_PACKAGE(Graphviz)
162 ENDIF(MEDTOOL_BUILD_DOC)
164 IF(MEDTOOL_MED_ENABLE_PYTHON)
165 #FIND_PACKAGE(SalomePython)
166 #FIND_PACKAGE(SalomeSWIG)
167 #SALOME_LOG_OPTIONAL_PACKAGE(Python MEDTOOL_MED_ENABLE_PYTHON)
168 #SALOME_LOG_OPTIONAL_PACKAGE(SWIG MEDTOOL_MED_ENABLE_PYTHON)
169 FIND_PACKAGE(PythonInterp)
170 GET_FILENAME_COMPONENT(_python_dir "${PYTHON_EXECUTABLE}" PATH)
171 GET_FILENAME_COMPONENT(CMAKE_INCLUDE_PATH "${_python_dir}/../include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}" ABSOLUTE)
172 GET_FILENAME_COMPONENT(CMAKE_LIBRARY_PATH "${_python_dir}/../lib" ABSOLUTE)
173 SET(PythonLibs_FIND_VERSION "${PYTHON_VERSION}")
174 FIND_PACKAGE(PythonLibs)
177 # Set the extra flags for SWIG for numpy and scipy
178 SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY)
180 SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "-DWITH_NUMPY")
183 SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "${SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY};-DWITH_SCIPY")
185 ENDIF(MEDTOOL_MED_ENABLE_PYTHON)
188 #SALOME_PACKAGE_REPORT_AND_CHECK()
192 # Directories have to be given after prerequisites (to be able to use
193 # Python version string for example).
195 SET(MEDTOOL_INSTALL_BINS bin CACHE PATH "Install path: MEDtool binaries")
196 SET(MEDTOOL_INSTALL_LIBS lib CACHE PATH "Install path: MEDtool libs")
197 SET(MEDTOOL_INSTALL_HEADERS include CACHE PATH "Install path: MEDtool headers")
198 SET(MEDTOOL_INSTALL_SCRIPT_SCRIPTS ${MEDTOOL_INSTALL_BINS} CACHE PATH "Install path: MEDtool scripts")
199 SET(MEDTOOL_INSTALL_TESTS tests CACHE PATH "Install path: MEDtool tests")
200 # SET(MEDTOOL_INSTALL_SCRIPT_DATA ${MEDTOOL_INSTALL_BINS} CACHE PATH
201 # "Install path: SALOME script data")
202 SET(MEDTOOL_INSTALL_SCRIPT_PYTHON ${MEDTOOL_INSTALL_BINS} CACHE PATH "Install path: MEDtool Python scripts")
203 # SET(MEDTOOL_INSTALL_APPLISKEL_SCRIPTS ${MEDTOOL_INSTALL_BINS}/appliskel CACHE PATH
204 # "Install path: SALOME application skeleton - scripts")
205 # SET(MEDTOOL_INSTALL_APPLISKEL_PYTHON ${MEDTOOL_INSTALL_BINS}/appliskel CACHE PATH
206 # "Install path: SALOME application skeleton - Python")
207 # SET(MEDTOOL_INSTALL_CMAKE salome_adm/cmake_files CACHE PATH "Install path: SALOME CMake files")
208 # SET(MEDTOOL_INSTALL_CMAKE_LOCAL adm_local/cmake_files CACHE PATH
209 # "Install path: local SALOME CMake files")
211 IF(MEDTOOL_MED_ENABLE_PYTHON)
212 SET(_pydir lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
213 SET(MEDTOOL_INSTALL_PYTHON ${_pydir} CACHE PATH "Install path: MEDtool Python stuff")
214 SET(MEDTOOL_INSTALL_PYTHON_SHARED ${MEDTOOL_INSTALL_PYTHON}/shared_modules CACHE PATH
215 "Install path: MEDtool Python shared modules")
216 ENDIF(MEDTOOL_MED_ENABLE_PYTHON)
218 SET(MEDTOOL_INSTALL_RES share/resources CACHE PATH "Install path: MEDTOOL resources")
219 SET(MEDTOOL_INSTALL_DOC share/doc CACHE PATH "Install path: MEDTOOL documentation")
223 SET(MEDTOOL_INSTALL_RES_DATA "${MEDTOOL_INSTALL_RES}/med" CACHE PATH "Install path: MEDTOOL specific data")
224 #SET(MEDTOOL_MED_INSTALL_RES_SCRIPTS "${MEDTOOL_INSTALL_RES}/med" CACHE PATH "Install path: SALOME MED specific scripts")
226 #MARK_AS_ADVANCED(MEDTOOL_INSTALL_BINS MEDTOOL_INSTALL_LIBS MEDTOOL_INSTALL_IDLS MEDTOOL_INSTALL_HEADERS)
227 #MARK_AS_ADVANCED(MEDTOOL_INSTALL_SCRIPT_SCRIPTS MEDTOOL_INSTALL_SCRIPT_DATA MEDTOOL_INSTALL_SCRIPT_PYTHON)
228 #MARK_AS_ADVANCED(MEDTOOL_INSTALL_APPLISKEL_SCRIPTS MEDTOOL_INSTALL_APPLISKEL_PYTHON MEDTOOL_INSTALL_CMAKE MEDTOOL_INSTALL_CMAKE_LOCAL MEDTOOL_INSTALL_RES)
229 #MARK_AS_ADVANCED(MEDTOOL_INSTALL_PYTHON MEDTOOL_INSTALL_PYTHON_SHARED MEDTOOL_MED_INSTALL_RES_DATA MEDTOOL_MED_INSTALL_RES_SCRIPTS MEDTOOL_INSTALL_DOC)
231 # Header configuration
232 # ====================
233 MEDTOOL_XVERSION(${PROJECT_NAME})
234 #SALOME_CONFIGURE_FILE(MED_version.h.in MED_version.h INSTALL ${MEDTOOL_INSTALL_HEADERS})
235 #SALOME_CONFIGURE_FILE(VERSION.in VERSION INSTALL ${MEDTOOL_INSTALL_BINS})
236 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/MEDtool_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/MEDtool_version.h)
237 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/MEDtool_version.h DESTINATION ${MEDTOOL_INSTALL_HEADERS})
239 # Accumulate environment variables for MED module
240 #SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${MEDTOOL_INSTALL_BINS}
241 # ${CMAKE_INSTALL_PREFIX}/${MEDTOOL_INSTALL_PYTHON})
242 #SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${MEDTOOL_INSTALL_LIBS})
248 ADD_DEFINITIONS("-D_USE_MATH_DEFINES")
251 #ADD_DEFINITIONS("-DMEDTOOL_ROOT_DIR=${CMAKE_INSTALL_PREFIX}")
252 ADD_SUBDIRECTORY(src)
253 #ADD_SUBDIRECTORY(adm_local)
255 IF(MEDTOOL_BUILD_DOC)
256 ADD_SUBDIRECTORY(doc)
257 ENDIF(MEDTOOL_BUILD_DOC)
259 #ADD_SUBDIRECTORY(adm_local_without_kernel)
261 IF(NOT MEDTOOL_MED_MICROMED)
262 IF(MEDTOOL_MED_WITH_FILE_EXAMPLES)
263 ADD_SUBDIRECTORY(resources)
264 ENDIF(MEDTOOL_MED_WITH_FILE_EXAMPLES)
265 ENDIF(NOT MEDTOOL_MED_MICROMED)
267 # Configuration export
268 # ====================
270 # List of targets in this project we want to make visible to the rest of the world.
271 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
272 SET(_${PROJECT_NAME}_exposed_targets
273 interpkernel medcoupling medcouplingremapper)
275 IF(NOT MEDTOOL_MED_MICROMED)
276 LIST(APPEND _${PROJECT_NAME}_exposed_targets medloader)
277 IF(MEDTOOL_MED_ENABLE_RENUMBER)
278 LIST(APPEND _${PROJECT_NAME}_exposed_targets renumbercpp)
280 IF(MEDTOOL_MED_ENABLE_PARTITIONER)
281 LIST(APPEND _${PROJECT_NAME}_exposed_targets medpartitionercpp)
282 IF(MEDTOOL_BUILD_TESTS)
283 LIST(APPEND _${PROJECT_NAME}_exposed_targets MEDPARTITIONERTest)
286 IF(MEDTOOL_BUILD_TESTS)
287 LIST(APPEND _${PROJECT_NAME}_exposed_targets InterpKernelTest)
292 LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedmem)
293 IF(NOT MEDTOOL_MED_MICROMED)
294 LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedloader)
296 IF(MEDTOOL_BUILD_TESTS)
297 IF(NOT MEDTOOL_MED_MICROMED)
298 LIST(APPEND _${PROJECT_NAME}_exposed_targets ParaMEDMEMTest)
303 # Add all targets to the build-tree export set
305 EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
306 FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
308 # Create the configuration files:
309 # - in the build tree:
311 # Ensure the variables are always defined for the configure (even if empty):
312 # SET(KERNEL_ROOT_DIR "${KERNEL_ROOT_DIR}")
313 # SET(GUI_ROOT_DIR "${GUI_ROOT_DIR}")
314 # SET(MEDFILE_ROOT_DIR "${MEDFILE_ROOT_DIR}")
315 # SET(MPI_ROOT_DIR "${MPI_ROOT_DIR}")
316 # SET(HDF5_ROOT_DIR "${HDF5_ROOT_DIR}")
317 # SET(OMNIORB_ROOT_DIR "${OMNIORB_ROOT_DIR}")
318 # SET(PTHREAD_ROOT_DIR "${PTHREAD_ROOT_DIR}")
319 # SET(BOOST_ROOT_DIR "${BOOST_ROOT_DIR}")
320 # SET(SWIG_ROOT_DIR "${SWIG_ROOT_DIR}")
321 # SET(PYTHON_ROOT_DIR "${PYTHON_ROOT_DIR}")
322 # SET(CPPUNIT_ROOT_DIR "${CPPUNIT_ROOT_DIR}")
323 # SET(GRAPHVIZ_ROOT_DIR "${GRAPHVIZ_ROOT_DIR}")
324 # SET(DOXYGEN_ROOT_DIR "${DOXYGEN_ROOT_DIR}")
325 # SET(SPHINX_ROOT_DIR "${SPHINX_ROOT_DIR}")
327 # SET(METIS_ROOT_DIR "${METIS_ROOT_DIR}")
328 # SET(PARMETIS_ROOT_DIR "${PARMETIS_ROOT_DIR}")
329 # SET(SCOTCH_ROOT_DIR "${SCOTCH_ROOT_DIR}")
330 # SET(XDR_ROOT_DIR "${XDR_ROOT_DIR}")
332 # - in the install tree:
333 # Get the relative path of the include directory so
334 # we can register it in the generated configuration files:
335 SET(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
337 # Build variables that will be expanded when configuring Salome<MODULE>Config.cmake:
338 # SALOME_CONFIGURE_PREPARE(Metis ParMetis Scotch XDR CAS Qt4 CppUnit Graphviz Doxygen Sphinx MPI omniORB
339 # PThread Boost libXml2 Python HDF5 MEDFile)
341 # INCLUDE(CMakePackageConfigHelpers)
342 # CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in
343 # ${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake
344 # INSTALL_DESTINATION "${MEDTOOL_INSTALL_CMAKE}_LOCAL"
345 # PATH_VARS CONF_INCLUDE_DIRS MEDTOOL_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX
346 # KERNEL_ROOT_DIR GUI_ROOT_DIR MEDFILE_ROOT_DIR MPI_ROOT_DIR
347 # HDF5_ROOT_DIR OMNIORB_ROOT_DIR PTHREAD_ROOT_DIR BOOST_ROOT_DIR
348 # SWIG_ROOT_DIR PYTHON_ROOT_DIR CPPUNIT_ROOT_DIR GRAPHVIZ_ROOT_DIR DOXYGEN_ROOT_DIR
349 # SPHINX_ROOT_DIR METIS_ROOT_DIR PARMETIS_ROOT_DIR SCOTCH_ROOT_DIR XDR_ROOT_DIR)
351 #WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
352 # VERSION ${${PROJECT_NAME_UC}_VERSION}
353 # COMPATIBILITY AnyNewerVersion)
355 # Install the CMake configuration files:
357 # "${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake"
358 # "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
359 # DESTINATION "${MEDTOOL_INSTALL_CMAKE_LOCAL}")
361 # Install the export set for use with the install-tree
362 #INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${MEDTOOL_INSTALL_CMAKE_LOCAL}"
363 # FILE ${PROJECT_NAME}Targets.cmake)