5d00ada431
- Use <dependency target="target"> to specify which target the dependency should be compiled for. - Fix binary not being removed when doing makegen clean
70 lines
2.3 KiB
C++
70 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <map>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "ConfigUtils.h"
|
|
#include "Dependency.h"
|
|
#include "FlagData.h"
|
|
#include "xml/XMLObject.h"
|
|
|
|
static const std::string CONFIG_FILENAME = "makegen.xml";
|
|
|
|
class ConfigFile
|
|
{
|
|
private:
|
|
ConfigCache cache;
|
|
|
|
XMLObject config;
|
|
// Current configuration
|
|
std::string target;
|
|
|
|
std::string configPath;
|
|
std::vector<ConfigFile> dependencyConfigs;
|
|
|
|
std::vector<Dependency> dependencies;
|
|
|
|
bool hasInitError = false;
|
|
|
|
public:
|
|
// Generates a new default config file
|
|
ConfigFile(const std::string& path, const FlagData& flagData, int);
|
|
ConfigFile(const std::string& path, const FlagData& flagData);
|
|
ConfigFile(XMLObject& config, const std::string& path, const FlagData& flagData);
|
|
|
|
void Save() const;
|
|
|
|
std::string& GetSettingString(ConfigSetting setting);
|
|
bool GetSettingBool(ConfigSetting setting);
|
|
std::vector<std::string>& GetSettingVectorString(ConfigSetting setting);
|
|
std::vector<std::string> GetSetting(ConfigSetting setting);
|
|
const std::vector<Dependency>& GetDependencies() const;
|
|
|
|
bool SetSettingString(ConfigSetting setting, const std::string& value);
|
|
bool AddSettingVectorString(ConfigSetting setting, const std::string& value);
|
|
bool RemoveSettingVectorString(ConfigSetting setting, const std::string& value);
|
|
|
|
XMLObject& GetConfiguration();
|
|
const std::string& GetConfigPath() const;
|
|
ConfigFile& GetDependencyConfig(size_t i);
|
|
|
|
private:
|
|
void Init(const FlagData& flagData);
|
|
void InitDependencies();
|
|
|
|
public:
|
|
static ConfigFile Gen(const FlagData& flagData);
|
|
static std::optional<ConfigFile> GetConfigFile(const std::string& filepath, const FlagData& flagData);
|
|
|
|
private:
|
|
static std::optional<ConfigFile> GetConfigFile(const std::string& filepath,
|
|
std::map<std::string, ConfigFile>& loadedConfigs,
|
|
const FlagData& flagData);
|
|
static std::optional<ConfigFile> Load(const std::string& filename);
|
|
static void InputBoolean(const std::string& inputText, bool& b);
|
|
static void InputMultiple(const std::string& inputText, std::vector<std::string>& vec, bool needEnding);
|
|
static void InputString(const std::string& inputText, std::string& vec, bool needEnding, bool allowEmpty);
|
|
};
|