summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2016-12-09 12:28:42 +0000
committerEmmanuele Bassi <ebassi@gnome.org>2017-01-25 12:36:20 +0000
commit08cc4d021dc523c4243a23b2b4ba432af760716b (patch)
tree9a00922a7ddcf66d3ba8107b6e12ca970a2dfb86 /test
parente2e2fedbdb6cbf4155919c548545956dd6cacc4c (diff)
downloadlibepoxy-08cc4d021dc523c4243a23b2b4ba432af760716b.tar.gz
build: Add Meson build files
Meson is a Python-based build system that generates build rules of Ninja, Visual Studio, and XCode. It's designed to be fast, and have a small, non-Turing complete language to describe the build process, tests, and dependencies. It's simpler than CMake, and faster than autotools. As a direct comparison in terms of speed, three build and check runs for libepoxy from a clean Git repository clone yield these results on my Kabylake Core i7 7500U (nproc=4): - Autotools (make) Run #1 (cold) real: 22.384s, user: 20.011s, sys: 3.689s Run #2 (warm) real: 22.429s, user: 20.220s, sys: 3.708s Run #3 (warm) real: 22.068s, user: 19.743s, sys: 3.594s - Meson (ninja) Run #1 (cold) real: 5.932s, user: 9.371s, sys: 1.625s Run #2 (warm) real: 6.273s, user: 10.066, sys: 1.740s Run #3 (warm) real: 5.796s, user: 9.233s, sys: 1.607s Which means that Meson and ninja are approximately 4x faster than autotools. In terms of simplicity, the autotools build takes six files and a total of 645 lines; Meson requires 3 files, and 361 lines to achieve the same result. Additionally, Meson automatically builds in a separate build directory and does not leave files inside the source directory; and Meson does not use libtool. Since Meson is quite new and still actively developed, we're going to leave the autotools build in place for a while, with the intention of switching to Meson in the future.
Diffstat (limited to 'test')
-rw-r--r--test/meson.build174
1 files changed, 174 insertions, 0 deletions
diff --git a/test/meson.build b/test/meson.build
new file mode 100644
index 0000000..eaf3952
--- /dev/null
+++ b/test/meson.build
@@ -0,0 +1,174 @@
+has_gles1 = gles1_dep.found()
+has_gles2 = gles2_dep.found()
+build_x11_tests = x11_dep.found()
+
+test_cflags = common_cflags + [
+ '-D_XOPEN_SOURCE',
+ '-D_POSIX_C_SOURCE=200809L',
+]
+
+# Unconditionally built tests
+test('header_guards',
+ executable('header guards', 'headerguards.c',
+ c_args: common_cflags,
+ include_directories: libepoxy_inc))
+test('misc_defines',
+ executable('misc defines', 'miscdefines.c',
+ c_args: common_cflags,
+ include_directories: libepoxy_inc))
+test('khronos_typedefs',
+ executable('khronos typedefs', [
+ 'khronos_typedefs.c',
+ 'khronos_typedefs.h',
+ 'khronos_typedefs_nonepoxy.c',
+ ],
+ c_args: common_cflags,
+ include_directories: libepoxy_inc))
+
+if build_egl and build_x11_tests
+ egl_common_sources = [ 'egl_common.h', 'egl_common.c', ]
+ egl_common_lib = static_library('egl_common',
+ sources: egl_common_sources,
+ dependencies: libepoxy_dep,
+ include_directories: libepoxy_inc,
+ c_args: common_cflags,
+ install: false)
+
+ egl_tests = [
+ [ 'egl_has_extension_nocontext', [], [ 'egl_has_extension_nocontext.c' ], true, ],
+ [ 'egl_gl', [], [ 'egl_gl.c' ], true, ],
+ [ 'egl_gles1_without_glx', [ '-DGLES_VERSION=1', ], [ 'egl_without_glx.c' ], has_gles1, ],
+ [ 'egl_gles2_without_glx', [ '-DGLES_VERSION=2', ], [ 'egl_without_glx.c' ], has_gles2, ],
+ ]
+
+ foreach test: egl_tests
+ test_name = test[0]
+ test_source = test[2]
+ test_args = test[1]
+ test_run = test[3]
+
+ if test_run
+ test_bin = executable(test_name, test_source,
+ c_args: test_cflags + test_args,
+ include_directories: libepoxy_inc,
+ dependencies: [ libepoxy_dep, x11_dep, egl_dep, dl_dep ],
+ link_with: egl_common_lib,
+ link_args: '-rdynamic')
+ test(test_name, test_bin)
+ endif
+ endforeach
+endif
+
+if build_glx
+ glx_common_sources = [ 'glx_common.h', 'glx_common.c', ]
+ glx_common_lib = static_library('glx_common',
+ sources: glx_common_sources,
+ dependencies: libepoxy_dep,
+ include_directories: libepoxy_inc,
+ c_args: common_cflags,
+ install: false)
+
+ # glx_beginend links directly with the GL library, so we need to check it
+ # separately
+ test('glx_beginend', executable('glx_beginend', 'glx_beginend.c',
+ c_args: test_cflags,
+ include_directories: libepoxy_inc,
+ dependencies: [ libepoxy_dep, x11_dep, gl_dep, dl_dep ],
+ link_with: glx_common_lib))
+
+ glx_tests = [
+ [ 'glx_public_api', [ 'glx_public_api.c' ], [], [], true ],
+ [ 'glx_public_api_core', [ 'glx_public_api_core.c' ], [], [], true ],
+ [ 'glx_glxgetprocaddress_nocontext', [ 'glx_glxgetprocaddress_nocontext.c' ], [], [], true ],
+ [ 'glx_has_extension_nocontext', [ 'glx_has_extension_nocontext.c' ], [], [], true ],
+ [ 'glx_static', [ 'glx_static.c' ], [ '-DNEEDS_TO_BE_STATIC'], [ '-static' ], libtype == 'static' ],
+ [ 'glx_shared_znow', [ 'glx_static.c', ], [], [ '-Wl,-z,now' ], has_znow ],
+ [ 'glx_alias_prefer_same_name', [ 'glx_alias_prefer_same_name.c', 'dlwrap.c', 'dlwrap.h' ], [], [ '-rdynamic' ], not build_apple ],
+ [ 'glx_gles2', [ 'glx_gles2.c', 'dlwrap.c', 'dlwrap.h' ], [], [ '-rdynamic' ], not build_apple ],
+ ]
+
+ foreach test: glx_tests
+ test_name = test[0]
+ test_source = test[1]
+ test_c_args = test[2]
+ test_link_args = test[3]
+ test_run = test[4]
+
+ if test_run
+ test_bin = executable(test_name, test_source,
+ c_args: test_cflags + test_c_args,
+ include_directories: libepoxy_inc,
+ dependencies: [ libepoxy_dep, x11_dep, dl_dep ],
+ link_with: glx_common_lib,
+ link_args: test_link_args)
+ test(test_name, test_bin)
+ endif
+ endforeach
+
+ if not build_apple
+ # GLX/EGL tests
+ if build_egl
+ glx_egl_sources = [
+ 'egl_and_glx_different_pointers.c',
+ 'dlwrap.c',
+ 'dlwrap.h',
+ ]
+
+ glx_egl_deps = [ libepoxy_dep, x11_dep, dl_dep ]
+ glx_egl_link_flags = [ '-rdynamic' ]
+ glx_egl_link_with = [ glx_common_lib, egl_common_lib ]
+
+ glx_egl_tests = [
+ [ 'egl_and_glx_different_pointers_glx', [ '-DUSE_GLX' ], false ],
+ [ 'egl_and_glx_different_pointers_egl', [ '-DUSE_EGL' ], false ],
+ [ 'egl_and_glx_different_pointers_egl_glx', [ '-DUSE_EGL', '-DUSE_GLX' ], true ],
+ ]
+
+ foreach test: glx_egl_tests
+ test_name = test[0]
+ test_c_args = test[1]
+ test_should_fail = test[2]
+
+ test_bin = executable(test_name, glx_egl_sources,
+ c_args: common_cflags + test_c_args,
+ include_directories: libepoxy_inc,
+ dependencies: glx_egl_deps,
+ link_with: glx_egl_link_with,
+ link_args: glx_egl_link_flags)
+ test(test_name, test_bin, should_fail: test_should_fail)
+ endforeach
+ endif
+ endif
+endif
+
+# WGL
+if build_wgl
+ wgl_common_sources = [ 'wgl_common.h', 'wgl_common.c', ]
+ wgl_common_lib = static_library('wgl_common',
+ sources: wgl_common_sources,
+ dependencies: libepoxy_dep,
+ include_directories: libepoxy_inc,
+ c_args: common_cflags,
+ install: false)
+
+ wgl_tests = [
+ [ 'wgl_core_and_exts', [ 'wgl_core_and_exts.c' ], [], ],
+ [ 'wgl_per_context_funcptrs', [ 'wgl_per_context_funcptrs.c' ], [], ],
+ [ 'wgl_usefontbitmaps', [ 'wgl_usefontbitmaps.c'], [], ],
+ [ 'wgl_usefontbitmaps_unicode', [ 'wgl_usefontbitmaps.c' ], [ '-DUNICODE' ], ],
+ ]
+
+ foreach test: wgl_tests
+ test_name = test[0]
+ test_source = test[1]
+ test_c_args = test[2]
+
+ test_bin = executable(test_name, test_source,
+ c_args: test_cflags + test_c_args,
+ include_directories: libepoxy_inc,
+ dependencies: [ libepoxy_dep ],
+ link_with: wgl_common_lib)
+
+ test(test_name, test_bin)
+ endforeach
+endif