1# Distributed under the OSI-approved BSD 3-Clause License. See accompanying 2# file Copyright.txt or https://cmake.org/licensing for details. 3 4#[=======================================================================[.rst: 5FindGLUT 6-------- 7 8Find OpenGL Utility Toolkit (GLUT) library and include files. 9 10IMPORTED Targets 11^^^^^^^^^^^^^^^^ 12 13.. versionadded:: 3.1 14 15This module defines the :prop_tgt:`IMPORTED` targets: 16 17``GLUT::GLUT`` 18 Defined if the system has GLUT. 19 20Result Variables 21^^^^^^^^^^^^^^^^ 22 23This module sets the following variables: 24 25:: 26 27 GLUT_INCLUDE_DIR, where to find GL/glut.h, etc. 28 GLUT_LIBRARIES, the libraries to link against 29 GLUT_FOUND, If false, do not try to use GLUT. 30 31Also defined, but not for general use are: 32 33:: 34 35 GLUT_glut_LIBRARY = the full path to the glut library. 36 GLUT_Xmu_LIBRARY = the full path to the Xmu library. 37 GLUT_Xi_LIBRARY = the full path to the Xi Library. 38 39.. versionadded:: 3.13 40 Debug and Release variants are found separately. 41#]=======================================================================] 42 43include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) 44include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) 45 46function(_add_glut_target_simple) 47 if(TARGET GLUT::GLUT) 48 return() 49 endif() 50 add_library(GLUT::GLUT INTERFACE IMPORTED) 51 if(GLUT_INCLUDE_DIRS) 52 target_include_directories(GLUT::GLUT SYSTEM 53 INTERFACE "${GLUT_INCLUDE_DIRS}") 54 endif() 55 if(GLUT_LIBRARIES) 56 target_link_libraries(GLUT::GLUT INTERFACE ${GLUT_LIBRARIES}) 57 endif() 58 if(GLUT_LDFLAGS) 59 target_link_options(GLUT::GLUT INTERFACE ${GLUT_LDFLAGS}) 60 endif() 61 if(GLUT_CFLAGS) 62 separate_arguments(GLUT_CFLAGS_SPLIT UNIX_COMMAND "${GLUT_CFLAGS}") 63 target_compile_options(GLUT::GLUT INTERFACE ${GLUT_CFLAGS_SPLIT}) 64 endif() 65 66 set_property(TARGET GLUT::GLUT APPEND PROPERTY 67 IMPORTED_LOCATION "${GLUT_glut_LIBRARY}") 68endfunction() 69 70find_package(PkgConfig) 71if(PKG_CONFIG_FOUND) 72 pkg_check_modules(GLUT glut) 73 if(GLUT_FOUND) 74 _add_glut_target_simple() 75 FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLUT REQUIRED_VARS GLUT_FOUND) 76 return() 77 endif() 78endif() 79 80if(WIN32) 81 find_path( GLUT_INCLUDE_DIR NAMES GL/glut.h 82 PATHS ${GLUT_ROOT_PATH}/include ) 83 find_library( GLUT_glut_LIBRARY_RELEASE NAMES glut glut32 freeglut 84 PATHS 85 ${OPENGL_LIBRARY_DIR} 86 ${GLUT_ROOT_PATH}/Release 87 ) 88 find_library( GLUT_glut_LIBRARY_DEBUG NAMES freeglutd 89 PATHS 90 ${OPENGL_LIBRARY_DIR} 91 ${GLUT_ROOT_PATH}/Debug 92 ) 93 mark_as_advanced(GLUT_glut_LIBRARY_RELEASE GLUT_glut_LIBRARY_DEBUG) 94 select_library_configurations(GLUT_glut) 95elseif(APPLE) 96 find_path(GLUT_INCLUDE_DIR glut.h ${OPENGL_LIBRARY_DIR}) 97 find_library(GLUT_glut_LIBRARY GLUT DOC "GLUT library for OSX") 98 find_library(GLUT_cocoa_LIBRARY Cocoa DOC "Cocoa framework for OSX") 99 mark_as_advanced(GLUT_glut_LIBRARY GLUT_cocoa_LIBRARY) 100 101 if(GLUT_cocoa_LIBRARY AND NOT TARGET GLUT::Cocoa) 102 add_library(GLUT::Cocoa UNKNOWN IMPORTED) 103 # Cocoa should always be a Framework, but we check to make sure. 104 if(GLUT_cocoa_LIBRARY MATCHES "/([^/]+)\\.framework$") 105 set(_glut_cocoa "${GLUT_cocoa_LIBRARY}/${CMAKE_MATCH_1}") 106 if(EXISTS "${_glut_cocoa}.tbd") 107 string(APPEND _glut_cocoa ".tbd") 108 endif() 109 set_target_properties(GLUT::Cocoa PROPERTIES 110 IMPORTED_LOCATION "${_glut_cocoa}") 111 else() 112 set_target_properties(GLUT::Cocoa PROPERTIES 113 IMPORTED_LOCATION "${GLUT_cocoa_LIBRARY}") 114 endif() 115 endif() 116else() 117 if(BEOS) 118 set(_GLUT_INC_DIR /boot/develop/headers/os/opengl) 119 set(_GLUT_glut_LIB_DIR /boot/develop/lib/x86) 120 else() 121 find_library( GLUT_Xi_LIBRARY Xi 122 /usr/openwin/lib 123 ) 124 mark_as_advanced(GLUT_Xi_LIBRARY) 125 126 find_library( GLUT_Xmu_LIBRARY Xmu 127 /usr/openwin/lib 128 ) 129 mark_as_advanced(GLUT_Xmu_LIBRARY) 130 131 if(GLUT_Xi_LIBRARY AND NOT TARGET GLUT::Xi) 132 add_library(GLUT::Xi UNKNOWN IMPORTED) 133 set_target_properties(GLUT::Xi PROPERTIES 134 IMPORTED_LOCATION "${GLUT_Xi_LIBRARY}") 135 endif() 136 137 if(GLUT_Xmu_LIBRARY AND NOT TARGET GLUT::Xmu) 138 add_library(GLUT::Xmu UNKNOWN IMPORTED) 139 set_target_properties(GLUT::Xmu PROPERTIES 140 IMPORTED_LOCATION "${GLUT_Xmu_LIBRARY}") 141 endif() 142 143 endif () 144 145 find_path( GLUT_INCLUDE_DIR GL/glut.h 146 /usr/include/GL 147 /usr/openwin/share/include 148 /usr/openwin/include 149 /opt/graphics/OpenGL/include 150 /opt/graphics/OpenGL/contrib/libglut 151 ${_GLUT_INC_DIR} 152 ) 153 154 find_library( GLUT_glut_LIBRARY glut 155 /usr/openwin/lib 156 ${_GLUT_glut_LIB_DIR} 157 ) 158 159 unset(_GLUT_INC_DIR) 160 unset(_GLUT_glut_LIB_DIR) 161endif() 162mark_as_advanced(GLUT_glut_LIBRARY) 163 164FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLUT REQUIRED_VARS GLUT_glut_LIBRARY GLUT_INCLUDE_DIR) 165 166if (GLUT_FOUND) 167 # Is -lXi and -lXmu required on all platforms that have it? 168 # If not, we need some way to figure out what platform we are on. 169 set( GLUT_LIBRARIES 170 ${GLUT_glut_LIBRARY} 171 ) 172 foreach(v GLUT_Xmu_LIBRARY GLUT_Xi_LIBRARY GLUT_cocoa_LIBRARY) 173 if(${v}) 174 list(APPEND GLUT_LIBRARIES ${${v}}) 175 endif() 176 endforeach() 177 178 if(NOT TARGET GLUT::GLUT) 179 add_library(GLUT::GLUT UNKNOWN IMPORTED) 180 set_target_properties(GLUT::GLUT PROPERTIES 181 INTERFACE_INCLUDE_DIRECTORIES "${GLUT_INCLUDE_DIR}") 182 if(GLUT_glut_LIBRARY MATCHES "/([^/]+)\\.framework$") 183 set(_glut_glut "${GLUT_glut_LIBRARY}/${CMAKE_MATCH_1}") 184 if(EXISTS "${_glut_glut}.tbd") 185 string(APPEND _glut_glut ".tbd") 186 endif() 187 set_target_properties(GLUT::GLUT PROPERTIES 188 IMPORTED_LOCATION "${_glut_glut}") 189 else() 190 if(GLUT_glut_LIBRARY_RELEASE) 191 set_property(TARGET GLUT::GLUT APPEND PROPERTY 192 IMPORTED_CONFIGURATIONS RELEASE) 193 set_target_properties(GLUT::GLUT PROPERTIES 194 IMPORTED_LOCATION_RELEASE "${GLUT_glut_LIBRARY_RELEASE}") 195 endif() 196 197 if(GLUT_glut_LIBRARY_DEBUG) 198 set_property(TARGET GLUT::GLUT APPEND PROPERTY 199 IMPORTED_CONFIGURATIONS DEBUG) 200 set_target_properties(GLUT::GLUT PROPERTIES 201 IMPORTED_LOCATION_DEBUG "${GLUT_glut_LIBRARY_DEBUG}") 202 endif() 203 204 if(NOT GLUT_glut_LIBRARY_RELEASE AND NOT GLUT_glut_LIBRARY_DEBUG) 205 set_property(TARGET GLUT::GLUT APPEND PROPERTY 206 IMPORTED_LOCATION "${GLUT_glut_LIBRARY}") 207 endif() 208 endif() 209 210 if(TARGET GLUT::Xmu) 211 set_property(TARGET GLUT::GLUT APPEND 212 PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Xmu) 213 endif() 214 215 if(TARGET GLUT::Xi) 216 set_property(TARGET GLUT::GLUT APPEND 217 PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Xi) 218 endif() 219 220 if(TARGET GLUT::Cocoa) 221 set_property(TARGET GLUT::GLUT APPEND 222 PROPERTY INTERFACE_LINK_LIBRARIES GLUT::Cocoa) 223 endif() 224 endif() 225 226 #The following deprecated settings are for backwards compatibility with CMake1.4 227 set (GLUT_LIBRARY ${GLUT_LIBRARIES}) 228 set (GLUT_INCLUDE_PATH ${GLUT_INCLUDE_DIR}) 229endif() 230 231mark_as_advanced(GLUT_INCLUDE_DIR) 232