// SPDX-License-Identifier: LGPL-3.0-only // SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts® // The build helper consumers load through // #pragma crafter dependency "https://forgejo.catcrafts.net/Catcrafts/Crafter.Debug.git" project "tooling/project.cpp" // A separate project file because a pragma dependency is built for the host // and gets none of the consumer's args, so the root project.cpp could not // tell this load from the one that builds the library for the target. // // No dependency on Crafter.Build, as in Crafter.LintRules: this module only // ever runs inside a crafter-build process, which provides the symbols, and // the host build already sees the Crafter.Build modules through the PCM cache // crafter-build keeps for project files. Nor on anything else: whatever this // imported would be built on every load of every consumer. import std; import Crafter.Build; namespace fs = std::filesystem; using namespace Crafter; namespace { // This file's directory. crafter-build runs a pragma's project file from // the root of the clone for a git source, and from the file's own // directory for a local path, so "./" and relative sources named the // repository root for every consumer using the URL: "No module // declaration found in .../interfaces/Crafter.Debug.Build.cppm". Spelled // from the file itself, they mean this directory in both cases. fs::path Here() { return fs::path(std::source_location::current().file_name()).parent_path(); } } extern "C" Configuration CrafterBuildProject(std::span args) { Configuration cfg; cfg.path = Here(); cfg.name = "Crafter.Debug.Build"; cfg.outputName = "Crafter.Debug.Build"; cfg.type = ConfigurationType::LibraryStatic; ApplyStandardArgs(cfg, args); std::array interfaces = { Here() / "interfaces" / "Crafter.Debug.Build" }; std::array implementations = {}; cfg.GetInterfacesAndImplementations(interfaces, implementations); return cfg; }