FindGLUT.cmake 5.68 KB
Newer Older
1 2 3
# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.

4 5 6 7
#[=======================================================================[.rst:
FindGLUT
--------

8
Find OpenGL Utility Toolkit (GLUT) library and include files.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

IMPORTED Targets
^^^^^^^^^^^^^^^^

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.
#]=======================================================================]
37

38 39
include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)

40 41
if (WIN32)
  find_path( GLUT_INCLUDE_DIR NAMES GL/glut.h
42
    PATHS  ${GLUT_ROOT_PATH}/include )
43
  find_library( GLUT_glut_LIBRARY_RELEASE NAMES glut glut32 freeglut
Bill Hoffman's avatar
Bill Hoffman committed
44
    PATHS
45 46
    ${OPENGL_LIBRARY_DIR}
    ${GLUT_ROOT_PATH}/Release
47
    )
48 49 50 51 52 53 54
  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)
55
else ()
56

57
  if (APPLE)
58 59 60
    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")
61
    mark_as_advanced(GLUT_glut_LIBRARY GLUT_cocoa_LIBRARY)
62 63 64 65 66 67 68 69 70 71 72 73

    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_target_properties(GLUT::Cocoa PROPERTIES
          IMPORTED_LOCATION "${GLUT_cocoa_LIBRARY}/${CMAKE_MATCH_1}")
      else()
        set_target_properties(GLUT::Cocoa PROPERTIES
          IMPORTED_LOCATION "${GLUT_cocoa_LIBRARY}")
      endif()
    endif()
74
  else ()
75

76 77 78 79 80 81 82 83 84 85
    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
        )
86
      mark_as_advanced(GLUT_Xi_LIBRARY)
87 88 89 90

      find_library( GLUT_Xmu_LIBRARY Xmu
        /usr/openwin/lib
        )
91
      mark_as_advanced(GLUT_Xmu_LIBRARY)
92

93 94 95 96 97 98 99 100 101 102 103 104
      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()

105 106
    endif ()

107
    find_path( GLUT_INCLUDE_DIR GL/glut.h
108
      /usr/include/GL
Ian Scott's avatar
Ian Scott committed
109 110 111
      /usr/openwin/share/include
      /usr/openwin/include
      /opt/graphics/OpenGL/include
112
      /opt/graphics/OpenGL/contrib/libglut
113
      ${_GLUT_INC_DIR}
114
      )
115

116
    find_library( GLUT_glut_LIBRARY glut
Ian Scott's avatar
Ian Scott committed
117
      /usr/openwin/lib
118
      ${_GLUT_glut_LIB_DIR}
119
      )
120
    mark_as_advanced(GLUT_glut_LIBRARY)
121

122 123
    unset(_GLUT_INC_DIR)
    unset(_GLUT_glut_LIB_DIR)
124

125
  endif ()
126

127
endif ()
128

129
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
130 131
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLUT REQUIRED_VARS GLUT_glut_LIBRARY GLUT_INCLUDE_DIR)

132
if (GLUT_FOUND)
133 134
  # 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.
135
  set( GLUT_LIBRARIES
136 137
    ${GLUT_glut_LIBRARY}
    )
138 139 140 141 142
  foreach(v GLUT_Xmu_LIBRARY GLUT_Xi_LIBRARY GLUT_cocoa_LIBRARY)
    if(${v})
      list(APPEND GLUT_LIBRARIES ${${v}})
    endif()
  endforeach()
143

144 145 146 147 148 149 150 151
  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_target_properties(GLUT::GLUT PROPERTIES
        IMPORTED_LOCATION "${GLUT_glut_LIBRARY}/${CMAKE_MATCH_1}")
    else()
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
      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()
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
    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()

188
  #The following deprecated settings are for backwards compatibility with CMake1.4
189 190
  set (GLUT_LIBRARY ${GLUT_LIBRARIES})
  set (GLUT_INCLUDE_PATH ${GLUT_INCLUDE_DIR})
191
endif()
Ian Scott's avatar
Ian Scott committed
192

193
mark_as_advanced(GLUT_INCLUDE_DIR)