2022-07-05 11:26:52 +00:00
|
|
|
# Copyright (C) 2022 The Qt Company Ltd.
|
2022-08-19 13:21:34 +00:00
|
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
2022-07-05 11:26:52 +00:00
|
|
|
|
2020-06-25 11:55:12 +00:00
|
|
|
# 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)
|
2023-09-11 12:48:32 +00:00
|
|
|
# CMake 3.27 and older:
|
2020-06-25 11:55:12 +00:00
|
|
|
# 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,
|
2023-09-11 12:48:32 +00:00
|
|
|
# which CMake ends up transforming into a relocatable -framework flag.
|
2020-06-25 11:55:12 +00:00
|
|
|
# See https://gitlab.kitware.com/cmake/cmake/-/issues/20871 for details.
|
2023-09-11 12:48:32 +00:00
|
|
|
#
|
|
|
|
# CMake 3.28 and above:
|
|
|
|
# IMPORTED_LOCATION is the absolute path the the OpenGL.framework folder.
|
2020-06-25 11:55:12 +00:00
|
|
|
get_target_property(__opengl_fw_lib_path OpenGL::GL IMPORTED_LOCATION)
|
2023-09-11 12:48:32 +00:00
|
|
|
if(__opengl_fw_lib_path AND NOT __opengl_fw_lib_path MATCHES "/([^/]+)\\.framework$")
|
2020-06-25 11:55:12 +00:00
|
|
|
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.
|
2020-06-30 11:56:54 +00:00
|
|
|
set(__opengl_fw_path "-framework OpenGL")
|
2020-06-25 11:55:12 +00:00
|
|
|
endif()
|
|
|
|
|
2020-06-26 17:01:31 +00:00
|
|
|
find_library(WrapOpenGL_AGL NAMES AGL)
|
|
|
|
if(WrapOpenGL_AGL)
|
|
|
|
set(__opengl_agl_fw_path "${WrapOpenGL_AGL}")
|
|
|
|
endif()
|
|
|
|
if(NOT __opengl_agl_fw_path)
|
2020-06-30 11:56:54 +00:00
|
|
|
set(__opengl_agl_fw_path "-framework AGL")
|
2020-06-26 17:01:31 +00:00
|
|
|
endif()
|
|
|
|
|
2020-06-25 11:55:12 +00:00
|
|
|
target_link_libraries(WrapOpenGL::WrapOpenGL INTERFACE ${__opengl_fw_path})
|
2020-06-26 17:01:31 +00:00
|
|
|
target_link_libraries(WrapOpenGL::WrapOpenGL INTERFACE ${__opengl_agl_fw_path})
|
2020-06-25 11:55:12 +00:00
|
|
|
else()
|
|
|
|
target_link_libraries(WrapOpenGL::WrapOpenGL INTERFACE OpenGL::GL)
|
|
|
|
endif()
|
2023-07-08 20:09:40 +00:00
|
|
|
elseif(UNIX AND NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "Integrity")
|
|
|
|
# Requesting only the OpenGL component ensures CMake does not mark the package as
|
|
|
|
# not found if neither GLX nor libGL are available. This allows finding OpenGL
|
|
|
|
# on an X11-less Linux system.
|
|
|
|
find_package(OpenGL ${WrapOpenGL_FIND_VERSION} COMPONENTS OpenGL)
|
|
|
|
if (OpenGL_FOUND)
|
|
|
|
set(WrapOpenGL_FOUND ON)
|
|
|
|
add_library(WrapOpenGL::WrapOpenGL INTERFACE IMPORTED)
|
|
|
|
target_link_libraries(WrapOpenGL::WrapOpenGL INTERFACE OpenGL::OpenGL)
|
|
|
|
endif()
|
2020-06-25 11:55:12 +00:00
|
|
|
endif()
|
|
|
|
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
|
|
find_package_handle_standard_args(WrapOpenGL DEFAULT_MSG WrapOpenGL_FOUND)
|