Skip to content

Commit a3b53ff

Browse files
committed
fix: ninja invocation — use shq() instead of hardcoded single quotes
ninja_backend.cppm used hardcoded single quotes for paths, which don't work on Windows (cmd.exe). Use shq() for cross-platform quoting. Also fix ninja binary lookup to use .exe on Windows.
1 parent 8bb8167 commit a3b53ff

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

src/build/ninja_backend.cppm

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -521,19 +521,33 @@ std::expected<BuildResult, BuildError> NinjaBackend::build(const BuildPlan& plan
521521
// -B<binutils-bin> flag we emit into cxxflags/ldflags (see
522522
// emit_ninja_string). No PATH injection needed here.
523523
std::filesystem::path ninjaBin;
524+
#if defined(_WIN32)
525+
if (auto nb = mcpp::xlings::paths::find_sibling_binary(
526+
plan.toolchain.binaryPath, "ninja", "ninja.exe")) {
527+
ninjaBin = *nb;
528+
}
529+
#else
524530
if (auto nb = mcpp::xlings::paths::find_sibling_binary(
525531
plan.toolchain.binaryPath, "ninja", "ninja")) {
526532
ninjaBin = *nb;
527533
}
534+
#endif
528535

536+
#if defined(_WIN32)
537+
// Windows: no quotes on first token (cmd.exe strips leading quotes),
538+
// use shq only for the -C argument which may contain spaces.
529539
std::string ninjaProgram =
530-
!ninjaBin.empty() ? std::format("'{}'", ninjaBin.string()) : std::string{"ninja"};
540+
!ninjaBin.empty() ? ninjaBin.string() : std::string{"ninja"};
541+
#else
542+
std::string ninjaProgram =
543+
!ninjaBin.empty() ? mcpp::xlings::shq(ninjaBin.string()) : std::string{"ninja"};
544+
#endif
531545

532546
// Record ninja binary for P0 fast-path cache.
533547
BuildResult r;
534548
r.ninjaProgram = ninjaProgram;
535549

536-
std::string cmd = std::format("{} -C '{}'", ninjaProgram, plan.outputDir.string());
550+
std::string cmd = std::format("{} -C {}", ninjaProgram, mcpp::xlings::shq(plan.outputDir.string()));
537551
if (opts.verbose)
538552
cmd += " -v";
539553
if (opts.parallelJobs)

0 commit comments

Comments
 (0)