Browse Source

CMake: avoid installed Magnum headers being picked over local ones.

If Magnum and Corrade get installed into the same directory,
target_include_directories() or target_link_libraries() with Corrade
before Magnum will result in the (usually stale) installed Magnum
headers being picked over the local ones. Which is unwanted, so try to
always put the local Magnum include path first.

Tested manually by installing to an arbitrary location and editing
configure.h to contain an #error. That failed for the Text library, and
with these changes it now doesn't fail anymore, but that's not a
guarantee that I managed to fix all such cases.
pull/168/head
Vladimír Vondruš 3 years ago
parent
commit
1d2796baed
  1. 8
      src/Magnum/Audio/CMakeLists.txt
  2. 6
      src/Magnum/GL/CMakeLists.txt
  3. 11
      src/Magnum/Text/CMakeLists.txt
  4. 2
      src/Magnum/Trade/CMakeLists.txt

8
src/Magnum/Audio/CMakeLists.txt

@ -75,8 +75,10 @@ add_library(MagnumAudioObjects OBJECT
${MagnumAudio_SRCS}
${MagnumAudio_HEADERS})
target_include_directories(MagnumAudioObjects PUBLIC
$<TARGET_PROPERTY:OpenAL::OpenAL,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Magnum,INTERFACE_INCLUDE_DIRECTORIES>
# Include dependencies after Magnum itself, to avoid stale installed Magnum
# headers being preferred over the project-local ones
$<TARGET_PROPERTY:OpenAL::OpenAL,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Corrade::PluginManager,INTERFACE_INCLUDE_DIRECTORIES>)
if(NOT MAGNUM_BUILD_STATIC)
target_compile_definitions(MagnumAudioObjects PRIVATE "MagnumAudioObjects_EXPORTS")
@ -178,7 +180,6 @@ if(MAGNUM_BUILD_TESTS)
${MagnumAudio_GracefulAssert_SRCS})
target_compile_definitions(MagnumAudioTestLib PRIVATE
"CORRADE_GRACEFUL_ASSERT" "MagnumAudio_EXPORTS")
target_include_directories(MagnumAudioTestLib PUBLIC ${OPENAL_INCLUDE_DIR})
set_target_properties(MagnumAudioTestLib PROPERTIES DEBUG_POSTFIX "-d")
if(MAGNUM_BUILD_STATIC_PIC)
set_target_properties(MagnumAudioTestLib PROPERTIES POSITION_INDEPENDENT_CODE ON)
@ -187,6 +188,9 @@ if(MAGNUM_BUILD_TESTS)
Magnum
Corrade::PluginManager
OpenAL::OpenAL)
# Include dependencies after Magnum itself, to avoid stale installed Magnum
# headers being preferred over the project-local ones
target_include_directories(MagnumAudioTestLib PUBLIC ${OPENAL_INCLUDE_DIR})
if(MAGNUM_WITH_SCENEGRAPH)
target_link_libraries(MagnumAudioTestLib PUBLIC MagnumSceneGraph)
endif()

6
src/Magnum/GL/CMakeLists.txt

@ -264,9 +264,11 @@ if(MAGNUM_WITH_OPENGLTESTER)
# Assuming that PIC is not needed because the Tester lib is always linked
# to the executable and not to any intermediate shared lib
target_include_directories(MagnumOpenGLTesterObjects PUBLIC
$<TARGET_PROPERTY:Corrade::TestSuite,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:MagnumGL,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${OPENGLTESTER_APPLICATION},INTERFACE_INCLUDE_DIRECTORIES>)
$<TARGET_PROPERTY:${OPENGLTESTER_APPLICATION},INTERFACE_INCLUDE_DIRECTORIES>
# Include dependencies after Magnum itself, to avoid stale installed
# headers being preferred over the project-local ones
$<TARGET_PROPERTY:Corrade::TestSuite,INTERFACE_INCLUDE_DIRECTORIES>)
add_library(MagnumOpenGLTester STATIC
$<TARGET_OBJECTS:MagnumOpenGLTesterObjects>

11
src/Magnum/Text/CMakeLists.txt

@ -85,11 +85,14 @@ add_library(MagnumTextObjects OBJECT
${MagnumText_HEADERS}
${MagnumText_PRIVATE_HEADERS})
target_include_directories(MagnumTextObjects PUBLIC
$<TARGET_PROPERTY:Corrade::PluginManager,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Magnum,INTERFACE_INCLUDE_DIRECTORIES>)
if(MAGNUM_TARGET_GL)
target_include_directories(MagnumTextObjects PUBLIC $<TARGET_PROPERTY:MagnumGL,INTERFACE_INCLUDE_DIRECTORIES>)
endif()
# Include dependencies after Magnum itself, to avoid stale installed Magnum
# headers being preferred over the project-local ones
target_include_directories(MagnumTextObjects PUBLIC
$<TARGET_PROPERTY:Corrade::PluginManager,INTERFACE_INCLUDE_DIRECTORIES>)
if(NOT MAGNUM_BUILD_STATIC)
target_compile_definitions(MagnumTextObjects PRIVATE "MagnumTextObjects_EXPORTS")
endif()
@ -109,11 +112,13 @@ elseif(MAGNUM_BUILD_STATIC_PIC)
endif()
target_link_libraries(MagnumText PUBLIC
Magnum
MagnumTextureTools
Corrade::PluginManager)
MagnumTextureTools)
if(MAGNUM_TARGET_GL)
target_link_libraries(MagnumText PUBLIC MagnumGL)
endif()
# Include dependencies after Magnum itself, to avoid stale installed Magnum
# headers being preferred over the project-local ones
target_link_libraries(MagnumText PUBLIC Corrade::PluginManager)
install(TARGETS MagnumText
RUNTIME DESTINATION ${MAGNUM_BINARY_INSTALL_DIR}

2
src/Magnum/Trade/CMakeLists.txt

@ -123,6 +123,8 @@ add_library(MagnumTradeObjects OBJECT
${MagnumTrade_PRIVATE_HEADERS})
target_include_directories(MagnumTradeObjects PUBLIC
$<TARGET_PROPERTY:Magnum,INTERFACE_INCLUDE_DIRECTORIES>
# Include dependencies after Magnum itself, to avoid stale installed
# headers being preferred over the project-local ones
$<TARGET_PROPERTY:Corrade::PluginManager,INTERFACE_INCLUDE_DIRECTORIES>)
if(NOT MAGNUM_BUILD_STATIC)
target_compile_definitions(MagnumTradeObjects PRIVATE "MagnumTradeObjects_EXPORTS")

Loading…
Cancel
Save