aboutsummaryrefslogtreecommitdiff
path: root/devtools/create_project
diff options
context:
space:
mode:
authorFilippos Karapetis2011-12-28 05:14:59 +0200
committerFilippos Karapetis2011-12-28 05:16:55 +0200
commit749c82b95152b61289fff6fe30086924eace59d9 (patch)
tree2c04c6146825034483da5a2aa8b91a322feea6ba /devtools/create_project
parent38c6865ab1d412c12aa367a108e5fd2d4c64882c (diff)
downloadscummvm-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.cpp49
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);