aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-01-01 09:40:08 +0100
committerdec05eba <dec05eba@protonmail.com>2018-01-01 09:41:07 +0100
commit1f6ee990275f412d4cc84483051fd549710da634 (patch)
tree9d41c91a67390d05329c590876da8656e4c0c4d8 /include
parent281ca4edaaa40d1cbffcde1e6f593133653397b8 (diff)
Add config parsing for cmake
cmake has not integrated yet, but it will parse... Add test script to easily run tests
Diffstat (limited to 'include')
-rw-r--r--include/Conf.hpp79
-rw-r--r--include/FileUtil.hpp2
2 files changed, 80 insertions, 1 deletions
diff --git a/include/Conf.hpp b/include/Conf.hpp
index 75076fa..d3d80f9 100644
--- a/include/Conf.hpp
+++ b/include/Conf.hpp
@@ -146,7 +146,28 @@ namespace sibs
class SibsConfig : public ConfigCallback
{
public:
- SibsConfig(Compiler _compiler, const FileString &_projectPath, OptimizationLevel _optimizationLevel = OPT_LEV_DEBUG) : compiler(_compiler), projectPath(_projectPath), packageType((PackageType)-1), optimizationLevel(_optimizationLevel), finishedProcessing(false) {}
+ SibsConfig(Compiler _compiler, const FileString &_projectPath, OptimizationLevel _optimizationLevel = OPT_LEV_DEBUG) :
+ compiler(_compiler),
+ projectPath(_projectPath),
+ packageType((PackageType)-1),
+ optimizationLevel(_optimizationLevel),
+ finishedProcessing(false),
+ useCmake(false)
+ {
+ cmakeDirGlobal = projectPath;
+ cmakeDirStatic = cmakeDirGlobal;
+ cmakeDirDynamic = cmakeDirGlobal;
+ switch(optimizationLevel)
+ {
+ case OPT_LEV_DEBUG:
+ cmakeArgsGlobal = "\"-DCMAKE_BUILD_TYPE=Debug\"";
+ break;
+ case OPT_LEV_RELEASE:
+ cmakeArgsGlobal = "\"-DCMAKE_BUILD_TYPE=Release\"";
+ break;
+ }
+ }
+
virtual ~SibsConfig(){}
Compiler getCompiler() const
@@ -216,6 +237,54 @@ namespace sibs
return ignoreDirs;
}
+ const FileString& getCmakeDir() const
+ {
+ return cmakeDirGlobal;
+ }
+
+ const FileString& getCmakeDirStatic() const
+ {
+ return cmakeDirStatic;
+ }
+
+ const FileString& getCmakeDirDynamic() const
+ {
+ return cmakeDirDynamic;
+ }
+
+ // Get cmake args for all builds. This is args under [cmake] only
+ const std::string& getCmakeArgs() const
+ {
+ return cmakeArgsGlobal;
+ }
+
+ // Get cmake args for static build. This is a combination of args under [cmake] and under [cmake.static]
+ std::string getCmakeArgsStatic() const
+ {
+ std::string result;
+ result.reserve(cmakeArgsGlobal.size() + 1 + cmakeArgsStatic.size());
+ result += cmakeArgsGlobal;
+ result += " ";
+ result += cmakeArgsStatic;
+ return result;
+ }
+
+ // Get cmake args for dynamic build. This is a combination of args under [cmake] and under [cmake.dynamic]
+ std::string getCmakeArgsDynamic() const
+ {
+ std::string result;
+ result.reserve(cmakeArgsGlobal.size() + 1 + cmakeArgsDynamic.size());
+ result += cmakeArgsGlobal;
+ result += " ";
+ result += cmakeArgsDynamic;
+ return result;
+ }
+
+ bool shouldUseCmake() const
+ {
+ return useCmake;
+ }
+
void setPackageType(PackageType packageType)
{
this->packageType = packageType;
@@ -230,6 +299,7 @@ namespace sibs
virtual void finished() override;
void failInvalidFieldUnderObject(const StringView &fieldName) const;
private:
+ void parseCmake(const StringView &fieldName, const ConfigValue &fieldValue, std::string &cmakeDir, std::string &cmakeArgs);
void validatePackageName() const;
protected:
StringView currentObject;
@@ -247,6 +317,13 @@ namespace sibs
OptimizationLevel optimizationLevel;
std::vector<std::string> debugStaticLibs;
std::vector<std::string> releaseStaticLibs;
+ FileString cmakeDirGlobal;
+ FileString cmakeDirStatic;
+ FileString cmakeDirDynamic;
+ std::string cmakeArgsGlobal;
+ std::string cmakeArgsStatic;
+ std::string cmakeArgsDynamic;
+ bool useCmake;
bool finishedProcessing;
};
diff --git a/include/FileUtil.hpp b/include/FileUtil.hpp
index 90b9ca3..64d0c99 100644
--- a/include/FileUtil.hpp
+++ b/include/FileUtil.hpp
@@ -23,12 +23,14 @@ namespace sibs
#if OS_FAMILY == OS_FAMILY_POSIX
#define toUtf8(input) input
FileString toFileString(const std::string &utf8Str);
+ FileString toFileString(const StringView &utf8Str);
#else
std::string toUtf8(const sibs::FileString &input);
std::string toUtf8(const TCHAR *input);
FileString utf8To16(const StringView &utf8Str);
FileString utf8To16(const std::string &utf8Str);
FileString toFileString(const std::string &utf8Str);
+ FileString toFileString(const StringView &utf8Str);
FileString getLastErrorAsString();
void replaceChar(FileString &input, wchar_t charToReplace, wchar_t charToReplaceWith);
#endif