Files
dpm-core-ng/include/internal/context.hpp
Christopher M. Punches 1cd79e79f3 Documentation generation produces consumable output in one command
Building the docs target now generates the reference and leaves finished
documents in the build tree's docs directory: pdf/ holds the compiled
PDF, html/ holds the browsable reference when that format is enabled.
Doxygen and LaTeX work under docs/tmp/, which clean removes along with
the rest of the tree.

The reference has a front page and a structure. The markdown documents
in docs/ are part of the input, OVERVIEW.md becomes the landing page,
and the rest follow as chapters ahead of the namespace, class, and file
reference. The module contract, previously a plain comment block
invisible to Doxygen, is a page in its own right.

Struct and enum members throughout the headers carry documentation, on
their own lines above what they describe.
2026-08-15 20:19:26 -04:00

86 lines
2.5 KiB
C++

/**
* @file context.hpp
* @brief The libdpm-core context: configuration, logging, module registry
*
* @copyright Copyright (c) 2026 SILO GROUP LLC
* @author Chris Punches <chris.punches@silogroup.org>
*
* Part of the Dark Horse Linux Package Manager (DPM)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#pragma once
#include <dpm/core.h>
#include <map>
#include <memory>
#include <string>
#include "internal/modules.hpp"
/** @brief A libdpm-core context: configuration, logging, module registry */
struct dpm_ctx {
/** Directory the .conf files were read from. */
std::string config_dir;
/** Directory modules are loaded from. */
std::string module_path;
/** Target root for package operations. */
std::string root;
/** Messages above this level are dropped. */
int log_level = DPM_LOG_INFO;
/** Whether to append messages to log_file. */
bool write_to_log = false;
/** Path of the log file. */
std::string log_file;
/** Configuration store, addressed as config[module][section][key]. */
std::map<std::string,
std::map<std::string,
std::map<std::string, std::string>>> config;
/** Validated modules keyed by name; each is loaded at most once. */
std::map<std::string, std::unique_ptr<dpm_module>> modules;
/** Reason for the most recent failure. */
std::string last_error;
};
namespace dpmcore {
/**
* @brief Records a failure reason on the context
*
* @param ctx The libdpm-core context; NULL is a no-op
* @param msg The failure description
*/
void set_error(dpm_ctx* ctx, const std::string& msg);
/**
* @brief Loads all configuration files into the context
*
* Parses every .conf file in the context's configuration directory
* into the context's configuration store.
*
* @param ctx The libdpm-core context
*/
void load_config_dir(dpm_ctx* ctx);
} // namespace dpmcore