Browse Source

add support for static system GLEW to cmake

Palana 11 years ago
parent
commit
c536d70379
2 changed files with 83 additions and 6 deletions
  1. 63 0
      cmake/FindGLEW.cmake
  2. 20 6
      libobs-opengl/CMakeLists.txt

+ 63 - 0
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)

+ 20 - 6
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