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"
53namespace fs = ::std::filesystem;
54#elif CK_HAS_FILESYSTEM_TS
55namespace fs = ::std::experimental::filesystem;
60inline std::string
operator+(
const std::string_view s,
const CK::fs::path& path)
62 return path.string().insert(0, s);
65inline 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!"
89inline fs::path
weakly_canonical(
const fs::path& path) {
return fs::weakly_canonical(path); }
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