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(SALOME_MED_MICROMED "Build MED without MED file dependancy." OFF)
50 OPTION(SALOME_MED_ENABLE_PYTHON "Build PYTHON bindings." ON)
51 OPTION(SALOME_MED_ENABLE_PARTITIONER "Build MEDPartitioner." ON)
52 OPTION(SALOME_MED_ENABLE_RENUMBER "Build Renumber." ON)
53 OPTION(SALOME_MED_WITH_FILE_EXAMPLES "Install examples of files containing meshes and fields of different formats." ON)
54 OPTION(SALOME_USE_MPI "(Use MPI containers) - For MED this triggers the build of ParaMEDMEM." OFF)
55 OPTION(SALOME_BUILD_TESTS "Build MED tests." ON)
56 OPTION(SALOME_BUILD_DOC "Build MED doc." ON)
57 CMAKE_DEPENDENT_OPTION(SALOME_MED_PARTITIONER_METIS "Enable metis graph library in MEDPartitioner." ON "SALOME_MED_ENABLE_PARTITIONER" OFF)
58 CMAKE_DEPENDENT_OPTION(SALOME_MED_PARTITIONER_SCOTCH "Enable scotch graph library in MEDPartitioner." ON "SALOME_MED_ENABLE_PARTITIONER;NOT SALOME_USE_MPI" OFF)
59 CMAKE_DEPENDENT_OPTION(SALOME_MED_PARTITIONER_PARMETIS "Enable parmetis graph library in MEDPartitioner." ON "SALOME_MED_ENABLE_PARTITIONER;SALOME_USE_MPI" OFF)
61 CMAKE_DEPENDENT_OPTION(SALOME_MED_MEDLOADER_USE_XDR "Enable use of XDR for SauvReader." ON "NOT SALOME_MED_MICROMED" OFF)
65 # Set list of prerequisites
66 # =========================
68 LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_files")
70 IF(NOT SALOME_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(SALOME_MED_MEDLOADER_USE_XDR)
81 FIND_PACKAGE(SalomeXDR REQUIRED)
82 ENDIF(SALOME_MED_MEDLOADER_USE_XDR)
85 IF(SALOME_MED_ENABLE_PARTITIONER)
86 #FIND_PACKAGE(SalomeLibXml2)
87 #SALOME_LOG_OPTIONAL_PACKAGE(LibXml2 SALOME_MED_ENABLE_PARTITIONER)
88 IF(DEFINED ENV{LIBXML2_ROOT_DIR})
89 SET(CMAKE_PREFIX_PATH "$ENV{LIBXML2_ROOT_DIR}")
92 MESSAGE("LIBXML2_FOUND: ${LIBXML2_FOUND}")
93 MESSAGE("LIBXML2_INCLUDE_DIR: ${LIBXML2_INCLUDE_DIR}")
94 MESSAGE("LIBXML2_LIBRARIES: ${LIBXML2_LIBRARIES}")
95 MESSAGE("LIBXML2_DEFINITIONS: ${LIBXML2_DEFINITIONS}")
96 MESSAGE("LIBXML2_XMLLINT_EXECUTABLE: ${LIBXML2_XMLLINT_EXECUTABLE}")
97 MESSAGE("LIBXML2_VERSION_STRING: ${LIBXML2_VERSION_STRING}")
99 IF(SALOME_MED_PARTITIONER_METIS)
100 #FIND_PACKAGE(SalomeMetis)
101 #SALOME_LOG_OPTIONAL_PACKAGE(Metis SALOME_MED_PARTITIONER_METIS)
103 ADD_DEFINITIONS("-DMED_ENABLE_METIS")
104 ENDIF(SALOME_MED_PARTITIONER_METIS)
105 IF(SALOME_MED_PARTITIONER_SCOTCH)
106 #FIND_PACKAGE(SalomeScotch)
107 #SALOME_LOG_OPTIONAL_PACKAGE(Scotch SALOME_MED_PARTITIONER_SCOTCH)
109 ADD_DEFINITIONS("-DMED_ENABLE_SCOTCH")
110 ENDIF(SALOME_MED_PARTITIONER_SCOTCH)
111 ENDIF(SALOME_MED_ENABLE_PARTITIONER)
112 ENDIF(NOT SALOME_MED_MICROMED)
114 ENABLE_TESTING() # let it outsite because even if SALOME_BUILD_TESTS is OFF, python tests that not need additional compilation can be run.
116 IF(SALOME_BUILD_TESTS)
117 #FIND_PACKAGE(SalomeCppUnit)
118 #SALOME_LOG_OPTIONAL_PACKAGE(CppUnit SALOME_BUILD_TESTS)
119 FIND_PACKAGE(CppUnit)
120 ENDIF(SALOME_BUILD_TESTS)
123 FIND_PACKAGE(SalomeMPI REQUIRED)
124 ADD_DEFINITIONS("-DHAVE_MPI")
125 IF(SALOME_MED_PARTITIONER_PARMETIS)
126 FIND_PACKAGE(SalomeParMetis)
127 SALOME_LOG_OPTIONAL_PACKAGE(ParMetis SALOME_MED_PARTITIONER_PARMETIS)
128 ADD_DEFINITIONS("-DMED_ENABLE_PARMETIS")
129 ENDIF(SALOME_MED_PARTITIONER_PARMETIS)
130 ENDIF(SALOME_USE_MPI)
132 IF(SALOME_MED_ENABLE_RENUMBER)
133 #FIND_PACKAGE(SalomeBoost)
134 #SALOME_LOG_OPTIONAL_PACKAGE(Boost SALOME_MED_ENABLE_RENUMBER)
135 IF(DEFINED ENV{BOOST_ROOT_DIR})
136 SET(CMAKE_PREFIX_PATH "$ENV{BOOST_ROOT_DIR}")
138 SET(Boost_USE_STATIC_LIBS OFF)
139 SET(Boost_USE_MULTITHREADED ON)
140 SET(Boost_USE_STATIC_RUNTIME OFF)
141 SET(Boost_NO_BOOST_CMAKE ON)
142 SET(SalomeBoost_FIND_COMPONENTS filesystem regex signals system thread date_time chrono)
144 ENDIF(SALOME_MED_ENABLE_RENUMBER)
147 #FIND_PACKAGE(SalomeDoxygen)
148 #FIND_PACKAGE(SalomeGraphviz)
149 #FIND_PACKAGE(SalomeSphinx)
150 #SALOME_LOG_OPTIONAL_PACKAGE(Doxygen SALOME_BUILD_DOC)
151 #SALOME_LOG_OPTIONAL_PACKAGE(Graphviz SALOME_BUILD_DOC)
152 #SALOME_LOG_OPTIONAL_PACKAGE(Sphinx SALOME_BUILD_DOC)
153 FIND_PACKAGE(Doxygen)
154 IF(DEFINED ENV{GRAPHVIZ_ROOT_DIR})
155 SET(CMAKE_PREFIX_PATH "$ENV{GRAPHVIZ_ROOT_DIR}")
157 FIND_PACKAGE(Graphviz)
159 ENDIF(SALOME_BUILD_DOC)
161 IF(SALOME_MED_ENABLE_PYTHON)
162 #FIND_PACKAGE(SalomePython)
163 #FIND_PACKAGE(SalomeSWIG)
164 #SALOME_LOG_OPTIONAL_PACKAGE(Python SALOME_MED_ENABLE_PYTHON)
165 #SALOME_LOG_OPTIONAL_PACKAGE(SWIG SALOME_MED_ENABLE_PYTHON)
166 FIND_PACKAGE(PythonInterp)
167 GET_FILENAME_COMPONENT(_python_dir "${PYTHON_EXECUTABLE}" PATH)
168 GET_FILENAME_COMPONENT(CMAKE_INCLUDE_PATH "${_python_dir}/../include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}" ABSOLUTE)
169 GET_FILENAME_COMPONENT(CMAKE_LIBRARY_PATH "${_python_dir}/../lib" ABSOLUTE)
170 SET(PythonLibs_FIND_VERSION "${PYTHON_VERSION}")
171 FIND_PACKAGE(PythonLibs)
174 # Set the extra flags for SWIG for numpy and scipy
175 SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY)
177 SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "-DWITH_NUMPY")
180 SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "${SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY};-DWITH_SCIPY")
182 ENDIF(SALOME_MED_ENABLE_PYTHON)
185 #SALOME_PACKAGE_REPORT_AND_CHECK()
189 # Directories have to be given after prerequisites (to be able to use
190 # Python version string for example).
192 SET(MEDTOOL_INSTALL_BINS bin CACHE PATH "Install path: MEDtool binaries")
193 SET(MEDTOOL_INSTALL_LIBS lib CACHE PATH "Install path: MEDtool libs")
194 SET(MEDTOOL_INSTALL_HEADERS include CACHE PATH "Install path: MEDtool headers")
195 SET(MEDTOOL_INSTALL_SCRIPT_SCRIPTS ${MEDTOOL_INSTALL_BINS} CACHE PATH "Install path: MEDtool scripts")
196 SET(MEDTOOL_INSTALL_TESTS tests CACHE PATH "Install path: MEDtool tests")
197 # SET(SALOME_INSTALL_SCRIPT_DATA ${SALOME_INSTALL_BINS} CACHE PATH
198 # "Install path: SALOME script data")
199 SET(MEDTOOL_INSTALL_SCRIPT_PYTHON ${MEDTOOL_INSTALL_BINS} CACHE PATH "Install path: MEDtool Python scripts")
200 # SET(SALOME_INSTALL_APPLISKEL_SCRIPTS ${SALOME_INSTALL_BINS}/appliskel CACHE PATH
201 # "Install path: SALOME application skeleton - scripts")
202 # SET(SALOME_INSTALL_APPLISKEL_PYTHON ${SALOME_INSTALL_BINS}/appliskel CACHE PATH
203 # "Install path: SALOME application skeleton - Python")
204 # SET(SALOME_INSTALL_CMAKE salome_adm/cmake_files CACHE PATH "Install path: SALOME CMake files")
205 # SET(SALOME_INSTALL_CMAKE_LOCAL adm_local/cmake_files CACHE PATH
206 # "Install path: local SALOME CMake files")
208 IF(SALOME_MED_ENABLE_PYTHON)
209 SET(_pydir lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
210 SET(MEDTOOL_INSTALL_PYTHON ${_pydir} CACHE PATH "Install path: MEDtool Python stuff")
211 SET(MEDTOOL_INSTALL_PYTHON_SHARED ${MEDTOOL_INSTALL_PYTHON}/shared_modules CACHE PATH
212 "Install path: MEDtool Python shared modules")
213 ENDIF(SALOME_MED_ENABLE_PYTHON)
215 SET(MEDTOOL_INSTALL_RES share/resources CACHE PATH "Install path: MEDTOOL resources")
216 SET(MEDTOOL_INSTALL_DOC share/doc CACHE PATH "Install path: MEDTOOL documentation")
220 SET(MEDTOOL_INSTALL_RES_DATA "${MEDTOOL_INSTALL_RES}/med" CACHE PATH "Install path: MEDTOOL specific data")
221 #SET(SALOME_MED_INSTALL_RES_SCRIPTS "${SALOME_INSTALL_RES}/med" CACHE PATH "Install path: SALOME MED specific scripts")
223 #MARK_AS_ADVANCED(SALOME_INSTALL_BINS SALOME_INSTALL_LIBS SALOME_INSTALL_IDLS SALOME_INSTALL_HEADERS)
224 #MARK_AS_ADVANCED(SALOME_INSTALL_SCRIPT_SCRIPTS SALOME_INSTALL_SCRIPT_DATA SALOME_INSTALL_SCRIPT_PYTHON)
225 #MARK_AS_ADVANCED(SALOME_INSTALL_APPLISKEL_SCRIPTS SALOME_INSTALL_APPLISKEL_PYTHON SALOME_INSTALL_CMAKE SALOME_INSTALL_CMAKE_LOCAL SALOME_INSTALL_RES)
226 #MARK_AS_ADVANCED(SALOME_INSTALL_PYTHON SALOME_INSTALL_PYTHON_SHARED SALOME_MED_INSTALL_RES_DATA SALOME_MED_INSTALL_RES_SCRIPTS SALOME_INSTALL_DOC)
228 # Header configuration
229 # ====================
230 MEDTOOL_XVERSION(${PROJECT_NAME})
231 #SALOME_CONFIGURE_FILE(MED_version.h.in MED_version.h INSTALL ${SALOME_INSTALL_HEADERS})
232 #SALOME_CONFIGURE_FILE(VERSION.in VERSION INSTALL ${SALOME_INSTALL_BINS})
233 CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/MEDtool_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/MEDtool_version.h)
234 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/MEDtool_version.h DESTINATION ${MEDTOOL_INSTALL_HEADERS})
236 # Accumulate environment variables for MED module
237 #SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_BINS}
238 # ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON})
239 #SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_LIBS})
245 ADD_DEFINITIONS("-D_USE_MATH_DEFINES")
248 ADD_SUBDIRECTORY(src)
249 #ADD_SUBDIRECTORY(adm_local)
252 ADD_SUBDIRECTORY(doc)
253 ENDIF(SALOME_BUILD_DOC)
255 #ADD_SUBDIRECTORY(adm_local_without_kernel)
257 IF(NOT SALOME_MED_MICROMED)
258 IF(SALOME_MED_WITH_FILE_EXAMPLES)
259 ADD_SUBDIRECTORY(resources)
260 ENDIF(SALOME_MED_WITH_FILE_EXAMPLES)
261 ENDIF(NOT SALOME_MED_MICROMED)
263 # Configuration export
264 # ====================
266 # List of targets in this project we want to make visible to the rest of the world.
267 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
268 SET(_${PROJECT_NAME}_exposed_targets
269 interpkernel medcoupling medcouplingremapper)
271 IF(NOT SALOME_MED_MICROMED)
272 LIST(APPEND _${PROJECT_NAME}_exposed_targets medloader)
273 IF(SALOME_MED_ENABLE_RENUMBER)
274 LIST(APPEND _${PROJECT_NAME}_exposed_targets renumbercpp)
276 IF(SALOME_MED_ENABLE_PARTITIONER)
277 LIST(APPEND _${PROJECT_NAME}_exposed_targets medpartitionercpp)
278 IF(SALOME_BUILD_TESTS)
279 LIST(APPEND _${PROJECT_NAME}_exposed_targets MEDPARTITIONERTest)
282 IF(SALOME_BUILD_TESTS)
283 LIST(APPEND _${PROJECT_NAME}_exposed_targets InterpKernelTest)
288 LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedmem)
289 IF(NOT SALOME_MED_MICROMED)
290 LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedloader)
292 IF(SALOME_BUILD_TESTS)
293 IF(NOT SALOME_MED_MICROMED)
294 LIST(APPEND _${PROJECT_NAME}_exposed_targets ParaMEDMEMTest)
299 # Add all targets to the build-tree export set
301 EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
302 FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake)
304 # Create the configuration files:
305 # - in the build tree:
307 # Ensure the variables are always defined for the configure (even if empty):
308 # SET(KERNEL_ROOT_DIR "${KERNEL_ROOT_DIR}")
309 # SET(GUI_ROOT_DIR "${GUI_ROOT_DIR}")
310 # SET(MEDFILE_ROOT_DIR "${MEDFILE_ROOT_DIR}")
311 # SET(MPI_ROOT_DIR "${MPI_ROOT_DIR}")
312 # SET(HDF5_ROOT_DIR "${HDF5_ROOT_DIR}")
313 # SET(OMNIORB_ROOT_DIR "${OMNIORB_ROOT_DIR}")
314 # SET(PTHREAD_ROOT_DIR "${PTHREAD_ROOT_DIR}")
315 # SET(BOOST_ROOT_DIR "${BOOST_ROOT_DIR}")
316 # SET(SWIG_ROOT_DIR "${SWIG_ROOT_DIR}")
317 # SET(PYTHON_ROOT_DIR "${PYTHON_ROOT_DIR}")
318 # SET(CPPUNIT_ROOT_DIR "${CPPUNIT_ROOT_DIR}")
319 # SET(GRAPHVIZ_ROOT_DIR "${GRAPHVIZ_ROOT_DIR}")
320 # SET(DOXYGEN_ROOT_DIR "${DOXYGEN_ROOT_DIR}")
321 # SET(SPHINX_ROOT_DIR "${SPHINX_ROOT_DIR}")
323 # SET(METIS_ROOT_DIR "${METIS_ROOT_DIR}")
324 # SET(PARMETIS_ROOT_DIR "${PARMETIS_ROOT_DIR}")
325 # SET(SCOTCH_ROOT_DIR "${SCOTCH_ROOT_DIR}")
326 # SET(XDR_ROOT_DIR "${XDR_ROOT_DIR}")
328 # - in the install tree:
329 # Get the relative path of the include directory so
330 # we can register it in the generated configuration files:
331 SET(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
333 # Build variables that will be expanded when configuring Salome<MODULE>Config.cmake:
334 # SALOME_CONFIGURE_PREPARE(Metis ParMetis Scotch XDR CAS Qt4 CppUnit Graphviz Doxygen Sphinx MPI omniORB
335 # PThread Boost libXml2 Python HDF5 MEDFile)
337 # INCLUDE(CMakePackageConfigHelpers)
338 # CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in
339 # ${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake
340 # INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE}_LOCAL"
341 # PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX
342 # KERNEL_ROOT_DIR GUI_ROOT_DIR MEDFILE_ROOT_DIR MPI_ROOT_DIR
343 # HDF5_ROOT_DIR OMNIORB_ROOT_DIR PTHREAD_ROOT_DIR BOOST_ROOT_DIR
344 # SWIG_ROOT_DIR PYTHON_ROOT_DIR CPPUNIT_ROOT_DIR GRAPHVIZ_ROOT_DIR DOXYGEN_ROOT_DIR
345 # SPHINX_ROOT_DIR METIS_ROOT_DIR PARMETIS_ROOT_DIR SCOTCH_ROOT_DIR XDR_ROOT_DIR)
347 #WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
348 # VERSION ${${PROJECT_NAME_UC}_VERSION}
349 # COMPATIBILITY AnyNewerVersion)
351 # Install the CMake configuration files:
353 # "${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake"
354 # "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
355 # DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}")
357 # Install the export set for use with the install-tree
358 #INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
359 # FILE ${PROJECT_NAME}Targets.cmake)