mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-15 12:16:40 +08:00
cmScanDepFormat: P1689R4: Flatten future-compile members into parent
This commit is contained in:
@@ -43,6 +43,7 @@ by the `P1689r3`_ paper, with the following updates:
|
|||||||
|
|
||||||
* Omit the ``outputs``, ``inputs``, and ``depends`` fields from
|
* Omit the ``outputs``, ``inputs``, and ``depends`` fields from
|
||||||
each entry in the ``rules`` array. They are unused.
|
each entry in the ``rules`` array. They are unused.
|
||||||
|
* Flatten ``future-compile`` members directly into each rule.
|
||||||
|
|
||||||
Compiler writers may try out their scanning functionality using
|
Compiler writers may try out their scanning functionality using
|
||||||
the `cxx-modules-sandbox`_ test project, modified to set variables
|
the `cxx-modules-sandbox`_ test project, modified to set variables
|
||||||
|
@@ -117,11 +117,8 @@ bool cmScanDepFormat_P1689_Parse(std::string const& arg_pp,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rule.isMember("future-compile")) {
|
if (rule.isMember("outputs")) {
|
||||||
Json::Value const& future_compile = rule["future-compile"];
|
Json::Value const& outputs = rule["outputs"];
|
||||||
|
|
||||||
if (future_compile.isMember("outputs")) {
|
|
||||||
Json::Value const& outputs = future_compile["outputs"];
|
|
||||||
if (outputs.isArray()) {
|
if (outputs.isArray()) {
|
||||||
if (outputs.empty()) {
|
if (outputs.empty()) {
|
||||||
cmSystemTools::Error(
|
cmSystemTools::Error(
|
||||||
@@ -134,8 +131,8 @@ bool cmScanDepFormat_P1689_Parse(std::string const& arg_pp,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (future_compile.isMember("provides")) {
|
if (rule.isMember("provides")) {
|
||||||
Json::Value const& provides = future_compile["provides"];
|
Json::Value const& provides = rule["provides"];
|
||||||
if (provides.isArray()) {
|
if (provides.isArray()) {
|
||||||
for (auto const& provide : provides) {
|
for (auto const& provide : provides) {
|
||||||
cmSourceReqInfo provide_info;
|
cmSourceReqInfo provide_info;
|
||||||
@@ -158,8 +155,8 @@ bool cmScanDepFormat_P1689_Parse(std::string const& arg_pp,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (future_compile.isMember("requires")) {
|
if (rule.isMember("requires")) {
|
||||||
Json::Value const& reqs = future_compile["requires"];
|
Json::Value const& reqs = rule["requires"];
|
||||||
if (reqs.isArray()) {
|
if (reqs.isArray()) {
|
||||||
for (auto const& require : reqs) {
|
for (auto const& require : reqs) {
|
||||||
cmSourceReqInfo require_info;
|
cmSourceReqInfo require_info;
|
||||||
@@ -180,7 +177,6 @@ bool cmScanDepFormat_P1689_Parse(std::string const& arg_pp,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -196,12 +192,10 @@ bool cmScanDepFormat_P1689_Write(std::string const& path,
|
|||||||
|
|
||||||
Json::Value rule(Json::objectValue);
|
Json::Value rule(Json::objectValue);
|
||||||
|
|
||||||
Json::Value& future_compile = rule["future-compile"] = Json::objectValue;
|
Json::Value& outputs = rule["outputs"] = Json::arrayValue;
|
||||||
|
|
||||||
Json::Value& outputs = future_compile["outputs"] = Json::arrayValue;
|
|
||||||
outputs.append(info.PrimaryOutput);
|
outputs.append(info.PrimaryOutput);
|
||||||
|
|
||||||
Json::Value& provides = future_compile["provides"] = Json::arrayValue;
|
Json::Value& provides = rule["provides"] = Json::arrayValue;
|
||||||
for (auto const& provide : info.Provides) {
|
for (auto const& provide : info.Provides) {
|
||||||
Json::Value provide_obj(Json::objectValue);
|
Json::Value provide_obj(Json::objectValue);
|
||||||
auto const encoded = EncodeFilename(provide.LogicalName);
|
auto const encoded = EncodeFilename(provide.LogicalName);
|
||||||
@@ -218,7 +212,7 @@ bool cmScanDepFormat_P1689_Write(std::string const& path,
|
|||||||
provides.append(provide_obj);
|
provides.append(provide_obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
Json::Value& reqs = future_compile["requires"] = Json::arrayValue;
|
Json::Value& reqs = rule["requires"] = Json::arrayValue;
|
||||||
for (auto const& require : info.Requires) {
|
for (auto const& require : info.Requires) {
|
||||||
Json::Value require_obj(Json::objectValue);
|
Json::Value require_obj(Json::objectValue);
|
||||||
auto const encoded = EncodeFilename(require.LogicalName);
|
auto const encoded = EncodeFilename(require.LogicalName);
|
||||||
|
Reference in New Issue
Block a user