# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. #[=======================================================================[.rst: FindGLEW -------- Find the OpenGL Extension Wrangler Library (GLEW) Input Variables ^^^^^^^^^^^^^^^ The following variables may be set to influence this module's behavior: ``GLEW_USE_STATIC_LIBS`` to find and create :prop_tgt:`IMPORTED` target for static linkage. ``GLEW_VERBOSE`` to output a detailed log of this module. Imported Targets ^^^^^^^^^^^^^^^^ .. versionadded:: 3.1 This module defines the following :ref:`Imported Targets `: ``GLEW::glew`` The GLEW shared library. ``GLEW::glew_s`` The GLEW static library, if ``GLEW_USE_STATIC_LIBS`` is set to ``TRUE``. ``GLEW::GLEW`` Duplicates either ``GLEW::glew`` or ``GLEW::glew_s`` based on availability. Result Variables ^^^^^^^^^^^^^^^^ This module defines the following variables: ``GLEW_INCLUDE_DIRS`` include directories for GLEW ``GLEW_LIBRARIES`` libraries to link against GLEW ``GLEW_SHARED_LIBRARIES`` libraries to link against shared GLEW ``GLEW_STATIC_LIBRARIES`` libraries to link against static GLEW ``GLEW_FOUND`` true if GLEW has been found and can be used ``GLEW_VERSION`` GLEW version ``GLEW_VERSION_MAJOR`` GLEW major version ``GLEW_VERSION_MINOR`` GLEW minor version ``GLEW_VERSION_MICRO`` GLEW micro version .. versionadded:: 3.7 Debug and Release variants are found separately. #]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) find_package(GLEW CONFIG QUIET) if(GLEW_FOUND) find_package_handle_standard_args(GLEW DEFAULT_MSG GLEW_CONFIG) get_target_property(GLEW_INCLUDE_DIRS GLEW::GLEW INTERFACE_INCLUDE_DIRECTORIES) set(GLEW_INCLUDE_DIR ${GLEW_INCLUDE_DIRS}) get_target_property(_GLEW_DEFS GLEW::GLEW INTERFACE_COMPILE_DEFINITIONS) if("${_GLEW_DEFS}" MATCHES "GLEW_STATIC") get_target_property(GLEW_LIBRARY_DEBUG GLEW::GLEW IMPORTED_LOCATION_DEBUG) get_target_property(GLEW_LIBRARY_RELEASE GLEW::GLEW IMPORTED_LOCATION_RELEASE) else() get_target_property(GLEW_LIBRARY_DEBUG GLEW::GLEW IMPORTED_IMPLIB_DEBUG) get_target_property(GLEW_LIBRARY_RELEASE GLEW::GLEW IMPORTED_IMPLIB_RELEASE) endif() get_target_property(_GLEW_LINK_INTERFACE GLEW::GLEW IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE) # same for debug and release list(APPEND GLEW_LIBRARIES ${_GLEW_LINK_INTERFACE}) list(APPEND GLEW_LIBRARY ${_GLEW_LINK_INTERFACE}) select_library_configurations(GLEW) if("${_GLEW_DEFS}" MATCHES "GLEW_STATIC") set(GLEW_STATIC_LIBRARIES ${GLEW_LIBRARIES}) else() set(GLEW_SHARED_LIBRARIES ${GLEW_LIBRARIES}) endif() unset(_GLEW_DEFS) unset(_GLEW_LINK_INTERFACE) unset(GLEW_LIBRARY) unset(GLEW_LIBRARY_DEBUG) unset(GLEW_LIBRARY_RELEASE) return() endif() if(GLEW_VERBOSE) message(STATUS "FindGLEW: did not find GLEW CMake config file. Searching for libraries.") endif() if(APPLE) find_package(OpenGL QUIET) if(OpenGL_FOUND) if(GLEW_VERBOSE) message(STATUS "FindGLEW: Found OpenGL Framework.") message(STATUS "FindGLEW: OPENGL_LIBRARIES: ${OPENGL_LIBRARIES}") endif() else() if(GLEW_VERBOSE) message(STATUS "FindGLEW: could not find GLEW library.") endif() return() endif() endif() function(__glew_set_find_library_suffix shared_or_static) if((UNIX AND NOT APPLE) AND "${shared_or_static}" MATCHES "SHARED") set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" PARENT_SCOPE) elseif((UNIX AND NOT APPLE) AND "${shared_or_static}" MATCHES "STATIC") set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE) elseif(APPLE AND "${shared_or_static}" MATCHES "SHARED") set(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib;.so" PARENT_SCOPE) elseif(APPLE AND "${shared_or_static}" MATCHES "STATIC") set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE) elseif(WIN32 AND MINGW AND "${shared_or_static}" MATCHES "SHARED") set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" PARENT_SCOPE) elseif(WIN32 AND MINGW AND "${shared_or_static}" MATCHES "STATIC") set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" PARENT_SCOPE) elseif(WIN32 AND "${shared_or_static}" MATCHES "SHARED") set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" PARENT_SCOPE) elseif(WIN32 AND "${shared_or_static}" MATCHES "STATIC") set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib;.dll.a" PARENT_SCOPE) endif() if(GLEW_VERBOSE) message(STATUS "FindGLEW: CMAKE_FIND_LIBRARY_SUFFIXES for ${shared_or_static}: ${CMAKE_FIND_LIBRARY_SUFFIXES}") endif() endfunction() if(GLEW_VERBOSE) if(DEFINED GLEW_USE_STATIC_LIBS) message(STATUS "FindGLEW: GLEW_USE_STATIC_LIBS: ${GLEW_USE_STATIC_LIBS}.") else() message(STATUS "FindGLEW: GLEW_USE_STATIC_LIBS is undefined. Treated as FALSE.") endif() endif() find_path(GLEW_INCLUDE_DIR GL/glew.h) mark_as_advanced(GLEW_INCLUDE_DIR) set(GLEW_INCLUDE_DIRS ${GLEW_INCLUDE_DIR}) if(GLEW_VERBOSE) message(STATUS "FindGLEW: GLEW_INCLUDE_DIR: ${GLEW_INCLUDE_DIR}") message(STATUS "FindGLEW: GLEW_INCLUDE_DIRS: ${GLEW_INCLUDE_DIRS}") endif() if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(_arch "x64") else() set(_arch "Win32") endif() set(__GLEW_CURRENT_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) __glew_set_find_library_suffix(SHARED) find_library(GLEW_SHARED_LIBRARY_RELEASE NAMES GLEW glew glew32 NAMES_PER_DIR PATH_SUFFIXES lib lib64 libx32 lib/Release/${_arch} PATHS ENV GLEW_ROOT) find_library(GLEW_SHARED_LIBRARY_DEBUG NAMES GLEWd glewd glew32d NAMES_PER_DIR PATH_SUFFIXES lib lib64 PATHS ENV GLEW_ROOT) __glew_set_find_library_suffix(STATIC) find_library(GLEW_STATIC_LIBRARY_RELEASE NAMES GLEW glew glew32s NAMES_PER_DIR PATH_SUFFIXES lib lib64 libx32 lib/Release/${_arch} PATHS ENV GLEW_ROOT) find_library(GLEW_STATIC_LIBRARY_DEBUG NAMES GLEWds glewds glew32ds NAMES_PER_DIR PATH_SUFFIXES lib lib64 PATHS ENV GLEW_ROOT) set(CMAKE_FIND_LIBRARY_SUFFIXES ${__GLEW_CURRENT_FIND_LIBRARY_SUFFIXES}) unset(__GLEW_CURRENT_FIND_LIBRARY_SUFFIXES) select_library_configurations(GLEW_SHARED) select_library_configurations(GLEW_STATIC) if(NOT GLEW_USE_STATIC_LIBS) set(GLEW_LIBRARIES ${GLEW_SHARED_LIBRARY}) else() set(GLEW_LIBRARIES ${GLEW_STATIC_LIBRARY}) endif() if(GLEW_VERBOSE) message(STATUS "FindGLEW: GLEW_SHARED_LIBRARY_RELEASE: ${GLEW_SHARED_LIBRARY_RELEASE}") message(STATUS "FindGLEW: GLEW_STATIC_LIBRARY_RELEASE: ${GLEW_STATIC_LIBRARY_RELEASE}") message(STATUS "FindGLEW: GLEW_SHARED_LIBRARY_DEBUG: ${GLEW_SHARED_LIBRARY_DEBUG}") message(STATUS "FindGLEW: GLEW_STATIC_LIBRARY_DEBUG: ${GLEW_STATIC_LIBRARY_DEBUG}") message(STATUS "FindGLEW: GLEW_SHARED_LIBRARY: ${GLEW_SHARED_LIBRARY}") message(STATUS "FindGLEW: GLEW_STATIC_LIBRARY: ${GLEW_STATIC_LIBRARY}") message(STATUS "FindGLEW: GLEW_LIBRARIES: ${GLEW_LIBRARIES}") endif() # Read version from GL/glew.h file if(EXISTS "${GLEW_INCLUDE_DIR}/GL/glew.h") file(STRINGS "${GLEW_INCLUDE_DIR}/GL/glew.h" _contents REGEX "^VERSION_.+ [0-9]+") if(_contents) string(REGEX REPLACE ".*VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" GLEW_VERSION_MAJOR "${_contents}") string(REGEX REPLACE ".*VERSION_MINOR[ \t]+([0-9]+).*" "\\1" GLEW_VERSION_MINOR "${_contents}") string(REGEX REPLACE ".*VERSION_MICRO[ \t]+([0-9]+).*" "\\1" GLEW_VERSION_MICRO "${_contents}") set(GLEW_VERSION "${GLEW_VERSION_MAJOR}.${GLEW_VERSION_MINOR}.${GLEW_VERSION_MICRO}") endif() endif() if(GLEW_VERBOSE) message(STATUS "FindGLEW: GLEW_VERSION_MAJOR: ${GLEW_VERSION_MAJOR}") message(STATUS "FindGLEW: GLEW_VERSION_MINOR: ${GLEW_VERSION_MINOR}") message(STATUS "FindGLEW: GLEW_VERSION_MICRO: ${GLEW_VERSION_MICRO}") message(STATUS "FindGLEW: GLEW_VERSION: ${GLEW_VERSION}") endif() find_package_handle_standard_args(GLEW REQUIRED_VARS GLEW_INCLUDE_DIRS GLEW_LIBRARIES VERSION_VAR GLEW_VERSION) if(NOT GLEW_FOUND) if(GLEW_VERBOSE) message(STATUS "FindGLEW: could not find GLEW library.") endif() return() endif() if(NOT TARGET GLEW::glew AND NOT GLEW_USE_STATIC_LIBS) if(GLEW_VERBOSE) message(STATUS "FindGLEW: Creating GLEW::glew imported target.") endif() add_library(GLEW::glew UNKNOWN IMPORTED) set_target_properties(GLEW::glew PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}") if(APPLE) set_target_properties(GLEW::glew PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL) endif() if(GLEW_SHARED_LIBRARY_RELEASE) set_property(TARGET GLEW::glew APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(GLEW::glew PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_SHARED_LIBRARY_RELEASE}") endif() if(GLEW_SHARED_LIBRARY_DEBUG) set_property(TARGET GLEW::glew APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) set_target_properties(GLEW::glew PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_SHARED_LIBRARY_DEBUG}") endif() elseif(NOT TARGET GLEW::glew_s AND GLEW_USE_STATIC_LIBS) if(GLEW_VERBOSE) message(STATUS "FindGLEW: Creating GLEW::glew_s imported target.") endif() add_library(GLEW::glew_s UNKNOWN IMPORTED) set_target_properties(GLEW::glew_s PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}") if(APPLE) set_target_properties(GLEW::glew_s PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL) endif() if(GLEW_STATIC_LIBRARY_RELEASE) set_property(TARGET GLEW::glew_s APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(GLEW::glew_s PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_STATIC_LIBRARY_RELEASE}") endif() if(GLEW_STATIC_LIBRARY_DEBUG) set_property(TARGET GLEW::glew_s APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) set_target_properties(GLEW::glew_s PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_STATIC_LIBRARY_DEBUG}") endif() endif() if(NOT TARGET GLEW::GLEW) if(GLEW_VERBOSE) message(STATUS "FindGLEW: Creating GLEW::GLEW imported target.") endif() add_library(GLEW::GLEW UNKNOWN IMPORTED) set_target_properties(GLEW::GLEW PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLEW_INCLUDE_DIRS}") if(APPLE) set_target_properties(GLEW::GLEW PROPERTIES INTERFACE_LINK_LIBRARIES OpenGL::GL) endif() if(TARGET GLEW::glew) if(GLEW_SHARED_LIBRARY_RELEASE) set_property(TARGET GLEW::GLEW APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(GLEW::GLEW PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_SHARED_LIBRARY_RELEASE}") endif() if(GLEW_SHARED_LIBRARY_DEBUG) set_property(TARGET GLEW::GLEW APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) set_target_properties(GLEW::GLEW PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_SHARED_LIBRARY_DEBUG}") endif() elseif(TARGET GLEW::glew_s) if(GLEW_STATIC_LIBRARY_RELEASE) set_property(TARGET GLEW::GLEW APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(GLEW::GLEW PROPERTIES IMPORTED_LOCATION_RELEASE "${GLEW_STATIC_LIBRARY_RELEASE}") endif() if(GLEW_STATIC_LIBRARY_DEBUG AND GLEW_USE_STATIC_LIBS) set_property(TARGET GLEW::GLEW APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) set_target_properties(GLEW::GLEW PROPERTIES IMPORTED_LOCATION_DEBUG "${GLEW_STATIC_LIBRARY_DEBUG}") endif() elseif(GLEW_VERBOSE) message(WARNING "FindGLEW: no `GLEW::glew` or `GLEW::glew_s` target was created. Something went wrong in FindGLEW target creation.") endif() endif()