mirror of
https://github.com/NixOS/nix.git
synced 2025-11-11 13:06:01 +01:00
This is because with the split packages of the Meson build, we simply have no idea what directory the binaries will be installed in when we build the library. In the process of doing so, consolidate and make more sophisticated the logic to cope with a few corner cases (e.g. `NIX_BIN_DIR` exists, but no binaries are inside it). Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
45 lines
1 KiB
C++
45 lines
1 KiB
C++
#pragma once
|
|
///@file
|
|
|
|
#include "eval.hh"
|
|
|
|
namespace nix {
|
|
|
|
struct AbstractNixRepl
|
|
{
|
|
ref<EvalState> state;
|
|
Bindings * autoArgs;
|
|
|
|
AbstractNixRepl(ref<EvalState> state)
|
|
: state(state)
|
|
{ }
|
|
|
|
virtual ~AbstractNixRepl()
|
|
{ }
|
|
|
|
typedef std::vector<std::pair<Value*,std::string>> AnnotatedValues;
|
|
|
|
using RunNix = void(Path program, const Strings & args, const std::optional<std::string> & input);
|
|
|
|
/**
|
|
* @param runNix Function to run the nix CLI to support various
|
|
* `:<something>` commands. Optional; if not provided,
|
|
* everything else will still work fine, but those commands won't.
|
|
*/
|
|
static std::unique_ptr<AbstractNixRepl> create(
|
|
const LookupPath & lookupPath,
|
|
nix::ref<Store> store,
|
|
ref<EvalState> state,
|
|
std::function<AnnotatedValues()> getValues,
|
|
RunNix * runNix = nullptr);
|
|
|
|
static ReplExitStatus runSimple(
|
|
ref<EvalState> evalState,
|
|
const ValMap & extraEnv);
|
|
|
|
virtual void initEnv() = 0;
|
|
|
|
virtual ReplExitStatus mainLoop() = 0;
|
|
};
|
|
|
|
}
|