cmCMakePresetsGraphReadJSONBuildPresets.cxx 4.2 KB

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