diff options
author | Filippos Karapetis | 2011-12-28 05:14:59 +0200 |
---|---|---|
committer | Filippos Karapetis | 2011-12-28 05:16:55 +0200 |
commit | 749c82b95152b61289fff6fe30086924eace59d9 (patch) | |
tree | 2c04c6146825034483da5a2aa8b91a322feea6ba /devtools/create_project | |
parent | 38c6865ab1d412c12aa367a108e5fd2d4c64882c (diff) | |
download | scummvm-rg350-749c82b95152b61289fff6fe30086924eace59d9.tar.gz scummvm-rg350-749c82b95152b61289fff6fe30086924eace59d9.tar.bz2 scummvm-rg350-749c82b95152b61289fff6fe30086924eace59d9.zip |
CREATE_PROJECT: Add a hack to handle the KYRARPG_COMMON_OBJ variable in the module.mk file of the kyra engine
Diffstat (limited to 'devtools/create_project')
-rw-r--r-- | devtools/create_project/create_project.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp index 572d0bc119..775e67cdb1 100644 --- a/devtools/create_project/create_project.cpp +++ b/devtools/create_project/create_project.cpp @@ -1344,6 +1344,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 (;;) { @@ -1397,6 +1399,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); @@ -1415,6 +1441,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); |