find_package(Threads REQUIRED)
-execute_process(
- COMMAND ./librarytest.sh ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS}
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- OUTPUT_VARIABLE CXX_STDLIB
- )
-
-if(CXX_STDLIB STREQUAL "libstdc++" OR CXX_STDLIB STREQUAL "libc++")
- message(STATUS "We are using ${CXX_STDLIB}.")
-else()
- message(FATAL_ERROR
- "Unable to determine C++ standard library, got ${CXX_STDLIB}.")
-endif()
option(WITH_SELINUX "build SELinux policy" OFF)
if(WITH_SELINUX)
--- /dev/null
+set(_std_filesystem_test_src
+ ${CMAKE_CURRENT_LIST_DIR}/FindStdFilesystem_test.cc)
+
+macro(try_std_filesystem_library _library _result)
+ try_compile(_std_filesystem_compiles
+ ${CMAKE_CURRENT_BINARY_DIR}
+ SOURCES ${_std_filesystem_test_src}
+ CMAKE_FLAGS -DCMAKE_CXX_FLAGS="-std=c++17"
+ LINK_LIBRARIES ${_library})
+ if(_std_filesystem_compiles)
+ set(${_result} ${_library})
+ endif()
+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()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(StdFilesystem
+ FOUND_VAR StdFilesystem_FOUND
+ REQUIRED_VARS StdFilesystem_LIBRARY)
+
+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
+ INTERFACE_LINK_LIBRARIES ${StdFilesystem_LIBRARY})
+endif()
--- /dev/null
+#if __has_include(<filesystem>)
+#include <filesystem>
+namespace fs = std::filesystem;
+#elif __has_include(<experimental/filesystem>)
+#include <experimental/filesystem>
+namespace fs = std::experimental::filesystem;
+#else
+#error std::filesystem not available!
+#endif
+
+int main() {
+ [[maybe_unused]] fs::path path("/");
+}
+++ /dev/null
-#!/bin/sh
-
-CXX=$1
-
-shift
-
-echo "#include <utility>
-#if defined(_LIBCPP_VERSION)
-#define MYRESULT libc++
-#elif defined(__GLIBCXX__)
-#define MYRESULT libstdc++
-#else
-#define MYRESULT unknown
-#endif
-
-HelloFriendsTheAnsWerIs MYRESULT" | ${CXX} -E -xc++ $* - | \
- grep "HelloFriendsTheAnsWerIs" | cut -f 2 -d ' ' | tr -d '\n'
# ceph_test_admin_socket_output
-add_executable(ceph_test_admin_socket_output
- test_admin_socket_output.cc
- admin_socket_output.cc
- admin_socket_output_tests.cc
- )
-target_link_libraries(ceph_test_admin_socket_output
- ceph-common)
-if(CXX_STDLIB STREQUAL "libstdc++")
+find_package(StdFilesystem)
+if(StdFilesystem_FOUND)
+ add_executable(ceph_test_admin_socket_output
+ test_admin_socket_output.cc
+ admin_socket_output.cc
+ admin_socket_output_tests.cc)
target_link_libraries(ceph_test_admin_socket_output
- -lstdc++fs)
-elseif(CXX_STDLIB STREQUAL "libc++")
- target_link_libraries(ceph_test_admin_socket_output
- -lc++experimental)
+ ceph-common StdFilesystem::filesystem)
+ install(TARGETS
+ ceph_test_admin_socket_output
+ DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
-install(TARGETS
- ceph_test_admin_socket_output
- DESTINATION ${CMAKE_INSTALL_BINDIR})
#make check starts here