diff options
Diffstat (limited to 'devtools/create_project/create_project.cpp')
-rw-r--r-- | devtools/create_project/create_project.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp index 527136c7d4..15830bd467 100644 --- a/devtools/create_project/create_project.cpp +++ b/devtools/create_project/create_project.cpp @@ -539,6 +539,8 @@ int main(int argc, char *argv[]) { projectWarnings["lure"].push_back("4355"); projectWarnings["kyra"].push_back("4355"); + projectWarnings["kyra"].push_back("4510"); + projectWarnings["kyra"].push_back("4610"); projectWarnings["m4"].push_back("4355"); @@ -853,6 +855,7 @@ const Feature s_features[] = { { "taskbar", "USE_TASKBAR", "", true, "Taskbar integration support" }, { "translation", "USE_TRANSLATION", "", true, "Translation support" }, { "vkeybd", "ENABLE_VKEYBD", "", false, "Virtual keyboard support"}, + { "keymapper","ENABLE_KEYMAPPER", "", false, "Keymapper support"}, { "langdetect", "USE_DETECTLANG", "", true, "System language detection support" } // This feature actually depends on "translation", there // is just no current way of properly detecting this... }; @@ -1342,6 +1345,8 @@ void ProjectProvider::createModuleList(const std::string &moduleDir, const Strin std::stack<bool> shouldInclude; shouldInclude.push(true); + StringList filesInVariableList; + bool hadModule = false; std::string line; for (;;) { @@ -1395,6 +1400,30 @@ void ProjectProvider::createModuleList(const std::string &moduleDir, const Strin std::getline(moduleMk, line); tokens = tokenize(line); i = tokens.begin(); + } else if (*i == "$(KYRARPG_COMMON_OBJ)") { + // HACK to fix EOB/LOL compilation in the kyra engine: + // replace the variable name with the stored files. + // This assumes that the file list has already been defined. + if (filesInVariableList.size() == 0) + error("$(KYRARPG_COMMON_OBJ) found, but the variable hasn't been set before it"); + // Construct file list and replace the variable + for (StringList::iterator j = filesInVariableList.begin(); j != filesInVariableList.end(); ++j) { + const std::string filename = *j; + + if (shouldInclude.top()) { + // In case we should include a file, we need to make + // sure it is not in the exclude list already. If it + // is we just drop it from the exclude list. + excludeList.remove(filename); + + includeList.push_back(filename); + } else if (std::find(includeList.begin(), includeList.end(), filename) == includeList.end()) { + // We only add the file to the exclude list in case it + // has not yet been added to the include list. + excludeList.push_back(filename); + } + } + ++i; } else { const std::string filename = moduleDir + "/" + unifyPath(*i); @@ -1413,6 +1442,29 @@ void ProjectProvider::createModuleList(const std::string &moduleDir, const Strin ++i; } } + } else if (*i == "KYRARPG_COMMON_OBJ") { + // HACK to fix EOB/LOL compilation in the kyra engine: add the + // files defined in the KYRARPG_COMMON_OBJ variable in a list + if (tokens.size() < 3) + error("Malformed KYRARPG_COMMON_OBJ definition in " + moduleMkFile); + ++i; + + if (*i != ":=" && *i != "+=" && *i != "=") + error("Malformed KYRARPG_COMMON_OBJ definition in " + moduleMkFile); + + ++i; + + while (i != tokens.end()) { + if (*i == "\\") { + std::getline(moduleMk, line); + tokens = tokenize(line); + i = tokens.begin(); + } else { + const std::string filename = moduleDir + "/" + unifyPath(*i); + filesInVariableList.push_back(filename); + ++i; + } + } } else if (*i == "ifdef") { if (tokens.size() < 2) error("Malformed ifdef in " + moduleMkFile); |