aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp37
1 files changed, 28 insertions, 9 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 9d6c88e..c1ce277 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -18,6 +18,8 @@ using namespace sibs;
// Either do not follow the symlinks or use a hash map with every searched directory
// to only go inside a directory once
+// TODO: Places that use PATH_MAX should be modified. A path CAN be longer than PATH_MAX... (does this include replacing tinydir.h?)
+
void usage()
{
printf("Usage: sibs COMMAND\n\n");
@@ -91,6 +93,11 @@ bool isSourceFile(tinydir_file *file)
return false;
}
+bool isPathSubPathOf(const char *path, const string &subPathOf)
+{
+ return _tinydir_strncmp(path, subPathOf.c_str(), subPathOf.size()) == 0;
+}
+
int buildProject(int argc, const char **argv)
{
if(argc > 1)
@@ -113,7 +120,7 @@ int buildProject(int argc, const char **argv)
projectConfFilePath += "/project.conf";
validateFilePath(projectConfFilePath.c_str());
- SibsConfig sibsConfig;
+ SibsConfig sibsConfig(projectPath);
Result<bool> result = Config::readFromFile(projectConfFilePath.c_str(), sibsConfig);
if(result.isErr())
{
@@ -147,20 +154,32 @@ int buildProject(int argc, const char **argv)
}
backend::Ninja ninja(libraryType);
- walkDirFilesRecursive(projectPath.c_str(), [&ninja, &projectPath](tinydir_file *file)
+ FileWalkCallbackFunc collectSourceFiles = [&ninja, &sibsConfig, &collectSourceFiles](tinydir_file *file)
{
- if (isSourceFile(file))
+ if(file->is_reg)
{
- printf("Adding source file: %s\n", file->path + projectPath.size());
- ninja.addSourceFile(file->path + projectPath.size());
- } else
+ if (isSourceFile(file))
+ {
+ ninja.addSourceFile(file->path + sibsConfig.getProjectPath().size());
+ }
+ else
+ {
+ //printf("Ignoring non-source file: %s\n", file->path + projectPath.size());
+ }
+ }
+ else
{
- //printf("Ignoring non-source file: %s\n", file->path + projectPath.size());
+ // TODO: If compiling without "test" option, do not add test source dir to ninja. Ninja logic will then not build tests
+ if(!sibsConfig.getTestPath().empty() && isPathSubPathOf(file->path, sibsConfig.getTestPath()))
+ ninja.addTestSourceDir(file->path);
+ else
+ walkDir(file->path, collectSourceFiles);
}
- });
+ };
+ walkDir(projectPath.c_str(), collectSourceFiles);
string debugBuildPath = projectPath + "/sibs-build/debug";
- Result<bool> buildFileResult = ninja.createBuildFile(sibsConfig.getPackageName(), sibsConfig.getDependencies(), debugBuildPath.c_str());
+ Result<bool> buildFileResult = ninja.createBuildFile(sibsConfig, debugBuildPath.c_str());
if(buildFileResult.isErr())
{
cerr << "Failed to build ninja file: " << buildFileResult.getErrMsg() << endl;