diff options
-rw-r--r-- | cmake/FindWrapOpenGL.cmake | 40 | ||||
-rw-r--r-- | src/gui/.prev_configure.cmake | 4 | ||||
-rw-r--r-- | src/gui/CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/gui/configure.cmake | 4 | ||||
-rw-r--r-- | util/cmake/helper.py | 2 |
5 files changed, 46 insertions, 7 deletions
diff --git a/cmake/FindWrapOpenGL.cmake b/cmake/FindWrapOpenGL.cmake new file mode 100644 index 0000000000..fc6ddf7046 --- /dev/null +++ b/cmake/FindWrapOpenGL.cmake @@ -0,0 +1,40 @@ +# We can't create the same interface imported target multiple times, CMake will complain if we do +# that. This can happen if the find_package call is done in multiple different subdirectories. +if(TARGET WrapOpenGL::WrapOpenGL) + set(WrapOpenGL_FOUND ON) + return() +endif() + +set(WrapOpenGL_FOUND OFF) + +find_package(OpenGL ${WrapOpenGL_FIND_VERSION}) + +if (OpenGL_FOUND) + set(WrapOpenGL_FOUND ON) + + add_library(WrapOpenGL::WrapOpenGL INTERFACE IMPORTED) + if(APPLE) + # On Darwin platforms FindOpenGL sets IMPORTED_LOCATION to the absolute path of the library + # within the framework. This ends up as an absolute path link flag, which we don't want, + # because that makes our .prl files un-relocatable. + # Extract the framework path instead, and use that in INTERFACE_LINK_LIBRARIES, + # which CMake ends up transforming into a reloctable -framework flag. + # See https://gitlab.kitware.com/cmake/cmake/-/issues/20871 for details. + get_target_property(__opengl_fw_lib_path OpenGL::GL IMPORTED_LOCATION) + if(__opengl_fw_lib_path) + get_filename_component(__opengl_fw_path "${__opengl_fw_lib_path}" DIRECTORY) + endif() + + if(NOT __opengl_fw_path) + # Just a safety measure in case if no OpenGL::GL target exists. + set(__opengl_fw_path "-framework" "OpenGL") + endif() + + target_link_libraries(WrapOpenGL::WrapOpenGL INTERFACE ${__opengl_fw_path}) + else() + target_link_libraries(WrapOpenGL::WrapOpenGL INTERFACE OpenGL::GL) + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(WrapOpenGL DEFAULT_MSG WrapOpenGL_FOUND) diff --git a/src/gui/.prev_configure.cmake b/src/gui/.prev_configure.cmake index 76bc14d8c3..0f310c89ea 100644 --- a/src/gui/.prev_configure.cmake +++ b/src/gui/.prev_configure.cmake @@ -46,7 +46,7 @@ if(QT_FEATURE_system_zlib) qt_add_qmake_lib_dependency(libpng zlib) endif() qt_find_package(Mtdev PROVIDED_TARGETS PkgConfig::Mtdev MODULE_NAME gui QMAKE_LIB mtdev) -qt_find_package(OpenGL PROVIDED_TARGETS OpenGL::GL MODULE_NAME gui QMAKE_LIB opengl) +qt_find_package(WrapOpenGL PROVIDED_TARGETS WrapOpenGL::WrapOpenGL MODULE_NAME gui QMAKE_LIB opengl) qt_find_package(GLESv2 PROVIDED_TARGETS GLESv2::GLESv2 MODULE_NAME gui QMAKE_LIB opengl_es2) qt_find_package(Tslib PROVIDED_TARGETS PkgConfig::Tslib MODULE_NAME gui QMAKE_LIB tslib) qt_find_package(Vulkan PROVIDED_TARGETS Vulkan::Vulkan MODULE_NAME gui QMAKE_LIB vulkan) @@ -682,7 +682,7 @@ qt_feature("opengles32" PUBLIC qt_feature("opengl-desktop" LABEL "Desktop OpenGL" AUTODETECT NOT WIN32 - CONDITION ( WIN32 AND ( MSVC OR OpenGL_FOUND ) ) OR ( NOT WATCHOS AND NOT WIN32 AND NOT WASM AND OpenGL_FOUND ) + CONDITION ( WIN32 AND ( MSVC OR WrapOpenGL_FOUND ) ) OR ( NOT WATCHOS AND NOT WIN32 AND NOT WASM AND WrapOpenGL_FOUND ) ENABLE INPUT_opengl STREQUAL 'desktop' DISABLE INPUT_opengl STREQUAL 'es2' OR INPUT_opengl STREQUAL 'dynamic' OR INPUT_opengl STREQUAL 'no' ) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index ace304fdef..cfcd759f1e 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -338,8 +338,7 @@ if(QT_FEATURE_opengl) find_package(GLESv2) target_link_libraries(Gui PUBLIC GLESv2::GLESv2) elseif(NOT QT_FEATURE_opengl_dynamic) - find_package(OpenGL) - target_link_libraries(Gui PUBLIC OpenGL::GL) + target_link_libraries(Gui PUBLIC WrapOpenGL::WrapOpenGL) endif() endif() # special case end diff --git a/src/gui/configure.cmake b/src/gui/configure.cmake index 11ffe54a85..cfefd2ebc3 100644 --- a/src/gui/configure.cmake +++ b/src/gui/configure.cmake @@ -46,7 +46,7 @@ if(QT_FEATURE_system_zlib) qt_add_qmake_lib_dependency(libpng zlib) endif() qt_find_package(Mtdev PROVIDED_TARGETS PkgConfig::Mtdev MODULE_NAME gui QMAKE_LIB mtdev) -qt_find_package(OpenGL PROVIDED_TARGETS OpenGL::GL MODULE_NAME gui QMAKE_LIB opengl) +qt_find_package(WrapOpenGL PROVIDED_TARGETS WrapOpenGL::WrapOpenGL MODULE_NAME gui QMAKE_LIB opengl) qt_find_package(GLESv2 PROVIDED_TARGETS GLESv2::GLESv2 MODULE_NAME gui QMAKE_LIB opengl_es2) qt_find_package(Tslib PROVIDED_TARGETS PkgConfig::Tslib MODULE_NAME gui QMAKE_LIB tslib) qt_find_package(Vulkan PROVIDED_TARGETS Vulkan::Vulkan MODULE_NAME gui QMAKE_LIB vulkan) @@ -744,7 +744,7 @@ qt_feature("opengles32" PUBLIC qt_feature("opengl-desktop" LABEL "Desktop OpenGL" AUTODETECT NOT WIN32 - CONDITION ( WIN32 AND ( MSVC OR OpenGL_FOUND ) ) OR ( NOT WATCHOS AND NOT WIN32 AND NOT WASM AND OpenGL_FOUND ) + CONDITION ( WIN32 AND ( MSVC OR WrapOpenGL_FOUND ) ) OR ( NOT WATCHOS AND NOT WIN32 AND NOT WASM AND WrapOpenGL_FOUND ) ENABLE INPUT_opengl STREQUAL 'desktop' DISABLE INPUT_opengl STREQUAL 'es2' OR INPUT_opengl STREQUAL 'dynamic' OR INPUT_opengl STREQUAL 'no' ) diff --git a/util/cmake/helper.py b/util/cmake/helper.py index 45bea028df..56c2c3b128 100644 --- a/util/cmake/helper.py +++ b/util/cmake/helper.py @@ -427,7 +427,7 @@ _library_map = [ LibraryMapping("mysql", "MySQL", "MySQL::MySQL"), LibraryMapping("odbc", "ODBC", "ODBC::ODBC"), LibraryMapping("opengl_es2", "GLESv2", "GLESv2::GLESv2"), - LibraryMapping("opengl", "OpenGL", "OpenGL::GL", resultVariable="OpenGL"), + LibraryMapping("opengl", "WrapOpenGL", "WrapOpenGL::WrapOpenGL", resultVariable="WrapOpenGL"), LibraryMapping( "openssl_headers", "WrapOpenSSLHeaders", |