zig
zig copied to clipboard
Arrays of Types in Build Step Options Results in Badly Generated Code
Zig Version
0.12.0-dev.3633+f7a76bdfe
Steps to Reproduce and Observed Behavior
My setup is as follows:
// src/BuildOptions.zig
pub const EngineModule = enum { ... };
// build.zig
const BuildOptions = @import("./src/BuildOptions.zig");
...
const buildOptions = b.addOptions();
buildOptions.addOption([]BuildOptions.EngineModule, "modules", ...);
...
projectExe.root_module.addOptions("build_options", buildOptions);
// src/main.zig
const BuildOptions = @import("./BuildOptions.zig");
const buildOptions: BuildOptions = @import("build_options");
...
This results in something akin to the following errors in the generated options.zig
file somewhere in zig-cache
:
zig-cache\c\1851a2fa7541ae7147214fe8bc710207\options.zig:11:31: error: use of undeclared identifier 'src'
pub const disabled_modules: []src.BuildOptions.EngineModule = &[_]src.BuildOptions.EngineModule {
Here's the generated code:
pub const disabled_modules: []src.BuildOptions.EngineModule = &[_]src.BuildOptions.EngineModule {
};
Expected Behavior
Presumably the build system is failing to recognise that EngineModule
is a symbol that needs to be referenced and contained within the options.zig
file, since it's inside an array. You can see this since other options have their types properly generated:
Expected behaviour is probably that the EngineModule
enum is properly copied to the options.zig
file inside zig-cache
when using options.
I should also note that the main.zig
code in this example is not correct in case anyone tries it to type an options import; you'll get. But that's just my bad.