From 94b33c924e0524452738e077aea03ba7e8b6302f Mon Sep 17 00:00:00 2001 From: Nadia Holmquist Pedersen Date: Sat, 21 May 2022 19:54:55 +0200 Subject: Modernize CMake build system (#1434) These changes modernize the CMake build system to (hopefully) match newer best practices * Library linking is simpler and more automatic because of using imported targets * Multi-configuration builds should be supported (Ninja Multi-Config, Visual Studio, etc. generators) * Clean up build options using cmake_dependent_option * Let CMake do its job in more cases, like finding the math/dl libraries and detecting and enabling LTO support * Remove platform-specific kludges like the Fedora/flatpak LTO workaround and a bunch of Windows stuff * Simplify Windows static builds * Consistent formatting --- cmake/FixInterfaceIncludes.cmake | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 cmake/FixInterfaceIncludes.cmake (limited to 'cmake') diff --git a/cmake/FixInterfaceIncludes.cmake b/cmake/FixInterfaceIncludes.cmake new file mode 100644 index 0000000..513c111 --- /dev/null +++ b/cmake/FixInterfaceIncludes.cmake @@ -0,0 +1,28 @@ +# The entire codebase quite reasonably does things like #include or +# CMake apparently doesn't think you should be doing this, so just includes $PREFIX/include/packagename for a given +# package as include directories when using `target_link_libraries` with an imported target, this hacky function fixes +# that up so includes can keep working as they always did but we can still use fancy imported targets. +# This is stupid. + +function(fix_interface_includes) + foreach (target ${ARGN}) + set(NEW_DIRS) + get_target_property(DIRS "${target}" INTERFACE_INCLUDE_DIRECTORIES) + + if (NOT DIRS) + continue() + endif() + + foreach (DIR ${DIRS}) + get_filename_component(PARENT_DIR "${DIR}" DIRECTORY) + + if (PARENT_DIR MATCHES "include$") + list(APPEND NEW_DIRS "${PARENT_DIR}") + endif() + endforeach() + + list(APPEND DIRS ${NEW_DIRS}) + set_target_properties("${target}" PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${DIRS}") + endforeach() +endfunction() + -- cgit v1.2.3