diff --git a/CMakeLists.txt b/CMakeLists.txt index ef6ded3d..d17f72ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,9 +68,6 @@ if (_GLFW_X11_GLX) include(CheckFunctionExists) include(CheckSymbolExists) - # This is needed by the GLX function checks below - set(CMAKE_REQUIRED_LIBRARIES ${glfw_LIBRARIES}) - # Check for XRandR (modern resolution switching extension) if (X11_Xrandr_FOUND) set(_GLFW_HAS_XRANDR 1) @@ -115,6 +112,8 @@ if (_GLFW_X11_GLX) set(GLFW_PKGLIBS "${GLFW_PKGLIBS} m") endif() + set(CMAKE_REQUIRED_LIBRARIES ${OPENGL_gl_LIBRARY}) + check_function_exists(glXGetProcAddress _GLFW_HAS_GLXGETPROCADDRESS) if (NOT _GLFW_HAS_GLXGETPROCADDRESS) @@ -129,6 +128,26 @@ if (_GLFW_X11_GLX) NOT _GLFW_HAS_GLXGETPROCADDRESSARB AND NOT _GLFW_HAS_GLXGETPROCADDRESSEXT) message(WARNING "No glXGetProcAddressXXX variant found") + + # Check for dlopen support as a fallback + + find_library(DL_LIBRARY dl) + if (DL_LIBRARY) + set(CMAKE_REQUIRED_LIBRARIES ${DL_LIBRARY}) + else() + set(CMAKE_REQUIRED_LIBRARIES "") + endif() + + check_function_exists(dlopen _GLFW_HAS_DLOPEN) + + if (NOT _GLFW_HAS_DLOPEN) + message(FATAL_ERROR "No entry point retrieval mechanism found") + endif() + + if (DL_LIBRARY) + list(APPEND glfw_LIBRARIES ${DL_LIBRARY}) + set(GLFW_PKGLIBS "${GLFW_PKGLIBS} dl") + endif() endif() if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")