axmol/cmake/Modules/FindGLFW3.cmake

156 lines
5.1 KiB
CMake

#.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)
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)