commit 565cfa04eb00125eae2ade200591d435f5a86ad0
parent 3e83f7bec7789fe584cd939e4a60f270a4c626ff
Author: Eamon Burns <eamon.r.burns@gmail.com>
Date: Wed, 7 Jan 2026 21:31:24 -0800
fix(build.zig): replace slashes in filepaths #37111
Problem:
`zig build` fails if `b.install_path` and `b.lib_dir` contain backslashes (on Windows).
Solution:
Replace backslashes (\) with forward slashes (/).
Diffstat:
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/build.zig b/build.zig
@@ -229,11 +229,13 @@ pub fn build(b: *std.Build) !void {
});
_ = gen_config.addCopyFile(sysconfig_step.getOutput(), "auto/config.h"); // run_preprocessor() workaronnd
+
_ = gen_config.add("auto/pathdef.h", b.fmt(
\\char *default_vim_dir = "{s}/share/nvim";
\\char *default_vimruntime_dir = "";
\\char *default_lib_dir = "{s}/nvim";
- , .{ b.install_path, b.lib_dir })); // b.lib_dir is typically b.install_path + "/lib" but may be overridden
+ // b.lib_dir is typically b.install_path + "/lib" but may be overridden
+ , .{ try replace_backslashes(b, b.install_path), try replace_backslashes(b, b.lib_dir) }));
const opt_version_string = b.option([]const u8, "version-string", "Override Neovim version string. Default is to find out with git.");
const version_medium = if (opt_version_string) |version_string| version_string else v: {
@@ -517,7 +519,9 @@ pub fn lua_version_info(b: *std.Build) []u8 {
, .{ v.major, v.minor, v.patch, v.prerelease.len > 0, v.api_level, v.api_level_compat, v.api_prerelease });
}
-fn esc(b: *std.Build, input: []const u8) ![]const u8 {
+/// Replace all backslashes in `input` with with forward slashes when the target is Windows.
+/// Returned memory is stored in `b.graph.arena`.
+fn replace_backslashes(b: *std.Build, input: []const u8) ![]const u8 {
return if (b.graph.host.result.os.tag == .windows)
std.mem.replaceOwned(u8, b.graph.arena, input, "\\", "/")
else
@@ -545,5 +549,5 @@ pub fn test_config(b: *std.Build) ![]u8 {
\\M.include_paths = _G.c_include_path or {{}}
\\
\\return M
- , .{ .bin_dir = try esc(b, b.install_path), .src_path = try esc(b, src_path) });
+ , .{ .bin_dir = try replace_backslashes(b, b.install_path), .src_path = try replace_backslashes(b, src_path) });
}