I have set up a minimal example of this problem in this repository.
The nix-build command fails with the following output:
$ nix-build
these derivations will be built:
/nix/store/g21v1n0da8lpgdfj117mqds5darpznr8-zig-test-pkg.drv
building '/nix/store/g21v1n0da8lpgdfj117mqds5darpznr8-zig-test-pkg.drv'...
unpacking sources
unpacking source archive /nix/store/dk1kxqq0qrisf7c8qnzqbvkzvpza7z60-source
source root is source
patching sources
building
error: AccessDenied
builder for '/nix/store/g21v1n0da8lpgdfj117mqds5darpznr8-zig-test-pkg.drv' failed with exit code 1
error: build of '/nix/store/g21v1n0da8lpgdfj117mqds5darpznr8-zig-test-pkg.drv' failed
Using a specific cache directory (doing mktemp -d) has the same error.
I tried then using both Zig versions packaged at the nixpkgs-unstable and nixpkgs-20.03 repositories (0.6.0 and 0.5.0 respectively) and it outputs a different error message:
Unable to create builtin.zig: access denied
Is there any pointer that could help finding out why does this happen?
EDIT: I tested using a Nix single-user installation (in Fedora) and it works correctly there.
I believe what is happening is the cache system is unable to detect a global writable directory to use as the cache directory, and so this can be worked around by passing the XDG_CACHE_HOME environment variable. However I would like to leave this issue open because the error message you are getting here is not clear enough or helpful enough to figure out what to do.
Setting the XDG_CACHE_HOME environment variable fixed the issue. Thanks!
I just ran into the same issue, but I'm having some trouble working around it. If I just set XDG_CACHE_HOME = "xdg_cache"; in the derivation, then I get the following error (which I can reproduce by running XDG_CACHE_HOME=xdg_cache zig build):
Semantic Analysis [1785/2702] xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'position_independent_code' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:94:5: note: previous definition here
pub const position_independent_code = false;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:94:5: note: imported definition here
pub const position_independent_code = false;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'is_test' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:6:5: note: previous definition here
pub const is_test = false;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:6:5: note: imported definition here
pub const is_test = false;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'link_libc' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:90:5: note: previous definition here
pub const link_libc = false;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:90:5: note: imported definition here
pub const link_libc = false;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'code_model' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:96:5: note: previous definition here
pub const code_model = CodeModel.default;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:96:5: note: imported definition here
pub const code_model = CodeModel.default;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'object_format' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:88:5: note: previous definition here
pub const object_format = ObjectFormat.elf;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:88:5: note: imported definition here
pub const object_format = ObjectFormat.elf;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'cpu' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:11:5: note: previous definition here
pub const cpu: Cpu = Cpu{
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:11:5: note: imported definition here
pub const cpu: Cpu = Cpu{
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'link_mode' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:5:5: note: previous definition here
pub const link_mode = LinkMode.Static;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:5:5: note: imported definition here
pub const link_mode = LinkMode.Static;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'arch' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:9:5: note: previous definition here
pub const arch = Arch.x86_64;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:9:5: note: imported definition here
pub const arch = Arch.x86_64;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'valgrind_support' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:93:5: note: previous definition here
pub const valgrind_support = true;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:93:5: note: imported definition here
pub const valgrind_support = true;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'endian' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:3:5: note: previous definition here
pub const endian = Endian.Little;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:3:5: note: imported definition here
pub const endian = Endian.Little;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'mode' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:89:5: note: previous definition here
pub const mode = Mode.Debug;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:89:5: note: imported definition here
pub const mode = Mode.Debug;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'link_libcpp' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:91:5: note: previous definition here
pub const link_libcpp = false;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:91:5: note: imported definition here
pub const link_libcpp = false;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'strip_debug_info' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:95:5: note: previous definition here
pub const strip_debug_info = false;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:95:5: note: imported definition here
pub const strip_debug_info = false;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'os' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:66:5: note: previous definition here
pub const os = Os{
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:66:5: note: imported definition here
pub const os = Os{
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'single_threaded' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:7:5: note: previous definition here
pub const single_threaded = false;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:7:5: note: imported definition here
pub const single_threaded = false;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'abi' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:10:5: note: previous definition here
pub const abi = Abi.gnu;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:10:5: note: imported definition here
pub const abi = Abi.gnu;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'have_error_return_tracing' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:92:5: note: previous definition here
pub const have_error_return_tracing = true;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:92:5: note: imported definition here
pub const have_error_return_tracing = true;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:1:1: error: import of 'output_mode' overrides existing definition
usingnamespace @import("std").builtin;
^
xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:4:5: note: previous definition here
pub const output_mode = OutputMode.Exe;
^
./xdg_cache/zig/stage1/builtin/jmRBCd4AyERA5o7HYFf523L0RAI9CzIipRGexN55bQJ6EmMsKi7hami1cMajjVpa/builtin.zig:4:5: note: imported definition here
pub const output_mode = OutputMode.Exe;
^
It appears to be due to something trying to import bulitin.zig twice, but I'm not sure what's going on there. Strangely, if I do XDG_CACHE_HOME=$(mktemp -d) zig build it works fine. I haven't quite figured out how to get that to run inside the Nix builder yet - @arqv what exactly did you do to fix it in your repo?
I used XDG_CACHE_HOME = ".cache" in my derivation, but I tested the command XDG_CACHE_HOME=xdg_cache zig build and it worked using a Zig binary from the latest commit, but failed in 0.6.0. I had to make a buildPhase like this to have it work with 0.6.0. (disabling both configure and install phases)
export XDG_CACHE_HOME=$(mktemp -d)
mkdir $out
zig build install --prefix $out -Drelease-safe=true
rm -rf $XDG_CACHE_HOME
With the latest version I tested (0.6.0+91a1c20e7), this is not needed and setting XDG_CACHE_HOME = "xdg_cache"; in the derivation works fine.
Most helpful comment
I used
XDG_CACHE_HOME = ".cache"in my derivation, but I tested the commandXDG_CACHE_HOME=xdg_cache zig buildand it worked using a Zig binary from the latest commit, but failed in 0.6.0. I had to make abuildPhaselike this to have it work with 0.6.0. (disabling both configure and install phases)With the latest version I tested (
0.6.0+91a1c20e7), this is not needed and settingXDG_CACHE_HOME = "xdg_cache";in the derivation works fine.