# Copyright (C) 2015 CEA/DEN, EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2 FATAL_ERROR) #INCLUDE(CMakeDependentOption) PROJECT(MEDtool C CXX) # Ensure a proper linker behavior: CMAKE_POLICY(SET CMP0003 NEW) # Versioning # =========== # Project name, upper case STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC) SET(${PROJECT_NAME_UC}_MAJOR_VERSION 1) SET(${PROJECT_NAME_UC}_MINOR_VERSION 0) SET(${PROJECT_NAME_UC}_PATCH_VERSION 0) SET(${PROJECT_NAME_UC}_VERSION ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION}) SET(${PROJECT_NAME_UC}_VERSION_DEV 1) # Our own set of macros: LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_files") INCLUDE(MEDtoolMacros) # Platform setup # ============== #INCLUDE(SalomeSetupPlatform) # # User options # ============ INCLUDE(CMakeDependentOption) OPTION(MEDTOOL_MED_MICROMED "Build MED without MED file dependancy." OFF) OPTION(MEDTOOL_MED_ENABLE_PYTHON "Build PYTHON bindings." ON) OPTION(MEDTOOL_MED_ENABLE_PARTITIONER "Build MEDPartitioner." ON) OPTION(MEDTOOL_MED_ENABLE_RENUMBER "Build Renumber." ON) OPTION(MEDTOOL_MED_WITH_FILE_EXAMPLES "Install examples of files containing meshes and fields of different formats." ON) OPTION(MEDTOOL_USE_MPI "(Use MPI containers) - For MED this triggers the build of ParaMEDMEM." OFF) OPTION(MEDTOOL_BUILD_TESTS "Build MED tests." ON) OPTION(MEDTOOL_BUILD_DOC "Build MED doc." ON) CMAKE_DEPENDENT_OPTION(MEDTOOL_MED_PARTITIONER_METIS "Enable metis graph library in MEDPartitioner." ON "MEDTOOL_MED_ENABLE_PARTITIONER" OFF) CMAKE_DEPENDENT_OPTION(MEDTOOL_MED_PARTITIONER_SCOTCH "Enable scotch graph library in MEDPartitioner." ON "MEDTOOL_MED_ENABLE_PARTITIONER;NOT MEDTOOL_USE_MPI" OFF) CMAKE_DEPENDENT_OPTION(MEDTOOL_MED_PARTITIONER_PARMETIS "Enable parmetis graph library in MEDPartitioner." ON "MEDTOOL_MED_ENABLE_PARTITIONER;MEDTOOL_USE_MPI" OFF) IF(WIN32) CMAKE_DEPENDENT_OPTION(MEDTOOL_MED_MEDLOADER_USE_XDR "Enable use of XDR for SauvReader." ON "NOT MEDTOOL_MED_MICROMED" OFF) ENDIF(WIN32) # # Set list of prerequisites # ========================= LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake_files") IF(NOT MEDTOOL_MED_MICROMED) #FIND_PACKAGE(SalomeHDF5 REQUIRED) #FIND_PACKAGE(SalomeMEDFile REQUIRED) FIND_PACKAGE(HDF5 REQUIRED) FIND_PACKAGE(MEDFile REQUIRED) # XDR stuff IF(NOT WIN32) #FIND_PACKAGE(SalomeXDR REQUIRED) FIND_PACKAGE(XDR REQUIRED) ELSE(NOT WIN32) IF(MEDTOOL_MED_MEDLOADER_USE_XDR) FIND_PACKAGE(SalomeXDR REQUIRED) ENDIF(MEDTOOL_MED_MEDLOADER_USE_XDR) ENDIF(NOT WIN32) # End of XDR Stuff IF(MEDTOOL_MED_ENABLE_PARTITIONER) #FIND_PACKAGE(SalomeLibXml2) #SALOME_LOG_OPTIONAL_PACKAGE(LibXml2 MEDTOOL_MED_ENABLE_PARTITIONER) IF(DEFINED ENV{LIBXML2_ROOT_DIR}) SET(LIBXML2_ROOT_DIR $ENV{LIBXML2_ROOT_DIR} CACHE PATH "Path to the LibXml2.") LIST(APPEND CMAKE_PREFIX_PATH "${LIBXML2_ROOT_DIR}") ENDIF() FIND_PACKAGE(LibXml2) IF(MEDTOOL_MED_PARTITIONER_METIS) #FIND_PACKAGE(SalomeMetis) #SALOME_LOG_OPTIONAL_PACKAGE(Metis MEDTOOL_MED_PARTITIONER_METIS) FIND_PACKAGE(Metis) ADD_DEFINITIONS("-DMED_ENABLE_METIS") ENDIF(MEDTOOL_MED_PARTITIONER_METIS) IF(MEDTOOL_MED_PARTITIONER_SCOTCH) #FIND_PACKAGE(SalomeScotch) #SALOME_LOG_OPTIONAL_PACKAGE(Scotch MEDTOOL_MED_PARTITIONER_SCOTCH) FIND_PACKAGE(Scotch) ADD_DEFINITIONS("-DMED_ENABLE_SCOTCH") ENDIF(MEDTOOL_MED_PARTITIONER_SCOTCH) ENDIF(MEDTOOL_MED_ENABLE_PARTITIONER) ENDIF(NOT MEDTOOL_MED_MICROMED) ENABLE_TESTING() # let it outsite because even if MEDTOOL_BUILD_TESTS is OFF, python tests that not need additional compilation can be run. IF(MEDTOOL_BUILD_TESTS) #FIND_PACKAGE(SalomeCppUnit) #SALOME_LOG_OPTIONAL_PACKAGE(CppUnit MEDTOOL_BUILD_TESTS) FIND_PACKAGE(CppUnit) ENDIF(MEDTOOL_BUILD_TESTS) IF(MEDTOOL_USE_MPI) #FIND_PACKAGE(SalomeMPI REQUIRED) FIND_PACKAGE(MPI REQUIRED) ADD_DEFINITIONS("-DHAVE_MPI") SET(MPI_INCLUDE_DIRS ${MPI_C_INCLUDE_PATH} ${MPI_CXX_INCLUDE_PATH}) SET(MPI_LIBRARIES ${MPI_C_LIBRARIES} ${MPI_CXX_LIBRARIES}) SET(MPI_DEFINITIONS "${MPI_CXX_COMPILE_FLAGS}") IF(MEDTOOL_MED_PARTITIONER_PARMETIS) #FIND_PACKAGE(SalomeParMetis) FIND_PACKAGE(ParMetis) #SALOME_LOG_OPTIONAL_PACKAGE(ParMetis MEDTOOL_MED_PARTITIONER_PARMETIS) ADD_DEFINITIONS("-DMED_ENABLE_PARMETIS") ENDIF(MEDTOOL_MED_PARTITIONER_PARMETIS) ENDIF(MEDTOOL_USE_MPI) IF(MEDTOOL_MED_ENABLE_RENUMBER) #FIND_PACKAGE(SalomeBoost) #SALOME_LOG_OPTIONAL_PACKAGE(Boost MEDTOOL_MED_ENABLE_RENUMBER) IF(DEFINED ENV{BOOST_ROOT_DIR}) SET(BOOST_ROOT_DIR $ENV{BOOST_ROOT_DIR} CACHE PATH "Path to the Boost.") LIST(APPEND CMAKE_PREFIX_PATH "${BOOST_ROOT_DIR}") ENDIF() SET(Boost_USE_STATIC_LIBS OFF) SET(Boost_USE_MULTITHREADED ON) SET(Boost_USE_STATIC_RUNTIME OFF) SET(Boost_NO_BOOST_CMAKE ON) SET(SalomeBoost_FIND_COMPONENTS filesystem regex signals system thread date_time chrono) FIND_PACKAGE(Boost) ENDIF(MEDTOOL_MED_ENABLE_RENUMBER) IF(MEDTOOL_BUILD_DOC) #FIND_PACKAGE(SalomeDoxygen) #FIND_PACKAGE(SalomeGraphviz) #FIND_PACKAGE(SalomeSphinx) #SALOME_LOG_OPTIONAL_PACKAGE(Doxygen MEDTOOL_BUILD_DOC) #SALOME_LOG_OPTIONAL_PACKAGE(Graphviz MEDTOOL_BUILD_DOC) #SALOME_LOG_OPTIONAL_PACKAGE(Sphinx MEDTOOL_BUILD_DOC) FIND_PACKAGE(Doxygen) IF(DEFINED ENV{GRAPHVIZ_ROOT_DIR}) SET(GRAPHVIZ_ROOT_DIR $ENV{GRAPHVIZ_ROOT_DIR} CACHE PATH "Path to the Graphviz.") LIST(APPEND CMAKE_PREFIX_PATH "${GRAPHVIZ_ROOT_DIR}") ENDIF() FIND_PACKAGE(Graphviz) FIND_PACKAGE(Sphinx) ENDIF(MEDTOOL_BUILD_DOC) IF(MEDTOOL_MED_ENABLE_PYTHON) #FIND_PACKAGE(SalomePython) #FIND_PACKAGE(SalomeSWIG) #SALOME_LOG_OPTIONAL_PACKAGE(Python MEDTOOL_MED_ENABLE_PYTHON) #SALOME_LOG_OPTIONAL_PACKAGE(SWIG MEDTOOL_MED_ENABLE_PYTHON) FIND_PACKAGE(PythonInterp) GET_FILENAME_COMPONENT(_python_dir "${PYTHON_EXECUTABLE}" PATH) GET_FILENAME_COMPONENT(CMAKE_INCLUDE_PATH "${_python_dir}/../include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}" ABSOLUTE) GET_FILENAME_COMPONENT(CMAKE_LIBRARY_PATH "${_python_dir}/../lib" ABSOLUTE) SET(PythonLibs_FIND_VERSION "${PYTHON_VERSION}") FIND_PACKAGE(PythonLibs) FIND_PACKAGE(SWIG) # Set the extra flags for SWIG for numpy and scipy SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY) IF(NUMPY_FOUND) SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "-DWITH_NUMPY") ENDIF(NUMPY_FOUND) IF(SCIPY_FOUND) SET(SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY "${SWIG_EXTRA_FLAGS_FOR_NUMPYANDSCIPY};-DWITH_SCIPY") ENDIF(SCIPY_FOUND) ENDIF(MEDTOOL_MED_ENABLE_PYTHON) # Detection report #SALOME_PACKAGE_REPORT_AND_CHECK() # Directories # # Directories have to be given after prerequisites (to be able to use # Python version string for example). # =========== SET(MEDTOOL_INSTALL_BINS bin CACHE PATH "Install path: MEDtool binaries") SET(MEDTOOL_INSTALL_LIBS lib CACHE PATH "Install path: MEDtool libs") SET(MEDTOOL_INSTALL_HEADERS include CACHE PATH "Install path: MEDtool headers") SET(MEDTOOL_INSTALL_SCRIPT_SCRIPTS ${MEDTOOL_INSTALL_BINS} CACHE PATH "Install path: MEDtool scripts") SET(MEDTOOL_INSTALL_TESTS tests CACHE PATH "Install path: MEDtool tests") # SET(MEDTOOL_INSTALL_SCRIPT_DATA ${MEDTOOL_INSTALL_BINS} CACHE PATH # "Install path: SALOME script data") SET(MEDTOOL_INSTALL_SCRIPT_PYTHON ${MEDTOOL_INSTALL_BINS} CACHE PATH "Install path: MEDtool Python scripts") # SET(MEDTOOL_INSTALL_APPLISKEL_SCRIPTS ${MEDTOOL_INSTALL_BINS}/appliskel CACHE PATH # "Install path: SALOME application skeleton - scripts") # SET(MEDTOOL_INSTALL_APPLISKEL_PYTHON ${MEDTOOL_INSTALL_BINS}/appliskel CACHE PATH # "Install path: SALOME application skeleton - Python") # SET(MEDTOOL_INSTALL_CMAKE salome_adm/cmake_files CACHE PATH "Install path: SALOME CMake files") # SET(MEDTOOL_INSTALL_CMAKE_LOCAL adm_local/cmake_files CACHE PATH # "Install path: local SALOME CMake files") IF(MEDTOOL_MED_ENABLE_PYTHON) SET(_pydir lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages) SET(MEDTOOL_INSTALL_PYTHON ${_pydir} CACHE PATH "Install path: MEDtool Python stuff") SET(MEDTOOL_INSTALL_PYTHON_SHARED ${MEDTOOL_INSTALL_PYTHON}/shared_modules CACHE PATH "Install path: MEDtool Python shared modules") ENDIF(MEDTOOL_MED_ENABLE_PYTHON) SET(MEDTOOL_INSTALL_RES share/resources CACHE PATH "Install path: MEDTOOL resources") SET(MEDTOOL_INSTALL_DOC share/doc CACHE PATH "Install path: MEDTOOL documentation") # Med specific: SET(MEDTOOL_INSTALL_RES_DATA "${MEDTOOL_INSTALL_RES}/med" CACHE PATH "Install path: MEDTOOL specific data") #SET(MEDTOOL_MED_INSTALL_RES_SCRIPTS "${MEDTOOL_INSTALL_RES}/med" CACHE PATH "Install path: SALOME MED specific scripts") #MARK_AS_ADVANCED(MEDTOOL_INSTALL_BINS MEDTOOL_INSTALL_LIBS MEDTOOL_INSTALL_IDLS MEDTOOL_INSTALL_HEADERS) #MARK_AS_ADVANCED(MEDTOOL_INSTALL_SCRIPT_SCRIPTS MEDTOOL_INSTALL_SCRIPT_DATA MEDTOOL_INSTALL_SCRIPT_PYTHON) #MARK_AS_ADVANCED(MEDTOOL_INSTALL_APPLISKEL_SCRIPTS MEDTOOL_INSTALL_APPLISKEL_PYTHON MEDTOOL_INSTALL_CMAKE MEDTOOL_INSTALL_CMAKE_LOCAL MEDTOOL_INSTALL_RES) #MARK_AS_ADVANCED(MEDTOOL_INSTALL_PYTHON MEDTOOL_INSTALL_PYTHON_SHARED MEDTOOL_MED_INSTALL_RES_DATA MEDTOOL_MED_INSTALL_RES_SCRIPTS MEDTOOL_INSTALL_DOC) # Header configuration # ==================== MEDTOOL_XVERSION(${PROJECT_NAME}) #SALOME_CONFIGURE_FILE(MED_version.h.in MED_version.h INSTALL ${MEDTOOL_INSTALL_HEADERS}) #SALOME_CONFIGURE_FILE(VERSION.in VERSION INSTALL ${MEDTOOL_INSTALL_BINS}) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/MEDtool_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/MEDtool_version.h) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/MEDtool_version.h DESTINATION ${MEDTOOL_INSTALL_HEADERS}) # Accumulate environment variables for MED module #SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${MEDTOOL_INSTALL_BINS} # ${CMAKE_INSTALL_PREFIX}/${MEDTOOL_INSTALL_PYTHON}) #SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${MEDTOOL_INSTALL_LIBS}) # Sources # ======== IF(WIN32) ADD_DEFINITIONS("-D_USE_MATH_DEFINES") ENDIF(WIN32) #ADD_DEFINITIONS("-DMEDTOOL_ROOT_DIR=${CMAKE_INSTALL_PREFIX}") ADD_SUBDIRECTORY(src) #ADD_SUBDIRECTORY(adm_local) IF(MEDTOOL_BUILD_DOC) ADD_SUBDIRECTORY(doc) ENDIF(MEDTOOL_BUILD_DOC) #ADD_SUBDIRECTORY(adm_local_without_kernel) IF(NOT MEDTOOL_MED_MICROMED) IF(MEDTOOL_MED_WITH_FILE_EXAMPLES) ADD_SUBDIRECTORY(resources) ENDIF(MEDTOOL_MED_WITH_FILE_EXAMPLES) ENDIF(NOT MEDTOOL_MED_MICROMED) # Configuration export # ==================== # List of targets in this project we want to make visible to the rest of the world. # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup" SET(_${PROJECT_NAME}_exposed_targets interpkernel medcoupling medcouplingremapper) IF(NOT MEDTOOL_MED_MICROMED) LIST(APPEND _${PROJECT_NAME}_exposed_targets medloader) IF(MEDTOOL_MED_ENABLE_RENUMBER) LIST(APPEND _${PROJECT_NAME}_exposed_targets renumbercpp) ENDIF() IF(MEDTOOL_MED_ENABLE_PARTITIONER) LIST(APPEND _${PROJECT_NAME}_exposed_targets medpartitionercpp) IF(MEDTOOL_BUILD_TESTS) LIST(APPEND _${PROJECT_NAME}_exposed_targets MEDPARTITIONERTest) ENDIF() ENDIF() IF(MEDTOOL_BUILD_TESTS) LIST(APPEND _${PROJECT_NAME}_exposed_targets InterpKernelTest) ENDIF() ENDIF() IF(MEDTOOL_USE_MPI) LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedmem) IF(NOT MEDTOOL_MED_MICROMED) LIST(APPEND _${PROJECT_NAME}_exposed_targets paramedloader) ENDIF() IF(MEDTOOL_BUILD_TESTS) IF(NOT MEDTOOL_MED_MICROMED) LIST(APPEND _${PROJECT_NAME}_exposed_targets ParaMEDMEMTest) ENDIF() ENDIF() ENDIF() # Add all targets to the build-tree export set EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets} FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake) # Create the configuration files: # - in the build tree: # Ensure the variables are always defined for the configure (even if empty): # SET(KERNEL_ROOT_DIR "${KERNEL_ROOT_DIR}") # SET(GUI_ROOT_DIR "${GUI_ROOT_DIR}") # SET(MEDFILE_ROOT_DIR "${MEDFILE_ROOT_DIR}") # SET(MPI_ROOT_DIR "${MPI_ROOT_DIR}") # SET(HDF5_ROOT_DIR "${HDF5_ROOT_DIR}") # SET(OMNIORB_ROOT_DIR "${OMNIORB_ROOT_DIR}") # SET(PTHREAD_ROOT_DIR "${PTHREAD_ROOT_DIR}") # SET(BOOST_ROOT_DIR "${BOOST_ROOT_DIR}") # SET(SWIG_ROOT_DIR "${SWIG_ROOT_DIR}") # SET(PYTHON_ROOT_DIR "${PYTHON_ROOT_DIR}") # SET(CPPUNIT_ROOT_DIR "${CPPUNIT_ROOT_DIR}") # SET(GRAPHVIZ_ROOT_DIR "${GRAPHVIZ_ROOT_DIR}") # SET(DOXYGEN_ROOT_DIR "${DOXYGEN_ROOT_DIR}") # SET(SPHINX_ROOT_DIR "${SPHINX_ROOT_DIR}") # SET(METIS_ROOT_DIR "${METIS_ROOT_DIR}") # SET(PARMETIS_ROOT_DIR "${PARMETIS_ROOT_DIR}") # SET(SCOTCH_ROOT_DIR "${SCOTCH_ROOT_DIR}") # SET(XDR_ROOT_DIR "${XDR_ROOT_DIR}") # - in the install tree: # Get the relative path of the include directory so # we can register it in the generated configuration files: SET(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}") # Build variables that will be expanded when configuring SalomeConfig.cmake: # SALOME_CONFIGURE_PREPARE(Metis ParMetis Scotch XDR CAS Qt4 CppUnit Graphviz Doxygen Sphinx MPI omniORB # PThread Boost libXml2 Python HDF5 MEDFile) # INCLUDE(CMakePackageConfigHelpers) # CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in # ${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake # INSTALL_DESTINATION "${MEDTOOL_INSTALL_CMAKE}_LOCAL" # PATH_VARS CONF_INCLUDE_DIRS MEDTOOL_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX # KERNEL_ROOT_DIR GUI_ROOT_DIR MEDFILE_ROOT_DIR MPI_ROOT_DIR # HDF5_ROOT_DIR OMNIORB_ROOT_DIR PTHREAD_ROOT_DIR BOOST_ROOT_DIR # SWIG_ROOT_DIR PYTHON_ROOT_DIR CPPUNIT_ROOT_DIR GRAPHVIZ_ROOT_DIR DOXYGEN_ROOT_DIR # SPHINX_ROOT_DIR METIS_ROOT_DIR PARMETIS_ROOT_DIR SCOTCH_ROOT_DIR XDR_ROOT_DIR) #WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake # VERSION ${${PROJECT_NAME_UC}_VERSION} # COMPATIBILITY AnyNewerVersion) # Install the CMake configuration files: # INSTALL(FILES # "${PROJECT_BINARY_DIR}/to_install/${PROJECT_NAME}Config.cmake" # "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" # DESTINATION "${MEDTOOL_INSTALL_CMAKE_LOCAL}") # Install the export set for use with the install-tree #INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${MEDTOOL_INSTALL_CMAKE_LOCAL}" # FILE ${PROJECT_NAME}Targets.cmake)