Fix support for a static build of Epoxy. Add support building and running tests with CMake. Add support for linking with the static run-time library with MSVC.

macos/v1.5.9
Yaron Cohen-Tal 9 years ago
parent 64e2ee2ca8
commit 44d51f2844
  1. 88
      CMakeLists.txt
  2. 16
      README.md
  3. 12
      cmake/FindEGL.cmake
  4. 12
      cmake/FindGLESv1.cmake
  5. 12
      cmake/FindGLESv2.cmake
  6. 17
      cmake/epoxy_run_test_wrapper.cmake
  7. 15
      include/epoxy/common.h
  8. 73
      src/CMakeLists.txt
  9. 3
      src/dispatch_common.c
  10. 0
      src/dispatch_common.h
  11. 2
      src/dispatch_egl.c
  12. 75
      src/dispatch_wgl.c
  13. 101
      src/dllmain.c
  14. 150
      test/CMakeLists.txt
  15. 5
      test/egl_and_glx_different_pointers.c
  16. 3
      test/egl_gl.c
  17. 3
      test/egl_has_extension_nocontext.c
  18. 3
      test/egl_without_glx.c
  19. 5
      test/glx_alias_prefer_same_name.c
  20. 3
      test/glx_beginend.c
  21. 4
      test/glx_common.c
  22. 4
      test/glx_gles2.c
  23. 3
      test/glx_glxgetprocaddress_nocontext.c
  24. 3
      test/glx_has_extension_nocontext.c
  25. 3
      test/glx_public_api.c
  26. 3
      test/glx_public_api_core.c
  27. 3
      test/glx_static.c
  28. 43
      test/headerguards.c
  29. 21
      test/khronos_typedefs_nonepoxy.c
  30. 6
      test/miscdefines.c
  31. 4
      test/wgl_common.c
  32. 4
      test/wgl_core_and_exts.c
  33. 6
      test/wgl_per_context_funcptrs.c
  34. 8
      test/wgl_usefontbitmaps.c

@ -1,50 +1,98 @@
cmake_minimum_required (VERSION 3.0) cmake_minimum_required (VERSION 3.0)
cmake_policy (VERSION 3.0)
if (NOT CMAKE_VERSION VERSION_LESS "3.1") if (NOT CMAKE_VERSION VERSION_LESS "3.1")
cmake_policy (SET CMP0054 NEW) cmake_policy (SET CMP0054 OLD)
endif ()
if (NOT CMAKE_VERSION VERSION_LESS "3.3")
cmake_policy (SET CMP0063 NEW)
set (HONOR_VISIBILITY TRUE)
else ()
set (HONOR_VISIBILITY FALSE)
endif () endif ()
project (Epoxy VERSION 1.3.1 LANGUAGES C) project (Epoxy VERSION 1.3.1 LANGUAGES C)
set (TARGET_NAME epoxy) set (EPOXY_TARGET_NAME epoxy)
set (TARGET_VER 1.3.1_yaronct-4) set (TARGET_VER 1.3.1_yaronct-5)
set (TARGET_ABI_VER 0) set (TARGET_ABI_VER 0)
set (TARGET_OUTPUT_NAME "${TARGET_NAME}") set (TARGET_OUTPUT_NAME "${EPOXY_TARGET_NAME}")
include (GNUInstallDirs)
include (CMakeDependentOption)
set (CMAKE_C_VISIBILITY_PRESET "hidden") set (COMPILER_ID_MSVC MSVC)
set (COMPILER_ID_GCC GNU)
set (COMPILER_ID_CLANG Clang)
if ((CMAKE_C_COMPILER_ID STREQUAL "GNU") OR (CMAKE_C_COMPILER_ID STREQUAL "Clang")) if ((CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_GCC) OR (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_CLANG))
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
elseif (NOT CMAKE_VERSION VERSION_LESS "3.1") elseif (NOT CMAKE_VERSION VERSION_LESS "3.1")
set (CMAKE_C_STANDARD_REQUIRED TRUE) set (CMAKE_C_STANDARD_REQUIRED TRUE)
set (CMAKE_C_STANDARD "99") set (CMAKE_C_STANDARD "99")
endif () endif ()
if ((CMAKE_C_COMPILER_ID STREQUAL "GNU") OR (CMAKE_C_COMPILER_ID STREQUAL "Clang")) if ((CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_GCC) OR (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_CLANG))
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing -Wall -Wextra") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing -Wall -Wextra")
elseif (CMAKE_C_COMPILER_ID STREQUAL "MSVC") elseif (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_MSVC)
if (NOT CMAKE_C_FLAGS MATCHES "/W[0-4]") set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4")
endif ()
endif () endif ()
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package (X11) find_package (X11)
find_package (PythonInterp) find_package (PythonInterp)
find_package (EGL)
find_package (GLESv1)
find_package (GLESv2)
find_package (OpenGL)
include (CMakeDependentOption) option (EPOXY_REBUILD_FROM_SPECS "Rebuild the auto-generated sources and headers from the specs" FALSE)
option (EPOXY_REBUILD_FROM_SPECS "Whether to rebuild the auto-generated sources and headers from the specs" FALSE)
if (EPOXY_REBUILD_FROM_SPECS AND NOT PYTHONINTERP_FOUND) if (EPOXY_REBUILD_FROM_SPECS AND NOT PYTHONINTERP_FOUND)
message (FATAL_ERROR "You've set \"EPOXY_REBUILD_FROM_SPECS\" to \"TRUE\", which requires a python interpreter, but one couldn't be found.") message (FATAL_ERROR "You've set \"EPOXY_REBUILD_FROM_SPECS\" to \"TRUE\", which requires a python interpreter, but one couldn't be found.")
endif () endif ()
option (EPOXY_SUPPORT_EGL "Whether to build with EGL support" TRUE) option (EPOXY_SUPPORT_EGL "Build with EGL support" ON)
cmake_dependent_option (EPOXY_SUPPORT_WGL "Whether to build with WGL support" ON WIN32 OFF) cmake_dependent_option (EPOXY_SUPPORT_WGL "Build with WGL support" ON WIN32 OFF)
cmake_dependent_option (EPOXY_SUPPORT_GLX "Whether to build with GLX support" "${X11_FOUND}" "NOT (WIN32 OR ANDROID)" OFF)
if (X11_FOUND AND OPENGL_FOUND)
set (EPOXY_GLX_FOUND TRUE)
else ()
set (EPOXY_GLX_FOUND FALSE)
endif ()
cmake_dependent_option (EPOXY_SUPPORT_GLX "Build with GLX support"
"${EPOXY_GLX_FOUND}" "NOT (WIN32 OR ANDROID)" OFF)
option (EPOXY_BUILD_SHARED "Whether to build a shared library" TRUE) option (EPOXY_BUILD_SHARED "Build a shared library" ON)
option (EPOXY_BUILD_STATIC "Whether to build a static library" FALSE) option (EPOXY_BUILD_STATIC "Build a static library" OFF)
if (DEFINED CMAKE_TOOLCHAIN_FILE)
set (EPOXY_BUILD_TESTS_DEFAULT FALSE)
else ()
set (EPOXY_BUILD_TESTS_DEFAULT TRUE)
endif ()
option (EPOXY_BUILD_TESTS "Build tests" "${EPOXY_BUILD_TESTS_DEFAULT}")
cmake_dependent_option (EPOXY_MSVC_USE_RUNTIME_LIBRARY_DLL "Link with MSVC Runtime Library DLL" ON
"CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_MSVC" OFF)
configure_file ("include/epoxy/config.h.in" "include/epoxy/config.h") configure_file ("include/epoxy/config.h.in" "include/epoxy/config.h")
set (EPOXY_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include"
"${CMAKE_CURRENT_BINARY_DIR}/include"
"${CMAKE_CURRENT_SOURCE_DIR}/src")
if (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_MSVC
AND NOT EPOXY_MSVC_USE_RUNTIME_LIBRARY_DLL)
foreach (flags CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_RELWITHDEBINFO)
string (REGEX REPLACE "/MDd" "/MTd" ${flags} "${${flags}}")
string (REGEX REPLACE "/MD" "/MT" ${flags} "${${flags}}")
endforeach ()
endif ()
add_subdirectory (src) add_subdirectory (src)
if (EPOXY_BUILD_TESTS)
enable_testing ()
add_subdirectory (test)
endif ()

@ -28,7 +28,11 @@ Features
Building (CMake) Building (CMake)
----------------- -----------------
CMake is now the recommended way to build epoxy. It should be as simple as: CMake is now the recommended way to build epoxy. It supports building both
shared and static libraries (by default only shared library is built). It also
supports building and running tests, both for the static and the shared library.
Building with CMake should be as simple as:
cd <my-build_dir> cd <my-build_dir>
cmake <my-source-dir> cmake <my-source-dir>
@ -46,8 +50,11 @@ solution.
* To disable building shared libraries, add * To disable building shared libraries, add
"-DEPOXY_BUILD_SHARED=OFF" to the "cmake" invocation. "-DEPOXY_BUILD_SHARED=OFF" to the "cmake" invocation.
Note that building with CMake currently doesn't support building or running * To disable building tests, add
tests. "-DEPOXY_BUILD_TESTS=OFF" to the "cmake" invocation.
* To link to the static Runtime Library with MSVC (rather than to the DLL), add
"-DEPOXY_MSVC_USE_RUNTIME_LIBRARY_DLL=OFF" to the "cmake" invocation.
Building (Autotools) Building (Autotools)
--------------------- ---------------------
@ -100,6 +107,9 @@ tests.
Switching your Code to Use Epoxy Switching your Code to Use Epoxy
--------------------------------- ---------------------------------
* NOTE: If you use the static version of Epoxy, you must build your project with
"EPOXY_STATIC_LIB" defined!
It should be as easy as replacing: It should be as easy as replacing:
#include <GL/gl.h> #include <GL/gl.h>

@ -0,0 +1,12 @@
# Find EGL
#
# EGL_LIBRARY
# EGL_FOUND
set (EGL_NAMES ${EGL_NAMES} egl EGL libEGL)
find_library (EGL_LIBRARY NAMES ${EGL_NAMES} PATHS /opt/vc/lib)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(EGL DEFAULT_MSG EGL_LIBRARY)
mark_as_advanced(EGL_LIBRARY)

@ -0,0 +1,12 @@
# Find GLESv1
#
# GLESv1_LIBRARY
# GLESv1_FOUND
set(GLESv1_NAMES ${GLESv1_NAMES} GLESv1_CM libGLES_CM)
find_library (GLESv1_LIBRARY NAMES ${GLESv1_NAMES} PATHS /opt/vc/lib)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args (GLESv1 DEFAULT_MSG GLESv1_LIBRARY)
mark_as_advanced (GLESv1_LIBRARY)

@ -0,0 +1,12 @@
# Find GLESv2
#
# GLESv2_LIBRARY
# GLESv2_FOUND
set (GLESv2_NAMES ${GLESv2_NAMES} GLESv2 libGLESv2)
find_library (GLESv2_LIBRARY NAMES ${GLESv2_NAMES} PATHS /opt/vc/lib)
include (FindPackageHandleStandardArgs)
find_package_handle_standard_args (GLESv2 DEFAULT_MSG GLESv2_LIBRARY)
mark_as_advanced (GLESv2_LIBRARY)

@ -0,0 +1,17 @@
cmake_minimum_required (VERSION 3.0)
if (NOT CMAKE_VERSION VERSION_LESS "3.1")
cmake_policy (SET CMP0054 OLD)
endif ()
if (WIN32 AND DEFINED EPOXY_SHARED_LIB)
get_filename_component (EPOXY_SHARED_LIB_DIR "${EPOXY_SHARED_LIB}" DIRECTORY)
file (TO_NATIVE_PATH "${EPOXY_SHARED_LIB_DIR}" EPOXY_SHARED_LIB_DIR)
if (NOT DEFINED ENV{PATH} OR ENV{PATH} STREQUAL "")
set (ENV{PATH} "${EPOXY_SHARED_LIB_DIR}")
else ()
set (ENV{PATH} "${EPOXY_SHARED_LIB_DIR};$ENV{PATH}")
endif ()
endif ()
execute_process (COMMAND "${EPOXY_TEST_CMD}" RESULT_VARIABLE TEST_RETURN_VAL)
if (NOT TEST_RETURN_VAL EQUAL 0 AND NOT TEST_RETURN_VAL EQUAL 77)
message (FATAL_ERROR "Test has failed!")
endif ()

@ -38,28 +38,35 @@ extern "C" {
#endif #endif
#if defined _WIN32 || defined __CYGWIN__ #if defined _WIN32 || defined __CYGWIN__
#ifdef EPOXY_EXPORTS #if defined EPOXY_STATIC_LIB
#define EPOXY_IMPORTEXPORT
#else
#if defined EPOXY_BUILDING_LIB
#ifdef __GNUC__ #ifdef __GNUC__
#define EPOXY_IMPORTEXPORT __attribute__ ((dllexport)) #define EPOXY_IMPORTEXPORT __attribute__((dllexport))
#else #else
#define EPOXY_IMPORTEXPORT __declspec(dllexport) #define EPOXY_IMPORTEXPORT __declspec(dllexport)
#endif #endif
#else #else
#ifdef __GNUC__ #ifdef __GNUC__
#define EPOXY_IMPORTEXPORT __attribute__ ((dllimport)) #define EPOXY_IMPORTEXPORT __attribute__((dllimport))
#else #else
#define EPOXY_IMPORTEXPORT __declspec(dllimport) #define EPOXY_IMPORTEXPORT __declspec(dllimport)
#endif #endif
#endif #endif
#endif
#elif defined __ANDROID__ #elif defined __ANDROID__
#include <sys/cdefs.h> #include <sys/cdefs.h>
#define EPOXY_IMPORTEXPORT __attribute__((visibility("default"))) __NDK_FPABI__ #define EPOXY_IMPORTEXPORT __attribute__((visibility("default"))) __NDK_FPABI__
#elif (defined __GNUC__ && __GNUC__ >= 4) || (defined __SUNPRO_C && __SUNPRO_C >= 0x590) #elif (defined __GNUC__ && __GNUC__ >= 4) || (defined __SUNPRO_C && __SUNPRO_C >= 0x590)
#define EPOXY_IMPORTEXPORT __attribute__ ((visibility ("default"))) #define EPOXY_IMPORTEXPORT __attribute__((visibility("default")))
#else #else
#define EPOXY_IMPORTEXPORT #define EPOXY_IMPORTEXPORT
#endif #endif
// Prevent "unused variable/parameter" warnings.
#define EPOXY_UNUSED(var) ((void)var)
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

@ -63,62 +63,61 @@ if (EPOXY_SUPPORT_WGL)
"${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/wgl_generated.h") "${CMAKE_CURRENT_BINARY_DIR}/../include/epoxy/wgl_generated.h")
endif () endif ()
set (EPOXY_INCLUDE_DIRS "../include" set (EPOXY_COMPILE_DEFS PRIVATE EPOXY_BUILDING_LIB)
"${CMAKE_CURRENT_BINARY_DIR}/../include" if (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_MSVC)
"${CMAKE_CURRENT_SOURCE_DIR}") set (EPOXY_COMPILE_DEFS ${EPOXY_COMPILE_DEFS} "inline=__inline")
set (TARGET_OBJS_NAME "${TARGET_NAME}_objs")
add_library ("${TARGET_NAME}_objs" OBJECT ${SOURCES} ${HEADERS})
set_target_properties ("${TARGET_NAME}_objs" PROPERTIES
POSITION_INDEPENDENT_CODE TRUE)
target_include_directories ("${TARGET_NAME}_objs" PUBLIC ${EPOXY_INCLUDE_DIRS})
if (CMAKE_C_COMPILER_ID STREQUAL "MSVC")
target_compile_definitions ("${TARGET_NAME}_objs" PUBLIC "inline=__inline" EPOXY_EXPORTS)
endif ()
set (EPOXY_LIBS_FILES $<TARGET_OBJECTS:${TARGET_NAME}_objs>)
if (WIN32)
set (EPOXY_LIBS_EXTRA_FILES dllmain.c)
else ()
set (EPOXY_LIBS_EXTRA_FILES "")
endif () endif ()
set (TARGETS_BUILT_NAMES "") set (EPOXY_TARGET_CODE ${SOURCES} ${HEADERS})
set (EPOXY_TARGETS_BUILT_NAMES "")
if (EPOXY_BUILD_SHARED) if (EPOXY_BUILD_SHARED)
list (APPEND TARGETS_BUILT_NAMES "${TARGET_NAME}_shared") list (APPEND EPOXY_TARGETS_BUILT_NAMES "${EPOXY_TARGET_NAME}_shared")
add_library ("${TARGET_NAME}_shared" SHARED $<TARGET_OBJECTS:${TARGET_NAME}_objs> ${EPOXY_LIBS_EXTRA_FILES}) add_library ("${EPOXY_TARGET_NAME}_shared" SHARED ${EPOXY_TARGET_CODE})
target_link_libraries ("${EPOXY_TARGET_NAME}_shared" ${CMAKE_DL_LIBS})
if (WIN32 OR ANDROID) if (WIN32 OR ANDROID)
set_target_properties ("${TARGET_NAME}_shared" PROPERTIES set_target_properties ("${EPOXY_TARGET_NAME}_shared" PROPERTIES
OUTPUT_NAME "${TARGET_OUTPUT_NAME}_${TARGET_ABI_VER}") OUTPUT_NAME "${TARGET_OUTPUT_NAME}_${TARGET_ABI_VER}")
else () else ()
set_target_properties ("${TARGET_NAME}_shared" PROPERTIES set_target_properties ("${EPOXY_TARGET_NAME}_shared" PROPERTIES
OUTPUT_NAME "${TARGET_OUTPUT_NAME}") OUTPUT_NAME "${TARGET_OUTPUT_NAME}")
endif () endif ()
if (NOT ANDROID) if (NOT ANDROID)
set_target_properties("${TARGET_NAME}_shared" PROPERTIES set_target_properties("${EPOXY_TARGET_NAME}_shared" PROPERTIES
VERSION "${TARGET_VER}" VERSION "${TARGET_VER}"
SOVERSION "${TARGET_ABI_VER}") SOVERSION "${TARGET_ABI_VER}")
endif () endif ()
target_include_directories ("${TARGET_NAME}_shared" PUBLIC ${EPOXY_INCLUDE_DIRS}) target_include_directories ("${EPOXY_TARGET_NAME}_shared" PUBLIC ${EPOXY_INCLUDE_DIRS})
target_compile_definitions ("${TARGET_NAME}_shared" PUBLIC EPOXY_EXPORTS EPOXY_BUILDING_SHARED_LIB) target_compile_definitions ("${EPOXY_TARGET_NAME}_shared" PRIVATE ${EPOXY_COMPILE_DEFS})
set_target_properties ("${EPOXY_TARGET_NAME}_shared" PROPERTIES C_VISIBILITY_PRESET hidden)
endif () endif ()
if (EPOXY_BUILD_STATIC) if (EPOXY_BUILD_STATIC)
list (APPEND TARGETS_BUILT_NAMES "${TARGET_NAME}_static") list (APPEND EPOXY_TARGETS_BUILT_NAMES "${EPOXY_TARGET_NAME}_static")
add_library ("${TARGET_NAME}_static" STATIC $<TARGET_OBJECTS:${TARGET_NAME}_objs> ${EPOXY_LIBS_EXTRA_FILES}) add_library ("${EPOXY_TARGET_NAME}_static" STATIC ${EPOXY_TARGET_CODE})
target_link_libraries ("${EPOXY_TARGET_NAME}_static" ${CMAKE_DL_LIBS})
if (WIN32) if (WIN32)
set_target_properties ("${TARGET_NAME}_static" PROPERTIES set_target_properties ("${EPOXY_TARGET_NAME}_static" PROPERTIES
OUTPUT_NAME "${TARGET_OUTPUT_NAME}_static_${TARGET_ABI_VER}") OUTPUT_NAME "${TARGET_OUTPUT_NAME}_static_${TARGET_ABI_VER}")
else () else ()
set_target_properties ("${TARGET_NAME}_static" PROPERTIES set_target_properties ("${EPOXY_TARGET_NAME}_static" PROPERTIES
OUTPUT_NAME "${TARGET_OUTPUT_NAME}_${TARGET_ABI_VER}") OUTPUT_NAME "${TARGET_OUTPUT_NAME}_${TARGET_ABI_VER}")
endif () endif ()
target_include_directories ("${TARGET_NAME}_static" PUBLIC ${EPOXY_INCLUDE_DIRS}) target_include_directories ("${EPOXY_TARGET_NAME}_static" PUBLIC ${EPOXY_INCLUDE_DIRS})
target_compile_definitions ("${TARGET_NAME}_static" PUBLIC EPOXY_EXPORTS EPOXY_BUILDING_STATIC_LIB) target_compile_definitions ("${EPOXY_TARGET_NAME}_static" PRIVATE ${EPOXY_COMPILE_DEFS} EPOXY_STATIC_LIB)
if (HONOR_VISIBILITY)
set_target_properties ("${EPOXY_TARGET_NAME}_static" PROPERTIES C_VISIBILITY_PRESET hidden)
elseif ((CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_GCC) OR (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_CLANG))
target_compile_options ("${EPOXY_TARGET_NAME}_static" PRIVATE "-fvisibility=hidden")
endif ()
endif () endif ()
install (FILES ${HEADERS} DESTINATION "include/epoxy") install (FILES ${HEADERS} DESTINATION "include/epoxy")
install (TARGETS ${TARGETS_BUILT_NAMES} install (TARGETS ${EPOXY_TARGETS_BUILT_NAMES}
RUNTIME DESTINATION bin RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION lib LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION lib) ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
if (CMAKE_C_COMPILER_ID STREQUAL "MSVC") if (CMAKE_C_COMPILER_ID STREQUAL COMPILER_ID_MSVC)
INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/Debug/${TARGET_OUTPUT_NAME}_${TARGET_ABI_VER}.pdb" install (FILES "${CMAKE_CURRENT_BINARY_DIR}/Debug/${TARGET_OUTPUT_NAME}_${TARGET_ABI_VER}.pdb"
DESTINATION lib CONFIGURATIONS Debug) DESTINATION lib CONFIGURATIONS Debug)
endif () endif ()

@ -224,6 +224,7 @@ get_dlopen_handle(void **handle, const char *lib_name, bool exit_on_fail)
} }
#ifdef _WIN32 #ifdef _WIN32
EPOXY_UNUSED(exit_on_fail);
*handle = LoadLibraryA(lib_name); *handle = LoadLibraryA(lib_name);
#else #else
pthread_mutex_lock(&api.mutex); pthread_mutex_lock(&api.mutex);
@ -361,7 +362,7 @@ bool
epoxy_extension_in_string(const char *extension_list, const char *ext) epoxy_extension_in_string(const char *extension_list, const char *ext)
{ {
const char *ptr = extension_list; const char *ptr = extension_list;
int len = strlen(ext); size_t len = strlen(ext);
/* Make sure that don't just find an extension with our name as a prefix. */ /* Make sure that don't just find an extension with our name as a prefix. */
while (true) { while (true) {

@ -52,7 +52,7 @@ epoxy_egl_version(EGLDisplay dpy)
version_string = eglQueryString(dpy, EGL_VERSION); version_string = eglQueryString(dpy, EGL_VERSION);
ret = sscanf(version_string, "%d.%d", &major, &minor); ret = sscanf(version_string, "%d.%d", &major, &minor);
(void)ret; // Prevent "warning: variable 'ret' set but not used". EPOXY_UNUSED(ret);
assert(ret == 2); assert(ret == 2);
return major * 10 + minor; return major * 10 + minor;
} }

@ -89,6 +89,81 @@ epoxy_handle_external_wglMakeCurrent(void)
} }
} }
/**
* This global symbol is apparently looked up by Windows when loading
* a DLL, but it doesn't declare the prototype.
*/
BOOL WINAPI
DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved);
BOOL WINAPI
DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved)
{
void *data;
(void)dll; // Prevent "unused parameter" warning.
(void)reserved; // Prevent "unused parameter" warning.
switch (reason) {
case DLL_PROCESS_ATTACH:
gl_tls_index = TlsAlloc();
if (gl_tls_index == TLS_OUT_OF_INDEXES)
return FALSE;
wgl_tls_index = TlsAlloc();
if (wgl_tls_index == TLS_OUT_OF_INDEXES)
return FALSE;
epoxy_first_context_current = false;
/* FALLTHROUGH */
case DLL_THREAD_ATTACH:
data = LocalAlloc(LPTR, gl_tls_size);
TlsSetValue(gl_tls_index, data);
data = LocalAlloc(LPTR, wgl_tls_size);
TlsSetValue(wgl_tls_index, data);
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
data = TlsGetValue(gl_tls_index);
LocalFree(data);
data = TlsGetValue(wgl_tls_index);
LocalFree(data);
if (reason == DLL_PROCESS_DETACH) {
TlsFree(gl_tls_index);
TlsFree(wgl_tls_index);
}
break;
}
return TRUE;
}
#ifdef EPOXY_STATIC_LIB
#ifdef __GNUC__
PIMAGE_TLS_CALLBACK dllmain_callback __attribute__((section(".CRT$XLB"))) = (PIMAGE_TLS_CALLBACK)DllMain;
#else
# ifdef _WIN64
# pragma comment(linker, "/INCLUDE:_tls_used")
# pragma comment(linker, "/INCLUDE:dllmain_callback")
# pragma const_seg(".CRT$XLB")
extern const PIMAGE_TLS_CALLBACK dllmain_callback;
const PIMAGE_TLS_CALLBACK dllmain_callback = DllMain;
# pragma const_seg()
# else
# pragma comment(linker, "/INCLUDE:__tls_used")
# pragma comment(linker, "/INCLUDE:_dllmain_callback")
# pragma data_seg(".CRT$XLB")
PIMAGE_TLS_CALLBACK dllmain_callback = DllMain;
# pragma data_seg()
# endif
#endif
#endif
WRAPPER_VISIBILITY (BOOL) WRAPPER_VISIBILITY (BOOL)
WRAPPER(epoxy_wglMakeCurrent)(HDC hdc, HGLRC hglrc) WRAPPER(epoxy_wglMakeCurrent)(HDC hdc, HGLRC hglrc)
{ {

@ -1,101 +0,0 @@
/*
* Copyright © 2013 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
#if !defined _WIN32
#error This file should only be used in Windows.
#endif
#include "dispatch_common.h"
/**
* This global symbol is apparently looked up by Windows when loading
* a DLL, but it doesn't declare the prototype.
*/
BOOL WINAPI
DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved);
BOOL WINAPI
DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved)
{
void *data;
switch (reason) {
case DLL_PROCESS_ATTACH:
gl_tls_index = TlsAlloc();
if (gl_tls_index == TLS_OUT_OF_INDEXES)
return FALSE;
wgl_tls_index = TlsAlloc();
if (wgl_tls_index == TLS_OUT_OF_INDEXES)
return FALSE;
epoxy_first_context_current = false;
/* FALLTHROUGH */
case DLL_THREAD_ATTACH:
data = LocalAlloc(LPTR, gl_tls_size);
TlsSetValue(gl_tls_index, data);
data = LocalAlloc(LPTR, wgl_tls_size);
TlsSetValue(wgl_tls_index, data);
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
data = TlsGetValue(gl_tls_index);
LocalFree(data);
data = TlsGetValue(wgl_tls_index);
LocalFree(data);
if (reason == DLL_PROCESS_DETACH) {
TlsFree(gl_tls_index);
TlsFree(wgl_tls_index);
}
break;
}
return TRUE;
}
#ifdef EPOXY_BUILDING_STATIC_LIB
#ifdef __GNUC__
PIMAGE_TLS_CALLBACK dllmain_callback __attribute__((section(".CRT$XLB"))) = (PIMAGE_TLS_CALLBACK)DllMain;
#else
# ifdef _WIN64
# pragma comment(linker, "/INCLUDE:_tls_used")
# pragma comment(linker, "/INCLUDE:dllmain_callback")
# pragma const_seg(".CRT$XLB")
extern const PIMAGE_TLS_CALLBACK dllmain_callback;
const PIMAGE_TLS_CALLBACK dllmain_callback = DllMain;
# pragma const_seg()
# else
# pragma comment(linker, "/INCLUDE:__tls_used")
# pragma comment(linker, "/INCLUDE:_dllmain_callback")
# pragma data_seg(".CRT$XLB")
PIMAGE_TLS_CALLBACK dllmain_callback = DllMain;
# pragma data_seg()
# endif
#endif
#endif

@ -0,0 +1,150 @@
if (EPOXY_BUILD_TESTS)
if (EPOXY_BUILD_SHARED)
set (TESTS_TARGET_NAME "${EPOXY_TARGET_NAME}_shared")
else ()
set (TESTS_TARGET_NAME "${EPOXY_TARGET_NAME}_static")
endif ()
if (EPOXY_SUPPORT_EGL)
if (EGL_FOUND)
set (EPOXY_BUILD_EGL_TESTS TRUE)
set (EPOXY_EGL_TESTS_COMMON egl_common.c egl_common.h)
else ()
set (EPOXY_BUILD_EGL_TESTS FALSE)
message (WARNING "EGL not found - EGL tests will not be built!")
endif ()
endif ()
if (EPOXY_SUPPORT_GLX)
set (EPOXY_GLX_TESTS_COMMON glx_common.c glx_common.h)
endif ()
if (EPOXY_SUPPORT_WGL)
set (EPOXY_WGL_TESTS_COMMON wgl_common.c wgl_common.h)
endif ()
set (EPOXY_LINKAGE_TYPE_SHARED SHARED)
set (EPOXY_LINKAGE_TYPE_STATIC STATIC)
function (epoxy_add_test EPOXY_TEST_NAME EPOXY_TEST_CODE)
# Additional optional arguments: "EPOXY_TEST_DEPS EPOXY_TEST_COMPILE_DEFS EPOXY_TEST_LINK_FLAGS"
# "EPOXY_LINKAGE_TYPE"
if (ARGC GREATER 2)
set (EPOXY_TEST_DEPS "${ARGV2}")
else ()
set (EPOXY_TEST_DEPS "")
endif ()
if (ARGC GREATER 3)
set (EPOXY_TEST_COMPILE_DEFS "${ARGV3}")
else ()
set (EPOXY_TEST_COMPILE_DEFS "")
endif ()
if (ARGC GREATER 4)
set (EPOXY_TEST_LINK_FLAGS "${ARGV4}")
else ()
set (EPOXY_TEST_LINK_FLAGS "")
endif ()
if (ARGC GREATER 5)
set (EPOXY_TEST_LINKAGE_TYPE "${ARGV5}")
else ()
set (EPOXY_TEST_LINKAGE_TYPE BOTH)
endif ()
if (EPOXY_BUILD_SHARED AND NOT EPOXY_TEST_LINKAGE_TYPE STREQUAL EPOXY_LINKAGE_TYPE_STATIC)
set (EPOXY_TEST_TARGET_NAME "test_shared_${EPOXY_TEST_NAME}")
add_executable (${EPOXY_TEST_TARGET_NAME} ${EPOXY_TEST_CODE})
target_link_libraries (${EPOXY_TEST_TARGET_NAME} "${EPOXY_TARGET_NAME}_shared" ${EPOXY_TEST_DEPS})
target_compile_definitions (${EPOXY_TEST_TARGET_NAME} PRIVATE
${EPOXY_TEST_COMPILE_DEFS})
target_include_directories (${EPOXY_TEST_TARGET_NAME} PRIVATE ${EPOXY_INCLUDE_DIRS})
set_target_properties (${EPOXY_TEST_TARGET_NAME} PROPERTIES
LINK_FLAGS "${EPOXY_TEST_LINK_FLAGS}")
add_test (NAME "${EPOXY_TEST_TARGET_NAME}"
COMMAND "${CMAKE_COMMAND}"
"-DEPOXY_TEST_CMD=$<TARGET_FILE:${EPOXY_TEST_TARGET_NAME}>"
"-DEPOXY_SHARED_LIB=$<TARGET_FILE:${EPOXY_TARGET_NAME}_shared>"
"-P" "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/epoxy_run_test_wrapper.cmake")
endif ()
if (EPOXY_BUILD_STATIC AND NOT EPOXY_TEST_LINKAGE_TYPE STREQUAL EPOXY_LINKAGE_TYPE_SHARED)
set (EPOXY_TEST_TARGET_NAME "test_static_${EPOXY_TEST_NAME}")
add_executable (${EPOXY_TEST_TARGET_NAME} ${EPOXY_TEST_CODE})
target_link_libraries (${EPOXY_TEST_TARGET_NAME} "${EPOXY_TARGET_NAME}_static" ${EPOXY_TEST_DEPS})
target_compile_definitions (${EPOXY_TEST_TARGET_NAME} PRIVATE
${EPOXY_TEST_COMPILE_DEFS} EPOXY_STATIC_LIB)
target_include_directories (${EPOXY_TEST_TARGET_NAME} PRIVATE ${EPOXY_INCLUDE_DIRS})
set_target_properties (${EPOXY_TEST_TARGET_NAME} PROPERTIES
LINK_FLAGS "${EPOXY_TEST_LINK_FLAGS}")
add_test (NAME "${EPOXY_TEST_TARGET_NAME}"
COMMAND "${CMAKE_COMMAND}"
"-DEPOXY_TEST_CMD=$<TARGET_FILE:${EPOXY_TEST_TARGET_NAME}>"
"-P" "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/epoxy_run_test_wrapper.cmake")
endif ()
endfunction ()
if (EPOXY_BUILD_EGL_TESTS AND X11_FOUND)
epoxy_add_test (egl_has_extension_nocontext "${EPOXY_EGL_TESTS_COMMON};egl_has_extension_nocontext.c"
"${X11_LIBRARIES}")
epoxy_add_test (egl_gl "${EPOXY_EGL_TESTS_COMMON};egl_gl.c" "${X11_LIBRARIES}")
if (GLESv1_FOUND)
epoxy_add_test (egl_gles1_without_glx "${EPOXY_EGL_TESTS_COMMON};egl_without_glx.c" "${X11_LIBRARIES}"
"GLES_VERSION=1")
endif ()
if (GLESv2_FOUND)
epoxy_add_test (egl_gles2_without_glx "${EPOXY_EGL_TESTS_COMMON};egl_without_glx.c" "${X11_LIBRARIES}"
"GLES_VERSION=2")
endif ()
endif()
if (EPOXY_BUILD_EGL_TESTS AND EPOXY_SUPPORT_GLX AND NOT APPLE)
#epoxy_add_test (egl_and_glx_different_pointers "${EPOXY_EGL_TESTS_COMMON};${EPOXY_GLX_TESTS_COMMON};egl_and_glx_different_pointers.c;dlwrap.c;dlwrap.h" "${X11_LIBRARIES}" "USE_EGL;USE_GLX" "-rdynamic")
epoxy_add_test (egl_different_pointers
"${EPOXY_EGL_TESTS_COMMON};${EPOXY_GLX_TESTS_COMMON};egl_and_glx_different_pointers.c;dlwrap.c;dlwrap.h"
"${X11_LIBRARIES}" "USE_EGL" "-rdynamic")
epoxy_add_test (glx_different_pointers
"${EPOXY_EGL_TESTS_COMMON};${EPOXY_GLX_TESTS_COMMON};egl_and_glx_different_pointers.c;dlwrap.c;dlwrap.h"
"${X11_LIBRARIES}" "USE_GLX" "-rdynamic")
endif ()
if (EPOXY_SUPPORT_GLX)
if (NOT APPLE)
epoxy_add_test (glx_alias_prefer_same_name
"${EPOXY_GLX_TESTS_COMMON};glx_alias_prefer_same_name.c;dlwrap.c;dlwrap.h" "${X11_LIBRARIES}"
"" "-rdynamic")
if (GLESv2_FOUND)
epoxy_add_test (test_glx_gles2
"${EPOXY_GLX_TESTS_COMMON};glx_gles2.c;dlwrap.c;dlwrap.h" "${X11_LIBRARIES}" "" "-rdynamic")
endif ()
endif ()
epoxy_add_test (test_glx_beginend "${EPOXY_GLX_TESTS_COMMON};glx_beginend.c"
"${OPENGL_gl_LIBRARY};${X11_LIBRARIES}")
epoxy_add_test (glx_public_api "${EPOXY_GLX_TESTS_COMMON};glx_public_api.c" "${X11_LIBRARIES}")
epoxy_add_test (glx_public_api_core "${EPOXY_GLX_TESTS_COMMON};glx_public_api_core.c" "${X11_LIBRARIES}")
epoxy_add_test (glx_getprocaddress_nocontext
"${EPOXY_GLX_TESTS_COMMON};glx_glxgetprocaddress_nocontext.c" "${X11_LIBRARIES}")
epoxy_add_test (glx_has_extension_nocontext "${EPOXY_GLX_TESTS_COMMON};glx_has_extension_nocontext.c"
"${X11_LIBRARIES}")
epoxy_add_test (glx_shared_znow "${EPOXY_GLX_TESTS_COMMON};glx_static.c"
"${X11_LIBRARIES}" "" "-Wl,-z,now" SHARED)
epoxy_add_test (glx_static "${EPOXY_GLX_TESTS_COMMON};glx_static.c"
"${X11_LIBRARIES}" "NEEDS_TO_BE_STATIC" "" STATIC)
endif ()
epoxy_add_test (headerguards headerguards.c)
epoxy_add_test (miscdefines miscdefines.c)
if (EPOXY_SUPPORT_WGL)
epoxy_add_test (wgl_core_and_exts "${EPOXY_WGL_TESTS_COMMON};wgl_core_and_exts.c")
epoxy_add_test (wgl_per_context_funcptrs "${EPOXY_WGL_TESTS_COMMON};wgl_per_context_funcptrs.c")
epoxy_add_test (wgl_usefontbitmaps_ascii "${EPOXY_WGL_TESTS_COMMON};wgl_usefontbitmaps.c")
epoxy_add_test (wgl_usefontbitmaps_unicode "${EPOXY_WGL_TESTS_COMMON};wgl_usefontbitmaps.c"
"" "_UNICODE;UNICODE")
endif ()
endif ()

@ -83,12 +83,14 @@ override_GLES2_glGetString(GLenum e)
GLuint GLuint
override_GL_glCreateShader(GLenum type) override_GL_glCreateShader(GLenum type)
{ {
EPOXY_UNUSED(type);
return GL_CREATESHADER_VALUE; return GL_CREATESHADER_VALUE;
} }
GLuint GLuint
override_GLES2_glCreateShader(GLenum type) override_GLES2_glCreateShader(GLenum type)
{ {
EPOXY_UNUSED(type);
return GLES2_CREATESHADER_VALUE; return GLES2_CREATESHADER_VALUE;
} }
@ -207,8 +209,7 @@ init_egl(EGLDisplay *out_dpy, EGLContext *out_ctx)
} }
#endif /* USE_EGL */ #endif /* USE_EGL */
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;
#ifdef USE_EGL #ifdef USE_EGL

@ -109,8 +109,7 @@ init_egl(EGLDisplay *out_dpy, EGLContext *out_ctx)
*out_ctx = ctx; *out_ctx = ctx;
} }
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;
EGLDisplay egl_dpy; EGLDisplay egl_dpy;

@ -38,8 +38,7 @@
#include "egl_common.h" #include "egl_common.h"
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;

@ -87,8 +87,7 @@ override_eglGetError(void)
return real_eglGetError(); return real_eglGetError();
} }
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;
EGLDisplay dpy = get_egl_display_or_skip(); EGLDisplay dpy = get_egl_display_or_skip();

@ -53,17 +53,18 @@ override_GL_glBindTextureEXT(GLenum target);
void void
override_GL_glBindTexture(GLenum target) override_GL_glBindTexture(GLenum target)
{ {
EPOXY_UNUSED(target);
last_call = CORE_FUNC_VAL; last_call = CORE_FUNC_VAL;
} }
void void
override_GL_glBindTextureEXT(GLenum target) override_GL_glBindTextureEXT(GLenum target)
{ {
EPOXY_UNUSED(target);
last_call = EXT_FUNC_VAL; last_call = EXT_FUNC_VAL;
} }
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;

@ -89,8 +89,7 @@ test_without_epoxy(void)
return true; return true;
} }
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;

@ -72,6 +72,8 @@ get_glx_window(Display *dpy, XVisualInfo *visinfo, bool map)
Window root_win = RootWindow(dpy, screen); Window root_win = RootWindow(dpy, screen);
Window win; Window win;
EPOXY_UNUSED(map);
window_attr.background_pixel = 0; window_attr.background_pixel = 0;
window_attr.border_pixel = 0; window_attr.border_pixel = 0;
window_attr.colormap = XCreateColormap(dpy, root_win, window_attr.colormap = XCreateColormap(dpy, root_win,
@ -119,7 +121,7 @@ get_fbconfig_for_visinfo(Display *dpy, XVisualInfo *visinfo)
if (glXGetFBConfigAttrib(dpy, configs[i], GLX_VISUAL_ID, &v)) if (glXGetFBConfigAttrib(dpy, configs[i], GLX_VISUAL_ID, &v))
continue; continue;
if (v == visinfo->visualid) { if (v == (int)visinfo->visualid) {
ret = configs[i]; ret = configs[i];
break; break;
} }

@ -46,6 +46,7 @@ override_GLES2_glCreateShader(GLenum target);
GLuint GLuint
override_GLES2_glCreateShader(GLenum target) override_GLES2_glCreateShader(GLenum target)
{ {
EPOXY_UNUSED(target);
return 0; return 0;
} }
@ -60,8 +61,7 @@ override_GLES2_glGenQueries(GLsizei n, GLuint *ids)
ids[i] = 0; ids[i] = 0;
} }
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;
XVisualInfo *vis; XVisualInfo *vis;

@ -39,8 +39,7 @@
static Display *dpy; static Display *dpy;
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;
void *func; void *func;

@ -39,8 +39,7 @@
static Display *dpy; static Display *dpy;
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;

@ -107,8 +107,7 @@ test_glx_extension_supported(void)
return true; return true;
} }
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;

@ -130,8 +130,7 @@ test_glx_version(void)
return true; return true;
} }
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;
XVisualInfo *visinfo; XVisualInfo *visinfo;

@ -42,8 +42,7 @@
#include "glx_common.h" #include "glx_common.h"
int int main(void)
main(int argc, char **argv)
{ {
bool pass = true; bool pass = true;
int val; int val;

@ -21,40 +21,31 @@
* IN THE SOFTWARE. * IN THE SOFTWARE.
*/ */
#include <config.h>
#include <epoxy/gl.h> #include <epoxy/gl.h>
#ifdef BUILD_EGL #if EPOXY_SUPPORT_EGL
#include <epoxy/egl.h> #include <epoxy/egl.h>
#include <epoxy/egl.h> #include <epoxy/egl.h>
#endif
#ifdef BUILD_GLX
#include <epoxy/glx.h>
#include <epoxy/glx.h>
#endif #endif
#ifdef BUILD_EGL #if EPOXY_SUPPORT_GLX
#include <EGL/egl.h> #include <epoxy/glx.h>
#include <EGL/egl.h> #include <epoxy/glx.h>
#include <EGL/eglext.h>
#include <EGL/eglext.h>
#endif #endif
#ifdef BUILD_GLX #if EPOXY_SUPPORT_GLX
#ifdef __APPLE__ #ifdef __APPLE__
#include <OpenGL/gl.h> #include <OpenGL/gl.h>
#include <OpenGL/glext.h> #include <OpenGL/glext.h>
#else #else
#include <GL/gl.h> #include <GL/gl.h>
#include <GL/glext.h> #include <GL/glext.h>
#endif #endif
#include <GL/glx.h> #include <GL/glx.h>
#include <GL/glxext.h> #include <GL/glxext.h>
#endif #endif
int main(int argc, char **argv) int main(void)
{ {
return 0; return 0;
} }

@ -24,12 +24,9 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "config.h"
#include "khronos_typedefs.h" #include "khronos_typedefs.h"
#ifdef HAVE_KHRPLATFORM_H #include "epoxy/khrplatform.h"
#include <KHR/khrplatform.h>
#define GET_SIZE(type) sizes[type ## _slot] = sizeof(type) #define GET_SIZE(type) sizes[type ## _slot] = sizeof(type)
@ -53,19 +50,3 @@ get_system_typedef_sizes(uint32_t *sizes)
GET_SIZE(khronos_stime_nanoseconds_t); GET_SIZE(khronos_stime_nanoseconds_t);
GET_SIZE(khronos_boolean_enum_t); GET_SIZE(khronos_boolean_enum_t);
} }
#else /* !HAVE_KHRPLATFORM_H */
#ifndef _MSC_VER
/* Don't care -- this is a conditional case in test code. */
#pragma GCC diagnostic ignored "-Wsuggest-attribute=noreturn"
#endif
void
get_system_typedef_sizes(uint32_t *sizes)
{
fprintf(stderr, "./configure failed to find khrplatform.h\n");
exit(77);
}
#endif

@ -23,11 +23,11 @@
#include <epoxy/gl.h> #include <epoxy/gl.h>
#ifdef BUILD_EGL #if EPOXY_SUPPORT_EGL
#include <epoxy/egl.h> #include <epoxy/egl.h>
#endif #endif
#ifdef BUILD_GLX #if EPOXY_SUPPORT_GLX
#include <epoxy/glx.h> #include <epoxy/glx.h>
#endif #endif
@ -61,7 +61,7 @@
/* Do we want to export GL_GLEXT_VERSION? */ /* Do we want to export GL_GLEXT_VERSION? */
int main(int argc, char **argv) int main(void)
{ {
return 0; return 0;
} }

@ -85,8 +85,8 @@ window_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
void void
make_window_and_test(int (*callback)(HDC hdc)) make_window_and_test(int (*callback)(HDC hdc))
{ {
const char *class_name = "epoxy"; LPCTSTR class_name = TEXT("epoxy");
const char *window_name = "epoxy"; LPCTSTR window_name = TEXT("epoxy");
int width = 150; int width = 150;
int height = 150; int height = 150;
HWND hwnd; HWND hwnd;

@ -21,7 +21,6 @@
* IN THE SOFTWARE. * IN THE SOFTWARE.
*/ */
#include <config.h>
#include <stdio.h> #include <stdio.h>
#include "wgl_common.h" #include "wgl_common.h"
@ -71,8 +70,7 @@ test_function(HDC hdc)
return !pass; return !pass;
} }
int int main()
main(int argc, char **argv)
{ {
make_window_and_test(test_function); make_window_and_test(test_function);

@ -35,7 +35,6 @@
* regardless. * regardless.
*/ */
#include <config.h>
#include <stdio.h> #include <stdio.h>
#include <assert.h> #include <assert.h>
@ -57,6 +56,7 @@ OVERRIDE_API (PROC) override_wglGetProcAddress(LPCSTR name);
OVERRIDE_API (GLuint) OVERRIDE_API (GLuint)
override_glCreateShader_ctx1(GLenum target) override_glCreateShader_ctx1(GLenum target)
{ {
EPOXY_UNUSED(target);
if (current_context != ctx1) { if (current_context != ctx1) {
fprintf(stderr, "ctx1 called while other context current\n"); fprintf(stderr, "ctx1 called while other context current\n");
pass = false; pass = false;
@ -67,6 +67,7 @@ override_glCreateShader_ctx1(GLenum target)
OVERRIDE_API (GLuint) OVERRIDE_API (GLuint)
override_glCreateShader_ctx2(GLenum target) override_glCreateShader_ctx2(GLenum target)
{ {
EPOXY_UNUSED(target);
if (current_context != ctx2) { if (current_context != ctx2) {
fprintf(stderr, "ctx2 called while other context current\n"); fprintf(stderr, "ctx2 called while other context current\n");
pass = false; pass = false;
@ -156,8 +157,7 @@ test_function(HDC hdc)
return !pass; return !pass;
} }
int int main()
main(int argc, char **argv)
{ {
make_window_and_test(test_function); make_window_and_test(test_function);

@ -21,7 +21,6 @@
* IN THE SOFTWARE. * IN THE SOFTWARE.
*/ */
#include <config.h>
#include <stdio.h> #include <stdio.h>
#include "wgl_common.h" #include "wgl_common.h"
@ -48,7 +47,7 @@ test_function(HDC hdc)
/* First, use the #ifdeffed variant of the function */ /* First, use the #ifdeffed variant of the function */
wglUseFontBitmaps(hdc, 0, 255, dlist[1]); wglUseFontBitmaps(hdc, 0, 255, dlist[1]);
glListBase(dlist[1]); glListBase(dlist[1]);
glCallLists(strlen(string), GL_UNSIGNED_BYTE, string); glCallLists((GLsizei)strlen(string), GL_UNSIGNED_BYTE, string);
/* Now, use the specific version, manually. */ /* Now, use the specific version, manually. */
#ifdef UNICODE #ifdef UNICODE
@ -57,7 +56,7 @@ test_function(HDC hdc)
wglUseFontBitmapsA(hdc, 0, 255, dlist[2]); wglUseFontBitmapsA(hdc, 0, 255, dlist[2]);
#endif #endif
glListBase(dlist[2]); glListBase(dlist[2]);
glCallLists(strlen(string), GL_UNSIGNED_BYTE, string); glCallLists((GLsizei)strlen(string), GL_UNSIGNED_BYTE, string);
wglMakeCurrent(NULL, NULL); wglMakeCurrent(NULL, NULL);
wglDeleteContext(ctx); wglDeleteContext(ctx);
@ -65,8 +64,7 @@ test_function(HDC hdc)
return !pass; return !pass;
} }
int int main()
main(int argc, char **argv)
{ {
make_window_and_test(test_function); make_window_and_test(test_function);

Loading…
Cancel
Save