aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CmakeModule.cpp13
-rw-r--r--src/FileUtil.cpp21
2 files changed, 31 insertions, 3 deletions
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)
{