From 44d51f28445d40451bc600b26f3b4b17fd003c67 Mon Sep 17 00:00:00 2001 From: Yaron Cohen-Tal Date: Thu, 3 Sep 2015 23:17:39 +0300 Subject: 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. --- test/CMakeLists.txt | 150 +++++++++++++++++++++++++++++++++ test/egl_and_glx_different_pointers.c | 5 +- test/egl_gl.c | 3 +- test/egl_has_extension_nocontext.c | 3 +- test/egl_without_glx.c | 3 +- test/glx_alias_prefer_same_name.c | 5 +- test/glx_beginend.c | 3 +- test/glx_common.c | 4 +- test/glx_gles2.c | 4 +- test/glx_glxgetprocaddress_nocontext.c | 3 +- test/glx_has_extension_nocontext.c | 3 +- test/glx_public_api.c | 3 +- test/glx_public_api_core.c | 3 +- test/glx_static.c | 3 +- test/headerguards.c | 43 ++++------ test/khronos_typedefs_nonepoxy.c | 21 +---- test/miscdefines.c | 6 +- test/wgl_common.c | 4 +- test/wgl_core_and_exts.c | 4 +- test/wgl_per_context_funcptrs.c | 6 +- test/wgl_usefontbitmaps.c | 8 +- 21 files changed, 200 insertions(+), 87 deletions(-) create mode 100644 test/CMakeLists.txt (limited to 'test') diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..ef3511b --- /dev/null +++ b/test/CMakeLists.txt @@ -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=$" + "-DEPOXY_SHARED_LIB=$" + "-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=$" + "-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 () diff --git a/test/egl_and_glx_different_pointers.c b/test/egl_and_glx_different_pointers.c index 9d95f3a..009b82b 100644 --- a/test/egl_and_glx_different_pointers.c +++ b/test/egl_and_glx_different_pointers.c @@ -83,12 +83,14 @@ override_GLES2_glGetString(GLenum e) GLuint override_GL_glCreateShader(GLenum type) { + EPOXY_UNUSED(type); return GL_CREATESHADER_VALUE; } GLuint override_GLES2_glCreateShader(GLenum type) { + EPOXY_UNUSED(type); return GLES2_CREATESHADER_VALUE; } @@ -207,8 +209,7 @@ init_egl(EGLDisplay *out_dpy, EGLContext *out_ctx) } #endif /* USE_EGL */ -int -main(int argc, char **argv) +int main(void) { bool pass = true; #ifdef USE_EGL diff --git a/test/egl_gl.c b/test/egl_gl.c index 99576d3..ec04607 100644 --- a/test/egl_gl.c +++ b/test/egl_gl.c @@ -109,8 +109,7 @@ init_egl(EGLDisplay *out_dpy, EGLContext *out_ctx) *out_ctx = ctx; } -int -main(int argc, char **argv) +int main(void) { bool pass = true; EGLDisplay egl_dpy; diff --git a/test/egl_has_extension_nocontext.c b/test/egl_has_extension_nocontext.c index e8c76a8..942c7b3 100644 --- a/test/egl_has_extension_nocontext.c +++ b/test/egl_has_extension_nocontext.c @@ -38,8 +38,7 @@ #include "egl_common.h" -int -main(int argc, char **argv) +int main(void) { bool pass = true; diff --git a/test/egl_without_glx.c b/test/egl_without_glx.c index c3dcc22..3ba2825 100644 --- a/test/egl_without_glx.c +++ b/test/egl_without_glx.c @@ -87,8 +87,7 @@ override_eglGetError(void) return real_eglGetError(); } -int -main(int argc, char **argv) +int main(void) { bool pass = true; EGLDisplay dpy = get_egl_display_or_skip(); diff --git a/test/glx_alias_prefer_same_name.c b/test/glx_alias_prefer_same_name.c index cfc1344..bdaf367 100644 --- a/test/glx_alias_prefer_same_name.c +++ b/test/glx_alias_prefer_same_name.c @@ -53,17 +53,18 @@ override_GL_glBindTextureEXT(GLenum target); void override_GL_glBindTexture(GLenum target) { + EPOXY_UNUSED(target); last_call = CORE_FUNC_VAL; } void override_GL_glBindTextureEXT(GLenum target) { + EPOXY_UNUSED(target); last_call = EXT_FUNC_VAL; } -int -main(int argc, char **argv) +int main(void) { bool pass = true; diff --git a/test/glx_beginend.c b/test/glx_beginend.c index c68f408..bfed424 100644 --- a/test/glx_beginend.c +++ b/test/glx_beginend.c @@ -89,8 +89,7 @@ test_without_epoxy(void) return true; } -int -main(int argc, char **argv) +int main(void) { bool pass = true; diff --git a/test/glx_common.c b/test/glx_common.c index fda1602..d1e5954 100644 --- a/test/glx_common.c +++ b/test/glx_common.c @@ -72,6 +72,8 @@ get_glx_window(Display *dpy, XVisualInfo *visinfo, bool map) Window root_win = RootWindow(dpy, screen); Window win; + EPOXY_UNUSED(map); + window_attr.background_pixel = 0; window_attr.border_pixel = 0; 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)) continue; - if (v == visinfo->visualid) { + if (v == (int)visinfo->visualid) { ret = configs[i]; break; } diff --git a/test/glx_gles2.c b/test/glx_gles2.c index 969d26b..20debbb 100644 --- a/test/glx_gles2.c +++ b/test/glx_gles2.c @@ -46,6 +46,7 @@ override_GLES2_glCreateShader(GLenum target); GLuint override_GLES2_glCreateShader(GLenum target) { + EPOXY_UNUSED(target); return 0; } @@ -60,8 +61,7 @@ override_GLES2_glGenQueries(GLsizei n, GLuint *ids) ids[i] = 0; } -int -main(int argc, char **argv) +int main(void) { bool pass = true; XVisualInfo *vis; diff --git a/test/glx_glxgetprocaddress_nocontext.c b/test/glx_glxgetprocaddress_nocontext.c index 2182215..357aa15 100644 --- a/test/glx_glxgetprocaddress_nocontext.c +++ b/test/glx_glxgetprocaddress_nocontext.c @@ -39,8 +39,7 @@ static Display *dpy; -int -main(int argc, char **argv) +int main(void) { bool pass = true; void *func; diff --git a/test/glx_has_extension_nocontext.c b/test/glx_has_extension_nocontext.c index 2f87ac3..dde0acb 100644 --- a/test/glx_has_extension_nocontext.c +++ b/test/glx_has_extension_nocontext.c @@ -39,8 +39,7 @@ static Display *dpy; -int -main(int argc, char **argv) +int main(void) { bool pass = true; diff --git a/test/glx_public_api.c b/test/glx_public_api.c index e38d260..a99eaeb 100644 --- a/test/glx_public_api.c +++ b/test/glx_public_api.c @@ -107,8 +107,7 @@ test_glx_extension_supported(void) return true; } -int -main(int argc, char **argv) +int main(void) { bool pass = true; diff --git a/test/glx_public_api_core.c b/test/glx_public_api_core.c index 29252ec..1dcc36d 100644 --- a/test/glx_public_api_core.c +++ b/test/glx_public_api_core.c @@ -130,8 +130,7 @@ test_glx_version(void) return true; } -int -main(int argc, char **argv) +int main(void) { bool pass = true; XVisualInfo *visinfo; diff --git a/test/glx_static.c b/test/glx_static.c index d528a60..acf1644 100644 --- a/test/glx_static.c +++ b/test/glx_static.c @@ -42,8 +42,7 @@ #include "glx_common.h" -int -main(int argc, char **argv) +int main(void) { bool pass = true; int val; diff --git a/test/headerguards.c b/test/headerguards.c index 866b506..732a0b9 100644 --- a/test/headerguards.c +++ b/test/headerguards.c @@ -21,40 +21,31 @@ * IN THE SOFTWARE. */ -#include - #include -#ifdef BUILD_EGL -#include -#include -#endif - -#ifdef BUILD_GLX -#include -#include +#if EPOXY_SUPPORT_EGL + #include + #include #endif -#ifdef BUILD_EGL -#include -#include -#include -#include +#if EPOXY_SUPPORT_GLX + #include + #include #endif -#ifdef BUILD_GLX -#ifdef __APPLE__ -#include -#include -#else -#include -#include -#endif -#include -#include +#if EPOXY_SUPPORT_GLX + #ifdef __APPLE__ + #include + #include + #else + #include + #include + #endif + #include + #include #endif -int main(int argc, char **argv) +int main(void) { return 0; } diff --git a/test/khronos_typedefs_nonepoxy.c b/test/khronos_typedefs_nonepoxy.c index 5386101..56ee814 100644 --- a/test/khronos_typedefs_nonepoxy.c +++ b/test/khronos_typedefs_nonepoxy.c @@ -24,12 +24,9 @@ #include #include -#include "config.h" #include "khronos_typedefs.h" -#ifdef HAVE_KHRPLATFORM_H - -#include +#include "epoxy/khrplatform.h" #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_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 diff --git a/test/miscdefines.c b/test/miscdefines.c index e4bc79a..89a8c87 100644 --- a/test/miscdefines.c +++ b/test/miscdefines.c @@ -23,11 +23,11 @@ #include -#ifdef BUILD_EGL +#if EPOXY_SUPPORT_EGL #include #endif -#ifdef BUILD_GLX +#if EPOXY_SUPPORT_GLX #include #endif @@ -61,7 +61,7 @@ /* Do we want to export GL_GLEXT_VERSION? */ -int main(int argc, char **argv) +int main(void) { return 0; } diff --git a/test/wgl_common.c b/test/wgl_common.c index 97b69ed..7d700ab 100644 --- a/test/wgl_common.c +++ b/test/wgl_common.c @@ -85,8 +85,8 @@ window_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) void make_window_and_test(int (*callback)(HDC hdc)) { - const char *class_name = "epoxy"; - const char *window_name = "epoxy"; + LPCTSTR class_name = TEXT("epoxy"); + LPCTSTR window_name = TEXT("epoxy"); int width = 150; int height = 150; HWND hwnd; diff --git a/test/wgl_core_and_exts.c b/test/wgl_core_and_exts.c index bbb2645..c909541 100644 --- a/test/wgl_core_and_exts.c +++ b/test/wgl_core_and_exts.c @@ -21,7 +21,6 @@ * IN THE SOFTWARE. */ -#include #include #include "wgl_common.h" @@ -71,8 +70,7 @@ test_function(HDC hdc) return !pass; } -int -main(int argc, char **argv) +int main() { make_window_and_test(test_function); diff --git a/test/wgl_per_context_funcptrs.c b/test/wgl_per_context_funcptrs.c index c76c7b3..4e5f3fb 100644 --- a/test/wgl_per_context_funcptrs.c +++ b/test/wgl_per_context_funcptrs.c @@ -35,7 +35,6 @@ * regardless. */ -#include #include #include @@ -57,6 +56,7 @@ OVERRIDE_API (PROC) override_wglGetProcAddress(LPCSTR name); OVERRIDE_API (GLuint) override_glCreateShader_ctx1(GLenum target) { + EPOXY_UNUSED(target); if (current_context != ctx1) { fprintf(stderr, "ctx1 called while other context current\n"); pass = false; @@ -67,6 +67,7 @@ override_glCreateShader_ctx1(GLenum target) OVERRIDE_API (GLuint) override_glCreateShader_ctx2(GLenum target) { + EPOXY_UNUSED(target); if (current_context != ctx2) { fprintf(stderr, "ctx2 called while other context current\n"); pass = false; @@ -156,8 +157,7 @@ test_function(HDC hdc) return !pass; } -int -main(int argc, char **argv) +int main() { make_window_and_test(test_function); diff --git a/test/wgl_usefontbitmaps.c b/test/wgl_usefontbitmaps.c index 3287b65..b40f573 100644 --- a/test/wgl_usefontbitmaps.c +++ b/test/wgl_usefontbitmaps.c @@ -21,7 +21,6 @@ * IN THE SOFTWARE. */ -#include #include #include "wgl_common.h" @@ -48,7 +47,7 @@ test_function(HDC hdc) /* First, use the #ifdeffed variant of the function */ wglUseFontBitmaps(hdc, 0, 255, 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. */ #ifdef UNICODE @@ -57,7 +56,7 @@ test_function(HDC hdc) wglUseFontBitmapsA(hdc, 0, 255, dlist[2]); #endif glListBase(dlist[2]); - glCallLists(strlen(string), GL_UNSIGNED_BYTE, string); + glCallLists((GLsizei)strlen(string), GL_UNSIGNED_BYTE, string); wglMakeCurrent(NULL, NULL); wglDeleteContext(ctx); @@ -65,8 +64,7 @@ test_function(HDC hdc) return !pass; } -int -main(int argc, char **argv) +int main() { make_window_and_test(test_function); -- cgit v1.2.1