From 815e5b1be29175c0d5fbd7c7c775f91e9c40bc9b Mon Sep 17 00:00:00 2001 From: Amadey Vorontsov Date: Fri, 15 May 2026 22:57:05 +0000 Subject: [PATCH] [M7] generated flake.nix moves to build/flake.nix --- flake.nix | 12 ++++++++++++ src/cli/cmd_build.cpp | 4 ++-- src/cli/cmd_test.cpp | 4 ++-- src/cli/run.cpp | 2 +- tests/cmd_build.cpp | 10 +++++----- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/flake.nix b/flake.nix index 205e09c..45e0b04 100644 --- a/flake.nix +++ b/flake.nix @@ -10,7 +10,19 @@ flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; + cargoxx = pkgs.gcc15Stdenv.mkDerivation { + # Fill rules here + }; + buildCppPackage = attrs: pkgs.gcc15Stdenv.mkDerivation { + pname = attrs.pname; + version = attrs.version; + buildPhase = '' + cargoxx build + ''; + }; in { + lib.buildCppPackage = buildCppPackage; + package = cargoxx; devShell = pkgs.gcc15Stdenv.mkDerivation { name = "shell"; version = "1.0"; diff --git a/src/cli/cmd_build.cpp b/src/cli/cmd_build.cpp index 442090f..acede92 100644 --- a/src/cli/cmd_build.cpp +++ b/src/cli/cmd_build.cpp @@ -109,7 +109,7 @@ namespace { auto run_nix_cmake(const fs::path& project_root, const std::vector& cmake_args, std::string_view phase) -> util::Result { - std::vector args{"develop", "--command", "cmake"}; + std::vector args{"develop", "path:./build", "--command", "cmake"}; args.insert(args.end(), cmake_args.begin(), cmake_args.end()); auto r = exec::run("nix", args, exec::ExecOptions{ @@ -233,7 +233,7 @@ auto cmd_build(const fs::path& project_root, bool no_build, bool release, project_root / "build")); } - if (auto r = write_text(project_root / "flake.nix", flake_text); !r) { + if (auto r = write_text(project_root / "build" / "flake.nix", flake_text); !r) { return std::unexpected(r.error()); } if (auto r = write_text(project_root / "build" / "CMakeLists.txt", cmake_text); !r) { diff --git a/src/cli/cmd_test.cpp b/src/cli/cmd_test.cpp index f35f89b..a2fd8d7 100644 --- a/src/cli/cmd_test.cpp +++ b/src/cli/cmd_test.cpp @@ -19,8 +19,8 @@ auto cmd_test(const fs::path& project_root, bool release, const auto build_dir = std::format("build/{}", profile); auto r = exec::run("nix", - {"develop", "--command", "ctest", "--test-dir", build_dir, - "--output-on-failure"}, + {"develop", "path:./build", "--command", "ctest", + "--test-dir", build_dir, "--output-on-failure"}, exec::ExecOptions{ .cwd = project_root, .env_overrides = {}, diff --git a/src/cli/run.cpp b/src/cli/run.cpp index 1ed5903..5920047 100644 --- a/src/cli/run.cpp +++ b/src/cli/run.cpp @@ -115,7 +115,7 @@ auto run(int argc, char** argv) -> int { return 1; } if (build_no_build) { - std::cout << " Generated flake.nix, build/CMakeLists.txt, Cargoxx.lock\n"; + std::cout << " Generated build/flake.nix, build/CMakeLists.txt, Cargoxx.lock\n"; } else { std::cout << " Built\n"; } diff --git a/tests/cmd_build.cpp b/tests/cmd_build.cpp index 70811e6..e975ad1 100644 --- a/tests/cmd_build.cpp +++ b/tests/cmd_build.cpp @@ -64,7 +64,7 @@ TEST_CASE("cmd_build generates files for a no-deps binary project", auto r = cmd_build(root, true, false, std::nullopt, overlay_path(parent)); REQUIRE(r.has_value()); - REQUIRE(std::filesystem::exists(root / "flake.nix")); + REQUIRE(std::filesystem::exists(root / "build" / "flake.nix")); REQUIRE(std::filesystem::exists(root / "build" / "CMakeLists.txt")); REQUIRE(std::filesystem::exists(root / "Cargoxx.lock")); @@ -73,7 +73,7 @@ TEST_CASE("cmd_build generates files for a no-deps binary project", REQUIRE(cmake_text.find("add_executable(hello_bin ../src/main.cpp)") != std::string::npos); - auto flake_text = read_file(root / "flake.nix"); + auto flake_text = read_file(root / "build" / "flake.nix"); REQUIRE(flake_text.find("description = \"hello\";") != std::string::npos); REQUIRE(flake_text.find("github:NixOS/nixpkgs/nixos-unstable") != std::string::npos); } @@ -113,7 +113,7 @@ TEST_CASE("cmd_build resolves a manually-seeded dep into find_package + targets" REQUIRE(cmake_text.find("find_package(fmt CONFIG REQUIRED)") != std::string::npos); REQUIRE(cmake_text.find("fmt::fmt") != std::string::npos); - auto flake_text = read_file(root / "flake.nix"); + auto flake_text = read_file(root / "build" / "flake.nix"); REQUIRE(flake_text.find("pkgs.fmt_10") != std::string::npos); } @@ -197,11 +197,11 @@ TEST_CASE("cmd_build is idempotent — second run produces identical files", REQUIRE(cmd_build(root, true, false, std::nullopt, overlay_path(parent)).has_value()); auto first_cmake = read_file(root / "build" / "CMakeLists.txt"); - auto first_flake = read_file(root / "flake.nix"); + auto first_flake = read_file(root / "build" / "flake.nix"); auto first_lock = read_file(root / "Cargoxx.lock"); REQUIRE(cmd_build(root, true, false, std::nullopt, overlay_path(parent)).has_value()); REQUIRE(read_file(root / "build" / "CMakeLists.txt") == first_cmake); - REQUIRE(read_file(root / "flake.nix") == first_flake); + REQUIRE(read_file(root / "build" / "flake.nix") == first_flake); REQUIRE(read_file(root / "Cargoxx.lock") == first_lock); }