CMakeLists.txt (4889B)
1 # Copyright (C) 2020, 2021 |Meso|Star> (contact@meso-star.com) 2 # Copyright (C) 2015, 2016 CNRS 3 # 4 # This program is free software: you can redistribute it and/or modify 5 # it under the terms of the GNU General Public License as published by 6 # the Free Software Foundation, either version 3 of the License, or 7 # (at your option) any later version. 8 # 9 # This program is distributed in the hope that it will be useful, 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 # GNU General Public License for more details. 13 # 14 # You should have received a copy of the GNU General Public License 15 # along with this program. If not, see <http://www.gnu.org/licenses/>. 16 17 cmake_minimum_required(VERSION 3.1) 18 enable_testing() 19 project(schiff C) 20 21 set(SCHIFF_SOURCE_DIR ${PROJECT_SOURCE_DIR}/../src/) 22 23 ################################################################################ 24 # Check dependencies 25 ################################################################################ 26 get_filename_component(_current_source_dir ${CMAKE_CURRENT_LIST_FILE} PATH) 27 set(LibYAML_DIR ${_current_source_dir}/) 28 29 find_package(LibYAML REQUIRED) 30 find_package(RCMake 0.4 REQUIRED) 31 find_package(RSys 0.8 REQUIRED) 32 find_package(Star3D 0.8 REQUIRED) 33 find_package(StarSchiff 0.4.1 REQUIRED) 34 find_package(StarSP 0.12 REQUIRED) 35 36 include_directories( 37 ${LibYAML_INCLUDE_DIR} 38 ${RSys_INCLUDE_DIR} 39 ${Star3D_INCLUDE_DIR} 40 ${StarSchiff_INCLUDE_DIR} 41 ${StarSP_INCLUDE_DIR} 42 ${CMAKE_CURRENT_BINARY_DIR}) 43 44 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${RCMAKE_SOURCE_DIR}) 45 include(rcmake) 46 include(rcmake_runtime) 47 48 ################################################################################ 49 # Configure and define the targets 50 ################################################################################ 51 set(VERSION_MAJOR 0) 52 set(VERSION_MINOR 4) 53 set(VERSION_PATCH 2) 54 set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) 55 56 set(SCHIFF_ARGS_DEFAULT_NINSAMPLES "100") 57 set(SCHIFF_ARGS_DEFAULT_NREALISATIONS "10000") 58 set(SCHIFF_ARGS_DEFAULT_NANGLES "1000") 59 set(SCHIFF_ARGS_DEFAULT_NANGLES_INV "2000") 60 61 configure_file(${SCHIFF_SOURCE_DIR}/schiff_version.h.in 62 ${CMAKE_CURRENT_BINARY_DIR}/schiff_version.h @ONLY) 63 configure_file(${SCHIFF_SOURCE_DIR}/schiff_args.h.in 64 ${CMAKE_CURRENT_BINARY_DIR}/schiff_args.h @ONLY) 65 configure_file(${PROJECT_SOURCE_DIR}/../doc/schiff.1.in 66 ${CMAKE_CURRENT_BINARY_DIR}/schiff.1 @ONLY) 67 68 set(SCHIFF_FILES_SRC 69 schiff.c 70 schiff_args.c 71 schiff_geometry.c 72 schiff_mesh.c 73 schiff_optical_properties.c) 74 set(SCHIFF_FILES_INC 75 schiff_geometry.h 76 schiff_mesh.h 77 schiff_optical_properties.h 78 schiff_streamline.h) 79 set(SCHIFF_FILES_DOC COPYING README.md) 80 81 # Prepend each file in the `SCHIFF_FILES_<SRC|INC|DOC>' list by the absolute 82 # path of the directory in which they lie 83 rcmake_prepend_path(SCHIFF_FILES_SRC ${SCHIFF_SOURCE_DIR}) 84 rcmake_prepend_path(SCHIFF_FILES_INC ${SCHIFF_SOURCE_DIR}) 85 rcmake_prepend_path(SCHIFF_FILES_DOC ${PROJECT_SOURCE_DIR}/../) 86 87 set(SCHIFF_FILES_MAN1 88 ${CMAKE_CURRENT_BINARY_DIR}/schiff.1) 89 set(SCHIFF_FILES_MAN5 90 ${PROJECT_SOURCE_DIR}/../doc/schiff-geometry.5 91 ${PROJECT_SOURCE_DIR}/../doc/schiff-output.5) 92 93 if(CMAKE_COMPILER_IS_GNUCC) 94 set(MATH_LIB m) 95 endif() 96 97 add_executable(schiff ${SCHIFF_FILES_SRC} ${SCHIFF_FILES_INC}) 98 target_link_libraries(schiff LibYAML RSys Star3D StarSchiff StarSP ${MATH_LIB}) 99 set_target_properties(schiff PROPERTIES 100 VERSION ${VERSION} 101 SOVERSION ${VERSION_MAJOR}) 102 rcmake_copy_runtime_libraries(schiff) 103 104 ################################################################################ 105 # Tests 106 ################################################################################ 107 # Check that the following command exists 108 find_program(_bash bash) 109 find_program(_bc bc) 110 find_program(_csplit csplit) 111 find_program(_env env) 112 113 if(NOT _bash OR NOT _bc OR NOT _csplit OR NOT _env) 114 message(WARNING "Cannot setup the bash test script") 115 else() 116 add_test( 117 NAME test_schiff_cylinder 118 COMMAND 119 ${_env} PATH=$ENV{PATH}:$<TARGET_FILE_DIR:schiff> 120 ${_bash} ${SCHIFF_SOURCE_DIR}/test_schiff_cylinder.sh) 121 add_test( 122 NAME test_schiff_sphere 123 COMMAND 124 ${_env} PATH=$ENV{PATH}:$<TARGET_FILE_DIR:schiff> 125 ${_bash} ${SCHIFF_SOURCE_DIR}/test_schiff_sphere.sh 126 WORKING_DIRECTORY ${_test_sphere_path}) 127 endif() 128 129 ################################################################################ 130 # Define output & install directories 131 ################################################################################ 132 install(TARGETS schiff 133 ARCHIVE DESTINATION bin 134 LIBRARY DESTINATION lib 135 RUNTIME DESTINATION bin) 136 install(FILES ${SCHIFF_FILES_DOC} DESTINATION share/doc/schiff) 137 install(FILES ${SCHIFF_FILES_MAN1} DESTINATION share/man/man1) 138 install(FILES ${SCHIFF_FILES_MAN5} DESTINATION share/man/man5) 139 rcmake_install_runtime_libraries(schiff) 140