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 10 months 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