mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 05:38:56 +00:00
CREATE_PROJECT: Add config option to disable language extensions and edit and continue (per-project)
This commit is contained in:
parent
1f11ce6df2
commit
9821f30224
@ -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
|
||||
|
@ -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[] = {
|
||||
|
@ -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.
|
||||
*
|
||||
|
@ -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";
|
||||
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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", "");
|
||||
|
Loading…
Reference in New Issue
Block a user