diff --git a/Makefile b/Makefile
index 92ef820..062e34b 100644
--- a/Makefile
+++ b/Makefile
@@ -34,28 +34,28 @@ $(OUTPUT): $(OBJECTS)
install: all
$(info Installing MakeGen to /usr/bin/)
@cp $(OUTPUT) /usr/bin/makegen
-$(OBJPATH)/src/ConfigCLI.o: src/ConfigCLI.cpp src/Common.h src/AssertException.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h
+$(OBJPATH)/src/ConfigCLI.o: src/ConfigCLI.cpp src/Common.h src/AssertException.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h
$(info -[10%]- $<)
$(CC) $(CFLAGS) -o $@ $<
-$(OBJPATH)/src/ConfigFile.o: src/ConfigFile.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/AssertException.h src/FileUtils.h src/Utils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/compatibility/ConfigFileConf.h src/xml/XML.h
+$(OBJPATH)/src/ConfigFile.o: src/ConfigFile.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/AssertException.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h src/compatibility/ConfigFileConf.h src/xml/XML.h
$(info -[20%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/HFileGen.o: src/HFileGen.cpp src/FileUtils.h src/Common.h src/AssertException.h src/Utils.h src/HFileGen.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h
$(info -[30%]- $<)
$(CC) $(CFLAGS) -o $@ $<
-$(OBJPATH)/src/IncludeDeps.o: src/IncludeDeps.cpp src/Common.h src/AssertException.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h
+$(OBJPATH)/src/IncludeDeps.o: src/IncludeDeps.cpp src/Common.h src/AssertException.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h
$(info -[40%]- $<)
$(CC) $(CFLAGS) -o $@ $<
-$(OBJPATH)/src/Makefile.o: src/Makefile.cpp src/Common.h src/AssertException.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/Makefile.h
+$(OBJPATH)/src/Makefile.o: src/Makefile.cpp src/Common.h src/AssertException.h src/IncludeDeps.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h src/Makefile.h
$(info -[50%]- $<)
$(CC) $(CFLAGS) -o $@ $<
-$(OBJPATH)/src/Utils.o: src/Utils.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/AssertException.h src/FileUtils.h src/Utils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h
+$(OBJPATH)/src/Utils.o: src/Utils.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/AssertException.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/FileUtils.h src/Utils.h
$(info -[60%]- $<)
$(CC) $(CFLAGS) -o $@ $<
-$(OBJPATH)/src/compatibility/ConfigFileConf.o: src/compatibility/ConfigFileConf.cpp src/ConfigFile.h src/ConfigUtils.h src/Common.h src/AssertException.h src/FileUtils.h src/Utils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/compatibility/ConfigFileConf.h
+$(OBJPATH)/src/compatibility/ConfigFileConf.o: src/compatibility/ConfigFileConf.cpp src/Common.h src/AssertException.h src/xml/XMLObject.h src/compatibility/ConfigFileConf.h
$(info -[70%]- $<)
$(CC) $(CFLAGS) -o $@ $<
-$(OBJPATH)/src/main.o: src/main.cpp src/Common.h src/AssertException.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/FileUtils.h src/Utils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/HFileGen.h src/Makefile.h src/Timer.h
+$(OBJPATH)/src/main.o: src/main.cpp src/Common.h src/AssertException.h src/ConfigCLI.h src/ConfigFile.h src/ConfigUtils.h src/Dependency.h src/FlagData.h src/xml/XMLObject.h src/HFileGen.h src/Makefile.h src/Timer.h src/Utils.h
$(info -[80%]- $<)
$(CC) $(CFLAGS) -o $@ $<
$(OBJPATH)/src/xml/XML.o: src/xml/XML.cpp src/xml/XML.h src/xml/XMLObject.h src/xml/XMLException.h
diff --git a/makegen.xml b/makegen.xml
index ef44938..a57ee44 100644
--- a/makegen.xml
+++ b/makegen.xml
@@ -1,5 +1,6 @@
+ c++17
bin/Release/
makegen
executable
@@ -9,6 +10,7 @@
-g3
-w
+ c++17
_DEBUG
bin/Debug/
makegen
@@ -17,5 +19,5 @@
src/
Release
- v1.3.10
+ v1.3.11
diff --git a/src/Common.h b/src/Common.h
index 4e76033..941ff84 100644
--- a/src/Common.h
+++ b/src/Common.h
@@ -16,7 +16,7 @@
// Release, should be backwards compatible with any minor version
#define MAKEGEN_VERSION_RELEASE 3
// Minor changes, generally bug fixes
-#define MAKEGEN_VERSION_MINOR 10
+#define MAKEGEN_VERSION_MINOR 11
#define MAKEGEN_VERSION ("v" STR(MAKEGEN_VERSION_MAJOR) "." STR(MAKEGEN_VERSION_RELEASE) "." STR(MAKEGEN_VERSION_MINOR))
@@ -42,15 +42,13 @@ const static unsigned int FLAG_TARGET = BIT(11);
LOG_ERROR(__VA_ARGS__); \
throw AssertException{}; \
} \
- { \
- } \
- while (false)
+ false
#define ABORT(...) \
{ \
LOG_ERROR(__VA_ARGS__); \
throw AssertException{}; \
} \
- while (false)
+ false
template
void Log(const T& var)
diff --git a/src/ConfigCLI.cpp b/src/ConfigCLI.cpp
index a7c40c8..3070c6e 100644
--- a/src/ConfigCLI.cpp
+++ b/src/ConfigCLI.cpp
@@ -2,6 +2,7 @@
#include "Common.h"
#include "ConfigFile.h"
+#include "FileUtils.h"
void ConfigCLI::DisplayCLIHelp()
{
@@ -93,6 +94,7 @@ Valid string settings are:
outputtype Type of the output, valid values are executable, sharedlibrary
and staticlibrary
hfile Name of the generated project h-file
+ cppversion Version of the c++ to use
Valid boolean settings are:
genhfile Specifies if MakeGen should generate a project h-file
@@ -125,7 +127,9 @@ Valid settings are:
and staticlibrary
projectname Name of the project
hfile Name of the generated project h-file
- genhfile Specifies if MakeGen should generate a project h-file)");
+ genhfile Specifies if MakeGen should generate a project h-file
+ cppversion Specifies the version of c++ to use (default=c++17)
+ )");
}
ConfigSetting ConfigCLI::CLIStringToSetting(const std::string& s)
@@ -149,9 +153,10 @@ ConfigSetting ConfigCLI::CLIStringToSetting(const std::string& s)
{"argument", ConfigSetting::ExecArgument},
{"dependency", ConfigSetting::Dependency},
{"genhfile", ConfigSetting::GenerateHFile},
+ {"cppversion", ConfigSetting::CppVersion},
};
auto it = map.find(s);
- ASSERT(it != map.end(), "Invalid config setting: ", s)
+ ASSERT(it != map.end(), "Invalid config setting: ", s);
return it->second;
}
@@ -175,7 +180,7 @@ int ConfigCLI::Gen(int argc, char** argv)
}
if (option == "default")
{
- ConfigFile{FileUtils::GetRealPath("."), FlagData{}, 0}.Save();
+ ConfigFile{std::filesystem::current_path(), FlagData{}, 0}.Save();
return 0;
}
else
diff --git a/src/ConfigFile.cpp b/src/ConfigFile.cpp
index d2e744a..5a0a1f9 100644
--- a/src/ConfigFile.cpp
+++ b/src/ConfigFile.cpp
@@ -6,6 +6,8 @@
#include "compatibility/ConfigFileConf.h"
#include "xml/XML.h"
+const std::string DEFAULT_CPP_VERSION = "c++17";
+
ConfigFile::ConfigFile(const std::string& path, const FlagData& flagData, int)
: makegen{"makegen", {}, std::map>{}},
configPath{std::filesystem::canonical(path)}
@@ -24,10 +26,9 @@ ConfigFile::ConfigFile(const std::string& path, const FlagData& flagData, int)
configuration.AddXMLObject(XMLObject("projectname", {}, ConfigUtils::GetDefaultProjectName(configPath)));
configuration.AddXMLObject(XMLObject("outputname", {}, ConfigUtils::GetDefaultOutputName(configPath)));
configuration.AddXMLObject(XMLObject("srcdir", {}, "src/"));
- configuration.AddXMLObject(XMLObject("outputdir", {}, "bin/"));
- configuration.AddXMLObject(XMLObject("hfilename", {}, ConfigUtils::GetDefaultHFileName(configPath)));
+ configuration.AddXMLObject(XMLObject("outputdir", {}, "bin/" + target + "/"));
configuration.AddXMLObject(XMLObject("outputtype", {}, "executable"));
- configuration.AddXMLObject(XMLObject("generatehfile", {}, "false"));
+ configuration.AddXMLObject(XMLObject("cppversion", {}, DEFAULT_CPP_VERSION));
makegen.AddXMLObject(configuration);
Init(flagData);
@@ -56,6 +57,7 @@ void ConfigFile::Init(const FlagData& flagData)
InitStringSetting("outputtype", &outputType);
InitStringSetting("outputdir", &outputDir);
InitStringSetting("projectname", &projectName);
+ InitStringSetting("cppversion", DEFAULT_CPP_VERSION, &cppVersion);
InitOptionalStringSetting("srcdir", &sourceDir);
InitOptionalStringSetting("hfilename", &hFileName);
InitStringListSetting("librarydir", &libraryDirs);
@@ -144,7 +146,25 @@ void ConfigFile::InitDependencies()
void ConfigFile::InitStringSetting(const std::string& name, std::string* output)
{
const std::vector& values = config.GetObjects(name);
- ASSERT(!values.empty(), "No ", name, " defined in makegen.xml")
+ ASSERT(!values.empty(), "No ", name, " defined in makegen.xml");
+
+ if (values.size() > 1)
+ {
+ LOG_ERROR("Only one instance of ", name, " allowed using ", values.front().GetText());
+ }
+
+ *output = values.front().GetText();
+}
+
+void ConfigFile::InitStringSetting(const std::string& name, const std::string& defaultVal, std::string* output)
+{
+ const std::vector& values = config.GetObjects(name);
+ if (values.empty())
+ {
+ *output = defaultVal;
+ return;
+ }
+ ASSERT(!values.empty(), "No ", name, " defined in makegen.xml");
if (values.size() > 1)
{
@@ -251,6 +271,11 @@ const std::string& ConfigFile::GetOutputType() const
return outputType;
}
+const std::string& ConfigFile::GetCppVersion() const
+{
+ return cppVersion;
+}
+
const std::optional& ConfigFile::GetSourceDir() const
{
return sourceDir;
@@ -349,6 +374,8 @@ std::vector ConfigFile::GetSetting(ConfigSetting setting) const
return {outputType};
case ConfigSetting::ProjectName:
return {projectName};
+ case ConfigSetting::CppVersion:
+ return {cppVersion};
case ConfigSetting::HFileName:
{
if (hFileName.has_value())
@@ -443,6 +470,9 @@ bool ConfigFile::SetSettingString(ConfigSetting setting, std::string value)
case ConfigSetting::GenerateHFile:
generateHFile = value == "true";
break;
+ case ConfigSetting::CppVersion:
+ cppVersion = value;
+ break;
default:
LOG_ERROR("Not a string setting");
return false;
diff --git a/src/ConfigFile.h b/src/ConfigFile.h
index 9248eb1..30f117d 100644
--- a/src/ConfigFile.h
+++ b/src/ConfigFile.h
@@ -26,6 +26,7 @@ public:
const std::string& GetOutputName() const;
const std::string& GetProjectName() const;
const std::string& GetOutputType() const;
+ const std::string& GetCppVersion() const;
const std::optional& GetSourceDir() const;
const std::optional& GetHFileName() const;
const std::vector& GetLibraryDirs() const;
@@ -69,6 +70,7 @@ private:
std::string outputDir;
std::string projectName;
std::string outputType;
+ std::string cppVersion;
std::optional sourceDir;
std::optional hFileName;
std::vector libraryDirs;
@@ -92,6 +94,7 @@ private:
XMLObject& GetTargetConfig();
void InitDependencies();
void InitStringSetting(const std::string& name, std::string* output);
+ void InitStringSetting(const std::string& name, const std::string& defaultVal, std::string* output);
void InitOptionalStringSetting(const std::string& name, std::optional* output);
void InitStringListSetting(const std::string& name, std::vector* output);
void InitBoolSetting(const std::string& name, bool* output);
diff --git a/src/ConfigUtils.h b/src/ConfigUtils.h
index 838bdf2..9d91623 100644
--- a/src/ConfigUtils.h
+++ b/src/ConfigUtils.h
@@ -1,44 +1,39 @@
#pragma once
+#include
+#include
#include