forked from lix-project/lix
jade
edba570664
This was achieved by running maintainers/buildtime_report.sh on the
build directory of a meson build, then asking "why the heck is json
eating our build times", and strategically moving the json using bits
out of widely included headers.
It turns out that putting literally any metrics whatsoever into the
build had immediate and predictable results.
Results are 1382.5s frontend time -> 1175.4s frontend time, back end
time approximately invariant.
Related: lix-project/lix#159
Change-Id: I7edea95c8536203325c8bb4dae5f32d727a21b2d
82 lines
1.9 KiB
C++
82 lines
1.9 KiB
C++
#pragma once
|
||
///@file
|
||
|
||
#include "error.hh"
|
||
#include "types.hh"
|
||
|
||
namespace nix {
|
||
|
||
/**
|
||
* The list of available experimental features.
|
||
*
|
||
* If you update this, don’t forget to also change the map defining
|
||
* their string representation and documentation in the corresponding
|
||
* `.cc` file as well.
|
||
*/
|
||
enum struct ExperimentalFeature
|
||
{
|
||
CaDerivations,
|
||
ImpureDerivations,
|
||
Flakes,
|
||
NixCommand,
|
||
RecursiveNix,
|
||
NoUrlLiterals,
|
||
FetchClosure,
|
||
ReplFlake,
|
||
AutoAllocateUids,
|
||
Cgroups,
|
||
DaemonTrustOverride,
|
||
DynamicDerivations,
|
||
ParseTomlTimestamps,
|
||
ReadOnlyLocalStore,
|
||
ReplAutomation,
|
||
};
|
||
|
||
/**
|
||
* Just because writing `ExperimentalFeature::CaDerivations` is way too long
|
||
*/
|
||
using Xp = ExperimentalFeature;
|
||
|
||
/**
|
||
* Parse an experimental feature (enum value) from its name. Experimental
|
||
* feature flag names are hyphenated and do not contain spaces.
|
||
*/
|
||
const std::optional<ExperimentalFeature> parseExperimentalFeature(
|
||
const std::string_view & name);
|
||
|
||
/**
|
||
* Show the name of an experimental feature. This is the opposite of
|
||
* parseExperimentalFeature().
|
||
*/
|
||
std::string_view showExperimentalFeature(const ExperimentalFeature);
|
||
|
||
/**
|
||
* Shorthand for `str << showExperimentalFeature(feature)`.
|
||
*/
|
||
std::ostream & operator<<(
|
||
std::ostream & str,
|
||
const ExperimentalFeature & feature);
|
||
|
||
/**
|
||
* Parse a set of strings to the corresponding set of experimental
|
||
* features, ignoring (but warning for) any unknown feature.
|
||
*/
|
||
std::set<ExperimentalFeature> parseFeatures(const std::set<std::string> &);
|
||
|
||
/**
|
||
* An experimental feature was required for some (experimental)
|
||
* operation, but was not enabled.
|
||
*/
|
||
class MissingExperimentalFeature : public Error
|
||
{
|
||
public:
|
||
/**
|
||
* The experimental feature that was required but not enabled.
|
||
*/
|
||
ExperimentalFeature missingFeature;
|
||
|
||
MissingExperimentalFeature(ExperimentalFeature missingFeature);
|
||
};
|
||
|
||
}
|