From c6e8fe8125f8900f3019716aa1cfbf18ff8264bd Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 28 Mar 2020 07:15:16 +0100 Subject: Add support for absolute paths in include_dirs config --- src/CmakeModule.cpp | 13 ++++++++++--- src/FileUtil.cpp | 21 +++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/CmakeModule.cpp b/src/CmakeModule.cpp index 8c97b6e..a690948 100644 --- a/src/CmakeModule.cpp +++ b/src/CmakeModule.cpp @@ -190,10 +190,17 @@ namespace sibs #endif for(const auto &includeDir : config.getIncludeDirs()) { - FileString includeDirRelative = FileString("../../../"); - includeDirRelative += toFileString(includeDir); cflags += TINYDIR_STRING(" "); - cflags += getIncludeOptionFlag(config.getCompiler(), includeDirRelative); + if(isPathAbsolute(includeDir)) + { + cflags += getIncludeOptionFlag(config.getCompiler(), toFileString(includeDir)); + } + else + { + FileString includeDirRelative = FileString("../../../"); + includeDirRelative += toFileString(includeDir); + cflags += getIncludeOptionFlag(config.getCompiler(), includeDirRelative); + } } cxxflags = cflags; diff --git a/src/FileUtil.cpp b/src/FileUtil.cpp index a03161f..1fd86d6 100644 --- a/src/FileUtil.cpp +++ b/src/FileUtil.cpp @@ -178,6 +178,27 @@ namespace sibs } #endif +#if OS_FAMILY == OS_FAMILY_POSIX + bool isPathAbsolute(const std::string &path) + { + return !path.empty() && path[0] == '/'; + } +#else + static bool isAlpha(char c) + { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); + } + + bool isPathAbsolute(const std::string &path) + { + if(path.size() >= 3 && isAlpha(path[0]) && path[1] == ':' && (path[2] == '\\' || path[2] == '/')) + return true; + else if(path.size() >= 4 && memcmp(path.data(), "\\\\?\\", 4) == 0) + return true; + return false; + } +#endif + // TODO: Handle failure (directory doesn't exist, no permission etc) void walkDir(const _tinydir_char_t *directory, FileWalkCallbackFunc callbackFunc) { -- cgit v1.2.3