@@ -19,6 +19,11 @@ order:
- LIBCAMERA_SYSCONF_DIR/configuration.yaml
- LIBCAMERA_DATA_DIR/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
@@ -67,11 +67,6 @@ bool GlobalConfiguration::loadFile(const std::filesystem::path &fileName)
bool GlobalConfiguration::load()
{
- const std::vector<std::filesystem::path> globalConfigurationDirectories = {
- std::filesystem::path(LIBCAMERA_SYSCONF_DIR),
- std::filesystem::path(LIBCAMERA_DATA_DIR),
- };
-
const char *libcameraConfigName =
utils::secure_getenv("LIBCAMERA_CONFIG_NAME");
if (libcameraConfigName && libcameraConfigName[0] == '\0')
@@ -89,6 +84,16 @@ bool GlobalConfiguration::load()
if (configName.empty())
configName = std::filesystem::path("configuration.yaml");
+ std::vector<std::filesystem::path> configurationDirectories;
+
+ const char *configDir = utils::secure_getenv("LIBCAMERA_CONFIG_DIR");
+ if (configDir) {
+ for (auto const &path : utils::split(configDir, ":")) {
+ if (!path.empty())
+ configurationDirectories.push_back(path);
+ }
+ }
+
std::filesystem::path userConfigurationDirectory;
const char *xdgConfigHome = utils::secure_getenv("XDG_CONFIG_HOME");
if (xdgConfigHome) {
@@ -99,15 +104,14 @@ bool GlobalConfiguration::load()
userConfigurationDirectory =
std::filesystem::path(home) / ".config";
}
+ if (!userConfigurationDirectory.empty())
+ configurationDirectories.push_back(
+ userConfigurationDirectory / "libcamera");
- if (!userConfigurationDirectory.empty()) {
- std::filesystem::path user_configuration_file =
- userConfigurationDirectory / "libcamera" / configName;
- if (loadFile(user_configuration_file))
- return !!yamlConfiguration_;
- }
+ configurationDirectories.push_back(LIBCAMERA_SYSCONF_DIR);
+ configurationDirectories.push_back(LIBCAMERA_DATA_DIR);
- for (const auto &path : globalConfigurationDirectories)
+ for (const auto &path : configurationDirectories)
if (loadFile(path / configName))
return !!yamlConfiguration_;
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@redhat.com> --- Documentation/runtime_configuration.rst | 5 +++++ src/libcamera/global_configuration.cpp | 28 ++++++++++++++----------- 2 files changed, 21 insertions(+), 12 deletions(-)