forked from lix-project/lix
56 lines
1.1 KiB
C++
56 lines
1.1 KiB
C++
|
#include <algorithm>
|
||
|
|
||
|
#include "command.hh"
|
||
|
#include "common-args.hh"
|
||
|
#include "eval.hh"
|
||
|
#include "globals.hh"
|
||
|
#include "legacy.hh"
|
||
|
#include "shared.hh"
|
||
|
#include "store-api.hh"
|
||
|
|
||
|
namespace nix {
|
||
|
|
||
|
struct NixArgs : virtual MultiCommand, virtual MixCommonArgs
|
||
|
{
|
||
|
NixArgs() : MultiCommand(*RegisterCommand::commands), MixCommonArgs("nix")
|
||
|
{
|
||
|
mkFlag('h', "help", "show usage information", [=]() {
|
||
|
printHelp(programName, std::cout);
|
||
|
throw Exit();
|
||
|
});
|
||
|
|
||
|
mkFlag(0, "version", "show version information", std::bind(printVersion, programName));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
void mainWrapped(int argc, char * * argv)
|
||
|
{
|
||
|
initNix();
|
||
|
initGC();
|
||
|
|
||
|
string programName = baseNameOf(argv[0]);
|
||
|
|
||
|
{
|
||
|
auto legacy = (*RegisterLegacyCommand::commands)[programName];
|
||
|
if (legacy) return legacy(argc, argv);
|
||
|
}
|
||
|
|
||
|
NixArgs args;
|
||
|
|
||
|
args.parseCmdline(argvToStrings(argc, argv));
|
||
|
|
||
|
assert(args.command);
|
||
|
|
||
|
args.command->prepare();
|
||
|
args.command->run();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
int main(int argc, char * * argv)
|
||
|
{
|
||
|
return nix::handleExceptions(argv[0], [&]() {
|
||
|
nix::mainWrapped(argc, argv);
|
||
|
});
|
||
|
}
|