a9d15d4f43
by priority and version install. That is, if there are multiple packages with the same name, then pick the package with the highest priority, and only use the version if there are multiple packages with the same priority. This makes it possible to mark specific versions/variant in Nixpkgs more or less desirable than others. A typical example would be a beta version of some package (e.g., "gcc-4.2.0rc1") which should not be installed even though it is the highest version, except when it is explicitly selected (e.g., "nix-env -i gcc-4.2.0rc1"). * Idem for nix-env -u, only the semantics are a bit trickier since we also need to take into account the priority of the currently installed package (we never upgrade to a lower priority, unless --always is given).
69 lines
1.4 KiB
C++
69 lines
1.4 KiB
C++
#ifndef __GET_DRVS_H
|
|
#define __GET_DRVS_H
|
|
|
|
#include <string>
|
|
#include <map>
|
|
|
|
#include <boost/shared_ptr.hpp>
|
|
|
|
#include "eval.hh"
|
|
|
|
|
|
namespace nix {
|
|
|
|
|
|
typedef std::map<string, string> MetaInfo;
|
|
|
|
|
|
struct DrvInfo
|
|
{
|
|
private:
|
|
string drvPath;
|
|
string outPath;
|
|
|
|
public:
|
|
string name;
|
|
string attrPath; /* path towards the derivation */
|
|
string system;
|
|
|
|
/* !!! these should really be hidden, and setMetaInfo() should
|
|
make a copy since the ATermMap can be shared between multiple
|
|
DrvInfos. */
|
|
boost::shared_ptr<ATermMap> attrs;
|
|
|
|
string queryDrvPath(EvalState & state) const;
|
|
string queryOutPath(EvalState & state) const;
|
|
MetaInfo queryMetaInfo(EvalState & state) const;
|
|
string queryMetaInfo(EvalState & state, const string & name) const;
|
|
|
|
void setDrvPath(const string & s)
|
|
{
|
|
drvPath = s;
|
|
}
|
|
|
|
void setOutPath(const string & s)
|
|
{
|
|
outPath = s;
|
|
}
|
|
|
|
void setMetaInfo(const MetaInfo & meta);
|
|
};
|
|
|
|
|
|
typedef list<DrvInfo> DrvInfos;
|
|
|
|
|
|
/* Evaluate expression `e'. If it evaluates to a derivation, store
|
|
information about the derivation in `drv' and return true.
|
|
Otherwise, return false. */
|
|
bool getDerivation(EvalState & state, Expr e, DrvInfo & drv);
|
|
|
|
void getDerivations(EvalState & state, Expr e, const string & pathPrefix,
|
|
const ATermMap & autoArgs, DrvInfos & drvs);
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif /* !__GET_DRVS_H */
|