summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@qt.io>2016-09-09 08:01:45 (GMT)
committerBrad King <brad.king@kitware.com>2016-09-26 18:23:53 (GMT)
commit82104cc7a8e831ad20cb87d126c2ff00a851bedc (patch)
tree79f319287f1f7370676cc69f0280e68fd46e42c1 /Source
parent1a5fddfe6d56733528ace3d15899b0739ea28054 (diff)
downloadCMake-82104cc7a8e831ad20cb87d126c2ff00a851bedc.zip
CMake-82104cc7a8e831ad20cb87d126c2ff00a851bedc.tar.gz
CMake-82104cc7a8e831ad20cb87d126c2ff00a851bedc.tar.bz2
server-mode: Query global configuration of cmake via a command
Add "globalSettings" command that returns: * Return capability information * Return currently used generator/extra generator * Return a range of flags for debug/trace/etc.
Diffstat (limited to 'Source')
-rw-r--r--Source/cmServerDictionary.h9
-rw-r--r--Source/cmServerProtocol.cxx34
-rw-r--r--Source/cmServerProtocol.h4
3 files changed, 47 insertions, 0 deletions
diff --git a/Source/cmServerDictionary.h b/Source/cmServerDictionary.h
index 156ade2..ea8954f 100644
--- a/Source/cmServerDictionary.h
+++ b/Source/cmServerDictionary.h
@@ -17,6 +17,7 @@
// Vocabulary:
static const std::string kERROR_TYPE = "error";
+static const std::string kGLOBAL_SETTINGS_TYPE = "globalSettings";
static const std::string kHANDSHAKE_TYPE = "handshake";
static const std::string kMESSAGE_TYPE = "message";
static const std::string kPROGRESS_TYPE = "progress";
@@ -24,7 +25,10 @@ static const std::string kREPLY_TYPE = "reply";
static const std::string kSIGNAL_TYPE = "signal";
static const std::string kBUILD_DIRECTORY_KEY = "buildDirectory";
+static const std::string kCAPABILITIES_KEY = "capabilities";
+static const std::string kCHECK_SYSTEM_VARS_KEY = "checkSystemVars";
static const std::string kCOOKIE_KEY = "cookie";
+static const std::string kDEBUG_OUTPUT_KEY = "debugOutput";
static const std::string kERROR_MESSAGE_KEY = "errorMessage";
static const std::string kEXTRA_GENERATOR_KEY = "extraGenerator";
static const std::string kGENERATOR_KEY = "generator";
@@ -43,7 +47,12 @@ static const std::string kSOURCE_DIRECTORY_KEY = "sourceDirectory";
static const std::string kSUPPORTED_PROTOCOL_VERSIONS =
"supportedProtocolVersions";
static const std::string kTITLE_KEY = "title";
+static const std::string kTRACE_EXPAND_KEY = "traceExpand";
+static const std::string kTRACE_KEY = "trace";
static const std::string kTYPE_KEY = "type";
+static const std::string kWARN_UNINITIALIZED_KEY = "warnUninitialized";
+static const std::string kWARN_UNUSED_CLI_KEY = "warnUnusedCli";
+static const std::string kWARN_UNUSED_KEY = "warnUnused";
static const std::string kSTART_MAGIC = "[== CMake Server ==[";
static const std::string kEND_MAGIC = "]== CMake Server ==]";
diff --git a/Source/cmServerProtocol.cxx b/Source/cmServerProtocol.cxx
index 755de0c..49f03cd 100644
--- a/Source/cmServerProtocol.cxx
+++ b/Source/cmServerProtocol.cxx
@@ -13,6 +13,7 @@
#include "cmServerProtocol.h"
#include "cmExternalMakefileProjectGenerator.h"
+#include "cmGlobalGenerator.h"
#include "cmServer.h"
#include "cmServerDictionary.h"
#include "cmSystemTools.h"
@@ -279,6 +280,10 @@ const cmServerResponse cmServerProtocol1_0::Process(
{
assert(this->m_State >= STATE_ACTIVE);
+ if (request.Type == kGLOBAL_SETTINGS_TYPE) {
+ return this->ProcessGlobalSettings(request);
+ }
+
return request.ReportError("Unknown command!");
}
@@ -286,3 +291,32 @@ bool cmServerProtocol1_0::IsExperimental() const
{
return true;
}
+
+cmServerResponse cmServerProtocol1_0::ProcessGlobalSettings(
+ const cmServerRequest& request)
+{
+ cmake* cm = this->CMakeInstance();
+ Json::Value obj = Json::objectValue;
+
+ // Capabilities information:
+ obj[kCAPABILITIES_KEY] = cm->ReportCapabilitiesJson(true);
+
+ obj[kDEBUG_OUTPUT_KEY] = cm->GetDebugOutput();
+ obj[kTRACE_KEY] = cm->GetTrace();
+ obj[kTRACE_EXPAND_KEY] = cm->GetTraceExpand();
+ obj[kWARN_UNINITIALIZED_KEY] = cm->GetWarnUninitialized();
+ obj[kWARN_UNUSED_KEY] = cm->GetWarnUnused();
+ obj[kWARN_UNUSED_CLI_KEY] = cm->GetWarnUnusedCli();
+ obj[kCHECK_SYSTEM_VARS_KEY] = cm->GetCheckSystemVars();
+
+ obj[kSOURCE_DIRECTORY_KEY] = cm->GetHomeDirectory();
+ obj[kBUILD_DIRECTORY_KEY] = cm->GetHomeOutputDirectory();
+
+ // Currently used generator:
+ cmGlobalGenerator* gen = cm->GetGlobalGenerator();
+ obj[kGENERATOR_KEY] = gen ? gen->GetName() : std::string();
+ obj[kEXTRA_GENERATOR_KEY] =
+ gen ? gen->GetExtraGeneratorName() : std::string();
+
+ return request.Reply(obj);
+}
diff --git a/Source/cmServerProtocol.h b/Source/cmServerProtocol.h
index 0383dfe..8d1fe0e 100644
--- a/Source/cmServerProtocol.h
+++ b/Source/cmServerProtocol.h
@@ -13,6 +13,7 @@
#pragma once
#include "cmListFileCache.h"
+#include "cmake.h"
#if defined(CMAKE_BUILD_WITH_CMAKE)
#include "cm_jsoncpp_writer.h"
@@ -116,6 +117,9 @@ private:
bool DoActivate(const cmServerRequest& request,
std::string* errorMessage) override;
+ // Handle requests:
+ cmServerResponse ProcessGlobalSettings(const cmServerRequest& request);
+
enum State
{
STATE_INACTIVE,