diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Conf.cpp | 39 | ||||
-rw-r--r-- | src/GlobalLib.cpp | 8 |
2 files changed, 42 insertions, 5 deletions
diff --git a/src/Conf.cpp b/src/Conf.cpp index 107ad0a..8dd7608 100644 --- a/src/Conf.cpp +++ b/src/Conf.cpp @@ -362,12 +362,34 @@ namespace sibs printf("\n"); */ - if(currentObject.equals("package") && name.equals("name")) + if(currentObject.equals("package")) { - if(value.isSingle()) - packageName = string(value.asSingle().data, value.asSingle().size); - else - throw ParserException("Expected package.name to be a single value, was a list"); + if(name.equals("name")) + { + if (value.isSingle()) + packageName = string(value.asSingle().data, value.asSingle().size); + else + throw ParserException("Expected package.name to be a single value, was a list"); + } + else if(name.equals("type")) + { + if (value.isSingle()) + { + const StringView &packageTypeStr = value.asSingle(); + if(packageTypeStr.equals("executable")) + packageType = PackageType::EXECUTABLE; + else if(packageTypeStr.equals("library")) + packageType = PackageType::LIBRARY; + else + { + string errMsg = "Expected package.type to be either 'executable' or 'library', was: "; + errMsg += string(packageTypeStr.data, packageTypeStr.size); + throw ParserException(errMsg); + } + } + else + throw ParserException("Expected package.type to be a single value, was a list"); + } } else if(currentObject.equals("dependencies")) { @@ -383,4 +405,11 @@ namespace sibs throw ParserException("Expected field under dependencies to be a single value, was a list"); } } + + void SibsConfig::finished() + { + if((int)packageType == -1) + throw ParserException("Missing required config package.type. Expected to be one either 'executable' or 'library'"); + finishedProcessing = true; + } }
\ No newline at end of file diff --git a/src/GlobalLib.cpp b/src/GlobalLib.cpp index cbd822e..7503a7a 100644 --- a/src/GlobalLib.cpp +++ b/src/GlobalLib.cpp @@ -111,6 +111,14 @@ namespace sibs if(sibsConfig.getPackageName().empty()) return Result<string>::Err("project.conf is missing required field package.name"); + if(sibsConfig.getPackageType() == PackageType::EXECUTABLE) + { + string errMsg = "The dependency "; + errMsg += name; + errMsg += " is an executable. Only libraries can be dependencies"; + return Result<string>::Err(errMsg); + } + backend::Ninja ninja(backend::Ninja::LibraryType::STATIC); walkDirFilesRecursive(packageDir.c_str(), [&ninja, &packageDir](tinydir_file *file) { |