diff options
Diffstat (limited to 'src/libstore/globals.hh')
-rw-r--r-- | src/libstore/globals.hh | 223 |
1 files changed, 148 insertions, 75 deletions
diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index 1c0877a5e1e9..1fb196db2924 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -2,118 +2,191 @@ #include "types.hh" +#include <map> + namespace nix { -/* Path names. */ +struct Settings { + + typedef std::map<string, string> SettingsMap; + + Settings(); + + void processEnvironment(); + + void loadConfFile(); + + void set(const string & name, const string & value); + + void update(); + + string pack(); + + SettingsMap getOverrides(); + + /* The directory where we store sources and derived files. */ + Path nixStore; + + Path nixDataDir; /* !!! fix */ + + /* 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; + + /* 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; + + /* 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; -/* nixStore is the directory where we generally store atomic and - derived files. */ -extern string nixStore; + /* Maximum number of parallel build jobs. 0 means unlimited. */ + unsigned int maxBuildJobs; -extern string nixDataDir; /* !!! fix */ + /* 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; -/* nixLogDir is the directory where we log various operations. */ -extern string nixLogDir; + /* Read-only mode. Don't copy stuff to the store, don't change + the database. */ + bool readOnlyMode; -/* nixStateDir is the directory where state is stored. */ -extern string nixStateDir; + /* The canonical system name, as returned by config.guess. */ + string thisSystem; -/* nixDBPath is the path name of our Berkeley DB environment. */ -extern string nixDBPath; + /* 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; -/* nixConfDir is the directory where configuration files are - stored. */ -extern string nixConfDir; + /* The maximum duration in seconds that a builder can run. 0 + means infinity. */ + time_t buildTimeout; -/* nixLibexecDir is the directory where internal helper programs are - stored. */ -extern string nixLibexecDir; + /* 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; -/* nixBinDir is the directory where the main programs are stored. */ -extern string nixBinDir; + /* 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: -/* Misc. global flags. */ + @ build-started <drvpath> <outpath> <system> <logfile> + @ build-failed <drvpath> <outpath> <exitcode> <error text> + @ build-succeeded <drvpath> <outpath> + @ substituter-started <outpath> <substituter> + @ substituter-failed <outpath> <exitcode> <error text> + @ substituter-succeeded <outpath> -/* Whether to keep temporary directories of failed builds. */ -extern bool keepFailed; + Best combined with --no-build-output, otherwise stderr might + conceivably contain lines in this format printed by the + builders. */ + bool printBuildTrace; -/* Whether to keep building subgoals when a sibling (another subgoal - of the same goal) fails. */ -extern bool keepGoing; + /* Amount of reserved space for the garbage collector + (/nix/var/nix/db/reserved). */ + off_t reservedSize; -/* Whether, if we cannot realise the known closure corresponding to a - derivation, we should try to normalise the derivation instead. */ -extern bool tryFallback; + /* Whether SQLite should use fsync. */ + bool fsyncMetadata; -/* Verbosity level for build output. */ -extern Verbosity buildVerbosity; + /* Whether SQLite should use WAL mode. */ + bool useSQLiteWAL; -/* Maximum number of parallel build jobs. 0 means unlimited. */ -extern unsigned int maxBuildJobs; + /* Whether to call sync() before registering a path as valid. */ + bool syncBeforeRegistering; -/* 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. */ -extern unsigned int buildCores; + /* Whether to use substitutes. */ + bool useSubstitutes; -/* Read-only mode. Don't copy stuff to the store, don't change the - database. */ -extern bool readOnlyMode; + /* The Unix group that contains the build users. */ + string buildUsersGroup; -/* The canonical system name, as returned by config.guess. */ -extern string thisSystem; + /* Whether to build in chroot. */ + bool useChroot; -/* The maximum time in seconds that a builer can go without producing - any output on stdout/stderr before it is killed. 0 means - infinity. */ -extern time_t maxSilentTime; + /* The directories from the host filesystem to be included in the + chroot. */ + PathSet dirsInChroot; -/* The maximum duration in seconds that a builder can run. 0 means - infinity. */ -extern time_t buildTimeout; + /* Whether to impersonate a Linux 2.6 machine on newer kernels. */ + bool impersonateLinux26; -/* 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. */ -extern Paths substituters; + /* Whether to store build logs. */ + bool keepLog; -/* Whether to use build hooks (for distributed builds). Sometimes - users want to disable this from the command-line. */ -extern bool useBuildHook; + /* Whether to compress logs. */ + bool compressLog; -/* 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: + /* Whether to cache build failures. */ + bool cacheFailure; - @ build-started <drvpath> <outpath> <system> <logfile> - @ build-failed <drvpath> <outpath> <exitcode> <error text> - @ build-succeeded <drvpath> <outpath> - @ substituter-started <outpath> <substituter> - @ substituter-failed <outpath> <exitcode> <error text> - @ substituter-succeeded <outpath> + /* How often (in seconds) to poll for locks. */ + unsigned int pollInterval; - Best combined with --no-build-output, otherwise stderr might - conceivably contain lines in this format printed by the builders. -*/ -extern bool printBuildTrace; + /* 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; -Strings querySetting(const string & name, const Strings & def); + /* Whether the garbage collector should keep derivers of live + paths. */ + bool gcKeepDerivations; -string querySetting(const string & name, const string & def); + /* Whether to automatically replace files with identical contents + with hard links. */ + bool autoOptimiseStore; -bool queryBoolSetting(const string & name, bool def); + /* Whether to add derivations as a dependency of user environments + (to prevent them from being GCed). */ + bool envKeepDerivations; -unsigned int queryIntSetting(const string & name, unsigned int def); +private: + SettingsMap settings, overrides; -void overrideSetting(const string & name, const Strings & value); + void get(string & res, const string & name); + void get(bool & res, const string & name); + void get(PathSet & res, const string & name); + template<class N> void get(N & res, const string & name); +}; -void reloadSettings(); -void setDefaultsFromEnvironment(); +// FIXME: don't use a global variable. +extern Settings settings; } |