From 2a82c27954bc49592398c35a701b0f6a79f3b695 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sun, 31 Jan 2021 14:13:25 +0100 Subject: [PATCH] Fix linking for std::filesystem in GCC 8 --- cmake/Modules/FindFILESYSTEM.cmake | 12 ++++++++---- .../cmake/Modules/FindFILESYSTEM.cmake | 14 +++++++++----- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/cmake/Modules/FindFILESYSTEM.cmake b/cmake/Modules/FindFILESYSTEM.cmake index ca803cdfb..060f92902 100644 --- a/cmake/Modules/FindFILESYSTEM.cmake +++ b/cmake/Modules/FindFILESYSTEM.cmake @@ -122,7 +122,10 @@ endif() # All of our tests require C++17 or later set(OLD_CMAKE_CXX_STANDARD ${CMAKE_CXX_STANDARD}) set(CMAKE_CXX_STANDARD 17) -if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "9.0.0")) +if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "8.0.0")) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99") + set(UNDEFINED_BEHAVIOR_WITHOUT_LINKING TRUE) + endif() set(CMAKE_REQUIRED_FLAGS "-std=c++17") endif() if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99")) @@ -207,9 +210,10 @@ if(CXX_FILESYSTEM_HAVE_FS) ]] code @ONLY) # Try to compile a simple filesystem program without any linker flags - check_cxx_source_compiles("${code}" CXX_FILESYSTEM_NO_LINK_NEEDED) - - set(can_link ${CXX_FILESYSTEM_NO_LINK_NEEDED}) + if(NOT UNDEFINED_BEHAVIOR_WITHOUT_LINKING) + check_cxx_source_compiles("${code}" CXX_FILESYSTEM_NO_LINK_NEEDED) + set(can_link ${CXX_FILESYSTEM_NO_LINK_NEEDED}) + endif() if(NOT CXX_FILESYSTEM_NO_LINK_NEEDED) set(prev_libraries ${CMAKE_REQUIRED_LIBRARIES}) diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindFILESYSTEM.cmake b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindFILESYSTEM.cmake index 0a2e53d79..c4b7255e2 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindFILESYSTEM.cmake +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindFILESYSTEM.cmake @@ -119,8 +119,11 @@ if(FILESYSTEM_FIND_QUIETLY) set(CMAKE_REQUIRED_QUIET ${FILESYSTEM_FIND_QUIETLY}) endif() -# All of our tests require C++17 or later -if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "9.0.0")) +set(CMAKE_CXX_STANDARD 17) +if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "8.0.0")) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99") + set(UNDEFINED_BEHAVIOR_WITHOUT_LINKING TRUE) + endif() set(CMAKE_REQUIRED_FLAGS "-std=c++17") endif() if((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.99")) @@ -205,9 +208,10 @@ if(CXX_FILESYSTEM_HAVE_FS) ]] code @ONLY) # Try to compile a simple filesystem program without any linker flags - check_cxx_source_compiles("${code}" CXX_FILESYSTEM_NO_LINK_NEEDED) - - set(can_link ${CXX_FILESYSTEM_NO_LINK_NEEDED}) + if(NOT UNDEFINED_BEHAVIOR_WITHOUT_LINKING) + check_cxx_source_compiles("${code}" CXX_FILESYSTEM_NO_LINK_NEEDED) + set(can_link ${CXX_FILESYSTEM_NO_LINK_NEEDED}) + endif() if(NOT CXX_FILESYSTEM_NO_LINK_NEEDED) set(prev_libraries ${CMAKE_REQUIRED_LIBRARIES})