/* Crafter® Build Copyright (C) 2026 Catcrafts® Catcrafts.net LGPL-3.0-only. */ import std; import Crafter.Build; #include "../_shared/TestUtil.h" namespace fs = std::filesystem; using namespace TestUtil; using namespace Crafter; int main() { try { fs::path src = fs::current_path() / "tests" / "Libraries" / "inner"; Configuration cfg = LoadFixture("Libraries", src); fs::path work = fs::current_path(); auto br = BuildOnce(cfg); if (!br.result.empty()) { std::println(std::cerr, "build failed:\n{}", br.result); return 1; } fs::path staticArchive = work / "mathlib" / "bin" / "MathLib-x86_64-pc-linux-gnu-native" / "libMathLib.a"; fs::path dynamicSO = work / "greetlib" / "bin" / "GreetLib-x86_64-pc-linux-gnu-native" / "libGreetLib.so"; fs::path artifact = work / "bin" / "libs-app-x86_64-pc-linux-gnu-native" / "libs-app"; if (!fs::exists(staticArchive)) { std::println(std::cerr, "static archive missing at {}", staticArchive.string()); return 1; } if (!fs::exists(dynamicSO)) { std::println(std::cerr, "dynamic .so missing at {}", dynamicSO.string()); return 1; } if (!fs::exists(artifact)) { std::println(std::cerr, "exe missing at {}", artifact.string()); return 1; } // Linked against the dynamic .so which lives in greetlib/bin/...; set // LD_LIBRARY_PATH explicitly for the artifact run. auto run = RunInDir(work, std::format( "LD_LIBRARY_PATH='{}' '{}'", dynamicSO.parent_path().string(), artifact.string())); if (run.exitCode != 0) { std::println(std::cerr, "artifact exited nonzero (rc={}):\n{}", run.exitCode, run.output); return 1; } if (run.output != "hi=42\n") { std::println(std::cerr, "output mismatch:\n expected: \"hi=42\\n\"\n got: {:?}", run.output); return 1; } return 0; } catch (const std::exception& e) { std::println(std::cerr, "test exception: {}", e.what()); return 1; } }