123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #.rst:
- # FindGLFW3
- # ------------
- #
- # Locate glfw3 library
- #
- # This module defines
- #
- # ::
- #
- # GLFW3_LIBRARIES, the library to link against
- # GLFW3_FOUND, if false, do not try to link to FREETYPE
- # GLFW3_INCLUDE_DIRS, where to find headers.
- # This is the concatenation of the paths:
- # GLFW3_INCLUDE_DIR
- #
- #=============================================================================
- # Copyright 2014-2014 Martell Malone
- #
- # Distributed under the OSI-approved BSD License (the "License");
- # see accompanying file Copyright.txt for details.
- #
- # This software is distributed WITHOUT ANY WARRANTY; without even the
- # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- # See the License for more information.
- #=============================================================================
- # (To distribute this file outside of CMake, substitute the full
- # License text for the above reference.)
- # glfw has special requirements for linking (from docs: http://www.glfw.org/docs/latest/build.html)
- # MINGW or MSVC + static "glfw3" -> link: opengl32, gdi32 (plus glu32 if use GLU)
- # MINGW or MSVC + dynamic "glfw3dll" (but this not true ;) -> -DGLFW_DLL link: no
- # UNIX + static -> pkg-config --static --libs
- # UNIX + dynamic -> pkg-config --libs
- # So... if we find dynamic version, no problems, but if we find static, we need to determine deps
- # but cmake can't simply say to us what kind of library it found. So we try to find static version
- # first, and then if nothing found, we repeat search for dynamic
- find_package(PkgConfig)
- if(PKG_CONFIG_FOUND)
- message(STATUS "PkgConfig found")
- else()
- message(STATUS "PkgConfig not found, if you have only static glfw library, you build can fail")
- endif()
- if(PKG_CONFIG_FOUND)
- # Save some global stuff that we change, to revert after work has been done
- set(_saved_PKG_CONFIG_PATH "$ENV{PKG_CONFIG_PATH}")
- set(_saved_CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES}")
- # add /usr/local/lib/pkgconfig to pkg-config search path (some linuxes do not do that, but glfw installs to taht prefix by default)
- file(TO_CMAKE_PATH "$ENV{PKG_CONFIG_PATH}" PKG_CONFIG_PATH)
- list(APPEND PKG_CONFIG_PATH "/usr/local/lib/pkgconfig")
- file(TO_NATIVE_PATH "${PKG_CONFIG_PATH}" new_pkg_config_path)
- set(ENV{PKG_CONFIG_PATH} "${new_pkg_config_path}")
- # now try to find glfw with pkg-config
- pkg_check_modules(PC_GLFW3 glfw3)
- if(PC_GLFW3_FOUND)
- # try to find static library
- set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
- find_library(GLFW3_STATIC_LIBRARY NAMES glfw3 libglfw3 PATHS ${PC_GLFW3_LIBRARY_DIRS} NO_DEFAULT_PATH)
- find_library(GLFW3_STATIC_LIBRARY NAMES glfw3 libglfw3 PATHS ${PC_GLFW3_LIBRARY_DIRS})
- # also we include glfw3.h header, not GLFW/glfw3.h :(
- find_path(GLFW3_INCLUDE_DIRS glfw3.h PATH_SUFFIXES GLFW PATHS ${PC_GLFW3_INCLUDE_DIRS} NO_DEFAULT_PATH)
- find_path(GLFW3_INCLUDE_DIRS glfw3.h PATH_SUFFIXES GLFW PATHS ${PC_GLFW3_INCLUDE_DIRS})
- if(GLFW3_STATIC_LIBRARY)
- # glfw3 is static
- set(GLFW3_LIBRARIES ${PC_GLFW3_STATIC_LIBRARIES})
- set(GLFW3_LIBRARY_DIRS ${PC_GLFW3_STATIC_LIBRARY_DIRS})
- # We also need to add any other LDFLAGS, but with additional fixup for Apple frameworks :(
- if(APPLE)
- unset(_is_framework)
- foreach(_arg ${PC_GLFW3_STATIC_LDFLAGS_OTHER})
- if(_is_framework)
- set(var FRAMEWORK_${_arg}_LIBRARY)
- find_library(${var} ${_arg})
- if(${var})
- list(APPEND GLFW3_LIBRARIES ${${var}})
- endif()
- unset(var)
- unset(_is_framework)
- else()
- if(_arg STREQUAL "-framework")
- set(_is_framework 1)
- else()
- list(APPEND GLFW3_LIBRARIES ${_arg})
- endif()
- endif()
- endforeach()
- else(APPLE)
- list(APPEND GLFW3_LIBRARIES ${PC_GLFW3_STATIC_LDFLAGS_OTHER})
- endif(APPLE)
- else()
- # glfw3 is dynamic
- set(GLFW3_DEFINITIONS -DGLFW_DLL)
- set(GLFW3_LIBRARIES ${PC_GLFW3_LIBRARIES})
- set(GLFW3_LIBRARY_DIRS ${PC_GLFW3_LIBRARY_DIRS})
- endif()
- set(GLFW3_FOUND 1)
-
- endif()
- # Restore global stuff
- set(CMAKE_FIND_LIBRARY_SUFFIXES "${_saved_CMAKE_FIND_LIBRARY_SUFFIXES}")
- set(ENV{PKG_CONFIG_PATH} "${_saved_PKG_CONFIG_PATH}")
- endif(PKG_CONFIG_FOUND)
- # fallback if pkg-config method not work
- if(NOT GLFW3_FOUND)
- find_path(GLFW3_INCLUDE_DIR glfw3.h
- HINTS
- ENV GLFW3_DIR
- PATH_SUFFIXES include/GLFW include
- PATHS
- ~/Library/Frameworks
- /Library/Frameworks
- /usr/local
- /usr
- /sw # Fink
- /opt/local # DarwinPorts
- /opt/csw # Blastwave
- /opt
- )
- find_library(GLFW3_LIBRARY
- NAMES glfw3 libglfw3 glfw
- HINTS
- ENV GLFW3_DIR
- PATH_SUFFIXES lib
- PATHS
- ~/Library/Frameworks
- /Library/Frameworks
- /usr/local
- /usr
- /sw
- /opt/local
- /opt/csw
- /opt
- )
- set(GLFW3_INCLUDE_DIRS "${GLFW3_INCLUDE_DIR}")
- set(GLFW3_LIBRARIES "${GLFW3_LIBRARY}")
- include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
- find_package_handle_standard_args(GLFW3 DEFAULT_MSG GLFW3_LIBRARIES GLFW3_INCLUDE_DIR)
- endif()
- mark_as_advanced(GLFW3_INCLUDE_DIR GLFW3_LIBRARIES GLFW3_LIBRARY)
|