server-mode: Handle generator toolset and platform in handshake
This commit is contained in:
parent
d792491c40
commit
42ccbee11c
|
@ -276,7 +276,9 @@ Protocol version 1.0 requires the following attributes to be set:
|
|||
* "sourceDirectory" with a path to the sources
|
||||
* "buildDirectory" with a path to the build directory
|
||||
* "generator" with the generator name
|
||||
* "extraGenerator" (optional!) with the extra generator to be used.
|
||||
* "extraGenerator" (optional!) with the extra generator to be used
|
||||
* "platform" with the generator platform (if supported by the generator)
|
||||
* "toolset" with the generator toolset (if supported by the generator)
|
||||
|
||||
Example::
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ static const std::string kMESSAGE_KEY = "message";
|
|||
static const std::string kMINOR_KEY = "minor";
|
||||
static const std::string kNAME_KEY = "name";
|
||||
static const std::string kPATH_KEY = "path";
|
||||
static const std::string kPLATFORM_KEY = "platform";
|
||||
static const std::string kPROGRESS_CURRENT_KEY = "progressCurrent";
|
||||
static const std::string kPROGRESS_MAXIMUM_KEY = "progressMaximum";
|
||||
static const std::string kPROGRESS_MESSAGE_KEY = "progressMessage";
|
||||
|
@ -77,6 +78,7 @@ static const std::string kSUPPORTED_PROTOCOL_VERSIONS =
|
|||
static const std::string kSYSROOT_KEY = "sysroot";
|
||||
static const std::string kTARGETS_KEY = "targets";
|
||||
static const std::string kTITLE_KEY = "title";
|
||||
static const std::string kTOOLSET_KEY = "toolset";
|
||||
static const std::string kTRACE_EXPAND_KEY = "traceExpand";
|
||||
static const std::string kTRACE_KEY = "trace";
|
||||
static const std::string kTYPE_KEY = "type";
|
||||
|
|
|
@ -259,7 +259,7 @@ static bool testValue(cmState* state, const std::string& key,
|
|||
if (!cachedValue.empty() && !value.empty() && cachedValue != value) {
|
||||
setErrorMessage(errorMessage, std::string("\"") + key +
|
||||
"\" is set but incompatible with configured " +
|
||||
keyDescription + "value.");
|
||||
keyDescription + " value.");
|
||||
return false;
|
||||
}
|
||||
if (value.empty()) {
|
||||
|
@ -276,6 +276,8 @@ bool cmServerProtocol1_0::DoActivate(const cmServerRequest& request,
|
|||
request.Data[kBUILD_DIRECTORY_KEY].asString();
|
||||
std::string generator = request.Data[kGENERATOR_KEY].asString();
|
||||
std::string extraGenerator = request.Data[kEXTRA_GENERATOR_KEY].asString();
|
||||
std::string toolset = request.Data[kTOOLSET_KEY].asString();
|
||||
std::string platform = request.Data[kPLATFORM_KEY].asString();
|
||||
|
||||
if (buildDirectory.empty()) {
|
||||
setErrorMessage(errorMessage, std::string("\"") + kBUILD_DIRECTORY_KEY +
|
||||
|
@ -312,6 +314,18 @@ bool cmServerProtocol1_0::DoActivate(const cmServerRequest& request,
|
|||
"source directory", errorMessage)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// check toolset:
|
||||
if (!testValue(state, "CMAKE_GENERATOR_TOOLSET", toolset, "toolset",
|
||||
errorMessage)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// check platform:
|
||||
if (!testValue(state, "CMAKE_GENERATOR_PLATFORM", platform, "platform",
|
||||
errorMessage)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -354,11 +368,26 @@ bool cmServerProtocol1_0::DoActivate(const cmServerRequest& request,
|
|||
"\" is not supported."));
|
||||
return false;
|
||||
}
|
||||
if (!extraIt->supportsToolset && !toolset.empty()) {
|
||||
setErrorMessage(errorMessage,
|
||||
std::string("Toolset was provided but is not supported by "
|
||||
"the requested generator."));
|
||||
return false;
|
||||
}
|
||||
if (!extraIt->supportsPlatform && !platform.empty()) {
|
||||
setErrorMessage(errorMessage,
|
||||
std::string("Platform was provided but is not supported "
|
||||
"by the requested generator."));
|
||||
return false;
|
||||
}
|
||||
|
||||
const std::string fullGeneratorName =
|
||||
cmExternalMakefileProjectGenerator::CreateFullGeneratorName(
|
||||
generator, extraGenerator);
|
||||
|
||||
cm->SetGeneratorToolset(toolset);
|
||||
cm->SetGeneratorPlatform(platform);
|
||||
|
||||
cmGlobalGenerator* gg = cm->CreateGlobalGenerator(fullGeneratorName);
|
||||
if (!gg) {
|
||||
setErrorMessage(
|
||||
|
|
Loading…
Reference in New Issue