diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3a3f709..9c6570d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,111 +1,127 @@ # required to specify the c++ standard cmake_minimum_required(VERSION 3.0) -# define project information -project(GooseFEM) - -# automatically parse the version number -file(READ "${CMAKE_CURRENT_SOURCE_DIR}/GooseFEM/GooseFEM.h" _goosefem_version_header) -string(REGEX MATCH "define[ \t]+GOOSEFEM_WORLD_VERSION[ \t]+([0-9]+)" _goosefem_world_version_match "${_goosefem_version_header}") -set(GOOSEFEM_WORLD_VERSION "${CMAKE_MATCH_1}") -string(REGEX MATCH "define[ \t]+GOOSEFEM_MAJOR_VERSION[ \t]+([0-9]+)" _goosefem_major_version_match "${_goosefem_version_header}") -set(GOOSEFEM_MAJOR_VERSION "${CMAKE_MATCH_1}") -string(REGEX MATCH "define[ \t]+GOOSEFEM_MINOR_VERSION[ \t]+([0-9]+)" _goosefem_minor_version_match "${_goosefem_version_header}") -set(GOOSEFEM_MINOR_VERSION "${CMAKE_MATCH_1}") -set(GOOSEFEM_VERSION_NUMBER ${GOOSEFEM_WORLD_VERSION}.${GOOSEFEM_MAJOR_VERSION}.${GOOSEFEM_MINOR_VERSION}) - # required for install include(CMakePackageConfigHelpers) include(GNUInstallDirs) -# set c++ standard -> c++14 -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) -if(NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 14) - set(CMAKE_CXX_STANDARD 14) -endif() +# project settings +# ---------------- -# set paths where 'GooseFEM' will be installed -# - root -set(GOOSEFEM_ROOT_DIR ${CMAKE_INSTALL_PREFIX}) -# - headers -set(GOOSEFEM_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}") -# - headers -set(INCLUDE_INSTALL_DIR - "${CMAKE_INSTALL_INCLUDEDIR}/GooseFEM" - CACHE PATH "Path, relative to CMAKE_PREFIX_PATH, where the GooseFEM header files are installed" -) -# - CMake configuration -set(CMAKEPACKAGE_INSTALL_DIR - "${CMAKE_INSTALL_DATADIR}/GooseFEM" - CACHE PATH "Path where GooseFEMConfig.cmake is installed" -) -# - pkg-config -set(PKGCONFIG_INSTALL_DIR - "${CMAKE_INSTALL_DATADIR}/pkgconfig" - CACHE PATH "Path where GooseFEM.pc is installed" -) +# define project information +project(GooseFEM) -# list all header files -set(GOOSEFEM_HEADERS +# list of header files +set(headers GooseFEM/GooseFEM.h - GooseFEM/Mesh.h + GooseFEM/Vector.cpp + GooseFEM/Vector.h + GooseFEM/MatrixDiagonal.cpp + GooseFEM/MatrixDiagonal.h + GooseFEM/Element.cpp + GooseFEM/Element.h + GooseFEM/ElementQuad4.cpp + GooseFEM/ElementQuad4.h GooseFEM/Mesh.cpp - GooseFEM/MeshTri3.h + GooseFEM/Mesh.h GooseFEM/MeshTri3.cpp - GooseFEM/MeshQuad4.h + GooseFEM/MeshTri3.h GooseFEM/MeshQuad4.cpp - GooseFEM/MeshHex8.h + GooseFEM/MeshQuad4.h GooseFEM/MeshHex8.cpp - GooseFEM/DynamicsDiagonal.h - GooseFEM/DynamicsDiagonal.cpp - GooseFEM/OverdampedDynamicsDiagonal.h - GooseFEM/OverdampedDynamicsDiagonal.cpp + GooseFEM/MeshHex8.h ) -# Disable pkg-config for native Windows builds -if(NOT WIN32 OR NOT CMAKE_HOST_SYSTEM_NAME MATCHES Windows) - option(GOOSEFEM_BUILD_PKGCONFIG "Build pkg-config .pc file for GooseFEM" ON) +# options +# ------- + +# set options +option(PKGCONFIG "Build pkg-config ${PROJECT_NAME}.pc file" ON) + +# disable pkg-config for native Windows builds +if(WIN32 OR CMAKE_HOST_SYSTEM_NAME MATCHES Windows) + option(PKGCONFIG "Build pkg-config ${PROJECT_NAME}.pc file" OFF) endif() -# build pkg-config file -> fill in relevant values -if(GOOSEFEM_BUILD_PKGCONFIG) - configure_file(GooseFEM.pc.in GooseFEM.pc @ONLY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/GooseFEM.pc DESTINATION ${PKGCONFIG_INSTALL_DIR}) +# paths +# ----- + +set(GOOSEFEM_ROOT_DIR "${CMAKE_INSTALL_PREFIX}") +set(GOOSEFEM_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}") +set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}") +set(CMAKEPACKAGE_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}") +set(PKGCONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/pkgconfig") + +# version +# ------- + +# automatically parse the version number +file(READ "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.h" version) +string(REGEX MATCH "define[ \t]+GOOSEFEM_WORLD_VERSION[ \t]+([0-9]+)" _ "${version}") +set(world_version "${CMAKE_MATCH_1}") +string(REGEX MATCH "define[ \t]+GOOSEFEM_MAJOR_VERSION[ \t]+([0-9]+)" _ "${version}") +set(major_version "${CMAKE_MATCH_1}") +string(REGEX MATCH "define[ \t]+GOOSEFEM_MINOR_VERSION[ \t]+([0-9]+)" _ "${version}") +set(minor_version "${CMAKE_MATCH_1}") +set(GOOSEFEM_VERSION_NUMBER ${world_version}.${major_version}.${minor_version}) + +# C++ standard +# ------------ + +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) +if(NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 14) + set(CMAKE_CXX_STANDARD 14) endif() -# configure CMake file +# configure CMake +# --------------- + configure_package_config_file( - ${CMAKE_CURRENT_SOURCE_DIR}/GooseFEMConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/GooseFEMConfig.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake PATH_VARS GOOSEFEM_INCLUDE_DIR GOOSEFEM_ROOT_DIR INSTALL_DESTINATION ${CMAKEPACKAGE_INSTALL_DIR} NO_CHECK_REQUIRED_COMPONENTS_MACRO ) # install -# - CMake-file +# ------- + +# pkg-config +if(PKGCONFIG) + configure_file(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${PKGCONFIG_INSTALL_DIR}) +endif() + +# CMake install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/GooseFEMConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake DESTINATION ${CMAKEPACKAGE_INSTALL_DIR} ) -# - headers + +# headers install(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/${GOOSEFEM_HEADERS} + ${CMAKE_CURRENT_SOURCE_DIR}/${headers} DESTINATION - ${INCLUDE_INSTALL_DIR}/GooseFEM + ${INCLUDE_INSTALL_DIR}/${PROJECT_NAME} ) # print information to screen +# --------------------------- + message(STATUS "") -message(STATUS "+-------------------------------------------------------------------------------") +message(STATUS "+---------------------------------------------------------------------------------") +message(STATUS "|") +message(STATUS "| Use 'make install' to install in") +message(STATUS "| ${CMAKE_INSTALL_PREFIX}") message(STATUS "|") -message(STATUS "| Use 'make install' to install in '${CMAKE_INSTALL_PREFIX}'") message(STATUS "| To specify a custom directory call") -message(STATUS "| cmake .. -DCMAKE_INSTALL_PREFIX=yourprefix") +message(STATUS "| cmake /path/to/${PROJECT_NAME} -DCMAKE_INSTALL_PREFIX=yourprefix") +message(STATUS "|") message(STATUS "| For custom paths, add the following line to your '~/.bashrc'") message(STATUS "| export PKG_CONFIG_PATH=${CMAKE_INSTALL_PREFIX}/share/pkgconfig:$PKG_CONFIG_PATH") message(STATUS "|") -message(STATUS "+-------------------------------------------------------------------------------") +message(STATUS "+---------------------------------------------------------------------------------") message(STATUS "")