Browse Source

cmake: Teach -E capabilities to report supported fileapi requests

Fixes: #19339
pull/331/head
Brad King 6 years ago
parent
commit
c932f49842
  1. 2
      Help/manual/cmake-file-api.7.rst
  2. 16
      Help/manual/cmake.1.rst
  3. 32
      Source/cmFileAPI.cxx
  4. 3
      Source/cmFileAPI.h
  5. 1
      Source/cmake.cxx
  6. 2
      Tests/RunCMake/CommandLine/E_capabilities-stdout.txt

2
Help/manual/cmake-file-api.7.rst

@ -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
============

16
Help/manual/cmake.1.rst

@ -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.

32
Source/cmFileAPI.cxx

@ -801,3 +801,35 @@ Json::Value cmFileAPI::BuildInternalTest(Object const& object)
}
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;
}

3
Source/cmFileAPI.h

@ -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;

1
Source/cmake.cxx

@ -284,6 +284,7 @@ Json::Value cmake::ReportCapabilitiesJson() const
generators.append(i.second);
}
obj["generators"] = generators;
obj["fileApi"] = cmFileAPI::ReportCapabilities();
obj["serverMode"] = true;
return obj;

2
Tests/RunCMake/CommandLine/E_capabilities-stdout.txt

@ -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":{.*}}$
Loading…
Cancel
Save