summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2020-11-19 15:43:21 (GMT)
committerKitware Robot <kwrobot@kitware.com>2020-11-19 15:43:26 (GMT)
commitf800e28a9c9cf880258d597e27b649826acfc8c9 (patch)
treed9075cba5f4c6fd8b218d3babbba1ef3a9e5b5bd /Source
parent785552c75441b113df5cbd79e6eafe3b7eadf92d (diff)
parent2cb1d77c58b4bebb50c1cd457176461ce11c29a5 (diff)
downloadCMake-f800e28a9c9cf880258d597e27b649826acfc8c9.zip
CMake-f800e28a9c9cf880258d597e27b649826acfc8c9.tar.gz
CMake-f800e28a9c9cf880258d597e27b649826acfc8c9.tar.bz2
Merge topic 'scandep-p1689r3'
2cb1d77c58 scandep: update format to P1689 R3 Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Ben Boeckel <ben.boeckel@kitware.com> Merge-request: !5515
Diffstat (limited to 'Source')
-rw-r--r--Source/cmScanDepFormat.cxx82
1 files changed, 30 insertions, 52 deletions
diff --git a/Source/cmScanDepFormat.cxx b/Source/cmScanDepFormat.cxx
index b157a8b..40bf4c9 100644
--- a/Source/cmScanDepFormat.cxx
+++ b/Source/cmScanDepFormat.cxx
@@ -12,25 +12,13 @@
#include "cmsys/FStream.hxx"
-#include "cm_utf8.h"
-
#include "cmGeneratedFileStream.h"
#include "cmStringAlgorithms.h"
#include "cmSystemTools.h"
static bool ParseFilename(Json::Value const& val, std::string& result)
{
- if (val.isObject()) {
- Json::Value const& format = val["format"];
- if (format == "raw8") {
- Json::Value const& data = val["data"];
- for (auto const& byte : data) {
- result.push_back(static_cast<char>(byte.asUInt()));
- }
- } else /* TODO: if (format == "raw16") */ {
- return false;
- }
- } else if (val.isString()) {
+ if (val.isString()) {
result = val.asString();
} else {
return false;
@@ -41,35 +29,24 @@ static bool ParseFilename(Json::Value const& val, std::string& result)
static Json::Value EncodeFilename(std::string const& path)
{
- if (cm_utf8_is_valid(path.c_str())) {
- std::string valid_data;
- valid_data.reserve(path.size());
-
- for (auto const& byte : path) {
- if (std::iscntrl(byte)) {
- // Control characters.
- valid_data.append("\\u");
- char buf[5];
- std::snprintf(buf, sizeof(buf), "%04x", byte);
- valid_data.append(buf);
- } else if (byte == '"' || byte == '\\') {
- // Special JSON characters.
- valid_data.push_back('\\');
- valid_data.push_back(byte);
- } else {
- // Other data.
- valid_data.push_back(byte);
- }
+ std::string data;
+ data.reserve(path.size());
+
+ for (auto const& byte : path) {
+ if (std::iscntrl(byte)) {
+ // Control characters.
+ data.append("\\u");
+ char buf[5];
+ std::snprintf(buf, sizeof(buf), "%04x", byte);
+ data.append(buf);
+ } else if (byte == '"' || byte == '\\') {
+ // Special JSON characters.
+ data.push_back('\\');
+ data.push_back(byte);
+ } else {
+ // Other data.
+ data.push_back(byte);
}
-
- return valid_data;
- }
-
- Json::Value data;
- data["format"] = "raw8";
- Json::Value& code_units = data["code-units"];
- for (auto const& code_unit : path) {
- code_units.append(static_cast<int>(code_unit));
}
return data;
@@ -121,15 +98,6 @@ bool cmScanDepFormat_P1689_Parse(std::string const& arg_pp, cmSourceInfo* info)
return false;
}
- Json::Value const& workdir = ppi["work-directory"];
- if (!workdir.isString()) {
- cmSystemTools::Error(cmStrCat("-E cmake_ninja_depends failed to parse ",
- arg_pp, ": work-directory is not a string"));
- return false;
- }
- std::string work_directory;
- PARSE_BLOB(workdir, work_directory);
-
Json::Value const& rules = ppi["rules"];
if (rules.isArray()) {
if (rules.size() != 1) {
@@ -139,6 +107,16 @@ bool cmScanDepFormat_P1689_Parse(std::string const& arg_pp, cmSourceInfo* info)
}
for (auto const& rule : rules) {
+ Json::Value const& workdir = rule["work-directory"];
+ if (!workdir.isString()) {
+ cmSystemTools::Error(
+ cmStrCat("-E cmake_ninja_depends failed to parse ", arg_pp,
+ ": work-directory is not a string"));
+ return false;
+ }
+ std::string work_directory;
+ PARSE_BLOB(workdir, work_directory);
+
Json::Value const& depends = rule["depends"];
if (depends.isArray()) {
std::string depend_filename;
@@ -223,12 +201,12 @@ bool cmScanDepFormat_P1689_Write(std::string const& path,
Json::Value ddi(Json::objectValue);
ddi["version"] = 0;
ddi["revision"] = 0;
- ddi["work-directory"] =
- EncodeFilename(cmSystemTools::GetCurrentWorkingDirectory());
Json::Value& rules = ddi["rules"] = Json::arrayValue;
Json::Value rule(Json::objectValue);
+ rule["work-directory"] =
+ EncodeFilename(cmSystemTools::GetCurrentWorkingDirectory());
Json::Value& inputs = rule["inputs"] = Json::arrayValue;
inputs.append(EncodeFilename(input));