zig icon indicating copy to clipboard operation
zig copied to clipboard

Arrays of Types in Build Step Options Results in Badly Generated Code

Open edqx opened this issue 1 year ago • 1 comments

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: image

Expected behaviour is probably that the EngineModule enum is properly copied to the options.zig file inside zig-cache when using options.

edqx avatar Apr 14 '24 20:04 edqx

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. image

edqx avatar Apr 14 '24 20:04 edqx