diff --git a/.version b/.version index bcec02eeb96..0958964f67a 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.30.1 +2.30.2 diff --git a/nix-meson-build-support/default-system-cpu/meson.build b/nix-meson-build-support/default-system-cpu/meson.build new file mode 100644 index 00000000000..4a0e89e10c8 --- /dev/null +++ b/nix-meson-build-support/default-system-cpu/meson.build @@ -0,0 +1,10 @@ +powerpc_system_cpus = [ 'ppc64', 'ppc' ] + +nix_system_cpu = {'ppc64' : 'powerpc64', 'ppc' : 'powerpc', 'x86' : 'i686'}.get( + host_machine.cpu_family(), + host_machine.cpu_family(), +) + +if powerpc_system_cpus.contains(host_machine.cpu_family()) and host_machine.endian() == 'little' + nix_system_cpu += 'le' +endif diff --git a/src/libstore/meson.build b/src/libstore/meson.build index 2aff1729077..fe705a35e1e 100644 --- a/src/libstore/meson.build +++ b/src/libstore/meson.build @@ -25,10 +25,12 @@ configdata_priv.set_quoted('PACKAGE_VERSION', meson.project_version()) configdata_priv.set_quoted('DETERMINATE_NIX_VERSION', fs.read('../../.version-determinate').strip()) +subdir('nix-meson-build-support/default-system-cpu') + # Used in public header. configdata_pub.set_quoted( 'NIX_LOCAL_SYSTEM', - host_machine.cpu_family() + '-' + host_machine.system(), + nix_system_cpu + '-' + host_machine.system(), description : 'This is the system name Nix expects for local running instance of Nix.\n\n' + 'See the "system" setting for additional details', diff --git a/src/libstore/unix/build/darwin-derivation-builder.cc b/src/libstore/unix/build/darwin-derivation-builder.cc index da8617c34da..d2532512698 100644 --- a/src/libstore/unix/build/darwin-derivation-builder.cc +++ b/src/libstore/unix/build/darwin-derivation-builder.cc @@ -160,6 +160,8 @@ struct DarwinDerivationBuilder : DerivationBuilderImpl if (getEnv("_NIX_TEST_NO_SANDBOX") != "1") { Strings sandboxArgs; + sandboxArgs.push_back("_NIX_BUILD_TOP"); + sandboxArgs.push_back(tmpDir); sandboxArgs.push_back("_GLOBAL_TMP_DIR"); sandboxArgs.push_back(globalTmpDir); if (drvOptions.allowLocalNetworking) { diff --git a/src/libstore/unix/build/sandbox-defaults.sb b/src/libstore/unix/build/sandbox-defaults.sb index 15cd6daf5e0..dd6a064c1bd 100644 --- a/src/libstore/unix/build/sandbox-defaults.sb +++ b/src/libstore/unix/build/sandbox-defaults.sb @@ -29,12 +29,14 @@ R""( ; Allow getpwuid. (allow mach-lookup (global-name "com.apple.system.opendirectoryd.libinfo")) -; Access to /tmp. +; Access to /tmp and the build directory. ; The network-outbound/network-inbound ones are for unix domain sockets, which ; we allow access to in TMPDIR (but if we allow them more broadly, you could in ; theory escape the sandbox) (allow file* process-exec network-outbound network-inbound - (literal "/tmp") (subpath TMPDIR)) + (literal "/tmp") + (subpath TMPDIR) + (subpath (param "_NIX_BUILD_TOP"))) ; Some packages like to read the system version. (allow file-read* diff --git a/src/nix/main.cc b/src/nix/main.cc index 256263ad65f..05eddb91fc5 100644 --- a/src/nix/main.cc +++ b/src/nix/main.cc @@ -213,6 +213,14 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs, virtual RootArgs lowdown. */ static void showHelp(std::vector subcommand, NixArgs & toplevel) { + // Check for aliases if subcommand has exactly one element + if (subcommand.size() == 1) { + auto alias = toplevel.aliases.find(subcommand[0]); + if (alias != toplevel.aliases.end()) { + subcommand = alias->second.replacement; + } + } + auto mdName = subcommand.empty() ? "nix" : fmt("nix3-%s", concatStringsSep("-", subcommand)); evalSettings.restrictEval = false; diff --git a/tests/functional/meson.build b/tests/functional/meson.build index cd1bc631978..bd87e9b349d 100644 --- a/tests/functional/meson.build +++ b/tests/functional/meson.build @@ -23,6 +23,8 @@ dot = find_program('dot', native : true, required : false) nix_bin_dir = fs.parent(nix.full_path()) +subdir('nix-meson-build-support/default-system-cpu') + test_confdata = { 'bindir': nix_bin_dir, 'coreutils': fs.parent(coreutils.full_path()), @@ -30,7 +32,7 @@ test_confdata = { 'bash': bash.full_path(), 'sandbox_shell': busybox.found() ? busybox.full_path() : '', 'PACKAGE_VERSION': meson.project_version(), - 'system': host_machine.cpu_family() + '-' + host_machine.system(), + 'system': nix_system_cpu + '-' + host_machine.system(), } # Just configures `common/vars-and-functions.sh.in`. diff --git a/tests/functional/misc.sh b/tests/functional/misc.sh index cb4d4139f4c..b94a5fc578c 100755 --- a/tests/functional/misc.sh +++ b/tests/functional/misc.sh @@ -44,3 +44,7 @@ out="$(expectStderr 0 nix-instantiate --option foobar baz --expr '{}')" out="$(expectStderr 0 nix-instantiate '{}' --option foobar baz --expr )" [[ "$(echo "$out" | grep foobar | wc -l)" = 1 ]] + +if [[ $(uname) = Linux && $(uname -m) = i686 ]]; then + [[ $(nix config show system) = i686-linux ]] +fi diff --git a/tests/functional/nix-meson-build-support b/tests/functional/nix-meson-build-support new file mode 120000 index 00000000000..0b140f56bde --- /dev/null +++ b/tests/functional/nix-meson-build-support @@ -0,0 +1 @@ +../../nix-meson-build-support \ No newline at end of file diff --git a/tests/functional/package.nix b/tests/functional/package.nix index 799026ebe62..36926e0a0be 100644 --- a/tests/functional/package.nix +++ b/tests/functional/package.nix @@ -42,6 +42,7 @@ mkMesonDerivation ( workDir = ./.; fileset = fileset.unions [ + ../../nix-meson-build-support ../../scripts/nix-profile.sh.in ../../.version ../../tests/functional