[PATCH v6 16/16] config: Make configuration directories configurable
Milan Zamazal
mzamazal at redhat.com
Fri Dec 6 18:11:47 CET 2024
A newly introduced LIBCAMERA_CONFIG_DIR environment variable specifies a
directory or a list of directories separated by colons where to look for
the libcamera configuration file before trying the standard locations.
Signed-off-by: Milan Zamazal <mzamazal at redhat.com>
---
Documentation/runtime_configuration.rst | 5 +++++
src/libcamera/base/global_configuration.cpp | 17 +++++++++++------
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/Documentation/runtime_configuration.rst b/Documentation/runtime_configuration.rst
index 59211169..c73d02e3 100644
--- a/Documentation/runtime_configuration.rst
+++ b/Documentation/runtime_configuration.rst
@@ -19,6 +19,11 @@ order:
- LIBCAMERA_SYSCONF_DIR/configuration.yaml
- /etc/libcamera/configuration.yaml
+If LIBCAMERA_CONFIG_DIR environment variable is non-empty then it
+specifies additional directories where to look for the configuration
+file, before looking at the standard locations. It can be a single
+directory or multiple directories separated by colons.
+
The default name of the configuration file, configuration.yaml, can be
overridden in LIBCAMERA_CONFIG_NAME environment variable. The variable
can specify just an alternative configuration file name to be looked up
diff --git a/src/libcamera/base/global_configuration.cpp b/src/libcamera/base/global_configuration.cpp
index f35b3dae..315ea7ad 100644
--- a/src/libcamera/base/global_configuration.cpp
+++ b/src/libcamera/base/global_configuration.cpp
@@ -59,12 +59,6 @@ bool loadFile(const std::filesystem::path &fileName)
return true;
}
-const std::vector<std::filesystem::path>
- globalConfigurationDirectories = {
- std::filesystem::path(LIBCAMERA_SYSCONF_DIR),
- std::filesystem::path("/etc/libcamera"),
- };
-
void load()
{
const char *libcameraConfigName =
@@ -81,6 +75,17 @@ void load()
if (configName.empty())
configName = std::filesystem::path("configuration.yaml");
+ const char *const configDir = utils::secure_getenv("LIBCAMERA_CONFIG_DIR");
+ std::vector<std::filesystem::path> globalConfigurationDirectories;
+ if (configDir)
+ for (auto const &path : utils::split(configDir, ":"))
+ if (!path.empty())
+ globalConfigurationDirectories.push_back(path);
+ globalConfigurationDirectories.push_back(
+ std::filesystem::path(LIBCAMERA_SYSCONF_DIR));
+ globalConfigurationDirectories.push_back(
+ std::filesystem::path("/etc/libcamera"));
+
std::filesystem::path userConfigurationDirectory;
char *xdgConfigHome = utils::secure_getenv("XDG_CONFIG_HOME");
if (xdgConfigHome) {
--
2.44.2
More information about the libcamera-devel
mailing list