#ifndef __DERIVATIONS_H #define __DERIVATIONS_H typedef struct _ATerm * ATerm; #include "hash.hh" #include "util.hh" #include namespace nix { /* Extension of derivations in the Nix store. */ const string drvExtension = ".drv"; /* Abstract syntax of derivations. */ struct DerivationOutput { Path path; string hashAlgo; /* hash used for expected hash computation */ string hash; /* expected hash, may be null */ DerivationOutput() { } DerivationOutput(Path path, string hashAlgo, string hash) { this->path = path; this->hashAlgo = hashAlgo; this->hash = hash; } }; struct DerivationStateOutput { Path statepath; string hashAlgo; string hash; string enabled; string shared; //none, full, group string synchronization; //none, exclusive-lock-on-own-state-dir, exclusive-lock-on-all-(sub)-states-dir string createDirsBeforeInstall; DerivationStateOutput() { } DerivationStateOutput(Path statepath, string hashAlgo, string hash, string enabled, string shared, string synchronization, string createDirsBeforeInstall) { this->statepath = statepath; this->hashAlgo = hashAlgo; this->hash = hash; this->enabled = enabled; this->shared = shared; this->synchronization = synchronization; this->createDirsBeforeInstall = createDirsBeforeInstall; } bool getEnabled(){ return string2bool(enabled); } bool getCreateDirsBeforeInstall(){ return string2bool(createDirsBeforeInstall); } }; struct DerivationStateOutputDir { string path; string type; //none, manual, interval, full string interval; //type int DerivationStateOutputDir() { } DerivationStateOutputDir(string path, string type, string interval) { this->path = path; this->type = type; this->interval = interval; } int getInterval(){ return 0; //TODO } //sort function bool operator<(const DerivationStateOutputDir& a) const { return path < a.path; } }; typedef std::map DerivationOutputs; typedef std::map DerivationStateOutputs; typedef std::map DerivationStateOutputDirs; /* For inputs that are sub-derivations, we specify exactly which output IDs we are interested in. */ typedef std::map DerivationInputs; typedef std::map StringPairs; struct Derivation { DerivationOutputs outputs; /* keyed on symbolic IDs */ DerivationStateOutputs stateOutputs; /* */ DerivationStateOutputDirs stateOutputDirs; /* */ DerivationInputs inputDrvs; /* inputs that are sub-derivations */ PathSet inputSrcs; /* inputs that are sources */ string platform; Path builder; Strings args; StringPairs env; }; /* Hash an aterm. */ Hash hashTerm(ATerm t); /* Write a derivation to the Nix store, and return its path. */ Path writeDerivation(const Derivation & drv, const string & name); /* Parse a derivation. */ Derivation parseDerivation(ATerm t); /* Parse a derivation. */ ATerm unparseDerivation(const Derivation & drv); /* Check whether a file name ends with the extensions for derivations. */ bool isDerivation(const string & fileName); } #endif /* !__DERIVATIONS_H */