Add exclude source and header compilation

This commit is contained in:
Thraix
2020-03-02 21:44:38 +01:00
parent 5f6f605e32
commit f68861367b
6 changed files with 72 additions and 34 deletions
-2
View File
@@ -1,7 +1,6 @@
<makegen> <makegen>
<configuration name="Release"> <configuration name="Release">
<generatehfile>false</generatehfile> <generatehfile>false</generatehfile>
<hfilename>MakeGen.h</hfilename>
<outputdir>bin/</outputdir> <outputdir>bin/</outputdir>
<outputname>makegen</outputname> <outputname>makegen</outputname>
<outputtype>executable</outputtype> <outputtype>executable</outputtype>
@@ -13,7 +12,6 @@
<cflag>-g3</cflag> <cflag>-g3</cflag>
<cflag>-w</cflag> <cflag>-w</cflag>
<generatehfile>false</generatehfile> <generatehfile>false</generatehfile>
<hfilename>MakeGen.h</hfilename>
<outputdir>bin/</outputdir> <outputdir>bin/</outputdir>
<outputname>makegen</outputname> <outputname>makegen</outputname>
<outputtype>executable</outputtype> <outputtype>executable</outputtype>
+10 -2
View File
@@ -53,7 +53,9 @@ Valid settings are:
define Preprocessor define define Preprocessor define
cflag g++ compiler flag cflag g++ compiler flag
lflag g++ linking flag lflag g++ linking flag
dependency Project which current project depends on)"); dependency Project which current project depends on
excludesource Exclude source file from compiling
excludeheader Exclude header file from project h-file)");
} }
void ConfigCLI::DisplayRemoveHelp() void ConfigCLI::DisplayRemoveHelp()
@@ -70,7 +72,9 @@ Valid settings are
define Preprocessor define define Preprocessor define
cflag g++ compiler flag cflag g++ compiler flag
lflag g++ linking flag lflag g++ linking flag
dependency Project which current project depends on)"); dependency Project which current project depends on
excludesource Exclude source file from compiling
excludeheader Exclude header file from project h-file)");
} }
void ConfigCLI::DisplaySetHelp() void ConfigCLI::DisplaySetHelp()
@@ -109,6 +113,8 @@ Valid settings are:
cflag g++ compiler flag cflag g++ compiler flag
lflag g++ linking flag lflag g++ linking flag
dependency Project which current project depends on dependency Project which current project depends on
excludesource Exclude source file from compiling
excludeheader Exclude header file from project h-file
outputdir Directory of the compiled output outputdir Directory of the compiled output
outputname Name of the output executable/library outputname Name of the output executable/library
outputtype Type of the output, valid values are executable, sharedlibrary outputtype Type of the output, valid values are executable, sharedlibrary
@@ -134,6 +140,8 @@ ConfigSetting ConfigCLI::CLIStringToSetting(const std::string& s)
{"define", ConfigSetting::Define}, {"define", ConfigSetting::Define},
{"cflag", ConfigSetting::CFlag}, {"cflag", ConfigSetting::CFlag},
{"lflag", ConfigSetting::LFlag}, {"lflag", ConfigSetting::LFlag},
{"excludesource", ConfigSetting::ExcludeSource},
{"excludeheader", ConfigSetting::ExcludeHeader},
{"dependency", ConfigSetting::Dependency}, {"dependency", ConfigSetting::Dependency},
{"genhfile", ConfigSetting::GenerateHFile}, {"genhfile", ConfigSetting::GenerateHFile},
}; };
+1 -1
View File
@@ -316,7 +316,7 @@ XMLObject& ConfigFile::GetConfiguration()
const std::string& ConfigFile::GetConfigPath() const const std::string& ConfigFile::GetConfigPath() const
{ {
return configPath;; return configPath;
} }
ConfigFile& ConfigFile::GetDependencyConfig(size_t i) ConfigFile& ConfigFile::GetDependencyConfig(size_t i)
+13 -1
View File
@@ -18,7 +18,7 @@ struct ConfigCache
enum class ConfigSetting enum class ConfigSetting
{ {
// vectors // vectors
Library = 0, LibraryDir = 1, IncludeDir = 2, Define = 3, Dependency = 4, CFlag = 5, LFlag = 6, Library = 0, LibraryDir = 1, IncludeDir = 2, Define = 3, Dependency = 4, CFlag = 5, LFlag = 6, ExcludeSource = 7, ExcludeHeader = 8,
// Strings // Strings
SourceDir = 32, OutputDir = 33, OutputName = 34, OutputType = 35, ProjectName = 36, HFileName = 37, SourceDir = 32, OutputDir = 33, OutputName = 34, OutputType = 35, ProjectName = 36, HFileName = 37,
// Bools // Bools
@@ -59,6 +59,10 @@ struct ConfigUtils
return "cflag"; return "cflag";
case ConfigSetting::LFlag: case ConfigSetting::LFlag:
return "lflag"; return "lflag";
case ConfigSetting::ExcludeSource:
return "excludesource";
case ConfigSetting::ExcludeHeader:
return "excludeheader";
case ConfigSetting::GenerateHFile: case ConfigSetting::GenerateHFile:
return "generatehfile"; return "generatehfile";
case ConfigSetting::Invalid: case ConfigSetting::Invalid:
@@ -84,6 +88,8 @@ struct ConfigUtils
case ConfigSetting::Define: case ConfigSetting::Define:
case ConfigSetting::CFlag: case ConfigSetting::CFlag:
case ConfigSetting::LFlag: case ConfigSetting::LFlag:
case ConfigSetting::ExcludeSource:
case ConfigSetting::ExcludeHeader:
case ConfigSetting::GenerateHFile: case ConfigSetting::GenerateHFile:
return false; return false;
default: default:
@@ -110,6 +116,8 @@ struct ConfigUtils
case ConfigSetting::Define: case ConfigSetting::Define:
case ConfigSetting::CFlag: case ConfigSetting::CFlag:
case ConfigSetting::LFlag: case ConfigSetting::LFlag:
case ConfigSetting::ExcludeHeader:
case ConfigSetting::ExcludeSource:
case ConfigSetting::GenerateHFile: case ConfigSetting::GenerateHFile:
case ConfigSetting::Invalid: case ConfigSetting::Invalid:
return false; return false;
@@ -127,6 +135,8 @@ struct ConfigUtils
case ConfigSetting::Define: case ConfigSetting::Define:
case ConfigSetting::CFlag: case ConfigSetting::CFlag:
case ConfigSetting::LFlag: case ConfigSetting::LFlag:
case ConfigSetting::ExcludeHeader:
case ConfigSetting::ExcludeSource:
return true; return true;
case ConfigSetting::SourceDir: case ConfigSetting::SourceDir:
case ConfigSetting::OutputDir: case ConfigSetting::OutputDir:
@@ -158,6 +168,8 @@ struct ConfigUtils
case ConfigSetting::Define: case ConfigSetting::Define:
case ConfigSetting::CFlag: case ConfigSetting::CFlag:
case ConfigSetting::LFlag: case ConfigSetting::LFlag:
case ConfigSetting::ExcludeHeader:
case ConfigSetting::ExcludeSource:
case ConfigSetting::Invalid: case ConfigSetting::Invalid:
return false; return false;
} }
+6
View File
@@ -25,8 +25,14 @@ void HFileGen::Create(ConfigFile& conf)
} }
} }
const std::vector<std::string>& excludeHeaders = conf.GetSettingVectorString(ConfigSetting::ExcludeHeader);
std::ofstream os(path + "/" + conf.GetSettingString(ConfigSetting::HFileName)); std::ofstream os(path + "/" + conf.GetSettingString(ConfigSetting::HFileName));
os << "#pragma once" << std::endl << std::endl; os << "#pragma once" << std::endl << std::endl;
for(auto&& hFile : hFiles) for(auto&& hFile : hFiles)
{
std::string headerFile = conf.GetSettingString(ConfigSetting::SourceDir) + hFile;
auto it = std::find(excludeHeaders.begin(), excludeHeaders.end(), headerFile);
if(it == excludeHeaders.end())
os << "#include <" << hFile << ">" << std::endl; os << "#include <" << hFile << ">" << std::endl;
}
} }
+14
View File
@@ -22,6 +22,7 @@ void Utils::GetCppFiles(ConfigFile& conf, std::set<std::string>& cppFiles)
std::vector<std::string> files; std::vector<std::string> files;
std::string path = conf.GetConfigPath() + conf.GetSettingString(ConfigSetting::SourceDir); std::string path = conf.GetConfigPath() + conf.GetSettingString(ConfigSetting::SourceDir);
FileUtils::GetAllFiles(path, files); FileUtils::GetAllFiles(path, files);
const std::vector<std::string>& excludeSources = conf.GetSettingVectorString(ConfigSetting::ExcludeSource);
for(auto it = files.begin(); it!=files.end();++it) for(auto it = files.begin(); it!=files.end();++it)
{ {
@@ -31,11 +32,16 @@ void Utils::GetCppFiles(ConfigFile& conf, std::set<std::string>& cppFiles)
std::string extension = it->substr(extensionPos+1); std::string extension = it->substr(extensionPos+1);
std::string filename = it->substr(path.length()); std::string filename = it->substr(path.length());
if(extension == "cpp" || extension == "c") if(extension == "cpp" || extension == "c")
{
std::string sourceFile =conf.GetSettingString(ConfigSetting::SourceDir) + filename;
auto it = std::find(excludeSources.begin(), excludeSources.end(), sourceFile);
if(it == excludeSources.end())
{ {
cppFiles.emplace(filename); cppFiles.emplace(filename);
} }
} }
} }
}
} }
void Utils::GetCppAndHFiles(ConfigFile& conf, std::set<HFile>& hFiles, std::set<std::string>& cppFiles) void Utils::GetCppAndHFiles(ConfigFile& conf, std::set<HFile>& hFiles, std::set<std::string>& cppFiles)
@@ -43,6 +49,7 @@ void Utils::GetCppAndHFiles(ConfigFile& conf, std::set<HFile>& hFiles, std::set<
std::vector<std::string> files; std::vector<std::string> files;
std::string path = conf.GetConfigPath() + conf.GetSettingString(ConfigSetting::SourceDir); std::string path = conf.GetConfigPath() + conf.GetSettingString(ConfigSetting::SourceDir);
FileUtils::GetAllFiles(path,files); FileUtils::GetAllFiles(path,files);
const std::vector<std::string>& excludeSources = conf.GetSettingVectorString(ConfigSetting::ExcludeSource);
// include paramenter with the path of the file // include paramenter with the path of the file
// For example src/graphics/Window.h -> graphics/Window.h if src is a src folder // For example src/graphics/Window.h -> graphics/Window.h if src is a src folder
for(auto it = files.begin(); it!=files.end();++it) for(auto it = files.begin(); it!=files.end();++it)
@@ -53,9 +60,16 @@ void Utils::GetCppAndHFiles(ConfigFile& conf, std::set<HFile>& hFiles, std::set<
std::string extension = it->substr(extensionPos+1); std::string extension = it->substr(extensionPos+1);
std::string filename = it->substr(path.length()); std::string filename = it->substr(path.length());
if(extension == "cpp" || extension == "c") if(extension == "cpp" || extension == "c")
{
std::string sourceFile =conf.GetSettingString(ConfigSetting::SourceDir) + filename;
auto it = std::find(excludeSources.begin(), excludeSources.end(), sourceFile);
if(it == excludeSources.end())
{ {
cppFiles.emplace(filename); cppFiles.emplace(filename);
} }
else
LOG_INFO("Excluding: ", sourceFile);
}
else if(extension == "hpp" || extension == "h") else if(extension == "hpp" || extension == "h")
{ {
hFiles.emplace(HFile{filename,path,false}); hFiles.emplace(HFile{filename,path,false});