zig icon indicating copy to clipboard operation
zig copied to clipboard

OptionStep duplicates enum declarations

Open presentfactory opened this issue 3 years ago • 0 comments

Zig Version

0.10.0-dev.3880+e2bb92b2e

Steps to Reproduce and Observed Behavior

When an enum type is used in more than one OptionStep duplicate declarations are created in the resulting package file.

Example build.zig:

const std = @import("std");

const Test = enum {
    foo,
    bar,
};

pub fn build(b: *std.build.Builder) void {
    const target = b.standardTargetOptions(.{});
    const mode = b.standardReleaseOptions();

    const exe = b.addExecutable("test", "src/main.zig");
    exe.setTarget(target);
    exe.setBuildMode(mode);
    exe.install();

    const options = b.addOptions();

    options.addOption(Test, "test", Test.foo);
    options.addOption(Test, "test2", Test.bar);

    exe.addPackage(options.getPackage("build_options"));
}

Example main.zig:

const std = @import("std");
const build_options = @import("build_options");

pub fn main() !void {}

Result when attempting to build:

/home/lemon/Work/test/zig-cache/options/FLMHGC7KS_hpZubXc9fAQ0ueMUeW2_q2PTXiHOHNSJ4IdU0nScj_Eu4pP4S4Y1y9:6:5: error: redeclaration of 'build.Test'
pub const @"build.Test" = enum {
~~~~^~~~~
/home/lemon/Work/test/zig-cache/options/FLMHGC7KS_hpZubXc9fAQ0ueMUeW2_q2PTXiHOHNSJ4IdU0nScj_Eu4pP4S4Y1y9:1:5: note: other declaration here
pub const @"build.Test" = enum {
~~~~^~~~~

Expected Behavior

Expected it to compile properly, some way to deduplicate the enums is probably needed rather than just blindly adding a new enum declaration to the file every time.

presentfactory avatar Nov 01 '22 18:11 presentfactory