summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/FindWrapOpenGL.cmake40
-rw-r--r--src/gui/.prev_configure.cmake4
-rw-r--r--src/gui/CMakeLists.txt3
-rw-r--r--src/gui/configure.cmake4
-rw-r--r--util/cmake/helper.py2
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",