diff options
Diffstat (limited to 'devtools/create_project')
-rw-r--r-- | devtools/create_project/config.h | 7 | ||||
-rw-r--r-- | devtools/create_project/create_project.cpp | 28 | ||||
-rw-r--r-- | devtools/create_project/create_project.h | 24 | ||||
-rw-r--r-- | devtools/create_project/msbuild.cpp | 21 | ||||
-rw-r--r-- | devtools/create_project/msvc.cpp | 17 | ||||
-rw-r--r-- | devtools/create_project/msvc.h | 2 | ||||
-rw-r--r-- | devtools/create_project/visualstudio.cpp | 8 |
7 files changed, 60 insertions, 47 deletions
diff --git a/devtools/create_project/config.h b/devtools/create_project/config.h index 20c1391cef..de4703a47d 100644 --- a/devtools/create_project/config.h +++ b/devtools/create_project/config.h @@ -28,7 +28,10 @@ #define LIBS_DEFINE "SCUMMVM_LIBS" // Name of the include environment variable #define REVISION_DEFINE "SCUMMVM_INTERNAL_REVISION" -//#define ADDITIONAL_LIBRARY "" -#define NEEDS_RTTI 0 +#define ENABLE_LANGUAGE_EXTENSIONS "" // Comma separated list of projects that need language extensions +#define DISABLE_EDIT_AND_CONTINUE "tinsel,tony" // Comma separated list of projects that need Edit&Continue to be disabled for co-routine support (the main project is automatically added) + +//#define ADDITIONAL_LIBRARY "" // Add a single library to the list of externally linked libraries +#define NEEDS_RTTI 0 // Enable RTTI globally #endif // TOOLS_CREATE_PROJECT_CONFIG_H diff --git a/devtools/create_project/create_project.cpp b/devtools/create_project/create_project.cpp index 8499fec400..a8e09ff5eb 100644 --- a/devtools/create_project/create_project.cpp +++ b/devtools/create_project/create_project.cpp @@ -97,30 +97,6 @@ struct FSNode { }; typedef std::list<FSNode> FileList; - -typedef StringList TokenList; - -/** - * Takes a given input line and creates a list of tokens out of it. - * - * A token in this context is separated by whitespaces. A special case - * are quotation marks though. A string inside quotation marks is treated - * as single token, even when it contains whitespaces. - * - * Thus for example the input: - * foo bar "1 2 3 4" ScummVM - * will create a list with the following entries: - * "foo", "bar", "1 2 3 4", "ScummVM" - * As you can see the quotation marks will get *removed* too. - * - * You can also use this with non-whitespace by passing another separator - * character (e.g. ','). - * - * @param input The text to be tokenized. - * @param separator The token separator. - * @return A list of tokens. - */ -TokenList tokenize(const std::string &input, char separator = ' '); } // End of anonymous namespace enum ProjectType { @@ -526,7 +502,7 @@ int main(int argc, char *argv[]) { projectWarnings["agos"].push_back("4511"); projectWarnings["dreamweb"].push_back("4355"); - + projectWarnings["lure"].push_back("4189"); projectWarnings["lure"].push_back("4355"); @@ -787,6 +763,7 @@ bool parseEngine(const std::string &line, EngineDesc &engine) { return true; } +} // End of anonymous namespace TokenList tokenize(const std::string &input, char separator) { TokenList result; @@ -819,7 +796,6 @@ TokenList tokenize(const std::string &input, char separator) { return result; } -} // End of anonymous namespace namespace { const Feature s_features[] = { diff --git a/devtools/create_project/create_project.h b/devtools/create_project/create_project.h index b4eda8f8d2..de77793ee7 100644 --- a/devtools/create_project/create_project.h +++ b/devtools/create_project/create_project.h @@ -31,6 +31,30 @@ typedef std::list<std::string> StringList; +typedef StringList TokenList; + +/** + * Takes a given input line and creates a list of tokens out of it. + * + * A token in this context is separated by whitespaces. A special case + * are quotation marks though. A string inside quotation marks is treated + * as single token, even when it contains whitespaces. + * + * Thus for example the input: + * foo bar "1 2 3 4" ScummVM + * will create a list with the following entries: + * "foo", "bar", "1 2 3 4", "ScummVM" + * As you can see the quotation marks will get *removed* too. + * + * You can also use this with non-whitespace by passing another separator + * character (e.g. ','). + * + * @param input The text to be tokenized. + * @param separator The token separator. + * @return A list of tokens. + */ +TokenList tokenize(const std::string &input, char separator = ' '); + /** * Structure to describe a game engine to be built into ScummVM. * diff --git a/devtools/create_project/msbuild.cpp b/devtools/create_project/msbuild.cpp index c797770955..0f77d91852 100644 --- a/devtools/create_project/msbuild.cpp +++ b/devtools/create_project/msbuild.cpp @@ -241,9 +241,11 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s // Check for project-specific warnings: std::map<std::string, StringList>::iterator warningsIterator = _projectWarnings.find(name); + bool enableLanguageExtensions = find(_enableLanguageExtensions.begin(), _enableLanguageExtensions.end(), name) != _enableLanguageExtensions.end(); + bool disableEditAndContinue = find(_disableEditAndContinue.begin(), _disableEditAndContinue.end(), name) != _disableEditAndContinue.end(); // Nothing to add here, move along! - if (!setup.devTools && name != setup.projectName && name != "sword25" && name != "scummvm" && name != "grim" && warningsIterator == _projectWarnings.end()) + if (!setup.devTools && name != setup.projectName && !enableLanguageExtensions && !disableEditAndContinue && warningsIterator == _projectWarnings.end()) return; std::string warnings = ""; @@ -254,16 +256,17 @@ void MSBuildProvider::outputProjectSettings(std::ofstream &project, const std::s project << "\t<ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='" << configuration << "|" << (isWin32 ? "Win32" : "x64") << "'\">\n" "\t\t<ClCompile>\n"; - // Compile configuration - if (setup.devTools || name == setup.projectName || name == "sword25" || name == "grim") { + // Language Extensions + if (setup.devTools || name == setup.projectName || enableLanguageExtensions) project << "\t\t\t<DisableLanguageExtensions>false</DisableLanguageExtensions>\n"; - if (name == setup.projectName && !isRelease) - project << "\t\t\t<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n"; - } else { - if (warningsIterator != _projectWarnings.end()) - project << "\t\t\t<DisableSpecificWarnings>" << warnings << ";%(DisableSpecificWarnings)</DisableSpecificWarnings>\n"; - } + // Edit and Continue + if ((name == setup.projectName || disableEditAndContinue) && !isRelease) + project << "\t\t\t<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\n"; + + // Warnings + if (warningsIterator != _projectWarnings.end()) + project << "\t\t\t<DisableSpecificWarnings>" << warnings << ";%(DisableSpecificWarnings)</DisableSpecificWarnings>\n"; project << "\t\t</ClCompile>\n"; diff --git a/devtools/create_project/msvc.cpp b/devtools/create_project/msvc.cpp index 96eaf643d1..f995c108c7 100644 --- a/devtools/create_project/msvc.cpp +++ b/devtools/create_project/msvc.cpp @@ -33,6 +33,9 @@ namespace CreateProjectTool { ////////////////////////////////////////////////////////////////////////// MSVCProvider::MSVCProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version) : ProjectProvider(global_warnings, project_warnings, version) { + + _enableLanguageExtensions = tokenize(ENABLE_LANGUAGE_EXTENSIONS, ','); + _disableEditAndContinue = tokenize(DISABLE_EDIT_AND_CONTINUE, ','); } void MSVCProvider::createWorkspace(const BuildSetup &setup) { @@ -75,10 +78,10 @@ void MSVCProvider::createWorkspace(const BuildSetup &setup) { solution << "Global\n" "\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n" "\t\tDebug|Win32 = Debug|Win32\n" - "\t\tAnalysis|Win32 = Analysis|Win32\n" + "\t\tAnalysis|Win32 = Analysis|Win32\n" "\t\tRelease|Win32 = Release|Win32\n" "\t\tDebug|x64 = Debug|x64\n" - "\t\tAnalysis|x64 = Analysis|x64\n" + "\t\tAnalysis|x64 = Analysis|x64\n" "\t\tRelease|x64 = Release|x64\n" "\tEndGlobalSection\n" "\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n"; @@ -86,14 +89,14 @@ void MSVCProvider::createWorkspace(const BuildSetup &setup) { for (UUIDMap::const_iterator i = _uuidMap.begin(); i != _uuidMap.end(); ++i) { solution << "\t\t{" << i->second << "}.Debug|Win32.ActiveCfg = Debug|Win32\n" "\t\t{" << i->second << "}.Debug|Win32.Build.0 = Debug|Win32\n" - "\t\t{" << i->second << "}.Analysis|Win32.ActiveCfg = Analysis|Win32\n" - "\t\t{" << i->second << "}.Analysis|Win32.Build.0 = Analysis|Win32\n" + "\t\t{" << i->second << "}.Analysis|Win32.ActiveCfg = Analysis|Win32\n" + "\t\t{" << i->second << "}.Analysis|Win32.Build.0 = Analysis|Win32\n" "\t\t{" << i->second << "}.Release|Win32.ActiveCfg = Release|Win32\n" "\t\t{" << i->second << "}.Release|Win32.Build.0 = Release|Win32\n" "\t\t{" << i->second << "}.Debug|x64.ActiveCfg = Debug|x64\n" "\t\t{" << i->second << "}.Debug|x64.Build.0 = Debug|x64\n" - "\t\t{" << i->second << "}.Analysis|x64.ActiveCfg = Analysis|x64\n" - "\t\t{" << i->second << "}.Analysis|x64.Build.0 = Analysis|x64\n" + "\t\t{" << i->second << "}.Analysis|x64.ActiveCfg = Analysis|x64\n" + "\t\t{" << i->second << "}.Analysis|x64.Build.0 = Analysis|x64\n" "\t\t{" << i->second << "}.Release|x64.ActiveCfg = Release|x64\n" "\t\t{" << i->second << "}.Release|x64.Build.0 = Release|x64\n"; } @@ -139,7 +142,7 @@ void MSVCProvider::createGlobalProp(const BuildSetup &setup) { StringList x64EngineDefines = getEngineDefines(setup.engines); x64Defines.splice(x64Defines.end(), x64EngineDefines); - // HACK: This definitly should not be here, but otherwise we would not define SDL_BACKEND for x64. + // HACK: This definitely should not be here, but otherwise we would not define SDL_BACKEND for x64. x64Defines.push_back("WIN32"); x64Defines.push_back("SDL_BACKEND"); diff --git a/devtools/create_project/msvc.h b/devtools/create_project/msvc.h index 0a994667fa..5a854b596a 100644 --- a/devtools/create_project/msvc.h +++ b/devtools/create_project/msvc.h @@ -32,6 +32,8 @@ public: MSVCProvider(StringList &global_warnings, std::map<std::string, StringList> &project_warnings, const int version); protected: + StringList _enableLanguageExtensions; + StringList _disableEditAndContinue; void createWorkspace(const BuildSetup &setup); diff --git a/devtools/create_project/visualstudio.cpp b/devtools/create_project/visualstudio.cpp index c301e78ad1..de2df96d78 100644 --- a/devtools/create_project/visualstudio.cpp +++ b/devtools/create_project/visualstudio.cpp @@ -103,6 +103,9 @@ void VisualStudioProvider::createProjectFile(const std::string &name, const std: outputConfiguration(project, setup, libraries, "Release", "x64", "64", false); } else { + bool enableLanguageExtensions = find(_enableLanguageExtensions.begin(), _enableLanguageExtensions.end(), name) != _enableLanguageExtensions.end(); + bool disableEditAndContinue = find(_disableEditAndContinue.begin(), _disableEditAndContinue.end(), name) != _disableEditAndContinue.end(); + std::string warnings = ""; if (warningsIterator != _projectWarnings.end()) for (StringList::const_iterator i = warningsIterator->second.begin(); i != warningsIterator->second.end(); ++i) @@ -110,9 +113,8 @@ void VisualStudioProvider::createProjectFile(const std::string &name, const std: std::string toolConfig; toolConfig = (!warnings.empty() ? "DisableSpecificWarnings=\"" + warnings + "\"" : ""); - toolConfig += (name == setup.projectName ? "DebugInformationFormat=\"3\" " : ""); - toolConfig += (name == "sword25" ? "DisableLanguageExtensions=\"false\" " : ""); - toolConfig += (name == "grim" ? "DisableLanguageExtensions=\"false\" " : ""); + toolConfig += (disableEditAndContinue ? "DebugInformationFormat=\"3\" " : ""); + toolConfig += (enableLanguageExtensions ? "DisableLanguageExtensions=\"false\" " : ""); // Win32 outputConfiguration(setup, project, toolConfig, "Debug", "Win32", ""); |