mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-11 00:36:20 +02:00
93227ff65c
This should also fix: nix-instantiate: ./../boost/shared_ptr.hpp:254: T* boost::shared_ptr<T>::operator->() const [with T = nix::StoreAPI]: Assertion `px != 0' failed. which was caused by hashDerivationModulo() calling the ‘store’ object (during store upgrades) before openStore() assigned it.
86 lines
2 KiB
C++
86 lines
2 KiB
C++
#ifndef __DERIVATIONS_H
|
|
#define __DERIVATIONS_H
|
|
|
|
#include <map>
|
|
|
|
#include "types.hh"
|
|
#include "hash.hh"
|
|
|
|
|
|
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;
|
|
}
|
|
void parseHashInfo(bool & recursive, HashType & hashType, Hash & hash) const;
|
|
};
|
|
|
|
typedef std::map<string, DerivationOutput> DerivationOutputs;
|
|
|
|
/* For inputs that are sub-derivations, we specify exactly which
|
|
output IDs we are interested in. */
|
|
typedef std::map<Path, StringSet> DerivationInputs;
|
|
|
|
typedef std::map<string, string> StringPairs;
|
|
|
|
struct Derivation
|
|
{
|
|
DerivationOutputs outputs; /* keyed on symbolic IDs */
|
|
DerivationInputs inputDrvs; /* inputs that are sub-derivations */
|
|
PathSet inputSrcs; /* inputs that are sources */
|
|
string platform;
|
|
Path builder;
|
|
Strings args;
|
|
StringPairs env;
|
|
};
|
|
|
|
|
|
class StoreAPI;
|
|
|
|
|
|
/* Write a derivation to the Nix store, and return its path. */
|
|
Path writeDerivation(StoreAPI & store,
|
|
const Derivation & drv, const string & name);
|
|
|
|
/* Parse a derivation. */
|
|
Derivation parseDerivation(const string & s);
|
|
|
|
/* Print a derivation. */
|
|
string unparseDerivation(const Derivation & drv);
|
|
|
|
/* Check whether a file name ends with the extensions for
|
|
derivations. */
|
|
bool isDerivation(const string & fileName);
|
|
|
|
/* Return true iff this is a fixed-output derivation. */
|
|
bool isFixedOutputDrv(const Derivation & drv);
|
|
|
|
Hash hashDerivationModulo(StoreAPI & store, Derivation drv);
|
|
|
|
/* Memoisation of hashDerivationModulo(). */
|
|
typedef std::map<Path, Hash> DrvHashes;
|
|
|
|
extern DrvHashes drvHashes;
|
|
|
|
}
|
|
|
|
|
|
#endif /* !__DERIVATIONS_H */
|