aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/create_msvc/create_msvc.cpp67
-rw-r--r--tools/create_msvc/create_msvc.h7
2 files changed, 41 insertions, 33 deletions
diff --git a/tools/create_msvc/create_msvc.cpp b/tools/create_msvc/create_msvc.cpp
index 8b3f0e0910..c5f0bdab8c 100644
--- a/tools/create_msvc/create_msvc.cpp
+++ b/tools/create_msvc/create_msvc.cpp
@@ -227,13 +227,7 @@ int main(int argc, char *argv[]) {
setup.libraries.push_back("winmm.lib");
setup.libraries.push_back("sdl.lib");
- try {
- createMSVCProject(setup, msvcVersion);
- } catch (const std::string &error) {
- std::cerr << "ERROR: " << error << "!" << std::endl;
- } catch (const std::exception &exp) {
- std::cerr << "ERROR: " << exp.what() << "!" << std::endl;
- }
+ createMSVCProject(setup, msvcVersion);
}
namespace {
@@ -363,7 +357,7 @@ EngineDescList parseConfigure(const std::string &srcDir) {
break;
if (configure.fail())
- throw std::string("Failed while reading from " + configureFile);
+ error("Failed while reading from " + configureFile);
EngineDesc desc;
if (parseEngine(line, desc))
@@ -709,11 +703,11 @@ UUIDMap createUUIDMap(const BuildSetup &setup) {
std::string createUUID() {
UUID uuid;
if (UuidCreate(&uuid) != RPC_S_OK)
- throw std::string("UuidCreate failed");
+ error("UuidCreate failed");
unsigned char *string = 0;
if (UuidToStringA(&uuid, &string) != RPC_S_OK)
- throw std::string("UuidToStringA failed");
+ error("UuidToStringA failed");
std::string result = std::string((char *)string);
std::transform(result.begin(), result.end(), result.begin(), toupper);
@@ -724,7 +718,7 @@ std::string createUUID() {
void createScummVMSolution(const BuildSetup &setup, const UUIDMap &uuids, const int version) {
UUIDMap::const_iterator svmUUID = uuids.find("scummvm");
if (svmUUID == uuids.end())
- throw std::string("No UUID for \"scummvm\" project created");
+ error("No UUID for \"scummvm\" project created");
const std::string svmProjectUUID = svmUUID->second;
assert(!svmProjectUUID.empty());
@@ -733,7 +727,7 @@ void createScummVMSolution(const BuildSetup &setup, const UUIDMap &uuids, const
std::ofstream solution((setup.outputDir + '/' + "scummvm.sln").c_str());
if (!solution)
- throw std::string("Could not open \"" + setup.outputDir + '/' + "scummvm.sln\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + "scummvm.sln\" for writing");
solution << "Microsoft Visual Studio Solution File, Format Version " << version + 1 << ".00\n";
if (version == 9)
@@ -741,7 +735,7 @@ void createScummVMSolution(const BuildSetup &setup, const UUIDMap &uuids, const
else if (version == 8)
solution << "# Visual Studio 2005\n";
else
- throw std::string("Unsupported version passed to createScummVMSolution");
+ error("Unsupported version passed to createScummVMSolution");
solution << "Project(\"{" << solutionUUID << "}\") = \"scummvm\", \"scummvm.vcproj\", \"{" << svmProjectUUID << "}\"\n"
<< "\tProjectSection(ProjectDependencies) = postProject\n";
@@ -796,7 +790,7 @@ void createProjectFile(const std::string &name, const std::string &uuid, const B
const std::string projectFile = setup.outputDir + '/' + name + ".vcproj";
std::ofstream project(projectFile.c_str());
if (!project)
- throw std::string("Could not open \"" + projectFile + "\" for writing");
+ error("Could not open \"" + projectFile + "\" for writing");
project << "<?xml version=\"1.0\" encoding=\"windows-1252\"?>\n"
"<VisualStudioProject\n"
@@ -940,7 +934,7 @@ void outputGlobalPropFile(std::ofstream &properties, int bits, const std::string
void createGlobalProp(const BuildSetup &setup, const int /*version*/) {
std::ofstream properties((setup.outputDir + '/' + "ScummVM_Global.vsprops").c_str());
if (!properties)
- throw std::string("Could not open \"" + setup.outputDir + '/' + "ScummVM_Global.vsprops\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + "ScummVM_Global.vsprops\" for writing");
std::string defines;
for (StringList::const_iterator i = setup.defines.begin(); i != setup.defines.end(); ++i) {
@@ -954,7 +948,7 @@ void createGlobalProp(const BuildSetup &setup, const int /*version*/) {
properties.open((setup.outputDir + '/' + "ScummVM_Global64.vsprops").c_str());
if (!properties)
- throw std::string("Could not open \"" + setup.outputDir + '/' + "ScummVM_Global64.vsprops\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + "ScummVM_Global64.vsprops\" for writing");
// HACK: We must disable the "nasm" feature for x64. To achieve that we must duplicate the feature list and
// recreate a define list.
@@ -977,7 +971,7 @@ void createGlobalProp(const BuildSetup &setup, const int /*version*/) {
void createBuildProp(const BuildSetup &setup, const int /*version*/) {
std::ofstream properties((setup.outputDir + '/' + "ScummVM_Debug.vsprops").c_str());
if (!properties)
- throw std::string("Could not open \"" + setup.outputDir + '/' + "ScummVM_Debug.vsprops\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + "ScummVM_Debug.vsprops\" for writing");
properties << "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n"
"<VisualStudioPropertySheet\n"
@@ -1010,7 +1004,7 @@ void createBuildProp(const BuildSetup &setup, const int /*version*/) {
properties.open((setup.outputDir + '/' + "ScummVM_Debug64.vsprops").c_str());
if (!properties)
- throw std::string("Could not open \"" + setup.outputDir + '/' + "ScummVM_Debug64.vsprops\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + "ScummVM_Debug64.vsprops\" for writing");
properties << "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n"
"<VisualStudioPropertySheet\n"
@@ -1043,7 +1037,7 @@ void createBuildProp(const BuildSetup &setup, const int /*version*/) {
properties.open((setup.outputDir + '/' + "ScummVM_Release.vsprops").c_str());
if (!properties)
- throw std::string("Could not open \"" + setup.outputDir + '/' + "ScummVM_Release.vsprops\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + "ScummVM_Release.vsprops\" for writing");
properties << "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n"
"<VisualStudioPropertySheet\n"
@@ -1074,7 +1068,7 @@ void createBuildProp(const BuildSetup &setup, const int /*version*/) {
properties.open((setup.outputDir + '/' + "ScummVM_Release64.vsprops").c_str());
if (!properties)
- throw std::string("Could not open \"" + setup.outputDir + '/' + "ScummVM_Release64.vsprops\" for writing");
+ error("Could not open \"" + setup.outputDir + '/' + "ScummVM_Release64.vsprops\" for writing");
properties << "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n"
"<VisualStudioPropertySheet\n"
@@ -1265,6 +1259,7 @@ FileNode *scanFiles(const std::string &dir, const StringList &includeList, const
return 0;
FileNode *result = new FileNode(dir);
+ assert(result);
do {
if (fileInformation.cFileName[0] == '.')
@@ -1426,7 +1421,7 @@ void createModuleList(const std::string &moduleDir, const StringList &defines, S
const std::string moduleMkFile = moduleDir + "/module.mk";
std::ifstream moduleMk(moduleMkFile.c_str());
if (!moduleMk)
- throw std::string(moduleMkFile + " is not present");
+ error(moduleMkFile + " is not present");
includeList.push_back(moduleMkFile);
@@ -1442,7 +1437,7 @@ void createModuleList(const std::string &moduleDir, const StringList &defines, S
break;
if (moduleMk.fail())
- throw std::string("Failed while reading from " + moduleMkFile);
+ error("Failed while reading from " + moduleMkFile);
TokenList tokens = tokenize(line);
if (tokens.empty())
@@ -1451,23 +1446,23 @@ void createModuleList(const std::string &moduleDir, const StringList &defines, S
TokenList::const_iterator i = tokens.begin();
if (*i == "MODULE") {
if (hadModule)
- throw std::string("More than one MODULE definition in " + moduleMkFile);
+ error("More than one MODULE definition in " + moduleMkFile);
// Format: "MODULE := path/to/module"
if (tokens.size() < 3)
- throw std::string("Malformed MODULE definition in " + moduleMkFile);
+ error("Malformed MODULE definition in " + moduleMkFile);
++i;
if (*i != ":=")
- throw std::string("Malformed MODULE definition in " + moduleMkFile);
+ error("Malformed MODULE definition in " + moduleMkFile);
++i;
std::string moduleRoot = unifyPath(*i);
if (moduleDir.compare(moduleDir.size() - moduleRoot.size(), moduleRoot.size(), moduleRoot))
- throw std::string("MODULE root " + moduleRoot + " does not match base dir " + moduleDir);
+ error("MODULE root " + moduleRoot + " does not match base dir " + moduleDir);
hadModule = true;
} else if (*i == "MODULE_OBJS") {
if (tokens.size() < 3)
- throw std::string("Malformed MODULE_OBJS definition in " + moduleMkFile);
+ error("Malformed MODULE_OBJS definition in " + moduleMkFile);
++i;
// This is not exactly correct, for example an ":=" would usually overwrite
@@ -1477,7 +1472,7 @@ void createModuleList(const std::string &moduleDir, const StringList &defines, S
// by this function, thus we can't just clear them on ":=" or "=").
// But hopefully our module.mk files will never do such things anyway.
if (*i != ":=" && *i != "+=" && *i != "=")
- throw std::string("Malformed MODULE_OBJS definition in " + moduleMkFile);
+ error("Malformed MODULE_OBJS definition in " + moduleMkFile);
++i;
@@ -1496,7 +1491,7 @@ void createModuleList(const std::string &moduleDir, const StringList &defines, S
}
} else if (*i == "ifdef") {
if (tokens.size() < 2)
- throw std::string("Malformed ifdef in " + moduleMkFile);
+ error("Malformed ifdef in " + moduleMkFile);
++i;
if (std::find(defines.begin(), defines.end(), *i) == defines.end())
@@ -1505,7 +1500,7 @@ void createModuleList(const std::string &moduleDir, const StringList &defines, S
shouldInclude.push(true);
} else if (*i == "ifndef") {
if (tokens.size() < 2)
- throw std::string("Malformed ifndef in " + moduleMkFile);
+ error("Malformed ifndef in " + moduleMkFile);
++i;
if (std::find(defines.begin(), defines.end(), *i) == defines.end())
@@ -1516,10 +1511,10 @@ void createModuleList(const std::string &moduleDir, const StringList &defines, S
shouldInclude.top() = !shouldInclude.top();
} else if (*i == "endif") {
if (shouldInclude.size() <= 1)
- throw std::string("endif without ifdef found in " + moduleMkFile);
+ error("endif without ifdef found in " + moduleMkFile);
shouldInclude.pop();
} else if (*i == "elif") {
- throw std::string("Unsupported operation 'elif' in " + moduleMkFile);
+ error("Unsupported operation 'elif' in " + moduleMkFile);
} else if (*i == "ifeq") {
//XXX
shouldInclude.push(false);
@@ -1527,6 +1522,12 @@ void createModuleList(const std::string &moduleDir, const StringList &defines, S
}
if (shouldInclude.size() != 1)
- throw std::string("Malformed file " + moduleMkFile);
+ error("Malformed file " + moduleMkFile);
}
} // End of anonymous namespace
+
+void error(const std::string &message) {
+ std::cerr << "ERROR: " << message << "!" << std::endl;
+ std::exit(-1);
+}
+
diff --git a/tools/create_msvc/create_msvc.h b/tools/create_msvc/create_msvc.h
index 6e96b20b17..275912ef9d 100644
--- a/tools/create_msvc/create_msvc.h
+++ b/tools/create_msvc/create_msvc.h
@@ -205,4 +205,11 @@ struct BuildSetup {
*/
void createMSVCProject(const BuildSetup &setup, const int version);
+/**
+ * Quits the program with the specified error message.
+ *
+ * @param message The error message to print to stderr.
+ */
+void error(const std::string &message);
+
#endif