diff --git a/src/Magnum/DebugTools/CMakeLists.txt b/src/Magnum/DebugTools/CMakeLists.txt index 2618fbab7..e369aa67a 100644 --- a/src/Magnum/DebugTools/CMakeLists.txt +++ b/src/Magnum/DebugTools/CMakeLists.txt @@ -181,6 +181,32 @@ if(BUILD_TESTS) endif() endif() + # A subset of DebugTools used by GL's own tests that link to + # MagnumGLTestLib (or MagnumOpenGLTesterTestLib), linking also to + # MagnumGLTestLibMagnumGL. We can't link those to MagnumDebugToolsTestLib + # because it depends on MagnumGL instead, which would lead to the + # GL::Context global to be duplicated, causing the dreaded + # + # GL::Context::current(): no current context + # + # assertion. We however also can't link MagnumDebugToolsTestLib to + # MagnumGLTestLib, because the other libraries it depends on (MeshTools, + # Shaders...) link to MagnumGL and so the same problem would just reappear + # elsewhere. + if(TARGET_GL AND BUILD_GL_TESTS AND NOT (MAGNUM_TARGET_WEBGL AND MAGNUM_TARGET_GLES2)) + add_library(MagnumDebugToolsGLTestLibSubset ${SHARED_OR_STATIC} + # Add more files if needed + BufferData.cpp + BufferData.h) + set_target_properties(MagnumDebugToolsGLTestLibSubset PROPERTIES DEBUG_POSTFIX "-d") + target_compile_definitions(MagnumDebugToolsGLTestLibSubset PRIVATE + "CORRADE_GRACEFUL_ASSERT" "MagnumDebugTools_EXPORTS") + if(BUILD_STATIC_PIC) + set_target_properties(MagnumDebugToolsGLTestLibSubset PROPERTIES POSITION_INDEPENDENT_CODE ON) + endif() + target_link_libraries(MagnumDebugToolsGLTestLibSubset PUBLIC Magnum MagnumGLTestLib) + endif() + add_subdirectory(Test) endif() diff --git a/src/Magnum/GL/Test/CMakeLists.txt b/src/Magnum/GL/Test/CMakeLists.txt index 651848fb5..a51ee2fda 100644 --- a/src/Magnum/GL/Test/CMakeLists.txt +++ b/src/Magnum/GL/Test/CMakeLists.txt @@ -92,9 +92,17 @@ if(BUILD_GL_TESTS) target_link_libraries(GLBufferGLTest PRIVATE MagnumDebugTools) endif() - corrade_add_test(GLFramebufferGLTest FramebufferGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib) + corrade_add_test(GLFramebufferGLTest FramebufferGLTest.cpp) + # See DebugTools/CMakeLists.txt for details about + # MagnumDebugToolsGLTestLibSubset. It also has to be before + # MagnumOpenGLTesterTestLib to pick GL symbols with CORRADE_GRACEFUL_ASSERT + # over ones without... because MagnumOpenGLTesterTestLib is actually + # linking to MagnumGL on Linux and macOS. + # TODO fix MagnumOpenGLTesterTestLib to link to MagnumGLTestLib always if(NOT MAGNUM_TARGET_GLES2) - target_link_libraries(GLFramebufferGLTest PRIVATE MagnumDebugTools) + target_link_libraries(GLFramebufferGLTest PRIVATE MagnumDebugToolsGLTestLibSubset MagnumOpenGLTesterTestLib) + else() + target_link_libraries(GLFramebufferGLTest PRIVATE MagnumOpenGLTesterTestLib) endif() corrade_add_test(GLContextGLTest ContextGLTest.cpp LIBRARIES MagnumOpenGLTester) @@ -170,7 +178,14 @@ if(BUILD_GL_TESTS) endif() if(NOT MAGNUM_TARGET_GLES2) - corrade_add_test(GLBufferImageGLTest BufferImageGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib MagnumDebugTools) + # See DebugTools/CMakeLists.txt for details about + # MagnumDebugToolsGLTestLibSubset. It also has to be before + # MagnumOpenGLTesterTestLib to pick GL symbols with + # CORRADE_GRACEFUL_ASSERT over ones without... because + # MagnumOpenGLTesterTestLib is actually linking to MagnumGL on Linux + # and macOS. + # TODO fix MagnumOpenGLTesterTestLib to link to MagnumGLTestLib always + corrade_add_test(GLBufferImageGLTest BufferImageGLTest.cpp LIBRARIES MagnumDebugToolsGLTestLibSubset MagnumOpenGLTesterTestLib) corrade_add_test(GLPrimitiveQueryGLTest PrimitiveQueryGLTest.cpp LIBRARIES MagnumOpenGLTester) corrade_add_test(GLTextureArrayGLTest TextureArrayGLTest.cpp LIBRARIES MagnumOpenGLTester) corrade_add_test(GLTransformFeedbackGLTest TransformFeedbackGLTest.cpp LIBRARIES MagnumOpenGLTester MagnumDebugTools)