CMake Nightly Date Stamp
[kiteware-cmake.git] / Source / cmPlistParser.cxx
blobce3c1713a2effec50b53436cddd4b6cd11e3aa1f
1 /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 file Copyright.txt or https://cmake.org/licensing for details. */
3 #include "cmPlistParser.h"
5 #include <cm3p/json/reader.h>
6 #include <cm3p/json/value.h>
8 #include "cmUVProcessChain.h"
9 #include "cmUVStream.h"
11 cm::optional<Json::Value> cmParsePlist(const std::string& filename)
13 cmUVProcessChainBuilder builder;
14 builder.AddCommand(
15 { "/usr/bin/plutil", "-convert", "json", "-o", "-", filename });
16 builder.SetBuiltinStream(cmUVProcessChainBuilder::Stream_OUTPUT);
18 auto chain = builder.Start();
19 chain.Wait();
21 auto const& status = chain.GetStatus(0);
22 if (status.ExitStatus != 0) {
23 return cm::nullopt;
26 Json::Reader reader;
27 Json::Value value;
28 cmUVPipeIStream outputStream(chain.GetLoop(), chain.OutputStream());
29 if (!reader.parse(outputStream, value)) {
30 return cm::nullopt;
32 return cm::optional<Json::Value>(value);