mirror of https://github.com/axmolengine/axmol.git
156 lines
5.1 KiB
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)
|