cmCMakePresetsGraphReadJSONBuildPresets.cxx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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 <cstddef>
  4. #include <functional>
  5. #include <map>
  6. #include <memory>
  7. #include <string>
  8. #include <vector>
  9. #include <cm/optional>
  10. #include <cmext/string_view>
  11. #include <cm3p/json/value.h>
  12. #include "cmBuildOptions.h"
  13. #include "cmCMakePresetsGraph.h"
  14. #include "cmCMakePresetsGraphInternal.h"
  15. #include "cmJSONHelpers.h"
  16. namespace {
  17. using ReadFileResult = cmCMakePresetsGraph::ReadFileResult;
  18. using BuildPreset = cmCMakePresetsGraph::BuildPreset;
  19. ReadFileResult PackageResolveModeHelper(cm::optional<PackageResolveMode>& out,
  20. const Json::Value* value)
  21. {
  22. if (!value) {
  23. out = cm::nullopt;
  24. return ReadFileResult::READ_OK;
  25. }
  26. if (!value->isString()) {
  27. return ReadFileResult::INVALID_PRESET;
  28. }
  29. if (value->asString() == "on") {
  30. out = PackageResolveMode::Force;
  31. } else if (value->asString() == "off") {
  32. out = PackageResolveMode::Disable;
  33. } else if (value->asString() == "only") {
  34. out = PackageResolveMode::OnlyResolve;
  35. } else {
  36. return ReadFileResult::INVALID_PRESET;
  37. }
  38. return ReadFileResult::READ_OK;
  39. }
  40. std::function<ReadFileResult(BuildPreset&, const Json::Value*)> const
  41. ResolvePackageReferencesHelper =
  42. [](BuildPreset& out, const Json::Value* value) -> ReadFileResult {
  43. return PackageResolveModeHelper(out.ResolvePackageReferences, value);
  44. };
  45. auto const BuildPresetHelper =
  46. cmJSONObjectHelper<BuildPreset, ReadFileResult>(
  47. ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, false)
  48. .Bind("name"_s, &BuildPreset::Name,
  49. cmCMakePresetsGraphInternal::PresetStringHelper)
  50. .Bind("inherits"_s, &BuildPreset::Inherits,
  51. cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
  52. false)
  53. .Bind("hidden"_s, &BuildPreset::Hidden,
  54. cmCMakePresetsGraphInternal::PresetBoolHelper, false)
  55. .Bind<std::nullptr_t>("vendor"_s, nullptr,
  56. cmCMakePresetsGraphInternal::VendorHelper(
  57. ReadFileResult::INVALID_PRESET),
  58. false)
  59. .Bind("displayName"_s, &BuildPreset::DisplayName,
  60. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  61. .Bind("description"_s, &BuildPreset::Description,
  62. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  63. .Bind("environment"_s, &BuildPreset::Environment,
  64. cmCMakePresetsGraphInternal::EnvironmentMapHelper, false)
  65. .Bind("configurePreset"_s, &BuildPreset::ConfigurePreset,
  66. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  67. .Bind("inheritConfigureEnvironment"_s,
  68. &BuildPreset::InheritConfigureEnvironment,
  69. cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
  70. .Bind("jobs"_s, &BuildPreset::Jobs,
  71. cmCMakePresetsGraphInternal::PresetOptionalIntHelper, false)
  72. .Bind("targets"_s, &BuildPreset::Targets,
  73. cmCMakePresetsGraphInternal::PresetVectorOneOrMoreStringHelper,
  74. false)
  75. .Bind("configuration"_s, &BuildPreset::Configuration,
  76. cmCMakePresetsGraphInternal::PresetStringHelper, false)
  77. .Bind("cleanFirst"_s, &BuildPreset::CleanFirst,
  78. cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
  79. .Bind("verbose"_s, &BuildPreset::Verbose,
  80. cmCMakePresetsGraphInternal::PresetOptionalBoolHelper, false)
  81. .Bind("nativeToolOptions"_s, &BuildPreset::NativeToolOptions,
  82. cmCMakePresetsGraphInternal::PresetVectorStringHelper, false)
  83. .Bind("condition"_s, &BuildPreset::ConditionEvaluator,
  84. cmCMakePresetsGraphInternal::PresetConditionHelper, false)
  85. .Bind("resolvePackageReferences"_s, ResolvePackageReferencesHelper, false);
  86. }
  87. namespace cmCMakePresetsGraphInternal {
  88. ReadFileResult BuildPresetsHelper(std::vector<BuildPreset>& out,
  89. const Json::Value* value)
  90. {
  91. static auto const helper = cmJSONVectorHelper<BuildPreset, ReadFileResult>(
  92. ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESETS,
  93. BuildPresetHelper);
  94. return helper(out, value);
  95. }
  96. }