4 #ifndef GUARD_CK_FILESYSTEM_HPP_
5 #define GUARD_CK_FILESYSTEM_HPP_
12 #define CK_HAS_FILESYSTEM 1
13 #define CK_HAS_FILESYSTEM_TS 1
16 #define CK_HAS_FILESYSTEM 1
17 #define CK_HAS_FILESYSTEM_TS 0
18 #elif _MSC_VER >= 1900
19 #define CK_HAS_FILESYSTEM 0
20 #define CK_HAS_FILESYSTEM_TS 1
22 #define CK_HAS_FILESYSTEM 0
23 #define CK_HAS_FILESYSTEM_TS 0
25 #elif defined(__has_include)
26 #if __has_include(<filesystem>) && __cplusplus >= 201703L
27 #define CK_HAS_FILESYSTEM 1
29 #define CK_HAS_FILESYSTEM 0
31 #if __has_include(<experimental/filesystem>) && __cplusplus >= 201103L
32 #define CK_HAS_FILESYSTEM_TS 1
34 #define CK_HAS_FILESYSTEM_TS 0
37 #define CK_HAS_FILESYSTEM 0
38 #define CK_HAS_FILESYSTEM_TS 0
44 #elif CK_HAS_FILESYSTEM_TS
45 #include <experimental/filesystem>
47 #error "No filesystem include available"
53 namespace fs = ::std::filesystem;
54 #elif CK_HAS_FILESYSTEM_TS
55 namespace fs = ::std::experimental::filesystem;
60 inline std::string
operator+(
const std::string_view s,
const CK::fs::path& path)
62 return path.string().insert(0, s);
65 inline std::string
operator+(
const CK::fs::path& path,
const std::string_view s)
67 return path.string().append(s);
70 #define FS_ENUM_PERMS_ALL fs::perms::all
72 #if CK_HAS_FILESYSTEM_TS
74 #include <linux/limits.h>
78 std::string result(PATH_MAX,
'\0');
79 std::string p{path.is_relative() ? (fs::current_path() / path).
string() : path.string()};
80 char* retval = realpath(p.c_str(), &result[0]);
81 return (retval ==
nullptr) ? path : fs::path{result};
85 #error "Not implmeneted!"
131 std::size_t
operator()(
const fs::path& path)
const {
return fs::hash_value(path); }
std::string operator+(const std::string_view s, const CK::fs::path &path)
Definition: filesystem.hpp:60
Definition: filesystem.hpp:50
constexpr std::string_view library_prefix
Definition: filesystem.hpp:103
fs::path make_object_file_name(const fs::path &path)
Definition: filesystem.hpp:119
constexpr std::string_view static_library_postfix
Definition: filesystem.hpp:105
fs::path weakly_canonical(const fs::path &path)
Definition: filesystem.hpp:89
constexpr std::string_view executable_postfix
Definition: filesystem.hpp:102
constexpr std::string_view object_file_postfix
Definition: filesystem.hpp:106
fs::path make_dynamic_library_name(const fs::path &path)
Definition: filesystem.hpp:114
constexpr std::string_view dynamic_library_postfix
Definition: filesystem.hpp:104
fs::path make_static_library_name(const fs::path &path)
Definition: filesystem.hpp:124
fs::path make_executable_name(const fs::path &path)
Definition: filesystem.hpp:109
Definition: filesystem.hpp:130
std::size_t operator()(const fs::path &path) const
Definition: filesystem.hpp:131