diff options
| author | Ahmad Fatoum <ahmad@a3f.at> | 2018-02-03 10:17:51 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-02-03 10:17:51 +0100 |
| commit | 7f5fa4d49c4641a8dc0a6716b64cec9166f3fcdc (patch) | |
| tree | c5a82ecb5a412f0d5b1220ae4c859d9437b0e588 /utils.cmake | |
| parent | 007ae1b7b3446da7d2c561db69a535c5ac0b93da (diff) | |
| download | raylib-7f5fa4d49c4641a8dc0a6716b64cec9166f3fcdc.tar.gz raylib-7f5fa4d49c4641a8dc0a6716b64cec9166f3fcdc.zip | |
CMake: Add tristate option for using system GLFW (#455)
-DWITH_SYSTEM_GLFW=ON: Link against system glfw and fail otherwise
-DWITH_SYSTEM_GLFW=OFF: Use embedded rglfw.c
-DWITH_SYSTEM_GLFW=IF_POSSIBLE: Probe for system glfw but fallback to
rglfw if unavailable
Also change Linux 64-bit CI build to install system glfw and use it,
so this doesn't bitrot.
Addresses #453.
Diffstat (limited to 'utils.cmake')
| -rw-r--r-- | utils.cmake | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/utils.cmake b/utils.cmake index efdfae50..871ad119 100644 --- a/utils.cmake +++ b/utils.cmake @@ -1,6 +1,9 @@ # All sorts of things that we need cross project cmake_minimum_required(VERSION 2.8.0) +set(WITH_SYSTEM_GLFW OFF CACHE STRING "Link raylib against system GLFW instead of embedded one") +set_property(CACHE WITH_SYSTEM_GLFW PROPERTY STRINGS ON OFF IF_POSSIBLE) + # Linking for OS X -framework options # Will do nothing on other OSes if(APPLE) @@ -27,24 +30,59 @@ else() find_library(XINERAMA_LIBRARY Xinerama) find_library(XXF86VM_LIBRARY Xxf86vm) find_library(XCURSOR_LIBRARY Xcursor) - include_directories(${OPENGL_INCLUDE_DIR}) set(LIBS_PRIVATE m ${pthread} ${OPENGL_LIBRARIES} ${X11_LIBRARIES} ${XRANDR_LIBRARY} ${XINERAMA_LIBRARY} ${XI_LIBRARY} ${XXF86VM_LIBRARY} ${XCURSOR_LIBRARY}) endif() endif() +if(WITH_SYSTEM_GLFW STREQUAL "ON") + find_package(glfw3 3.2.1 REQUIRED) +else(WITH_SYSTEM_GLFW STREQUAL "IF_POSSIBLE") + find_package(glfw3 3.2.1) +endif() +if (glfw3_FOUND) + set(LIBS_PRIVATE ${LIBS_PRIVATE} glfw) +endif() + + if(CMAKE_SYSTEM_NAME STREQUAL Linux) set(LINUX TRUE) set(LIBS_PRIVATE dl ${LIBS_PRIVATE}) endif() +foreach(L ${LIBS_PRIVATE}) + get_filename_component(DIR ${L} PATH) + get_filename_component(LIBFILE ${L} NAME_WE) + STRING(REGEX REPLACE "^lib" "" FILE ${LIBFILE}) + + if (${L} MATCHES "[.]framework$") + set(FILE_OPT "-framework ${FILE}") + set(DIR_OPT "-F${DIR}") + else() + set(FILE_OPT "-l${FILE}") + set(DIR_OPT "-L${DIR}") + endif() + + if ("${DIR}" STREQUAL "" OR "${DIR}" STREQUAL "${LASTDIR}") + set (DIR_OPT "") + endif() + + set(LASTDIR ${DIR}) + + set(PKG_CONFIG_LIBS_PRIVATE ${PKG_CONFIG_LIBS_PRIVATE} ${DIR_OPT} ${FILE_OPT}) + string (REPLACE ";" " " PKG_CONFIG_LIBS_PRIVATE "${PKG_CONFIG_LIBS_PRIVATE}") +endforeach(L) + + + # Do the linking for executables that are meant to link raylib function(link_libraries_to_executable executable) - # And raylib - target_link_libraries(${executable} raylib) - - # Link the libraries - target_link_libraries(${executable} ${LIBS_PRIVATE}) + # Link raylib + if (TARGET raylib_shared) + target_link_libraries(${executable} raylib_shared) + else() + target_link_libraries(${executable} raylib ${PKG_CONFIG_LIBS_PRIVATE}) + endif() endfunction() |
