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 ENDIF(MEDTOOL_MED_MEDLOADER_USE_XDR)
85 IF(MEDTOOL_MED_ENABLE_PARTITIONER)
86 #FIND_PACKAGE(SalomeLibXml2)
87 #SALOME_LOG_OPTIONAL_PACKAGE(LibXml2 MEDTOOL_MED_ENABLE_PARTITIONER)
88 IF(DEFINED ENV{LIBXML2_ROOT_DIR})
89 SET(LIBXML2_ROOT_DIR $ENV{LIBXML2_ROOT_DIR} CACHE PATH "Path to the LibXml2.")
90 LIST(APPEND CMAKE_PREFIX_PATH "${LIBXML2_ROOT_DIR}")
93 IF(MEDTOOL_MED_PARTITIONER_METIS)
94 #FIND_PACKAGE(SalomeMetis)
95 #SALOME_LOG_OPTIONAL_PACKAGE(Metis MEDTOOL_MED_PARTITIONER_METIS)
97 ADD_DEFINITIONS("-DMED_ENABLE_METIS")
98 ENDIF(MEDTOOL_MED_PARTITIONER_METIS)
99 IF(MEDTOOL_MED_PARTITIONER_SCOTCH)
100 #FIND_PACKAGE(SalomeScotch)
101 #SALOME_LOG_OPTIONAL_PACKAGE(Scotch MEDTOOL_MED_PARTITIONER_SCOTCH)
103 ADD_DEFINITIONS("-DMED_ENABLE_SCOTCH")
104 ENDIF(MEDTOOL_MED_PARTITIONER_SCOTCH)
105 ENDIF(MEDTOOL_MED_ENABLE_PARTITIONER)
106 ENDIF(NOT MEDTOOL_MED_MICROMED)
108 ENABLE_TESTING() # let it outsite because even if MEDTOOL_BUILD_TESTS is OFF, python tests that not need additional compilation can be run.
110 IF(MEDTOOL_BUILD_TESTS)
111 #FIND_PACKAGE(SalomeCppUnit)
112 #SALOME_LOG_OPTIONAL_PACKAGE(CppUnit MEDTOOL_BUILD_TESTS)
113 FIND_PACKAGE(CppUnit)
114 ENDIF(MEDTOOL_BUILD_TESTS)
117 #FIND_PACKAGE(SalomeMPI REQUIRED)
118 FIND_PACKAGE(MPI REQUIRED)
119 ADD_DEFINITIONS("-DHAVE_MPI")
120 SET(MPI_INCLUDE_DIRS ${MPI_C_INCLUDE_PATH} ${MPI_CXX_INCLUDE_PATH})
121 SET(MPI_LIBRARIES ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES})
122 SET(MPI_DEFINITIONS "${MPI_CXX_COMPILE_FLAGS}")
124 IF(MEDTOOL_MED_PARTITIONER_PARMETIS)
125 #FIND_PACKAGE(SalomeParMetis)
126 FIND_PACKAGE(ParMetis)
127 #SALOME_LOG_OPTIONAL_PACKAGE(ParMetis MEDTOOL_MED_PARTITIONER_PARMETIS)
128 ADD_DEFINITIONS("-DMED_ENABLE_PARMETIS")
129 ENDIF(MEDTOOL_MED_PARTITIONER_PARMETIS)
130 ENDIF(MEDTOOL_USE_MPI)
132 IF(MEDTOOL_MED_ENABLE_RENUMBER)
133 #FIND_PACKAGE(SalomeBoost)
134 #SALOME_LOG_OPTIONAL_PACKAGE(Boost MEDTOOL_MED_ENABLE_RENUMBER)
135 IF(DEFINED ENV{BOOST_ROOT_DIR})
136 SET(BOOST_ROOT_DIR $ENV{BOOST_ROOT_DIR} CACHE PATH "Path to the Boost.")
137 LIST(APPEND CMAKE_PREFIX_PATH "${BOOST_ROOT_DIR}")
139 SET(Boost_USE_STATIC_LIBS OFF)
140 SET(Boost_USE_MULTITHREADED ON)
141 SET(Boost_USE_STATIC_RUNTIME OFF)
142 SET(Boost_NO_BOOST_CMAKE ON)
143 SET(SalomeBoost_FIND_COMPONENTS filesystem regex signals system thread date_time chrono)
145 ENDIF(MEDTOOL_MED_ENABLE_RENUMBER)
147 IF(MEDTOOL_BUILD_DOC)
148 #FIND_PACKAGE(SalomeDoxygen)
149 #FIND_PACKAGE(SalomeGraphviz)
150 #FIND_PACKAGE(SalomeSphinx)
151 #SALOME_LOG_OPTIONAL_PACKAGE(Doxygen MEDTOOL_BUILD_DOC)
152 #SALOME_LOG_OPTIONAL_PACKAGE(Graphviz MEDTOOL_BUILD_DOC)
153 #SALOME_LOG_OPTIONAL_PACKAGE(Sphinx MEDTOOL_BUILD_DOC)
154 FIND_PACKAGE(Doxygen)
155 IF(DEFINED ENV{GRAPHVIZ_ROOT_DIR})
156 SET(GRAPHVIZ_ROOT_DIR $ENV{GRAPHVIZ_ROOT_DIR} CACHE PATH "Path to the Graphviz.")
157 LIST(APPEND CMAKE_PREFIX_PATH "${GRAPHVIZ_ROOT_DIR}")
159 FIND_PACKAGE(Graphviz)
161 ENDIF(MEDTOOL_BUILD_DOC)
163 IF(MEDTOOL_MED_ENABLE_PYTHON)
164 #FIND_PACKAGE(SalomePython)
165 #FIND_PACKAGE(SalomeSWIG)
166 #SALOME_LOG_OPTIONAL_PACKAGE(Python MEDTOOL_MED_ENABLE_PYTHON)
167 #SALOME_LOG_OPTIONAL_PACKAGE(SWIG MEDTOOL_MED_ENABLE_PYTHON)
168 FIND_PACKAGE(PythonInterp)
169 GET_FILENAME_COMPONENT(_python_dir "${PYTHON_EXECUTABLE}" PATH)
170 GET_FILENAME_COMPONENT(CMAKE_INCLUDE_PATH "${_python_dir}/../include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}" ABSOLUTE)
171 GET_FILENAME_COMPONENT(CMAKE_LIBRARY_PATH "${_python_dir}/../lib" ABSOLUTE)
172 SET(PythonLibs_FIND_VERSION "${PYTHON_VERSION}")
173 FIND_PACKAGE(PythonLibs)
176 # Set the extra flags for SWIG for numpy and scipy
177 SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY)
179 SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "-DWITH_NUMPY")
182 SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "${SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY};-DWITH_SCIPY")
184 ENDIF(MEDTOOL_MED_ENABLE_PYTHON)
187 #SALOME_PACKAGE_REPORT_AND_CHECK()
191 # Directories have to be given after prerequisites (to be able to use
192 # Python version string for example).
194 SET(MEDTOOL_INSTALL_BINS bin CACHE PATH "Install path: MEDtool binaries")
195 SET(MEDTOOL_INSTALL_LIBS lib CACHE PATH "Install path: MEDtool libs")
196 SET(MEDTOOL_INSTALL_HEADERS include CACHE PATH "Install path: MEDtool headers")
197 SET(MEDTOOL_INSTALL_SCRIPT_SCRIPTS ${MEDTOOL_INSTALL_BINS} CACHE PATH "Install path: MEDtool scripts")
198 SET(MEDTOOL_INSTALL_TESTS tests CACHE PATH "Install path: MEDtool tests")
199 # SET(MEDTOOL_INSTALL_SCRIPT_DATA ${MEDTOOL_INSTALL_BINS} CACHE PATH
200 # "Install path: SALOME script data")
201 SET(MEDTOOL_INSTALL_SCRIPT_PYTHON ${MEDTOOL_INSTALL_BINS} CACHE PATH "Install path: MEDtool Python scripts")
202 # SET(MEDTOOL_INSTALL_APPLISKEL_SCRIPTS ${MEDTOOL_INSTALL_BINS}/appliskel CACHE PATH
203 # "Install path: SALOME application skeleton - scripts")
204 # SET(MEDTOOL_INSTALL_APPLISKEL_PYTHON ${MEDTOOL_INSTALL_BINS}/appliskel CACHE PATH
205 # "Install path: SALOME application skeleton - Python")
206 # SET(MEDTOOL_INSTALL_CMAKE salome_adm/cmake_files CACHE PATH "Install path: SALOME CMake files")
207 # SET(MEDTOOL_INSTALL_CMAKE_LOCAL adm_local/cmake_files CACHE PATH
208 # "Install path: local SALOME CMake files")
210 IF(MEDTOOL_MED_ENABLE_PYTHON)
211 SET(_pydir lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
212 SET(MEDTOOL_INSTALL_PYTHON ${_pydir} CACHE PATH "Install path: MEDtool Python stuff")
213 SET(MEDTOOL_INSTALL_PYTHON_SHARED ${MEDTOOL_INSTALL_PYTHON}/shared_modules CACHE PATH
214 "Install path: MEDtool Python shared modules")
215 ENDIF(MEDTOOL_MED_ENABLE_PYTHON)
217 SET(MEDTOOL_INSTALL_RES share/resources CACHE PATH "Install path: MEDTOOL resources")
218 SET(MEDTOOL_INSTALL_DOC share/doc CACHE PATH "Install path: MEDTOOL documentation")
222 SET(MEDTOOL_INSTALL_RES_DATA "${MEDTOOL_INSTALL_RES}/med" CACHE PATH "Install path: MEDTOOL specific data")
223 #SET(MEDTOOL_MED_INSTALL_RES_SCRIPTS "${MEDTOOL_INSTALL_RES}/med" CACHE PATH "Install path: SALOME MED specific scripts")
225 #MARK_AS_ADVANCED(MEDTOOL_INSTALL_BINS MEDTOOL_INSTALL_LIBS MEDTOOL_INSTALL_IDLS MEDTOOL_INSTALL_HEADERS)
226 #MARK_AS_ADVANCED(MEDTOOL_INSTALL_SCRIPT_SCRIPTS MEDTOOL_INSTALL_SCRIPT_DATA MEDTOOL_INSTALL_SCRIPT_PYTHON)
227 #MARK_AS_ADVANCED(MEDTOOL_INSTALL_APPLISKEL_SCRIPTS MEDTOOL_INSTALL_APPLISKEL_PYTHON MEDTOOL_INSTALL_CMAKE MEDTOOL_INSTALL_CMAKE_LOCAL MEDTOOL_INSTALL_RES)
228 #MARK_AS_ADVANCED(MEDTOOL_INSTALL_PYTHON MEDTOOL_INSTALL_PYTHON_SHARED MEDTOOL_MED_INSTALL_RES_DATA MEDTOOL_MED_INSTALL_RES_SCRIPTS MEDTOOL_INSTALL_DOC)
230 # Header configuration
231 # ====================
232 MEDTOOL_XVERSION(${PROJECT_NAME})
233 #SALOME_CONFIGURE_FILE(MED_version.h.in MED_version.h INSTALL ${MEDTOOL_INSTALL_HEADERS})
234 #SALOME_CONFIGURE_FILE(VERSION.in VERSION INSTALL ${MEDTOOL_INSTALL_BINS})
235 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/MEDtool_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/MEDtool_version.h)
236 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/MEDtool_version.h DESTINATION ${MEDTOOL_INSTALL_HEADERS})
238 # Accumulate environment variables for MED module
239 #SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${MEDTOOL_INSTALL_BINS}
240 # ${CMAKE_INSTALL_PREFIX}/${MEDTOOL_INSTALL_PYTHON})
241 #SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${MEDTOOL_INSTALL_LIBS})
247 ADD_DEFINITIONS("-D_USE_MATH_DEFINES")
250 #ADD_DEFINITIONS("-DMEDTOOL_ROOT_DIR=${CMAKE_INSTALL_PREFIX}")
251 ADD_SUBDIRECTORY(src)
252 #ADD_SUBDIRECTORY(adm_local)
254 IF(MEDTOOL_BUILD_DOC)
255 ADD_SUBDIRECTORY(doc)
256 ENDIF(MEDTOOL_BUILD_DOC)
258 #ADD_SUBDIRECTORY(adm_local_without_kernel)
260 IF(NOT MEDTOOL_MED_MICROMED)
261 IF(MEDTOOL_MED_WITH_FILE_EXAMPLES)
262 ADD_SUBDIRECTORY(resources)
263 ENDIF(MEDTOOL_MED_WITH_FILE_EXAMPLES)
264 ENDIF(NOT MEDTOOL_MED_MICROMED)
266 # Configuration export
267 # ====================
269 # List of targets in this project we want to make visible to the rest of the world.
270 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
271 SET(_${PROJECT_NAME}_exposed_targets
272 interpkernel medcoupling medcouplingremapper)
274 IF(NOT MEDTOOL_MED_MICROMED)
275 LIST(APPEND _${PROJECT_NAME}_exposed_targets medloader)
276 IF(MEDTOOL_MED_ENABLE_RENUMBER)
277 LIST(APPEND _${PROJECT_NAME}_exposed_targets renumbercpp)
279 IF(MEDTOOL_MED_ENABLE_PARTITIONER)
280 LIST(APPEND _${PROJECT_NAME}_exposed_targets medpartitionercpp)
281 IF(MEDTOOL_BUILD_TESTS)
282 LIST(APPEND _${PROJECT_NAME}_exposed_targets MEDPARTITIONERTest)
285 IF(MEDTOOL_BUILD_TESTS)
286 LIST(APPEND _${PROJECT_NAME}_exposed_targets InterpKernelTest)
291 LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedmem)
292 IF(NOT MEDTOOL_MED_MICROMED)
293 LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedloader)
295 IF(MEDTOOL_BUILD_TESTS)
296 IF(NOT MEDTOOL_MED_MICROMED)
297 LIST(APPEND _${PROJECT_NAME}_exposed_targets ParaMEDMEMTest)
302 # Add all targets to the build-tree export set
304 EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
305 FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
307 # Create the configuration files:
308 # - in the build tree:
310 # Ensure the variables are always defined for the configure (even if empty):
311 # SET(KERNEL_ROOT_DIR "${KERNEL_ROOT_DIR}")
312 # SET(GUI_ROOT_DIR "${GUI_ROOT_DIR}")
313 # SET(MEDFILE_ROOT_DIR "${MEDFILE_ROOT_DIR}")
314 # SET(MPI_ROOT_DIR "${MPI_ROOT_DIR}")
315 # SET(HDF5_ROOT_DIR "${HDF5_ROOT_DIR}")
316 # SET(OMNIORB_ROOT_DIR "${OMNIORB_ROOT_DIR}")
317 # SET(PTHREAD_ROOT_DIR "${PTHREAD_ROOT_DIR}")
318 # SET(BOOST_ROOT_DIR "${BOOST_ROOT_DIR}")
319 # SET(SWIG_ROOT_DIR "${SWIG_ROOT_DIR}")
320 # SET(PYTHON_ROOT_DIR "${PYTHON_ROOT_DIR}")
321 # SET(CPPUNIT_ROOT_DIR "${CPPUNIT_ROOT_DIR}")
322 # SET(GRAPHVIZ_ROOT_DIR "${GRAPHVIZ_ROOT_DIR}")
323 # SET(DOXYGEN_ROOT_DIR "${DOXYGEN_ROOT_DIR}")
324 # SET(SPHINX_ROOT_DIR "${SPHINX_ROOT_DIR}")
326 # SET(METIS_ROOT_DIR "${METIS_ROOT_DIR}")
327 # SET(PARMETIS_ROOT_DIR "${PARMETIS_ROOT_DIR}")
328 # SET(SCOTCH_ROOT_DIR "${SCOTCH_ROOT_DIR}")
329 # SET(XDR_ROOT_DIR "${XDR_ROOT_DIR}")
331 # - in the install tree:
332 # Get the relative path of the include directory so
333 # we can register it in the generated configuration files:
334 SET(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
336 # Build variables that will be expanded when configuring Salome<MODULE>Config.cmake:
337 # SALOME_CONFIGURE_PREPARE(Metis ParMetis Scotch XDR CAS Qt4 CppUnit Graphviz Doxygen Sphinx MPI omniORB
338 # PThread Boost libXml2 Python HDF5 MEDFile)
340 # INCLUDE(CMakePackageConfigHelpers)
341 # CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in
342 # ${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake
343 # INSTALL_DESTINATION "${MEDTOOL_INSTALL_CMAKE}_LOCAL"
344 # PATH_VARS CONF_INCLUDE_DIRS MEDTOOL_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX
345 # KERNEL_ROOT_DIR GUI_ROOT_DIR MEDFILE_ROOT_DIR MPI_ROOT_DIR
346 # HDF5_ROOT_DIR OMNIORB_ROOT_DIR PTHREAD_ROOT_DIR BOOST_ROOT_DIR
347 # SWIG_ROOT_DIR PYTHON_ROOT_DIR CPPUNIT_ROOT_DIR GRAPHVIZ_ROOT_DIR DOXYGEN_ROOT_DIR
348 # SPHINX_ROOT_DIR METIS_ROOT_DIR PARMETIS_ROOT_DIR SCOTCH_ROOT_DIR XDR_ROOT_DIR)
350 #WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
351 # VERSION ${${PROJECT_NAME_UC}_VERSION}
352 # COMPATIBILITY AnyNewerVersion)
354 # Install the CMake configuration files:
356 # "${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake"
357 # "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
358 # DESTINATION "${MEDTOOL_INSTALL_CMAKE_LOCAL}")
360 # Install the export set for use with the install-tree
361 #INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${MEDTOOL_INSTALL_CMAKE_LOCAL}"
362 # FILE ${PROJECT_NAME}Targets.cmake)