From 9fd63daff2f6b98c2c7ae3a2668d2fa6cd92589c Mon Sep 17 00:00:00 2001 From: Jan200101 Date: Thu, 12 Mar 2026 21:23:28 +0100 Subject: [PATCH] std.Build.Step.ConfigHeader: handle leading whitespace for cmake --- lib/std/Build/Step/ConfigHeader.zig | 14 ++++++++++++-- test/standalone/cmakedefine/config.h.in | 4 ++++ test/standalone/cmakedefine/expected_config.h | 4 ++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/std/Build/Step/ConfigHeader.zig b/lib/std/Build/Step/ConfigHeader.zig index 34d24f26d0..f9d792a268 100644 --- a/lib/std/Build/Step/ConfigHeader.zig +++ b/lib/std/Build/Step/ConfigHeader.zig @@ -420,12 +420,21 @@ fn render_cmake( }; defer allocator.free(line); - if (!std.mem.startsWith(u8, line, "#")) { + const line_start = std.mem.findNone(u8, line, " \t\r") orelse { + try bw.writeAll(line); + if (!last_line) try bw.writeByte('\n'); + continue; + }; + const whitespace_prefix = line[0..line_start]; + const trimmed_line = line[line_start..]; + + if (!std.mem.startsWith(u8, trimmed_line, "#")) { try bw.writeAll(line); if (!last_line) try bw.writeByte('\n'); continue; } - var it = std.mem.tokenizeAny(u8, line[1..], " \t\r"); + + var it = std.mem.tokenizeAny(u8, trimmed_line[1..], " \t\r"); const cmakedefine = it.next().?; if (!std.mem.eql(u8, cmakedefine, "cmakedefine") and !std.mem.eql(u8, cmakedefine, "cmakedefine01")) @@ -502,6 +511,7 @@ fn render_cmake( value = Value{ .ident = it.rest() }; } + try bw.writeAll(whitespace_prefix); try renderValueC(bw, name, value); } diff --git a/test/standalone/cmakedefine/config.h.in b/test/standalone/cmakedefine/config.h.in index f6f973d004..3f9c60c752 100644 --- a/test/standalone/cmakedefine/config.h.in +++ b/test/standalone/cmakedefine/config.h.in @@ -20,6 +20,10 @@ // 1 #cmakedefine stringval 1 +// whitespace test + #cmakedefine stringval 1 + #cmakedefine stringval 1 + // cmakedefine01 // 0 diff --git a/test/standalone/cmakedefine/expected_config.h b/test/standalone/cmakedefine/expected_config.h index b991727fff..9ebe80956e 100644 --- a/test/standalone/cmakedefine/expected_config.h +++ b/test/standalone/cmakedefine/expected_config.h @@ -20,6 +20,10 @@ // 1 #define stringval 1 +// whitespace test + #define stringval 1 + #define stringval 1 + // cmakedefine01 // 0