From e4f5da9539f606e0043678579de83f66f0b3e9c4 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 6 Feb 2014 10:51:33 -0800 Subject: [PATCH] Add a test that khrplatform.h (if present) agrees with us. --- configure.ac | 6 +++ test/.gitignore | 1 + test/Makefile.am | 7 ++++ test/khronos_typedefs.c | 65 ++++++++++++++++++++++++++++++ test/khronos_typedefs.h | 47 ++++++++++++++++++++++ test/khronos_typedefs_nonepoxy.c | 69 ++++++++++++++++++++++++++++++++ 6 files changed, 195 insertions(+) create mode 100644 test/khronos_typedefs.c create mode 100644 test/khronos_typedefs.h create mode 100644 test/khronos_typedefs_nonepoxy.c diff --git a/configure.ac b/configure.ac index 3037c76..35b357d 100644 --- a/configure.ac +++ b/configure.ac @@ -48,6 +48,12 @@ AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL AC_SYS_LARGEFILE +AC_CHECK_HEADER([KHR/khrplatform.h], + [AC_DEFINE([HAVE_KHRPLATFORM_H], [1], + [Define to 1 if you have (used for tests)] + )] + ) + # OS X defaults to having -Wint-conversion ("warn when passing # uintptr_t to a void *") by default. Kill that. XORG_TESTSET_CFLAG(CWARNFLAGS, [-Wno-int-conversion]) diff --git a/test/.gitignore b/test/.gitignore index a09d5cb..cbc9d71 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -9,6 +9,7 @@ glx_public_api_core glx_shared_znow glx_static headerguards +khronos_typedefs miscdefines wgl_core_and_exts *.log diff --git a/test/Makefile.am b/test/Makefile.am index 7ac1f38..7cf7d19 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -56,6 +56,7 @@ TESTS = \ $(WGL_TESTS) \ headerguards$(EXEEXT) \ miscdefines$(EXEEXT) \ + khronos_typedefs$(EXEEXT) \ $() XFAIL_TESTS = \ @@ -127,4 +128,10 @@ glx_shared_znow_SOURCES = glx_static.c glx_shared_znow_LDADD = $(DLOPEN_LIBS) $(EPOXY) libglx_common.la $(X11_LIBS) glx_shared_znow_LDFLAGS = -z now +khronos_typedefs_SOURCES = \ + khronos_typedefs.c \ + khronos_typedefs.h \ + khronos_typedefs_nonepoxy.c \ + $() + wgl_core_and_exts_LDADD = $(EPOXY) libwgl_common.la -lgdi32 diff --git a/test/khronos_typedefs.c b/test/khronos_typedefs.c new file mode 100644 index 0000000..f28fb67 --- /dev/null +++ b/test/khronos_typedefs.c @@ -0,0 +1,65 @@ +/* + * Copyright © 2014 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. + */ + +#include +#include "khronos_typedefs.h" +#include "epoxy/gl.h" + +#define COMPARE_SIZE(type) \ + do { \ + if (sizeof(type) != system_sizes[type ## _slot]) { \ + fprintf(stderr, "system %s is size %d, epoxy is %d\n", \ + #type, \ + (int)system_sizes[type ## _slot], \ + (int)sizeof(type)); \ + error = true; \ + } \ +} while (0) + +int +main(int argc, char **argv) +{ + uint32_t system_sizes[khronos_typedef_count]; + bool error = false; + + get_system_typedef_sizes(system_sizes); + + COMPARE_SIZE(khronos_int8_t); + COMPARE_SIZE(khronos_uint8_t); + COMPARE_SIZE(khronos_int16_t); + COMPARE_SIZE(khronos_uint16_t); + COMPARE_SIZE(khronos_int32_t); + COMPARE_SIZE(khronos_uint32_t); + COMPARE_SIZE(khronos_int64_t); + COMPARE_SIZE(khronos_uint64_t); + COMPARE_SIZE(khronos_intptr_t); + COMPARE_SIZE(khronos_uintptr_t); + COMPARE_SIZE(khronos_ssize_t); + COMPARE_SIZE(khronos_usize_t); + COMPARE_SIZE(khronos_float_t); + COMPARE_SIZE(khronos_utime_nanoseconds_t); + COMPARE_SIZE(khronos_stime_nanoseconds_t); + COMPARE_SIZE(khronos_boolean_enum_t); + + return error; +} diff --git a/test/khronos_typedefs.h b/test/khronos_typedefs.h new file mode 100644 index 0000000..bcb4dab --- /dev/null +++ b/test/khronos_typedefs.h @@ -0,0 +1,47 @@ +/* + * Copyright © 2014 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. + */ + +#include + +enum typedef_slot { + khronos_int8_t_slot, + khronos_uint8_t_slot, + khronos_int16_t_slot, + khronos_uint16_t_slot, + khronos_int32_t_slot, + khronos_uint32_t_slot, + khronos_int64_t_slot, + khronos_uint64_t_slot, + khronos_intptr_t_slot, + khronos_uintptr_t_slot, + khronos_ssize_t_slot, + khronos_usize_t_slot, + khronos_float_t_slot, + /* khrplatform.h claims it defines khronos_time_ns_t, but it doesn't. */ + khronos_utime_nanoseconds_t_slot, + khronos_stime_nanoseconds_t_slot, + khronos_boolean_enum_t_slot, + khronos_typedef_count +}; + +void get_system_typedef_sizes(uint32_t *sizes); diff --git a/test/khronos_typedefs_nonepoxy.c b/test/khronos_typedefs_nonepoxy.c new file mode 100644 index 0000000..64d5a1b --- /dev/null +++ b/test/khronos_typedefs_nonepoxy.c @@ -0,0 +1,69 @@ +/* + * Copyright © 2014 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. + */ + +#include +#include + +#include "config.h" +#include "khronos_typedefs.h" + +#ifdef HAVE_KHRPLATFORM_H + +#include + +#define GET_SIZE(type) sizes[type ## _slot] = sizeof(type) + +void +get_system_typedef_sizes(uint32_t *sizes) +{ + GET_SIZE(khronos_int8_t); + GET_SIZE(khronos_uint8_t); + GET_SIZE(khronos_int16_t); + GET_SIZE(khronos_uint16_t); + GET_SIZE(khronos_int32_t); + GET_SIZE(khronos_uint32_t); + GET_SIZE(khronos_int64_t); + GET_SIZE(khronos_uint64_t); + GET_SIZE(khronos_intptr_t); + GET_SIZE(khronos_uintptr_t); + GET_SIZE(khronos_ssize_t); + GET_SIZE(khronos_usize_t); + GET_SIZE(khronos_float_t); + GET_SIZE(khronos_utime_nanoseconds_t); + GET_SIZE(khronos_stime_nanoseconds_t); + GET_SIZE(khronos_boolean_enum_t); +} + +#else /* !HAVE_KHRPLATFORM_H */ + +/* Don't care -- this is a conditional case in test code. */ +#pragma GCC diagnostic ignored "-Wsuggest-attribute=noreturn" + +void +get_system_typedef_sizes(uint32_t *sizes) +{ + fprintf(stderr, "./configure failed to find khrplatform.h\n"); + exit(77); +} + +#endif