diff --git a/CMakeLists.txt b/CMakeLists.txt index 9bb7bc10a..df7a50869 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -347,7 +347,11 @@ else() set(GNSSSDR_GTEST_LOCAL_VERSION "1.12.1") endif() set(GNSSSDR_GNSS_SIM_LOCAL_VERSION "master") -set(GNSSSDR_GNSSTK_LOCAL_VERSION "13.7.0") +if(CMAKE_VERSION VERSION_GREATER 3.17.0) + set(GNSSSDR_GNSSTK_LOCAL_VERSION "13.8.0") +else() + set(GNSSSDR_GNSSTK_LOCAL_VERSION "13.7.0") +endif() set(GNSSSDR_MATIO_LOCAL_VERSION "1.5.23") set(GNSSSDR_PUGIXML_LOCAL_VERSION "1.13") set(GNSSSDR_PROTOCOLBUFFERS_LOCAL_VERSION "21.9") diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index ff56e0969..05a1d3d99 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -366,10 +366,17 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) if(NOT Patch_EXECUTABLE) message(FATAL_ERROR "The patch command is not found. It is required to build GNSSTk. Please check your OS documentation and install the patch command.") endif() - set(GNSSTK_PATCH_COMMAND - cd ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} && - ${Patch_EXECUTABLE} ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/CMakeLists.txt < ${GNSSSDR_SOURCE_DIR}/src/tests/data/gnsstk_static13.patch - ) + if(CMAKE_VERSION VERSION_GREATER 3.17.0) + set(GNSSTK_PATCH_COMMAND + cd ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} && + ${Patch_EXECUTABLE} ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/CMakeLists.txt < ${GNSSSDR_SOURCE_DIR}/src/tests/data/gnsstk_static138.patch + ) + else() + set(GNSSTK_PATCH_COMMAND + cd ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} && + ${Patch_EXECUTABLE} ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/CMakeLists.txt < ${GNSSSDR_SOURCE_DIR}/src/tests/data/gnsstk_static13.patch + ) + endif() # Patch only once if(EXISTS ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/CMakeLists.txt) set(GNSSTK_PATCH_COMMAND "") @@ -401,26 +408,48 @@ if(ENABLE_UNIT_TESTING_EXTRA OR ENABLE_SYSTEM_TESTING_EXTRA OR ENABLE_FPGA) set(GNSSTK_PARALLEL_BUILD "-j${NUMBER_OF_PROCESSORS}") endif() endif() - - ExternalProject_Add(gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} - GIT_REPOSITORY https://github.com/SGL-UT/gnsstk - GIT_TAG v${GNSSSDR_GNSSTK_LOCAL_VERSION} - SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} - BINARY_DIR ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} - PATCH_COMMAND ${GNSSTK_PATCH_COMMAND} - CMAKE_ARGS ${GTEST_COMPILER} ${TOOLCHAIN_ARG} - -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install - -DBUILD_EXT=ON - -DBUILD_PYTHON=OFF - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_CXX_STANDARD=14 - -DCMAKE_CXX_EXTENSIONS=ON - -DCMAKE_C_STANDARD=11 - -DCMAKE_C_EXTENSIONS=ON - BUILD_COMMAND ${GNSSTK_BUILD_COMMAND} ${GNSSTK_PARALLEL_BUILD} - BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gnsstk${CMAKE_STATIC_LIBRARY_SUFFIX} - UPDATE_COMMAND "" - ) + if(CMAKE_VERSION VERSION_GREATER 3.17.0) + ExternalProject_Add(gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} + GIT_REPOSITORY https://github.com/SGL-UT/gnsstk + GIT_TAG v${GNSSSDR_GNSSTK_LOCAL_VERSION} + GIT_SUBMODULES_RECURSE OFF + GIT_SUBMODULES "" + SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} + BINARY_DIR ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} + PATCH_COMMAND ${GNSSTK_PATCH_COMMAND} + CMAKE_ARGS ${GTEST_COMPILER} ${TOOLCHAIN_ARG} + -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install + -DBUILD_EXT=ON + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_CXX_STANDARD=17 + -DCMAKE_CXX_EXTENSIONS=ON + -DCMAKE_C_STANDARD=11 + -DCMAKE_C_EXTENSIONS=ON + BUILD_COMMAND ${GNSSTK_BUILD_COMMAND} ${GNSSTK_PARALLEL_BUILD} + BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gnsstk${CMAKE_STATIC_LIBRARY_SUFFIX} + UPDATE_COMMAND "" + ) + else() + ExternalProject_Add(gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} + GIT_REPOSITORY https://github.com/SGL-UT/gnsstk + GIT_TAG v${GNSSSDR_GNSSTK_LOCAL_VERSION} + SOURCE_DIR ${GNSSSDR_BINARY_DIR}/thirdparty/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} + BINARY_DIR ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION} + PATCH_COMMAND ${GNSSTK_PATCH_COMMAND} + CMAKE_ARGS ${GTEST_COMPILER} ${TOOLCHAIN_ARG} + -DCMAKE_INSTALL_PREFIX=${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install + -DBUILD_EXT=ON + -DBUILD_PYTHON=OFF + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_CXX_STANDARD=14 + -DCMAKE_CXX_EXTENSIONS=ON + -DCMAKE_C_STANDARD=11 + -DCMAKE_C_EXTENSIONS=ON + BUILD_COMMAND ${GNSSTK_BUILD_COMMAND} ${GNSSTK_PARALLEL_BUILD} + BUILD_BYPRODUCTS ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gnsstk${CMAKE_STATIC_LIBRARY_SUFFIX} + UPDATE_COMMAND "" + ) + endif() endif() set(GNSSTK_INCLUDE_DIRS ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install/include CACHE PATH "Local GNSSTK headers") set(GNSSTK_LIBRARY ${GNSSSDR_BINARY_DIR}/gnsstk-${GNSSSDR_GNSSTK_LOCAL_VERSION}/install/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gnsstk${CMAKE_STATIC_LIBRARY_SUFFIX}) diff --git a/src/tests/data/gnsstk_static138.patch b/src/tests/data/gnsstk_static138.patch new file mode 100644 index 000000000..bc83c97cb --- /dev/null +++ b/src/tests/data/gnsstk_static138.patch @@ -0,0 +1,30 @@ +SPDX-License-Identifier: GPL-3.0-or-later +SPDX-FileCopyrightText: 2022 Carles Fernandez-Prades +--- CMakeLists.txt 2022-12-19 11:40:38.000000000 +0100 ++++ CMakeLists.txt 2022-12-19 11:56:49.000000000 +0100 +@@ -21,6 +21,16 @@ + + # This sets up variables contining GNU standard installation locations. + include( GNUInstallDirs ) ++if(POLICY CMP0063) ++ cmake_policy(SET CMP0063 NEW) ++ set(CMAKE_CXX_VISIBILITY_PRESET hidden) ++ set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) ++else() ++ if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND NOT WIN32) ++ add_definitions(-fvisibility=hidden) ++ endif() ++endif() ++ + + # Set a filename for collecting exported targets. + set( EXPORT_TARGETS_FILENAME "GNSSTKTargets" ) +@@ -177,7 +187,7 @@ + elseif( WIN32 ) + add_library( gnsstk ${GNSSTK_SRC_FILES} ${GNSSTK_INC_FILES} ) + else() +- add_library( gnsstk SHARED ${GNSSTK_SRC_FILES} ${GNSSTK_INC_FILES} ) ++ add_library( gnsstk STATIC ${GNSSTK_SRC_FILES} ${GNSSTK_INC_FILES} ) + endif() + + # always generate the header because it's an include file whose