mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
Allow CMake, CTest, and CPack to read presets from a path given by command-line argument instead of always requiring `CMakePresets.json` or `CMakeUserPresets.json` in the source tree. This makes the presets feature more extensible to cases in which the user doesn't have access to the presets defined in the source tree (e.g., if the source tree is not writable). For now, there is no equivalent implementation of such an option in the `cmake-gui`, nor for the recent presets functionality implemented in `ctest_configure` and `ctest_build`. Fixes: #27329
79 lines
1.5 KiB
C++
79 lines
1.5 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file LICENSE.rst or https://cmake.org/licensing for details. */
|
|
#pragma once
|
|
|
|
#include <string>
|
|
|
|
class cmCMakePresetsArgsBase
|
|
{
|
|
public:
|
|
virtual ~cmCMakePresetsArgsBase() = default;
|
|
|
|
virtual bool HasPresetsArg() const { return !this->PresetName.empty(); };
|
|
virtual void Clear() { this->PresetName.clear(); }
|
|
|
|
std::string PresetName;
|
|
std::string PresetsFile;
|
|
|
|
protected:
|
|
cmCMakePresetsArgsBase() = default;
|
|
};
|
|
|
|
class cmCMakePresetsArgs : public cmCMakePresetsArgsBase
|
|
{
|
|
public:
|
|
bool HasPresetsArg() const override
|
|
{
|
|
return this->cmCMakePresetsArgsBase::HasPresetsArg() || this->ListPresets;
|
|
}
|
|
|
|
void Clear() override
|
|
{
|
|
this->cmCMakePresetsArgsBase::Clear();
|
|
this->ListPresets = false;
|
|
}
|
|
|
|
bool ListPresets = false;
|
|
};
|
|
|
|
class cmCMakePresetsConfigureArgs : public cmCMakePresetsArgsBase
|
|
{
|
|
public:
|
|
enum class ListPresetsOption
|
|
{
|
|
None,
|
|
Configure,
|
|
Build,
|
|
Test,
|
|
Package,
|
|
Workflow,
|
|
All,
|
|
};
|
|
|
|
bool HasPresetsArg() const override
|
|
{
|
|
return this->cmCMakePresetsArgsBase::HasPresetsArg() ||
|
|
this->ListPresets != ListPresetsOption::None;
|
|
}
|
|
|
|
void Clear() override
|
|
{
|
|
this->cmCMakePresetsArgsBase::Clear();
|
|
this->ListPresets = ListPresetsOption::None;
|
|
}
|
|
|
|
ListPresetsOption ListPresets = ListPresetsOption::None;
|
|
};
|
|
|
|
class cmCMakePresetsWorkflowArgs : public cmCMakePresetsArgs
|
|
{
|
|
public:
|
|
void Clear() override
|
|
{
|
|
this->cmCMakePresetsArgs::Clear();
|
|
this->Fresh = false;
|
|
}
|
|
|
|
bool Fresh = false;
|
|
};
|