diff --git a/doc/manual/source/release-notes/rl-2.28.md b/doc/manual/source/release-notes/rl-2.28.md index 6da09546e..b2fd26054 100644 --- a/doc/manual/source/release-notes/rl-2.28.md +++ b/doc/manual/source/release-notes/rl-2.28.md @@ -46,7 +46,7 @@ This completes the infrastructure overhaul for the [RFC 132](https://github.com/ @@ @@ -#include "config.hh" +// Additionally renamed to distinguish from components' config headers. - +#include "nix/util/configuration.hh" + +#include "nix/main/configuration.hh" @@ @@ -#if HAVE_ACL_SUPPORT +#if NIX_SUPPORT_ACL diff --git a/maintainers/flake-module.nix b/maintainers/flake-module.nix index 224f47268..052d66010 100644 --- a/maintainers/flake-module.nix +++ b/maintainers/flake-module.nix @@ -180,8 +180,14 @@ ''^src/libflake/lockfile\.cc$'' ''^src/libflake/include/nix/flake/lockfile\.hh$'' ''^src/libflake/url-name\.cc$'' + ''^src/libmain/args/root\.hh$'' + ''^src/libmain/args\.cc$'' + ''^src/libmain/args\.hh$'' ''^src/libmain/common-args\.cc$'' ''^src/libmain/include/nix/main/common-args\.hh$'' + ''^src/libmain/include/nix/main/config-impl\.hh$'' + ''^src/libmain/config\.cc$'' + ''^src/libmain/include/nix/main/config\.hh$'' ''^src/libmain/loggers\.cc$'' ''^src/libmain/include/nix/main/loggers\.hh$'' ''^src/libmain/progress-bar\.cc$'' @@ -314,9 +320,6 @@ ''^src/libutil-c/nix_api_util_internal\.h$'' ''^src/libutil/archive\.cc$'' ''^src/libutil/include/nix/util/archive\.hh$'' - ''^src/libutil/args\.cc$'' - ''^src/libutil/include/nix/util/args\.hh$'' - ''^src/libutil/include/nix/util/args/root\.hh$'' ''^src/libutil/include/nix/util/callback\.hh$'' ''^src/libutil/canon-path\.cc$'' ''^src/libutil/include/nix/util/canon-path\.hh$'' @@ -324,9 +327,6 @@ ''^src/libutil/include/nix/util/closure\.hh$'' ''^src/libutil/include/nix/util/comparator\.hh$'' ''^src/libutil/compute-levels\.cc$'' - ''^src/libutil/include/nix/util/config-impl\.hh$'' - ''^src/libutil/configuration\.cc$'' - ''^src/libutil/include/nix/util/configuration\.hh$'' ''^src/libutil/current-process\.cc$'' ''^src/libutil/include/nix/util/current-process\.hh$'' ''^src/libutil/english\.cc$'' diff --git a/src/libcmd/common-eval-args.cc b/src/libcmd/common-eval-args.cc index d275beb12..14d2acf4a 100644 --- a/src/libcmd/common-eval-args.cc +++ b/src/libcmd/common-eval-args.cc @@ -2,7 +2,7 @@ #include "nix/expr/eval-settings.hh" #include "nix/cmd/common-eval-args.hh" #include "nix/main/shared.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/store/filetransfer.hh" #include "nix/expr/eval.hh" #include "nix/fetchers/fetchers.hh" diff --git a/src/libcmd/include/nix/cmd/command.hh b/src/libcmd/include/nix/cmd/command.hh index 20cd1abc1..148a36a96 100644 --- a/src/libcmd/include/nix/cmd/command.hh +++ b/src/libcmd/include/nix/cmd/command.hh @@ -2,7 +2,7 @@ ///@file #include "nix/cmd/installable-value.hh" -#include "nix/util/args.hh" +#include "nix/main/args.hh" #include "nix/cmd/common-eval-args.hh" #include "nix/store/path.hh" #include "nix/flake/lockfile.hh" diff --git a/src/libcmd/include/nix/cmd/common-eval-args.hh b/src/libcmd/include/nix/cmd/common-eval-args.hh index 6f3367e58..f137d8a67 100644 --- a/src/libcmd/include/nix/cmd/common-eval-args.hh +++ b/src/libcmd/include/nix/cmd/common-eval-args.hh @@ -1,7 +1,7 @@ #pragma once ///@file -#include "nix/util/args.hh" +#include "nix/main/args.hh" #include "nix/util/canon-path.hh" #include "nix/main/common-args.hh" #include "nix/expr/search-path.hh" diff --git a/src/libcmd/include/nix/cmd/compatibility-settings.hh b/src/libcmd/include/nix/cmd/compatibility-settings.hh index c7061a0a1..bfc699e8a 100644 --- a/src/libcmd/include/nix/cmd/compatibility-settings.hh +++ b/src/libcmd/include/nix/cmd/compatibility-settings.hh @@ -1,5 +1,5 @@ #pragma once -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" namespace nix { struct CompatibilitySettings : public Config diff --git a/src/libcmd/include/nix/cmd/misc-store-flags.hh b/src/libcmd/include/nix/cmd/misc-store-flags.hh index c9467ad8e..863d9973d 100644 --- a/src/libcmd/include/nix/cmd/misc-store-flags.hh +++ b/src/libcmd/include/nix/cmd/misc-store-flags.hh @@ -1,4 +1,4 @@ -#include "nix/util/args.hh" +#include "nix/main/args.hh" #include "nix/store/content-address.hh" namespace nix::flag { diff --git a/src/libexpr-c/nix_api_external.cc b/src/libexpr-c/nix_api_external.cc index 04d2e52b5..2d1f743b4 100644 --- a/src/libexpr-c/nix_api_external.cc +++ b/src/libexpr-c/nix_api_external.cc @@ -1,5 +1,5 @@ #include "nix/expr/attr-set.hh" -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" #include "nix/expr/eval.hh" #include "nix/store/globals.hh" #include "nix/expr/value.hh" diff --git a/src/libexpr-c/nix_api_value.cc b/src/libexpr-c/nix_api_value.cc index 298d94845..3f8bc36b5 100644 --- a/src/libexpr-c/nix_api_value.cc +++ b/src/libexpr-c/nix_api_value.cc @@ -1,5 +1,5 @@ #include "nix/expr/attr-set.hh" -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" #include "nix/expr/eval.hh" #include "nix/store/globals.hh" #include "nix/store/path.hh" diff --git a/src/libexpr/eval-gc.cc b/src/libexpr/eval-gc.cc index bec668001..21426a40f 100644 --- a/src/libexpr/eval-gc.cc +++ b/src/libexpr/eval-gc.cc @@ -1,7 +1,7 @@ #include "nix/util/error.hh" #include "nix/util/environment-variables.hh" #include "nix/expr/eval-settings.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/util/serialise.hh" #include "nix/expr/eval-gc.hh" diff --git a/src/libexpr/include/nix/expr/eval-settings.hh b/src/libexpr/include/nix/expr/eval-settings.hh index 8d3db59b3..b1f79f32a 100644 --- a/src/libexpr/include/nix/expr/eval-settings.hh +++ b/src/libexpr/include/nix/expr/eval-settings.hh @@ -1,7 +1,7 @@ #pragma once ///@file -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" #include "nix/util/source-path.hh" namespace nix { diff --git a/src/libexpr/include/nix/expr/eval.hh b/src/libexpr/include/nix/expr/eval.hh index ffbc84bcd..da8921f2a 100644 --- a/src/libexpr/include/nix/expr/eval.hh +++ b/src/libexpr/include/nix/expr/eval.hh @@ -8,7 +8,7 @@ #include "nix/expr/value.hh" #include "nix/expr/nixexpr.hh" #include "nix/expr/symbol-table.hh" -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" #include "nix/util/experimental-features.hh" #include "nix/util/position.hh" #include "nix/util/pos-table.hh" diff --git a/src/libfetchers/include/nix/fetchers/fetch-settings.hh b/src/libfetchers/include/nix/fetchers/fetch-settings.hh index 7bd04db53..955939626 100644 --- a/src/libfetchers/include/nix/fetchers/fetch-settings.hh +++ b/src/libfetchers/include/nix/fetchers/fetch-settings.hh @@ -2,7 +2,7 @@ ///@file #include "nix/util/types.hh" -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" #include "nix/util/ref.hh" #include "nix/util/sync.hh" diff --git a/src/libflake/config.cc b/src/libflake/config.cc index 030104e7f..74598865c 100644 --- a/src/libflake/config.cc +++ b/src/libflake/config.cc @@ -1,5 +1,5 @@ #include "nix/util/users.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/flake/settings.hh" #include "nix/flake/flake.hh" diff --git a/src/libflake/include/nix/flake/settings.hh b/src/libflake/include/nix/flake/settings.hh index b3bffad4c..61d8abcba 100644 --- a/src/libflake/include/nix/flake/settings.hh +++ b/src/libflake/include/nix/flake/settings.hh @@ -1,7 +1,7 @@ #pragma once ///@file -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" #include diff --git a/src/libutil/args.cc b/src/libmain/args.cc similarity index 99% rename from src/libutil/args.cc rename to src/libmain/args.cc index d8d004e6f..237717ef6 100644 --- a/src/libutil/args.cc +++ b/src/libmain/args.cc @@ -1,5 +1,5 @@ -#include "nix/util/args.hh" -#include "nix/util/args/root.hh" +#include "nix/main/args.hh" +#include "nix/main/args/root.hh" #include "nix/util/hash.hh" #include "nix/util/environment-variables.hh" #include "nix/util/signals.hh" diff --git a/src/libmain/common-args.cc b/src/libmain/common-args.cc index dcf252a4f..6a1ba2d61 100644 --- a/src/libmain/common-args.cc +++ b/src/libmain/common-args.cc @@ -1,8 +1,8 @@ #include #include "nix/main/common-args.hh" -#include "nix/util/args/root.hh" -#include "nix/util/config-global.hh" +#include "nix/main/args/root.hh" +#include "nix/main/config-global.hh" #include "nix/store/globals.hh" #include "nix/util/logging.hh" #include "nix/main/loggers.hh" diff --git a/src/libutil/config-global.cc b/src/libmain/config-global.cc similarity index 97% rename from src/libutil/config-global.cc rename to src/libmain/config-global.cc index 94d715443..7bce2b65c 100644 --- a/src/libutil/config-global.cc +++ b/src/libmain/config-global.cc @@ -1,4 +1,4 @@ -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include diff --git a/src/libmain/config-upstream.cc b/src/libmain/config-upstream.cc new file mode 100644 index 000000000..60dce874c --- /dev/null +++ b/src/libmain/config-upstream.cc @@ -0,0 +1,44 @@ +namespace nix { + +#include "nix/util/fs-sink.hh" +#include "nix/util/logging.hh" + +struct LoggerSettings : Config +{ + Setting showTrace{ + this, + false, + "show-trace", + R"( + Whether Nix should print out a stack trace in case of Nix + expression evaluation errors. + )"}; +}; + +static GlobalConfig::Register r1(&restoreSinkSettings); + +struct RestoreSinkSettings : Config +{ + Setting preallocateContents{ + this, false, "preallocate-contents", "Whether to preallocate files when writing objects with known size."}; +}; + +static GlobalConfig::Register rLoggerSettings(&loggerSettings); + +struct ArchiveSettings : Config +{ + Setting useCaseHack + { + this, +#if __APPLE__ + true, +#else + false, +#endif + "use-case-hack", "Whether to enable a macOS-specific hack for dealing with file name case collisions." + }; +}; + +static GlobalConfig::Register rArchiveSettings(&archiveSettings); + +} diff --git a/src/libutil/configuration.cc b/src/libmain/configuration.cc similarity index 94% rename from src/libutil/configuration.cc rename to src/libmain/configuration.cc index 314ae34db..4c7d1180c 100644 --- a/src/libutil/configuration.cc +++ b/src/libmain/configuration.cc @@ -1,12 +1,12 @@ -#include "nix/util/configuration.hh" -#include "nix/util/args.hh" -#include "nix/util/abstract-setting-to-json.hh" +#include "nix/main/configuration.hh" +#include "nix/main/args.hh" +#include "nix/main/abstract-setting-to-json.hh" #include "nix/util/environment-variables.hh" #include "nix/util/experimental-features.hh" #include "nix/util/util.hh" #include "nix/util/file-system.hh" -#include "nix/util/config-impl.hh" +#include "nix/main/config-impl.hh" #include @@ -464,26 +464,4 @@ void OptionalPathSetting::operator =(const std::optional & v) this->assign(v); } -bool ExperimentalFeatureSettings::isEnabled(const ExperimentalFeature & feature) const -{ - auto & f = experimentalFeatures.get(); - return std::find(f.begin(), f.end(), feature) != f.end(); -} - -void ExperimentalFeatureSettings::require(const ExperimentalFeature & feature) const -{ - if (!isEnabled(feature)) - throw MissingExperimentalFeature(feature); -} - -bool ExperimentalFeatureSettings::isEnabled(const std::optional & feature) const -{ - return !feature || isEnabled(*feature); -} - -void ExperimentalFeatureSettings::require(const std::optional & feature) const -{ - if (feature) require(*feature); -} - } diff --git a/src/libutil/include/nix/util/abstract-setting-to-json.hh b/src/libmain/include/nix/main/abstract-setting-to-json.hh similarity index 91% rename from src/libutil/include/nix/util/abstract-setting-to-json.hh rename to src/libmain/include/nix/main/abstract-setting-to-json.hh index 2848f8afe..3252fb1f7 100644 --- a/src/libutil/include/nix/util/abstract-setting-to-json.hh +++ b/src/libmain/include/nix/main/abstract-setting-to-json.hh @@ -2,7 +2,7 @@ ///@file #include -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" #include "nix/util/json-utils.hh" namespace nix { diff --git a/src/libutil/include/nix/util/args.hh b/src/libmain/include/nix/main/args.hh similarity index 100% rename from src/libutil/include/nix/util/args.hh rename to src/libmain/include/nix/main/args.hh diff --git a/src/libutil/include/nix/util/args/root.hh b/src/libmain/include/nix/main/args/root.hh similarity index 98% rename from src/libutil/include/nix/util/args/root.hh rename to src/libmain/include/nix/main/args/root.hh index cdc9be613..ec58f6bf0 100644 --- a/src/libutil/include/nix/util/args/root.hh +++ b/src/libmain/include/nix/main/args/root.hh @@ -1,6 +1,6 @@ #pragma once -#include "nix/util/args.hh" +#include "nix/main/args.hh" namespace nix { diff --git a/src/libmain/include/nix/main/common-args.hh b/src/libmain/include/nix/main/common-args.hh index cc6d3d3f0..1ed78dd46 100644 --- a/src/libmain/include/nix/main/common-args.hh +++ b/src/libmain/include/nix/main/common-args.hh @@ -1,7 +1,7 @@ #pragma once ///@file -#include "nix/util/args.hh" +#include "nix/main/args.hh" #include "nix/util/repair-flag.hh" namespace nix { diff --git a/src/libutil/include/nix/util/config-global.hh b/src/libmain/include/nix/main/config-global.hh similarity index 95% rename from src/libutil/include/nix/util/config-global.hh rename to src/libmain/include/nix/main/config-global.hh index 44f89e06d..874141624 100644 --- a/src/libutil/include/nix/util/config-global.hh +++ b/src/libmain/include/nix/main/config-global.hh @@ -1,7 +1,7 @@ #pragma once ///@file -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" namespace nix { diff --git a/src/libutil/include/nix/util/config-impl.hh b/src/libmain/include/nix/main/config-impl.hh similarity index 98% rename from src/libutil/include/nix/util/config-impl.hh rename to src/libmain/include/nix/main/config-impl.hh index 15e0c9554..203a69866 100644 --- a/src/libutil/include/nix/util/config-impl.hh +++ b/src/libmain/include/nix/main/config-impl.hh @@ -12,8 +12,8 @@ * instantiation. */ -#include "nix/util/configuration.hh" -#include "nix/util/args.hh" +#include "nix/main/configuration.hh" +#include "nix/main/args.hh" namespace nix { diff --git a/src/libutil/include/nix/util/configuration.hh b/src/libmain/include/nix/main/configuration.hh similarity index 98% rename from src/libutil/include/nix/util/configuration.hh rename to src/libmain/include/nix/main/configuration.hh index dc939dfce..e70c2f29f 100644 --- a/src/libutil/include/nix/util/configuration.hh +++ b/src/libmain/include/nix/main/configuration.hh @@ -258,10 +258,6 @@ public: , documentDefault(documentDefault) { } - operator const T &() const { return value; } - operator T &() { return value; } - const T & get() const { return value; } - T & get() { return value; } template bool operator ==(const U & v2) const { return value == v2; } template diff --git a/src/libmain/include/nix/main/meson.build b/src/libmain/include/nix/main/meson.build index 992a5ff0e..0231fa279 100644 --- a/src/libmain/include/nix/main/meson.build +++ b/src/libmain/include/nix/main/meson.build @@ -3,7 +3,13 @@ include_dirs = [include_directories('../..')] headers = files( + 'abstract-setting-to-json.hh', + 'args.hh', + 'args/root.hh', 'common-args.hh', + 'config-impl.hh', + 'config-global.hh', + 'configuration.hh', 'loggers.hh', 'plugin.hh', 'progress-bar.hh', diff --git a/src/libmain/include/nix/main/shared.hh b/src/libmain/include/nix/main/shared.hh index 2ff57135b..aaef4c673 100644 --- a/src/libmain/include/nix/main/shared.hh +++ b/src/libmain/include/nix/main/shared.hh @@ -3,8 +3,8 @@ #include "nix/util/file-descriptor.hh" #include "nix/util/processes.hh" -#include "nix/util/args.hh" -#include "nix/util/args/root.hh" +#include "nix/main/args.hh" +#include "nix/main/args/root.hh" #include "nix/main/common-args.hh" #include "nix/store/path.hh" #include "nix/store/derived-path.hh" diff --git a/src/libmain/meson.build b/src/libmain/meson.build index 65fcb6239..90c1fb0a8 100644 --- a/src/libmain/meson.build +++ b/src/libmain/meson.build @@ -54,7 +54,9 @@ config_priv_h = configure_file( subdir('nix-meson-build-support/common') sources = files( + 'args.cc', 'common-args.cc', + 'configuration.cc', 'loggers.cc', 'plugin.cc', 'progress-bar.cc', diff --git a/src/libmain/plugin.cc b/src/libmain/plugin.cc index db686a251..38f4614c2 100644 --- a/src/libmain/plugin.cc +++ b/src/libmain/plugin.cc @@ -4,7 +4,7 @@ #include -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/util/signals.hh" #include "nix/util/file-system.hh" diff --git a/src/libstore/build/derivation-goal.cc b/src/libstore/build/derivation-goal.cc index 5c8b75cb9..030c0ee9a 100644 --- a/src/libstore/build/derivation-goal.cc +++ b/src/libstore/build/derivation-goal.cc @@ -5,7 +5,7 @@ # include "nix/store/build/derivation-builder.hh" #endif #include "nix/util/processes.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/store/build/worker.hh" #include "nix/util/util.hh" #include "nix/util/compression.hh" diff --git a/src/libstore/content-address.cc b/src/libstore/content-address.cc index 5d27c4136..217969d88 100644 --- a/src/libstore/content-address.cc +++ b/src/libstore/content-address.cc @@ -1,6 +1,6 @@ -#include "nix/util/args.hh" #include "nix/store/content-address.hh" #include "nix/util/split.hh" +#include "nix/util/experimental-feature-settings.hh" namespace nix { diff --git a/src/libstore/daemon.cc b/src/libstore/daemon.cc index 8f7514273..9df8ecb0b 100644 --- a/src/libstore/daemon.cc +++ b/src/libstore/daemon.cc @@ -13,7 +13,7 @@ #include "nix/util/finally.hh" #include "nix/util/archive.hh" #include "nix/store/derivations.hh" -#include "nix/util/args.hh" +#include "nix/main/args.hh" #include "nix/util/git.hh" #ifndef _WIN32 // TODO need graceful async exit support on Windows? diff --git a/src/libstore/filetransfer.cc b/src/libstore/filetransfer.cc index 1d2280a2d..e6524bea6 100644 --- a/src/libstore/filetransfer.cc +++ b/src/libstore/filetransfer.cc @@ -1,6 +1,6 @@ #include "nix/store/filetransfer.hh" #include "nix/store/globals.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/store/store-api.hh" #include "nix/store/s3.hh" #include "nix/util/compression.hh" diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc index c2ecc4964..16865e39a 100644 --- a/src/libstore/globals.cc +++ b/src/libstore/globals.cc @@ -1,9 +1,9 @@ #include "nix/store/globals.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/util/current-process.hh" #include "nix/util/archive.hh" -#include "nix/util/args.hh" -#include "nix/util/abstract-setting-to-json.hh" +#include "nix/main/args.hh" +#include "nix/main/abstract-setting-to-json.hh" #include "nix/util/compute-levels.hh" #include "nix/util/signals.hh" @@ -29,7 +29,7 @@ # include "nix/util/processes.hh" #endif -#include "nix/util/config-impl.hh" +#include "nix/main/config-impl.hh" #ifdef __APPLE__ #include diff --git a/src/libstore/include/nix/store/config-parse-impl.hh b/src/libstore/include/nix/store/config-parse-impl.hh index 1e7300c8f..a40528b1b 100644 --- a/src/libstore/include/nix/store/config-parse-impl.hh +++ b/src/libstore/include/nix/store/config-parse-impl.hh @@ -5,7 +5,7 @@ #include "nix/store/config-parse.hh" #include "nix/util/util.hh" -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" namespace nix::config { diff --git a/src/libstore/include/nix/store/derived-path.hh b/src/libstore/include/nix/store/derived-path.hh index 64189bd41..7aad8c310 100644 --- a/src/libstore/include/nix/store/derived-path.hh +++ b/src/libstore/include/nix/store/derived-path.hh @@ -3,8 +3,8 @@ #include "nix/store/path.hh" #include "nix/store/outputs-spec.hh" -#include "nix/util/configuration.hh" #include "nix/util/ref.hh" +#include "nix/util/experimental-feature-settings.hh" #include diff --git a/src/libstore/include/nix/store/filetransfer.hh b/src/libstore/include/nix/store/filetransfer.hh index 10c3ec7ef..dc586abef 100644 --- a/src/libstore/include/nix/store/filetransfer.hh +++ b/src/libstore/include/nix/store/filetransfer.hh @@ -7,7 +7,7 @@ #include "nix/util/logging.hh" #include "nix/util/types.hh" #include "nix/util/ref.hh" -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" #include "nix/util/serialise.hh" namespace nix { diff --git a/src/libstore/include/nix/store/globals.hh b/src/libstore/include/nix/store/globals.hh index 3a677216a..335a456a8 100644 --- a/src/libstore/include/nix/store/globals.hh +++ b/src/libstore/include/nix/store/globals.hh @@ -7,7 +7,7 @@ #include #include "nix/util/types.hh" -#include "nix/util/configuration.hh" +#include "nix/main/configuration.hh" #include "nix/util/environment-variables.hh" #include "nix/util/experimental-features.hh" #include "nix/util/users.hh" diff --git a/src/libstore/unix/build/hook-instance.cc b/src/libstore/unix/build/hook-instance.cc index 3713f7c86..894628e91 100644 --- a/src/libstore/unix/build/hook-instance.cc +++ b/src/libstore/unix/build/hook-instance.cc @@ -1,5 +1,5 @@ #include "nix/store/globals.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/store/build/hook-instance.hh" #include "nix/util/file-system.hh" #include "nix/store/build/child.hh" diff --git a/src/libutil-c/nix_api_util.cc b/src/libutil-c/nix_api_util.cc index 2254f18fa..8664e3a89 100644 --- a/src/libutil-c/nix_api_util.cc +++ b/src/libutil-c/nix_api_util.cc @@ -1,5 +1,5 @@ #include "nix_api_util.h" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/util/error.hh" #include "nix_api_util_internal.h" #include "nix/util/util.hh" diff --git a/src/libutil-tests/args.cc b/src/libutil-tests/args.cc index f5ad43a55..8c2c59281 100644 --- a/src/libutil-tests/args.cc +++ b/src/libutil-tests/args.cc @@ -1,4 +1,4 @@ -#include "nix/util/args.hh" +#include "nix/main/args.hh" #include "nix/util/fs-sink.hh" #include diff --git a/src/libutil-tests/config.cc b/src/libutil-tests/config.cc index bc7db251b..fa4c79dbb 100644 --- a/src/libutil-tests/config.cc +++ b/src/libutil-tests/config.cc @@ -1,5 +1,5 @@ -#include "nix/util/configuration.hh" -#include "nix/util/args.hh" +#include "nix/main/configuration.hh" +#include "nix/main/args.hh" #include #include diff --git a/src/libutil-tests/nix_api_util.cc b/src/libutil-tests/nix_api_util.cc index baaaa81fc..4ef2c748b 100644 --- a/src/libutil-tests/nix_api_util.cc +++ b/src/libutil-tests/nix_api_util.cc @@ -1,5 +1,5 @@ -#include "nix/util/config-global.hh" -#include "nix/util/args.hh" +#include "nix/main/config-global.hh" +#include "nix/main/args.hh" #include "nix_api_util.h" #include "nix_api_util_internal.h" #include "nix/util/tests/nix_api_util.hh" diff --git a/src/libutil/archive.cc b/src/libutil/archive.cc index 9069e4b49..a9864a70f 100644 --- a/src/libutil/archive.cc +++ b/src/libutil/archive.cc @@ -6,7 +6,6 @@ #include // for strcasecmp #include "nix/util/archive.hh" -#include "nix/util/config-global.hh" #include "nix/util/posix-source-accessor.hh" #include "nix/util/source-path.hh" #include "nix/util/file-system.hh" @@ -14,21 +13,19 @@ namespace nix { -struct ArchiveSettings : Config -{ - Setting useCaseHack{this, - #ifdef __APPLE__ - true, - #else - false, - #endif - "use-case-hack", - "Whether to enable a macOS-specific hack for dealing with file name case collisions."}; +const extern ArchiveSettings archiveSettingsDefaults = { + .useCaseHack = { + .value = +#ifdef __APPLE__ + true +#else + false +#endif + }, }; -static ArchiveSettings archiveSettings; +ArchiveSettings archiveSettings = archiveSettingsDefaults; -static GlobalConfig::Register rArchiveSettings(&archiveSettings); PathFilter defaultPathFilter = [](const Path &) { return true; }; diff --git a/src/libutil/experimental-feature-settings.cc b/src/libutil/experimental-feature-settings.cc new file mode 100644 index 000000000..1b728e5b4 --- /dev/null +++ b/src/libutil/experimental-feature-settings.cc @@ -0,0 +1,37 @@ +#include "nix/util/experimental-feature-settings.hh" + +namespace nix { + +const extern ExperimentalFeatureSettings experimentalFeatureSettingsDefaults = {{ + .experimentalFeatures = + { + .value = {}, + }, +}}; + +ExperimentalFeatureSettings experimentalFeatureSettings = experimentalFeatureSettingsDefaults; + +bool ExperimentalFeatureSettings::isEnabled(const ExperimentalFeature & feature) const +{ + auto & f = experimentalFeatures.get(); + return std::find(f.begin(), f.end(), feature) != f.end(); +} + +void ExperimentalFeatureSettings::require(const ExperimentalFeature & feature) const +{ + if (!isEnabled(feature)) + throw MissingExperimentalFeature(feature); +} + +bool ExperimentalFeatureSettings::isEnabled(const std::optional & feature) const +{ + return !feature || isEnabled(*feature); +} + +void ExperimentalFeatureSettings::require(const std::optional & feature) const +{ + if (feature) + require(*feature); +} + +}; diff --git a/src/libutil/fs-sink.cc b/src/libutil/fs-sink.cc index 7b8fc3b2a..92992c5e6 100644 --- a/src/libutil/fs-sink.cc +++ b/src/libutil/fs-sink.cc @@ -1,7 +1,6 @@ #include #include "nix/util/error.hh" -#include "nix/util/config-global.hh" #include "nix/util/fs-sink.hh" #ifdef _WIN32 @@ -62,15 +61,7 @@ void copyRecursive( } -struct RestoreSinkSettings : Config -{ - Setting preallocateContents{this, false, "preallocate-contents", - "Whether to preallocate files when writing objects with known size."}; -}; - -static RestoreSinkSettings restoreSinkSettings; - -static GlobalConfig::Register r1(&restoreSinkSettings); +RestoreSinkSettings restoreSinkSettings; static std::filesystem::path append(const std::filesystem::path & src, const CanonPath & path) { diff --git a/src/libutil/git.cc b/src/libutil/git.cc index edeef71b7..5a545d187 100644 --- a/src/libutil/git.cc +++ b/src/libutil/git.cc @@ -6,7 +6,7 @@ #include // for strcasecmp #include "nix/util/signals.hh" -#include "nix/util/configuration.hh" +#include "nix/util/config-abstract.hh" #include "nix/util/hash.hh" #include "nix/util/git.hh" diff --git a/src/libutil/hash.cc b/src/libutil/hash.cc index 015cc77a0..8dfce6b62 100644 --- a/src/libutil/hash.cc +++ b/src/libutil/hash.cc @@ -6,10 +6,9 @@ #include #include -#include "nix/util/args.hh" #include "nix/util/hash.hh" #include "nix/util/archive.hh" -#include "nix/util/configuration.hh" +#include "nix/util/experimental-feature-settings.hh" #include "nix/util/split.hh" #include diff --git a/src/libutil/include/nix/util/archive.hh b/src/libutil/include/nix/util/archive.hh index ae3274fa6..2c45872d4 100644 --- a/src/libutil/include/nix/util/archive.hh +++ b/src/libutil/include/nix/util/archive.hh @@ -2,12 +2,23 @@ ///@file #include "nix/util/types.hh" +#include "nix/util/config-abstract.hh" #include "nix/util/serialise.hh" #include "nix/util/fs-sink.hh" namespace nix { +template class R> +struct ArchiveSettings +{ + R useCaseHack; +}; + +const extern ArchiveSettings archiveSettingsDefaults; + +// FIXME: don't use a global variable. +extern ArchiveSettings archiveSettings; /** * dumpPath creates a Nix archive of the specified path. diff --git a/src/libutil/include/nix/util/experimental-feature-settings.hh b/src/libutil/include/nix/util/experimental-feature-settings.hh new file mode 100644 index 000000000..f00277588 --- /dev/null +++ b/src/libutil/include/nix/util/experimental-feature-settings.hh @@ -0,0 +1,45 @@ +#pragma once +///@file + +#include "nix/util/experimental-features.hh" + +namespace nix { + +template class R> +struct ExperimentalFeatureSettingsT +{ + R> experimentalFeatures; +}; + +struct ExperimentalFeatureSettings : ExperimentalFeatureSettingsT +{ + /** + * Check whether the given experimental feature is enabled. + */ + bool isEnabled(const ExperimentalFeature &) const; + + /** + * Require an experimental feature be enabled, throwing an error if it is + * not. + */ + void require(const ExperimentalFeature &) const; + + /** + * `std::nullopt` pointer means no feature, which means there is nothing that could be + * disabled, and so the function returns true in that case. + */ + bool isEnabled(const std::optional &) const; + + /** + * `std::nullopt` pointer means no feature, which means there is nothing that could be + * disabled, and so the function does nothing in that case. + */ + void require(const std::optional &) const; +}; + +const extern ExperimentalFeatureSettings experimentalFeatureSettingsDefaults; + +// FIXME: don't use a global variable. +extern ExperimentalFeatureSettings experimentalFeatureSettings; + +} diff --git a/src/libutil/include/nix/util/experimental-features.hh b/src/libutil/include/nix/util/experimental-features.hh index 8923517ba..29e52fa4c 100644 --- a/src/libutil/include/nix/util/experimental-features.hh +++ b/src/libutil/include/nix/util/experimental-features.hh @@ -1,6 +1,7 @@ #pragma once ///@file +#include "nix/util/config-abstract.hh" #include "nix/util/error.hh" #include "nix/util/types.hh" diff --git a/src/libutil/include/nix/util/fs-sink.hh b/src/libutil/include/nix/util/fs-sink.hh index 1c34fba93..b159e975a 100644 --- a/src/libutil/include/nix/util/fs-sink.hh +++ b/src/libutil/include/nix/util/fs-sink.hh @@ -1,12 +1,20 @@ #pragma once ///@file +#include "nix/util/config-abstract.hh" #include "nix/util/serialise.hh" #include "nix/util/source-accessor.hh" #include "nix/util/file-system.hh" namespace nix { +template class R> +struct RestoreSinkSettings +{ + R preallocateContents; +}; + + /** * Actions on an open regular file in the process of creating it. * @@ -22,6 +30,8 @@ struct CreateRegularFileSink : Sink virtual void preallocateContents(uint64_t size) { }; }; +// FIXME: don't use a global variable. +extern RestoreSinkSettings restoreSinkSettings; struct FileSystemObjectSink { diff --git a/src/libutil/include/nix/util/git.hh b/src/libutil/include/nix/util/git.hh index 9bdb30bb9..50f9c017c 100644 --- a/src/libutil/include/nix/util/git.hh +++ b/src/libutil/include/nix/util/git.hh @@ -6,6 +6,7 @@ #include #include "nix/util/types.hh" +#include "nix/util/experimental-feature-settings.hh" #include "nix/util/serialise.hh" #include "nix/util/hash.hh" #include "nix/util/source-path.hh" diff --git a/src/libutil/include/nix/util/hash.hh b/src/libutil/include/nix/util/hash.hh index 0ae0a9564..08647d69b 100644 --- a/src/libutil/include/nix/util/hash.hh +++ b/src/libutil/include/nix/util/hash.hh @@ -1,7 +1,7 @@ #pragma once ///@file -#include "nix/util/configuration.hh" +#include "nix/util/experimental-feature-settings.hh" #include "nix/util/types.hh" #include "nix/util/serialise.hh" #include "nix/util/file-system.hh" diff --git a/src/libutil/include/nix/util/logging.hh b/src/libutil/include/nix/util/logging.hh index 9210229bf..1129f0b33 100644 --- a/src/libutil/include/nix/util/logging.hh +++ b/src/libutil/include/nix/util/logging.hh @@ -2,7 +2,7 @@ ///@file #include "nix/util/error.hh" -#include "nix/util/configuration.hh" +#include "nix/util/config-abstract.hh" #include "nix/util/file-descriptor.hh" #include "nix/util/finally.hh" @@ -41,17 +41,13 @@ typedef enum { typedef uint64_t ActivityId; -struct LoggerSettings : Config +template class R> +struct LoggerSettings { - Setting showTrace{ - this, false, "show-trace", - R"( - Whether Nix should print out a stack trace in case of Nix - expression evaluation errors. - )"}; + R showTrace; }; -extern LoggerSettings loggerSettings; +extern LoggerSettings loggerSettings; class Logger { diff --git a/src/libutil/include/nix/util/meson.build b/src/libutil/include/nix/util/meson.build index d1a683e44..3690b5135 100644 --- a/src/libutil/include/nix/util/meson.build +++ b/src/libutil/include/nix/util/meson.build @@ -3,11 +3,8 @@ include_dirs = [include_directories('../..')] headers = files( - 'abstract-setting-to-json.hh', 'ansicolor.hh', 'archive.hh', - 'args.hh', - 'args/root.hh', 'callback.hh', 'canon-path.hh', 'checked-arithmetic.hh', @@ -17,9 +14,7 @@ headers = files( 'compression.hh', 'compute-levels.hh', 'config-abstract.hh', - 'config-global.hh', - 'config-impl.hh', - 'configuration.hh', + 'config-abstract.hh', 'current-process.hh', 'english.hh', 'environment-variables.hh', diff --git a/src/libutil/logging.cc b/src/libutil/logging.cc index 1d0d3fa2d..507d3d4e4 100644 --- a/src/libutil/logging.cc +++ b/src/libutil/logging.cc @@ -3,7 +3,6 @@ #include "nix/util/environment-variables.hh" #include "nix/util/terminal.hh" #include "nix/util/util.hh" -#include "nix/util/config-global.hh" #include "nix/util/source-path.hh" #include "nix/util/position.hh" #include "nix/util/sync.hh" @@ -15,9 +14,13 @@ namespace nix { -LoggerSettings loggerSettings; +const extern LoggerSettings loggerSettingsDefaults = { + .showTrace = { + .value = false + }, +}; -static GlobalConfig::Register rLoggerSettings(&loggerSettings); +LoggerSettings loggerSettings = loggerSettingsDefaults; static thread_local ActivityId curActivity = 0; diff --git a/src/libutil/meson.build b/src/libutil/meson.build index b0e82e46a..198d5d6e2 100644 --- a/src/libutil/meson.build +++ b/src/libutil/meson.build @@ -110,18 +110,16 @@ subdir('nix-meson-build-support/common') sources = [config_priv_h] + files( 'archive.cc', - 'args.cc', 'canon-path.cc', 'compression.cc', 'compute-levels.cc', - 'configuration.cc', - 'config-global.cc', 'current-process.cc', 'english.cc', 'environment-variables.cc', 'error.cc', 'executable-path.cc', 'exit.cc', + 'experimental-feature-settings.cc', 'experimental-features.cc', 'file-content-address.cc', 'file-descriptor.cc', diff --git a/src/nix/config.cc b/src/nix/config.cc index cd82b08a6..2887a8a2f 100644 --- a/src/nix/config.cc +++ b/src/nix/config.cc @@ -2,7 +2,7 @@ #include "nix/main/common-args.hh" #include "nix/main/shared.hh" #include "nix/store/store-api.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include diff --git a/src/nix/develop.cc b/src/nix/develop.cc index 37bce6ca0..7569a1006 100644 --- a/src/nix/develop.cc +++ b/src/nix/develop.cc @@ -1,4 +1,4 @@ -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/expr/eval.hh" #include "nix/cmd/installable-flake.hh" #include "nix/cmd/command-installable-value.hh" diff --git a/src/nix/main.cc b/src/nix/main.cc index 551f1918a..05feee9e0 100644 --- a/src/nix/main.cc +++ b/src/nix/main.cc @@ -1,4 +1,4 @@ -#include "nix/util/args/root.hh" +#include "nix/main/args/root.hh" #include "nix/util/current-process.hh" #include "nix/cmd/command.hh" #include "nix/main/common-args.hh" diff --git a/src/nix/repl.cc b/src/nix/repl.cc index ca470e99b..25b6d21b5 100644 --- a/src/nix/repl.cc +++ b/src/nix/repl.cc @@ -1,6 +1,6 @@ #include "nix/expr/eval.hh" #include "nix/expr/eval-settings.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/store/globals.hh" #include "nix/store/store-open.hh" #include "nix/cmd/command.hh" diff --git a/src/nix/unix/daemon.cc b/src/nix/unix/daemon.cc index 98f302300..8a47aeae9 100644 --- a/src/nix/unix/daemon.cc +++ b/src/nix/unix/daemon.cc @@ -11,7 +11,7 @@ #include "nix/util/serialise.hh" #include "nix/util/archive.hh" #include "nix/store/globals.hh" -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/store/derivations.hh" #include "nix/util/finally.hh" #include "nix/cmd/legacy.hh" diff --git a/tests/functional/plugins/plugintest.cc b/tests/functional/plugins/plugintest.cc index 0b1a01a6e..78ffde539 100644 --- a/tests/functional/plugins/plugintest.cc +++ b/tests/functional/plugins/plugintest.cc @@ -1,4 +1,4 @@ -#include "nix/util/config-global.hh" +#include "nix/main/config-global.hh" #include "nix/expr/primops.hh" using namespace nix;