From 459759a0379fdda26d13d90dcf2834d82a3d45cb Mon Sep 17 00:00:00 2001
From: Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
Date: Fri, 10 Jul 2020 13:27:25 +0200
Subject: [PATCH] config: support libconfig include directories

---
 lib/config.cpp | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/lib/config.cpp b/lib/config.cpp
index 5761428a3..7142ee9df 100644
--- a/lib/config.cpp
+++ b/lib/config.cpp
@@ -28,6 +28,7 @@
 #include <fstream>
 #include <iostream>
 #include <iomanip>
+#include <filesystem>
 
 #include <villas/utils.hpp>
 #include <villas/log.hpp>
@@ -36,6 +37,8 @@
 #include <villas/node/exceptions.hpp>
 #include <villas/config_helper.hpp>
 
+namespace fs = std::filesystem;
+
 using namespace villas;
 using namespace villas::node;
 
@@ -150,15 +153,15 @@ json_t * Config::libconfigDecode(FILE *f)
 	config_init(&cfg);
 	config_set_auto_convert(&cfg, 1);
 
-	/* Setup libconfig include path.
-	* This is only supported for local files */
-	// if (isLocalFile(uri)) {
-	// 	char *cpy = strdup(uri.c_str());
+	/* Setup libconfig include path. */
+	auto uri = fs::read_symlink(fs::path("/proc/self/fd") / std::to_string(fileno(f)));
+	if (isLocalFile(uri)) {
+		const auto &inclDir = uri.parent_path();
 
-	// 	config_set_include_dir(&cfg, dirname(cpy));
+		logger->info("Setting include dir to: {}", inclDir);
 
-	// 	free(cpy);
-	// }
+		config_set_include_dir(&cfg, inclDir.c_str());
+	}
 
 	/* Rewind before re-reading */
 	rewind(f);