mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-18 13:10:17 -06:00
Merge branch 'capabilities-fileapi' into release-3.15
Merge-request: !3433
This commit is contained in:
@@ -379,6 +379,8 @@ finds the file missing, that means a concurrent CMake has generated
|
||||
a new reply. The client may simply start again by reading the new
|
||||
reply index file.
|
||||
|
||||
.. _`file-api object kinds`:
|
||||
|
||||
Object Kinds
|
||||
============
|
||||
|
||||
|
||||
@@ -423,6 +423,22 @@ Available commands are:
|
||||
A list of strings with all the extra generators compatible with
|
||||
the generator.
|
||||
|
||||
``fileApi``
|
||||
Optional member that is present when the :manual:`cmake-file-api(7)`
|
||||
is available. The value is a JSON object with one member:
|
||||
|
||||
``requests``
|
||||
A JSON array containing zero or more supported file-api requests.
|
||||
Each request is a JSON object with members:
|
||||
|
||||
``kind``
|
||||
Specifies one of the supported :ref:`file-api object kinds`.
|
||||
|
||||
``version``
|
||||
A JSON array whose elements are each a JSON object containing
|
||||
``major`` and ``minor`` members specifying non-negative integer
|
||||
version components.
|
||||
|
||||
``serverMode``
|
||||
``true`` if cmake supports server-mode and ``false`` otherwise.
|
||||
|
||||
|
||||
@@ -413,6 +413,14 @@ std::string cmFileAPI::ObjectName(Object const& o)
|
||||
return name;
|
||||
}
|
||||
|
||||
Json::Value cmFileAPI::BuildVersion(unsigned int major, unsigned int minor)
|
||||
{
|
||||
Json::Value version;
|
||||
version["major"] = major;
|
||||
version["minor"] = minor;
|
||||
return version;
|
||||
}
|
||||
|
||||
Json::Value cmFileAPI::BuildObject(Object const& object)
|
||||
{
|
||||
Json::Value value;
|
||||
@@ -680,10 +688,9 @@ Json::Value cmFileAPI::BuildCodeModel(Object const& object)
|
||||
Json::Value codemodel = cmFileAPICodemodelDump(*this, object.Version);
|
||||
codemodel["kind"] = this->ObjectKindName(object.Kind);
|
||||
|
||||
Json::Value& version = codemodel["version"] = Json::objectValue;
|
||||
Json::Value& version = codemodel["version"];
|
||||
if (object.Version == 2) {
|
||||
version["major"] = 2;
|
||||
version["minor"] = CodeModelV2Minor;
|
||||
version = BuildVersion(2, CodeModelV2Minor);
|
||||
} else {
|
||||
return codemodel; // should be unreachable
|
||||
}
|
||||
@@ -716,10 +723,9 @@ Json::Value cmFileAPI::BuildCache(Object const& object)
|
||||
Json::Value cache = cmFileAPICacheDump(*this, object.Version);
|
||||
cache["kind"] = this->ObjectKindName(object.Kind);
|
||||
|
||||
Json::Value& version = cache["version"] = Json::objectValue;
|
||||
Json::Value& version = cache["version"];
|
||||
if (object.Version == 2) {
|
||||
version["major"] = 2;
|
||||
version["minor"] = CacheV2Minor;
|
||||
version = BuildVersion(2, CacheV2Minor);
|
||||
} else {
|
||||
return cache; // should be unreachable
|
||||
}
|
||||
@@ -752,10 +758,9 @@ Json::Value cmFileAPI::BuildCMakeFiles(Object const& object)
|
||||
Json::Value cmakeFiles = cmFileAPICMakeFilesDump(*this, object.Version);
|
||||
cmakeFiles["kind"] = this->ObjectKindName(object.Kind);
|
||||
|
||||
Json::Value& version = cmakeFiles["version"] = Json::objectValue;
|
||||
Json::Value& version = cmakeFiles["version"];
|
||||
if (object.Version == 1) {
|
||||
version["major"] = 1;
|
||||
version["minor"] = CMakeFilesV1Minor;
|
||||
version = BuildVersion(1, CMakeFilesV1Minor);
|
||||
} else {
|
||||
return cmakeFiles; // should be unreachable
|
||||
}
|
||||
@@ -788,13 +793,43 @@ Json::Value cmFileAPI::BuildInternalTest(Object const& object)
|
||||
{
|
||||
Json::Value test = Json::objectValue;
|
||||
test["kind"] = this->ObjectKindName(object.Kind);
|
||||
Json::Value& version = test["version"] = Json::objectValue;
|
||||
Json::Value& version = test["version"];
|
||||
if (object.Version == 2) {
|
||||
version["major"] = 2;
|
||||
version["minor"] = InternalTestV2Minor;
|
||||
version = BuildVersion(2, InternalTestV2Minor);
|
||||
} else {
|
||||
version["major"] = 1;
|
||||
version["minor"] = InternalTestV1Minor;
|
||||
version = BuildVersion(1, InternalTestV1Minor);
|
||||
}
|
||||
return test;
|
||||
}
|
||||
|
||||
Json::Value cmFileAPI::ReportCapabilities()
|
||||
{
|
||||
Json::Value capabilities = Json::objectValue;
|
||||
Json::Value& requests = capabilities["requests"] = Json::arrayValue;
|
||||
|
||||
{
|
||||
Json::Value request = Json::objectValue;
|
||||
request["kind"] = ObjectKindName(ObjectKind::CodeModel);
|
||||
Json::Value& versions = request["version"] = Json::arrayValue;
|
||||
versions.append(BuildVersion(2, CodeModelV2Minor));
|
||||
requests.append(std::move(request));
|
||||
}
|
||||
|
||||
{
|
||||
Json::Value request = Json::objectValue;
|
||||
request["kind"] = ObjectKindName(ObjectKind::Cache);
|
||||
Json::Value& versions = request["version"] = Json::arrayValue;
|
||||
versions.append(BuildVersion(2, CacheV2Minor));
|
||||
requests.append(std::move(request));
|
||||
}
|
||||
|
||||
{
|
||||
Json::Value request = Json::objectValue;
|
||||
request["kind"] = ObjectKindName(ObjectKind::CMakeFiles);
|
||||
Json::Value& versions = request["version"] = Json::arrayValue;
|
||||
versions.append(BuildVersion(1, CMakeFilesV1Minor));
|
||||
requests.append(std::move(request));
|
||||
}
|
||||
|
||||
return capabilities;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,9 @@ public:
|
||||
and holding the original object. Other JSON types are unchanged. */
|
||||
Json::Value MaybeJsonFile(Json::Value in, std::string const& prefix);
|
||||
|
||||
/** Report file-api capabilities for cmake -E capabilities. */
|
||||
static Json::Value ReportCapabilities();
|
||||
|
||||
private:
|
||||
cmake* CMakeInstance;
|
||||
|
||||
@@ -162,6 +165,8 @@ private:
|
||||
static const char* ObjectKindName(ObjectKind kind);
|
||||
static std::string ObjectName(Object const& o);
|
||||
|
||||
static Json::Value BuildVersion(unsigned int major, unsigned int minor);
|
||||
|
||||
Json::Value BuildObject(Object const& object);
|
||||
|
||||
ClientRequests BuildClientRequests(Json::Value const& requests);
|
||||
|
||||
@@ -630,7 +630,7 @@ cmServerResponse cmServerProtocol1::ProcessGlobalSettings(
|
||||
Json::Value obj = Json::objectValue;
|
||||
|
||||
// Capabilities information:
|
||||
obj[kCAPABILITIES_KEY] = cm->ReportCapabilitiesJson(true);
|
||||
obj[kCAPABILITIES_KEY] = cm->ReportCapabilitiesJson();
|
||||
|
||||
obj[kDEBUG_OUTPUT_KEY] = cm->GetDebugOutput();
|
||||
obj[kTRACE_KEY] = cm->GetTrace();
|
||||
|
||||
@@ -248,7 +248,7 @@ Json::Value cmake::ReportVersionJson() const
|
||||
return version;
|
||||
}
|
||||
|
||||
Json::Value cmake::ReportCapabilitiesJson(bool haveServerMode) const
|
||||
Json::Value cmake::ReportCapabilitiesJson() const
|
||||
{
|
||||
Json::Value obj = Json::objectValue;
|
||||
|
||||
@@ -284,18 +284,19 @@ Json::Value cmake::ReportCapabilitiesJson(bool haveServerMode) const
|
||||
generators.append(i.second);
|
||||
}
|
||||
obj["generators"] = generators;
|
||||
obj["serverMode"] = haveServerMode;
|
||||
obj["fileApi"] = cmFileAPI::ReportCapabilities();
|
||||
obj["serverMode"] = true;
|
||||
|
||||
return obj;
|
||||
}
|
||||
#endif
|
||||
|
||||
std::string cmake::ReportCapabilities(bool haveServerMode) const
|
||||
std::string cmake::ReportCapabilities() const
|
||||
{
|
||||
std::string result;
|
||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||
Json::FastWriter writer;
|
||||
result = writer.write(this->ReportCapabilitiesJson(haveServerMode));
|
||||
result = writer.write(this->ReportCapabilitiesJson());
|
||||
#else
|
||||
result = "Not supported";
|
||||
#endif
|
||||
|
||||
@@ -136,9 +136,9 @@ public:
|
||||
|
||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||
Json::Value ReportVersionJson() const;
|
||||
Json::Value ReportCapabilitiesJson(bool haveServerMode) const;
|
||||
Json::Value ReportCapabilitiesJson() const;
|
||||
#endif
|
||||
std::string ReportCapabilities(bool haveServerMode) const;
|
||||
std::string ReportCapabilities() const;
|
||||
|
||||
//@{
|
||||
/**
|
||||
|
||||
@@ -734,11 +734,7 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string> const& args)
|
||||
return 1;
|
||||
}
|
||||
cmake cm(cmake::RoleInternal, cmState::Unknown);
|
||||
#if defined(CMAKE_BUILD_WITH_CMAKE)
|
||||
std::cout << cm.ReportCapabilities(true);
|
||||
#else
|
||||
std::cout << cm.ReportCapabilities(false);
|
||||
#endif
|
||||
std::cout << cm.ReportCapabilities();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
^{.*}$
|
||||
^{"fileApi":{"requests":\[{"kind":"codemodel","version":\[{"major":2,"minor":0}]},{"kind":"cache","version":\[{"major":2,"minor":0}]},{"kind":"cmakeFiles","version":\[{"major":1,"minor":0}]}]},"generators":\[.*\],"serverMode":true,"version":{.*}}$
|
||||
|
||||
Reference in New Issue
Block a user