diff options
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/FixInterfaceIncludes.cmake | 28 |
1 files changed, 28 insertions, 0 deletions
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 <SDL2/SDL.h> or <epoxy/gl.h> +# 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() + |