-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmake: do not always require extra link flags for std::filesystem
since GCC-9 > Using the types and functions in <filesystem> does not require linking > with -lstdc++fs now. see https://gcc.gnu.org/gcc-9/changes.html#libstdcxx Signed-off-by: Kefu Chai <[email protected]>
- Loading branch information
Showing
1 changed file
with
29 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,57 @@ | ||
set(_std_filesystem_test_src | ||
${CMAKE_CURRENT_LIST_DIR}/FindStdFilesystem_test.cc) | ||
|
||
macro(try_std_filesystem_library _library _result) | ||
macro(try_std_filesystem_library _library _result _already_included) | ||
set(_std_filesystem_try_compile_arg | ||
CXX_STANDARD 17) | ||
if(NOT _library STREQUAL "") | ||
list(APPEND _std_filesystem_try_compile_arg | ||
LINK_LIBRARIES ${_library}) | ||
endif() | ||
try_compile(_std_filesystem_compiles | ||
${CMAKE_CURRENT_BINARY_DIR} | ||
SOURCES ${_std_filesystem_test_src} | ||
LINK_LIBRARIES ${_library} | ||
${_std_filesystem_try_compile_arg}) | ||
unset(_std_filesystem_try_compile_arg) | ||
if(_std_filesystem_compiles) | ||
set(${_result} ${_library}) | ||
if(NOT _library STREQUAL "") | ||
set(${_result} ${_library}) | ||
else() | ||
set(${_already_included} "included by standard library") | ||
endif() | ||
endif() | ||
unset(_std_filesystem_compiles) | ||
endmacro() | ||
|
||
|
||
if(NOT StdFilesystem_LIBRARY) | ||
try_std_filesystem_library("stdc++fs" StdFilesystem_LIBRARY) | ||
endif() | ||
if(NOT StdFilesystem_LIBRARY) | ||
try_std_filesystem_library("c++experimental" StdFilesystem_LIBRARY) | ||
endif() | ||
if(NOT StdFilesystem_LIBRARY) | ||
try_std_filesystem_library("c++fs" StdFilesystem_LIBRARY) | ||
endif() | ||
set(_std_filesystem_required_var "StdFilesystem_LIBRARY") | ||
set(_std_filesystem_already_included FALSE) | ||
foreach(library | ||
"" | ||
"stdc++fs" | ||
"c++experimental" | ||
"c++fs") | ||
try_std_filesystem_library("${library}" StdFilesystem_LIBRARY _std_filesystem_already_included) | ||
if(_std_filesystem_already_included) | ||
set(_std_filesystem_required_var "_std_filesystem_already_included") | ||
break() | ||
elseif(StdFilesystem_LIBRARY) | ||
break() | ||
endif() | ||
endforeach() | ||
|
||
unset(_std_filesystem_test_src) | ||
|
||
include(FindPackageHandleStandardArgs) | ||
find_package_handle_standard_args(StdFilesystem | ||
FOUND_VAR StdFilesystem_FOUND | ||
REQUIRED_VARS StdFilesystem_LIBRARY) | ||
REQUIRED_VARS ${_std_filesystem_required_var}) | ||
|
||
mark_as_advanced(StdFilesystem_LIBRARY) | ||
|
||
if(StdFilesystem_FOUND AND NOT (TARGET StdFilesystem::filesystem)) | ||
add_library(StdFilesystem::filesystem INTERFACE IMPORTED) | ||
set_target_properties(StdFilesystem::filesystem PROPERTIES | ||
if(StdFilesystem_LIBRARY) | ||
set_target_properties(StdFilesystem::filesystem PROPERTIES | ||
INTERFACE_LINK_LIBRARIES ${StdFilesystem_LIBRARY}) | ||
endif() | ||
endif() |