diff --git a/cmake/FindGLEW.cmake b/cmake/FindGLEW.cmake new file mode 100644 index 000000000..b279a177b --- /dev/null +++ b/cmake/FindGLEW.cmake @@ -0,0 +1,63 @@ +find_package(PkgConfig) + +pkg_check_modules(PC_GLEW QUIET glew) + +set(GLEW_STANDARD_DEFINITIONS ${PC_GLEW_DEFINITIONS} + CACHE STRING + "GLEW required CFLAGS") +set(GLEW_STATIC_DEFINITIONS ${PC_GLEW_STATIC_DEFINITIONS} + CACHE STRING + "GLEW static required CFLAGS") + +find_path(GLEW_STANDARD_INCLUDE_DIR GL/glew.h + HINTS ${PC_GLEW_INCLUDEDIR} + ${PC_GLEW_INCLUDE_DIRS}) +find_path(GLEW_STATIC_INCLUDE_DIR GL/glew.h + HINTS ${PC_GLEW_STATIC_INCLUDEDIR} + ${PC_GLEW_STATIC_INCLUDE_DIRS}) + +find_library(GLEW_STANDARD_LIBRARY + NAMES ${PC_GLEW_LIBRARIES} GLEW glew32 glew glew32s + HINTS ${PC_GLEW_LIBDIR} + ${PC_GLEW_LIBRARY_DIRS} + PATH_SUFFIXES lib64) +set(lib_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES}) +set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} + ${CMAKE_DYNAMIC_LIBRARY_SUFFIX} ${CMAKE_SHARED_OBJECT_SUFFIX}) +find_library(GLEW_STATIC_LIBRARY + NAMES ${PC_GLEW_STATIC_LIBRARIES} GLEW glew32 glew glew32s + HINTS ${PC_GLEW_STATIC_LIBDIR} + ${PC_GLEW_STATIC_LIBRARY_DIRS} + PATH_SUFFIXES lib64) +set(CMAKE_FIND_LIBRARY_SUFFIXES ${lib_suffixes}) +unset(lib_suffixes) + +if(GLEW_FIND_COMPONENTS AND + GLEW_FIND_COMPONENTS STREQUAL "static") + set(GLEW_DEFINITION ${GLEW_STATIC_DEFINITIONS}) + set(GLEW_INCLUDE_DIR ${GLEW_STATIC_INCLUDE_DIR}) + set(GLEW_LIBRARY ${GLEW_STATIC_LIBRARY}) +else() + set(GLEW_DEFINITION ${GLEW_STANDARD_DEFINITIONS}) + set(GLEW_INCLUDE_DIR ${GLEW_STANDARD_INCLUDE_DIR}) + set(GLEW_LIBRARY ${GLEW_STANDARD_LIBRARY}) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(GLEW STANDARD_MESSAGE + GLEW_INCLUDE_DIR GLEW_LIBRARY) + +if(GLEW_FOUND) + set(GLEW_DEFINITIONS ${GLEW_DEFINITION}) + set(GLEW_INCLUDE_DIRS ${GLEW_INCLUDE_DIR}) + set(GLEW_LIBRARIES ${GLEW_LIBRARY}) +endif() + +mark_as_advanced( + GLEW_STANDARD_DEFINITIONS + GLEW_STANDARD_INCLUDE_DIR + GLEW_STANDARD_LIBRARY + + GLEW_STATIC_DEFINITIONS + GLEW_STATIC_INCLUDE_DIR + GLEW_STATIC_LIBRARY) diff --git a/libobs-opengl/CMakeLists.txt b/libobs-opengl/CMakeLists.txt index 732e18fe3..37de85ec8 100644 --- a/libobs-opengl/CMakeLists.txt +++ b/libobs-opengl/CMakeLists.txt @@ -17,7 +17,10 @@ elseif(APPLE AND UNIX) else() endif() -option(USE_STATIC_GLEW "Build using bundled GLEW" ${WIN32}) +option(USE_BUNDLED_GLEW "Build using bundled GLEW" ${WIN32}) + +option(USE_STATIC_GLEW "Link GLEW statically (ignored with USE_BUNDLED_GLEW)" + false) include_directories(SYSTEM ${obs_SOURCE_DIR}/libobs) @@ -26,14 +29,25 @@ include_directories(${OPENGL_INCLUDE_DIRS}) add_definitions(-DGLEW_NO_GLU) -if(NOT USE_STATIC_GLEW) - find_package(GLEW REQUIRED) - include_directories(${GLEW_INCLUDE_DIRS}) - set(GLEW_SRC) -else() +if(USE_BUNDLED_GLEW) include_directories(SYSTEM glew/include) add_definitions(-DGLEW_STATIC) set(GLEW_SRC glew/src/glew.c) +else() + if(USE_STATIC_GLEW) + set(lib_prefixes ${CMAKE_FIND_LIBRARY_PREFIXES}) + set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_STATIC_LIBRARY_PREFIX} + ${CMAKE_DYNAMIC_LIBRARY_PREFIX} + ${CMAKE_SHARED_OBJECT_PREFIX}) + set(glew_static "static") + endif() + find_package(GLEW REQUIRED ${glew_static}) + include_directories(${GLEW_INCLUDE_DIRS}) + if(USE_STATIC_GLEW) + unset(glew_static) + set(CMAKE_FIND_LIBRARY_PREFIXES ${lib_prefixes}) + unset(lib_prefixes) + endif() endif() add_library(libobs-opengl MODULE