/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2024-2025 Red Hat, inc. * * Global configuration handling */ #pragma once #include #include #include #include #include #include "libcamera/internal/yaml_parser.h" namespace libcamera { class GlobalConfiguration { public: using Configuration = const YamlObject &; GlobalConfiguration(); unsigned int version() const; Configuration configuration() const; template std::optional option( const std::initializer_list confPath) const { const YamlObject *c = &configuration(); for (auto part : confPath) { c = &(*c)[part]; if (!*c) return {}; } return c->get(); } std::optional> listOption( const std::initializer_list confPath) const; std::optional envOption( const char *const envVariable, const std::initializer_list confPath) const; std::optional> envListOption( const char *const envVariable, const std::initializer_list confPath, const std::string delimiter = ":") const; private: bool loadFile(const std::filesystem::path &fileName); void load(); std::unique_ptr yamlConfiguration_ = std::make_unique(); }; } /* namespace libcamera */