From 3f117ba513d7f8ec8244103174f8635df7bd379b Mon Sep 17 00:00:00 2001 From: dec05eba Date: Thu, 20 Sep 2018 14:57:15 +0200 Subject: Use ninja library to generate build instead of raw string --- backend/BackendUtils.cpp | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'backend/BackendUtils.cpp') 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); } } }); -- cgit v1.2.3