From 56bd78f7ad4b346b3e584477581777265634f2d2 Mon Sep 17 00:00:00 2001 From: Anthony Printup <92564080+anthonyprintup@users.noreply.github.com> Date: Mon, 18 Sep 2023 15:44:44 +0200 Subject: [PATCH] feat(project-parser): Added support for relative paths in `link-libraries` Fixes #116 --- src/project_parser.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/project_parser.cpp b/src/project_parser.cpp index 22d9e7f..37d0d1c 100644 --- a/src/project_parser.cpp +++ b/src/project_parser.cpp @@ -597,6 +597,23 @@ Project::Project(const Project *parent, const std::string &path, bool build) : p t.optional("link-libraries", target.link_libraries); t.optional("private-link-libraries", target.private_link_libraries); + // Add support for relative paths for (private-)link-libraries + const auto fix_relative_paths = [](ConditionVector &libraries) { + for (const auto &library_entries : libraries) { + for (auto &path : libraries[library_entries.first]) { + // Skip absolute paths and paths which do not include a parent path + const fs::path library_file_path {path}; + if (library_file_path.is_absolute() || !library_file_path.has_parent_path()) + continue; + + // Prepend ${CMAKE_CURRENT_SOURCE_DIR} to the path + path.insert(0, "${CMAKE_CURRENT_SOURCE_DIR}/"); + } + } + }; + fix_relative_paths(target.link_libraries); + fix_relative_paths(target.private_link_libraries); + t.optional("link-options", target.link_options); t.optional("private-link-options", target.private_link_options);