/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file LICENSE.rst or https://cmake.org/licensing for details.  */
#pragma once

#include "cmConfigure.h" // IWYU pragma: keep

/** \brief Defines how to resolve packages **/
enum class PackageResolveMode
{
  /** \brief Behavior is defined by preset or cache variable (e.g.
     CMAKE_VS_NUGET_PACKAGE_RESTORE). This is the default. **/
  Default,

  /** \brief Ignore behavior defined by preset or cache variable and forces
     packages to be resolved prior to build. **/
  Force,

  /** \brief Ignore behavior defined by preset or cache variable and forces
     packages to be resolved, but skip the actual build. **/
  OnlyResolve,

  /** \brief Ignore behavior defined by preset or cache variable and don't
     resolve any packages **/
  Disable
};

struct cmBuildOptions
{
public:
  cmBuildOptions() noexcept = default;
  explicit cmBuildOptions(bool clean, bool fast,
                          PackageResolveMode resolveMode) noexcept
    : Clean(clean)
    , Fast(fast)
    , ResolveMode(resolveMode)
  {
  }

  bool Clean = false;
  bool Fast = false;
  PackageResolveMode ResolveMode = PackageResolveMode::Default;
};
