# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. #[=======================================================================[.rst: FindGLUT -------- Find OpenGL Utility Toolkit (GLUT) library and include files. IMPORTED Targets ^^^^^^^^^^^^^^^^ .. versionadded:: 3.1 This module defines the :prop_tgt:`IMPORTED` targets: ``GLUT::GLUT`` Defined if the system has GLUT. Result Variables ^^^^^^^^^^^^^^^^ This module sets the following variables: :: GLUT_INCLUDE_DIR, where to find GL/glut.h, etc. GLUT_LIBRARIES, the libraries to link against GLUT_FOUND, If false, do not try to use GLUT. Also defined, but not for general use are: :: GLUT_glut_LIBRARY = the full path to the glut library. GLUT_Xmu_LIBRARY = the full path to the Xmu library. GLUT_Xi_LIBRARY = the full path to the Xi Library. .. versionadded:: 3.13 Debug and Release variants are found separately. #]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) function(_add_glut_target_simple) if(TARGET GLUT::GLUT) return() endif() add_library(GLUT::GLUT INTERFACE IMPORTED) if(GLUT_INCLUDE_DIRS) target_include_directories(GLUT::GLUT SYSTEM INTERFACE "${GLUT_INCLUDE_DIRS}") endif() if(GLUT_LIBRARIES) target_link_libraries(GLUT::GLUT INTERFACE ${GLUT_LIBRARIES}) endif() if(GLUT_LDFLAGS) target_link_options(GLUT::GLUT INTERFACE ${GLUT_LDFLAGS}) endif() if(GLUT_CFLAGS) separate_arguments(GLUT_CFLAGS_SPLIT UNIX_COMMAND "${GLUT_CFLAGS}") target_compile_options(GLUT::GLUT INTERFACE ${GLUT_CFLAGS_SPLIT}) endif() set_property(TARGET GLUT::GLUT APPEND PROPERTY IMPORTED_LOCATION "${GLUT_glut_LIBRARY}") endfunction() find_package(PkgConfig) if(PKG_CONFIG_FOUND) pkg_check_modules(GLUT glut) if(GLUT_FOUND) _add_glut_target_simple() FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLUT REQUIRED_VARS GLUT_FOUND) return() endif() endif() if(WIN32) find_path( GLUT_INCLUDE_DIR NAMES GL/glut.h PATHS ${GLUT_ROOT_PATH}/include ) find_library( GLUT_glut_LIBRARY_RELEASE NAMES glut glut32 freeglut PATHS ${OPENGL_LIBRARY_DIR} ${GLUT_ROOT_PATH}/Release ) find_library( GLUT_glut_LIBRARY_DEBUG NAMES freeglutd PATHS ${OPENGL_LIBRARY_DIR} ${GLUT_ROOT_PATH}/Debug ) mark_as_advanced(GLUT_glut_LIBRARY_RELEASE GLUT_glut_LIBRARY_DEBUG) select_library_configurations(GLUT_glut) elseif(APPLE) find_path(GLUT_INCLUDE_DIR glut.h ${OPENGL_LIBRARY_DIR}) find_library(GLUT_glut_LIBRARY GLUT DOC "GLUT library for OSX") find_library(GLUT_cocoa_LIBRARY Cocoa DOC "Cocoa framework for OSX") mark_as_advanced(GLUT_glut_LIBRARY GLUT_cocoa_LIBRARY) if(GLUT_cocoa_LIBRARY AND NOT TARGET GLUT::Cocoa) add_library(GLUT::Cocoa UNKNOWN IMPORTED) # Cocoa should always be a Framework, but we check to make sure. if(GLUT_cocoa_LIBRARY MATCHES "/([^/]+)\\.framework$") set(_glut_cocoa "${GLUT_cocoa_LIBRARY}/${CMAKE_MATCH_1}") if(EXISTS "${_glut_cocoa}.tbd") string(APPEND _glut_cocoa ".tbd") endif() set_target_properties(GLUT::Cocoa PROPERTIES IMPORTED_LOCATION "${_glut_cocoa}") else() set_target_properties(GLUT::Cocoa PROPERTIES IMPORTED_LOCATION "${GLUT_cocoa_LIBRARY}") endif() endif() else() if(BEOS) set(_GLUT_INC_DIR /boot/develop/headers/os/opengl) set(_GLUT_glut_LIB_DIR /boot/develop/lib/x86) else() find_library( GLUT_Xi_LIBRARY Xi /usr/openwin/lib ) mark_as_advanced(GLUT_Xi_LIBRARY) find_library( GLUT_Xmu_LIBRARY Xmu /usr/openwin/lib ) mark_as_advanced(GLUT_Xmu_LIBRARY) if(GLUT_Xi_LIBRARY AND NOT TARGET GLUT::Xi) add_library(GLUT::Xi UNKNOWN IMPORTED) set_target_properties(GLUT::Xi PROPERTIES IMPORTED_LOCATION "${GLUT_Xi_LIBRARY}") endif() if(GLUT_Xmu_LIBRARY AND NOT TARGET GLUT::Xmu) add_library(GLUT::Xmu UNKNOWN IMPORTED) set_target_properties(GLUT::Xmu PROPERTIES IMPORTED_LOCATION "${GLUT_Xmu_LIBRARY}") endif() endif () find_path( GLUT_INCLUDE_DIR GL/glut.h /usr/include/GL /usr/openwin/share/include /usr/openwin/include /opt/graphics/OpenGL/include /opt/graphics/OpenGL/contrib/libglut ${_GLUT_INC_DIR} ) find_library( GLUT_glut_LIBRARY glut /usr/openwin/lib ${_GLUT_glut_LIB_DIR} ) unset(_GLUT_INC_DIR) unset(_GLUT_glut_LIB_DIR) endif() mark_as_advanced(GLUT_glut_LIBRARY) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLUT REQUIRED_VARS GLUT_glut_LIBRARY GLUT_INCLUDE_DIR) if (GLUT_FOUND) # Is -lXi and -lXmu required on all platforms that have it? # If not, we need some way to figure out what platform we are on. set( GLUT_LIBRARIES ${GLUT_glut_LIBRARY} ) foreach(v GLUT_Xmu_LIBRARY GLUT_Xi_LIBRARY GLUT_cocoa_LIBRARY) if(${v}) list(APPEND GLUT_LIBRARIES ${${v}}) endif() endforeach() if(NOT TARGET GLUT::GLUT) add_library(GLUT::GLUT UNKNOWN IMPORTED) set_target_properties(GLUT::GLUT PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GLUT_INCLUDE_DIR}") if(GLUT_glut_LIBRARY MATCHES "/([^/]+)\\.framework$") set(_glut_glut "${GLUT_glut_LIBRARY}/${CMAKE_MATCH_1}") if(EXISTS "${_glut_glut}.tbd") string(APPEND _glut_glut ".tbd") endif() set_target_properties(GLUT::GLUT PROPERTIES IMPORTED_LOCATION "${_glut_glut}") else() if(GLUT_glut_LIBRARY_RELEASE) set_property(TARGET GLUT::GLUT APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(GLUT::GLUT PROPERTIES IMPORTED_LOCATION_RELEASE "${GLUT_glut_LIBRARY_RELEASE}") endif() if(GLUT_glut_LIBRARY_DEBUG) set_property(TARGET GLUT::GLUT APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) set_target_properties(GLUT::GLUT PROPERTIES IMPORTED_LOCATION_DEBUG "${GLUT_glut_LIBRARY_DEBUG}") endif() if(NOT GLUT_glut_LIBRARY_RELEASE AND NOT GLUT_glut_LIBRARY_DEBUG) set_property(TARGET GLUT::GLUT APPEND PROPERTY IMPORTED_LOCATION "${GLUT_glut_LIBRARY}") endif() endif() if(TARGET GLUT::Xmu) set_property(TARGET GLUT::GLUT APPEND PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Xmu) endif() if(TARGET GLUT::Xi) set_property(TARGET GLUT::GLUT APPEND PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Xi) endif() if(TARGET GLUT::Cocoa) set_property(TARGET GLUT::GLUT APPEND PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Cocoa) endif() endif() #The following deprecated settings are for backwards compatibility with CMake1.4 set (GLUT_LIBRARY ${GLUT_LIBRARIES}) set (GLUT_INCLUDE_PATH ${GLUT_INCLUDE_DIR}) endif() mark_as_advanced(GLUT_INCLUDE_DIR)