123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- #pragma once
- #include "config.h"
- #include "types.hh"
- #include <map>
- #include <sys/types.h>
- namespace nix {
- enum CompressionType
- {
- COMPRESSION_NONE = 0,
- COMPRESSION_GZIP = 1
- #if HAVE_BZLIB_H
- , COMPRESSION_BZIP2 = 2
- #endif
- };
- struct Settings {
- typedef std::map<string, string> SettingsMap;
- Settings();
- void processEnvironment();
- void set(const string & name, const string & value);
- string get(const string & name, const string & def);
- Strings get(const string & name, const Strings & def);
- bool get(const string & name, bool def);
- int get(const string & name, int def);
- void update();
- string pack();
- SettingsMap getOverrides();
- /* The directory where we store sources and derived files. */
- Path nixStore;
- /* The directory where we log various operations. */
- Path nixLogDir;
- /* The directory where state is stored. */
- Path nixStateDir;
- /* The directory where we keep the SQLite database. */
- Path nixDBPath;
- /* The directory where configuration files are stored. */
- Path nixConfDir;
- /* The directory where internal helper programs are stored. */
- Path nixLibexecDir;
- /* The directory where the main programs are stored. */
- Path nixBinDir;
- /* File name of the socket the daemon listens to. */
- Path nixDaemonSocketFile;
- /* Whether to keep temporary directories of failed builds. */
- bool keepFailed;
- /* Whether to keep building subgoals when a sibling (another
- subgoal of the same goal) fails. */
- bool keepGoing;
- /* User and groud id of the client issuing the build request. Used to set
- the owner and group of the kept temporary directories of failed
- builds. */
- uid_t clientUid;
- gid_t clientGid;
- /* Whether, if we cannot realise the known closure corresponding
- to a derivation, we should try to normalise the derivation
- instead. */
- bool tryFallback;
- /* Verbosity level for build output. */
- Verbosity buildVerbosity;
- /* Maximum number of parallel build jobs. 0 means unlimited. */
- unsigned int maxBuildJobs;
- /* Number of CPU cores to utilize in parallel within a build,
- i.e. by passing this number to Make via '-j'. 0 means that the
- number of actual CPU cores on the local host ought to be
- auto-detected. */
- unsigned int buildCores;
- /* Read-only mode. Don't copy stuff to the store, don't change
- the database. */
- bool readOnlyMode;
- /* The canonical system name, as returned by config.guess. */
- string thisSystem;
- /* The maximum time in seconds that a builer can go without
- producing any output on stdout/stderr before it is killed. 0
- means infinity. */
- time_t maxSilentTime;
- /* The maximum duration in seconds that a builder can run. 0
- means infinity. */
- time_t buildTimeout;
- /* The substituters. There are programs that can somehow realise
- a store path without building, e.g., by downloading it or
- copying it from a CD. */
- Paths substituters;
- /* Whether to use build hooks (for distributed builds). Sometimes
- users want to disable this from the command-line. */
- bool useBuildHook;
- /* Whether buildDerivations() should print out lines on stderr in
- a fixed format to allow its progress to be monitored. Each
- line starts with a "@". The following are defined:
- @ build-started <drvpath> <outpath> <system> <logfile> <pid>
- @ build-failed <drvpath> <outpath> <exitcode> <error text>
- @ build-succeeded <drvpath> <outpath>
- @ substituter-started <outpath> <substituter>
- @ substituter-failed <outpath> <exitcode> <error text>
- @ substituter-succeeded <outpath>
- Best combined with --no-build-output, otherwise stderr might
- conceivably contain lines in this format printed by the
- builders. */
- bool printBuildTrace;
- /* When true, 'buildDerivations' prefixes lines coming from builders so
- that clients know exactly which line comes from which builder, and
- which line comes from the daemon itself. The prefix for data coming
- from builders is "log:PID:LEN:DATA" where PID uniquely identifies the
- builder (PID is given in "build-started" traces.) */
- bool multiplexedBuildOutput;
- /* Amount of reserved space for the garbage collector
- (/nix/var/nix/db/reserved). */
- off_t reservedSize;
- /* Whether SQLite should use fsync. */
- bool fsyncMetadata;
- /* Whether SQLite should use WAL mode. */
- bool useSQLiteWAL;
- /* Whether to call sync() before registering a path as valid. */
- bool syncBeforeRegistering;
- /* Whether to use substitutes. */
- bool useSubstitutes;
- /* The Unix group that contains the build users. */
- string buildUsersGroup;
- /* Whether to build in chroot. */
- bool useChroot;
- /* Whether to impersonate a Linux 2.6 machine on newer kernels. */
- bool impersonateLinux26;
- /* Whether to store build logs. */
- bool keepLog;
- /* Whether to compress logs. */
- enum CompressionType logCompression;
- /* Maximum number of bytes a builder can write to stdout/stderr
- before being killed (0 means no limit). */
- unsigned long maxLogSize;
- /* Whether to cache build failures. */
- bool cacheFailure;
- /* How often (in seconds) to poll for locks. */
- unsigned int pollInterval;
- /* Whether to check if new GC roots can in fact be found by the
- garbage collector. */
- bool checkRootReachability;
- /* Whether the garbage collector should keep outputs of live
- derivations. */
- bool gcKeepOutputs;
- /* Whether the garbage collector should keep derivers of live
- paths. */
- bool gcKeepDerivations;
- /* Whether to automatically replace files with identical contents
- with hard links. */
- bool autoOptimiseStore;
- /* Whether to add derivations as a dependency of user environments
- (to prevent them from being GCed). */
- bool envKeepDerivations;
- /* Whether to lock the Nix client and worker to the same CPU. */
- bool lockCPU;
- /* Whether to show a stack trace if Nix evaluation fails. */
- bool showTrace;
- private:
- SettingsMap settings, overrides;
- void _get(string & res, const string & name);
- void _get(bool & res, const string & name);
- void _get(StringSet & res, const string & name);
- void _get(Strings & res, const string & name);
- template<class N> void _get(N & res, const string & name);
- };
- // FIXME: don't use a global variable.
- extern Settings settings;
- extern const string nixVersion;
- }
|