From 826e02b48d0cd9d7031dc3abc0c700c3efcb9302 Mon Sep 17 00:00:00 2001 From: xavi92 Date: Sun, 27 Oct 2024 08:08:58 +0000 Subject: [PATCH] 3rdParty-devel: Install OpenGL headers only if needed MinGW already distributes OpenGL headers and libraries under different directories. In such cases, it is more sensible to rely on those than the in-tree copies maintained by the project. Note that, for some unknown reason, the include directories for the OpenGL::GL target are not filled, even if find_package(OpenGL) is successful and the library is found. Therefore, this commit works around this limitation by finding GL/gl.h from a possible list of directories inside the toolchain. git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9606 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: f663966c6bd42cfcb2b5135b871bb2e2e1636994 Former-commit-id: 92e313ea0f1edc8e030021225dec2c347b69f86f --- packaging/3rdParty-devel/CMakeLists.txt | 43 ++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/packaging/3rdParty-devel/CMakeLists.txt b/packaging/3rdParty-devel/CMakeLists.txt index 2d675377..27942f87 100644 --- a/packaging/3rdParty-devel/CMakeLists.txt +++ b/packaging/3rdParty-devel/CMakeLists.txt @@ -156,14 +156,49 @@ else() set(SUPER_BUILD_POSTFIX "") endif() -# OpenGL extensions (Windows only??) -message(STATUS "OpenGL extensions (Windows only??)") -if(WIN32 AND OPTION_OPENGL_HEADERS) +# OpenGL extensions +find_package(OpenGL) + +if(NOT TARGET OpenGL::GL) + message(STATUS "Copying in-tree OpenGL headers") ExternalProject_Add(OpenGL-headers URL ${CMAKE_CURRENT_SOURCE_DIR}/patches/openglheaders.zip URL_HASH SHA256=344debe6e65629d70020b6da056255de56c7d4fe48194336ea2cb896fc1b545b CMAKE_ARGS ${EXTERNALS_CMAKE_ARGS}) -endif(WIN32 AND OPTION_OPENGL_HEADERS) +else() + if(TARGET OpenGL::GL) + add_library(OpenGL-headers ALIAS OpenGL::GL) + + if(MINGW AND NOT OPENGL_INCLUDE_DIR) + get_filename_component(MINGW_BINDIR "${CMAKE_CXX_COMPILER}" PATH) + get_filename_component(MINGW_BINDIR "${MINGW_BINDIR}/../" REALPATH) + + if(CMAKE_CROSSCOMPILING) + find_path(OPENGL_INCLUDE_DIR GL/gl.h + REQUIRED + NO_CMAKE_SYSTEM_PATH + NO_DEFAULT_PATH + NO_CMAKE_PATH + NO_CMAKE_INSTALL_PREFIX + HINTS + "${MINGW_BINDIR}/include" + "${MINGW_BINDIR}/*/include" + ) + else() + find_path(OPENGL_INCLUDE_DIR GL/gl.h + REQUIRED + HINTS + "${MINGW_BINDIR}/include" + "${MINGW_BINDIR}/*/include" + ) + endif() + + # FindOpenGL.cmake seems not to set this property under + # some circumstances. + target_include_directories(OpenGL::GL INTERFACE ${OPENGL_INCLUDE_DIR}) + endif() + endif() +endif() if(OPTION_ZLIB) ExternalProject_Add(${ZLIB_PROJECT}