aboutsummaryrefslogtreecommitdiff
path: root/backend/BackendUtils.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-09-20 14:57:15 +0200
committerdec05eba <dec05eba@protonmail.com>2020-07-06 07:39:33 +0200
commit3f117ba513d7f8ec8244103174f8635df7bd379b (patch)
treefb4d975158a733bae1f11ec399a667e1cc9dfd0f /backend/BackendUtils.cpp
parent078fe50351224d28592f1b2907585bd4fa551adf (diff)
Use ninja library to generate build instead of raw string
Diffstat (limited to 'backend/BackendUtils.cpp')
-rw-r--r--backend/BackendUtils.cpp45
1 files changed, 29 insertions, 16 deletions
diff --git a/backend/BackendUtils.cpp b/backend/BackendUtils.cpp
index a91fc95..6bb0ace 100644
--- a/backend/BackendUtils.cpp
+++ b/backend/BackendUtils.cpp
@@ -7,38 +7,49 @@ using namespace sibs;
namespace backend
{
- bool isPathSubPathOf(const FileString &path, const FileString &subPathOf)
+ static bool isPathSubPathOf(const FileString &path, const FileString &subPathOf)
{
return _tinydir_strncmp(path.c_str(), subPathOf.c_str(), subPathOf.size()) == 0;
}
-
- const _tinydir_char_t *sourceFileExtensions[] =
+
+ const _tinydir_char_t *cFileExtensions[] =
{
TINYDIR_STRING("c"),
TINYDIR_STRING("C"),
- TINYDIR_STRING("cc"),
+ TINYDIR_STRING("cc")
+ };
+
+ const _tinydir_char_t *cppFileExtensions[] =
+ {
TINYDIR_STRING("cp"),
TINYDIR_STRING("cpp"),
TINYDIR_STRING("cxx"),
TINYDIR_STRING("c++")
};
- bool BackendUtils::isSourceFile(tinydir_file *file)
+
+ sibs::Language BackendUtils::getFileLanguage(tinydir_file *file)
{
if(!file->is_reg)
- return false;
+ return sibs::Language::NONE;
+
+ for(const _tinydir_char_t *sourceFileExtension : cFileExtensions)
+ {
+ if(_tinydir_strcmp(sourceFileExtension, file->extension) == 0)
+ return sibs::Language::C;
+ }
- for(const _tinydir_char_t *sourceFileExtension : sourceFileExtensions)
+ for(const _tinydir_char_t *sourceFileExtension : cppFileExtensions)
{
if(_tinydir_strcmp(sourceFileExtension, file->extension) == 0)
- return true;
+ return sibs::Language::CPP;
}
- return false;
+ return sibs::Language::NONE;
}
- void BackendUtils::collectSourceFiles(const _tinydir_char_t *projectPath, Ninja *ninjaProject, const SibsConfig &sibsConfig)
+ void BackendUtils::collectSourceFiles(const _tinydir_char_t *projectPath, Ninja *ninjaProject, const SibsConfig &sibsConfig, bool recursive)
{
- walkDir(projectPath, [ninjaProject, &sibsConfig](tinydir_file *file)
+ walkDir(projectPath, [ninjaProject, &sibsConfig, recursive](tinydir_file *file)
{
FileString pathNative = file->path;
#if OS_FAMILY == OS_FAMILY_WINDOWS
@@ -46,10 +57,11 @@ namespace backend
#endif
if(file->is_reg)
{
- if (isSourceFile(file))
+ sibs::Language fileLanguage = getFileLanguage(file);
+ if (fileLanguage != sibs::Language::NONE)
{
string filePathUtf8 = toUtf8(pathNative.c_str() + sibsConfig.getProjectPath().size());
- ninjaProject->addSourceFile(filePathUtf8.c_str());
+ ninjaProject->addSourceFile(fileLanguage, filePathUtf8.c_str());
}
else
{
@@ -58,12 +70,13 @@ namespace backend
}
else
{
+ // TODO: Verify what happens if test has test sub directory
if (!sibsConfig.getTestPath().empty() && isPathSubPathOf(pathNative.c_str(), sibsConfig.getTestPath()))
{
string filePathUtf8 = toUtf8(pathNative.c_str());
ninjaProject->addTestSourceDir(filePathUtf8.c_str());
}
- else if(!directoryToIgnore(pathNative, sibsConfig.getIgnoreDirs()))
+ else if(recursive && !directoryToIgnore(pathNative, sibsConfig.getIgnoreDirs()))
{
FileString projectConfPath = file->path;
#if OS_FAMILY == OS_FAMILY_WINDOWS
@@ -82,11 +95,11 @@ namespace backend
FileString subProjectBuildPath;
readSibsConfig(file->path, projectConfPath, *subProjectConfig, subProjectBuildPath);
- collectSourceFiles(file->path, subProject, *subProjectConfig);
+ collectSourceFiles(file->path, subProject, *subProjectConfig, true);
ninjaProject->addSubProject(subProject, subProjectConfig, move(subProjectBuildPath));
}
else
- collectSourceFiles(file->path, ninjaProject, sibsConfig);
+ collectSourceFiles(file->path, ninjaProject, sibsConfig, true);
}
}
});