1ca86eba8Smrgdl_dep = cc.find_library('dl', required: false)
2ca86eba8Smrghas_dlvsym = cc.has_function('dlvsym', dependencies: dl_dep)
3ca86eba8Smrg
4f71742dfSmrghas_gles1 = gles1_dep.found()
5f71742dfSmrghas_gles2 = gles2_dep.found()
6ca86eba8Smrgbuild_x11_tests = enable_x11 and x11_dep.found()
7f71742dfSmrg
8ca86eba8Smrgtest_cflags = common_cflags
9ca86eba8Smrgif not has_dlvsym
10ca86eba8Smrgtest_cflags += [
11f71742dfSmrg  '-D_XOPEN_SOURCE',
12f71742dfSmrg  '-D_POSIX_C_SOURCE=200809L',
13f71742dfSmrg]
14ca86eba8Smrgendif
15f71742dfSmrg
16f71742dfSmrg# Unconditionally built tests
17f71742dfSmrgtest('header_guards',
18f71742dfSmrg     executable('header guards', 'headerguards.c',
19f71742dfSmrg                c_args: common_cflags,
20f71742dfSmrg                dependencies: libepoxy_dep,
21f71742dfSmrg                include_directories: libepoxy_inc))
22f71742dfSmrgtest('misc_defines',
23f71742dfSmrg     executable('misc defines', 'miscdefines.c',
24f71742dfSmrg                c_args: common_cflags,
25f71742dfSmrg                dependencies: libepoxy_dep,
26f71742dfSmrg                include_directories: libepoxy_inc))
27f71742dfSmrgtest('khronos_typedefs',
28f71742dfSmrg     executable('khronos typedefs', [
29f71742dfSmrg                  'khronos_typedefs.c',
30f71742dfSmrg                  'khronos_typedefs.h',
31f71742dfSmrg                  'khronos_typedefs_nonepoxy.c',
32f71742dfSmrg                ],
33f71742dfSmrg                c_args: common_cflags,
34f71742dfSmrg                dependencies: libepoxy_dep,
35f71742dfSmrg                include_directories: libepoxy_inc))
36ca86eba8Smrgtest('gl_version',
37ca86eba8Smrg     executable('gl_version',
38ca86eba8Smrg                'gl_version.c',
39ca86eba8Smrg                c_args: common_cflags,
40ca86eba8Smrg                dependencies: libepoxy_dep,
41ca86eba8Smrg                include_directories: libepoxy_inc))
42f71742dfSmrg
43f71742dfSmrgif build_egl and build_x11_tests
44f71742dfSmrg  egl_common_sources = [ 'egl_common.h', 'egl_common.c', ]
45f71742dfSmrg  egl_common_lib = static_library('egl_common',
46f71742dfSmrg                                  sources: egl_common_sources,
47f71742dfSmrg                                  dependencies: libepoxy_dep,
48f71742dfSmrg                                  include_directories: libepoxy_inc,
49f71742dfSmrg                                  c_args: common_cflags,
50f71742dfSmrg                                  install: false)
51f71742dfSmrg
52f71742dfSmrg  egl_tests = [
53f71742dfSmrg    [ 'egl_has_extension_nocontext', [], [ 'egl_has_extension_nocontext.c' ], true, ],
54ca86eba8Smrg    [ 'egl_epoxy_api', [], [ 'egl_epoxy_api.c' ], true ],
55f71742dfSmrg    [ 'egl_gles1_without_glx', [ '-DGLES_VERSION=1', ], [ 'egl_without_glx.c' ], has_gles1, ],
56f71742dfSmrg    [ 'egl_gles2_without_glx', [ '-DGLES_VERSION=2', ], [ 'egl_without_glx.c' ], has_gles2, ],
57f71742dfSmrg  ]
58f71742dfSmrg
59ca86eba8Smrg  if build_glx
60ca86eba8Smrg    egl_tests += [
61ca86eba8Smrg      [ 'egl_gl', [], [ 'egl_gl.c' ], true, ],
62ca86eba8Smrg    ]
63ca86eba8Smrg  endif
64ca86eba8Smrg
65f71742dfSmrg  foreach test: egl_tests
66f71742dfSmrg    test_name = test[0]
67f71742dfSmrg    test_source = test[2]
68f71742dfSmrg    test_args = test[1]
69f71742dfSmrg    test_run = test[3]
70f71742dfSmrg
71f71742dfSmrg    if test_run
72f71742dfSmrg      test_bin = executable(test_name, test_source,
73f71742dfSmrg                            c_args: test_cflags + test_args,
74f71742dfSmrg                            include_directories: libepoxy_inc,
75f71742dfSmrg                            dependencies: [ libepoxy_dep, x11_dep, egl_dep, dl_dep ],
76f71742dfSmrg                            link_with: egl_common_lib,
77f71742dfSmrg                            link_args: '-rdynamic')
78f71742dfSmrg      test(test_name, test_bin)
79f71742dfSmrg    endif
80f71742dfSmrg  endforeach
81f71742dfSmrgendif
82f71742dfSmrg
83ca86eba8Smrgif build_glx and build_x11_tests
84f71742dfSmrg  glx_common_sources = [ 'glx_common.h', 'glx_common.c', ]
85f71742dfSmrg  glx_common_lib = static_library('glx_common',
86f71742dfSmrg                                  sources: glx_common_sources,
87f71742dfSmrg                                  dependencies: libepoxy_dep,
88f71742dfSmrg                                  include_directories: libepoxy_inc,
89f71742dfSmrg                                  c_args: common_cflags,
90f71742dfSmrg                                  install: false)
91f71742dfSmrg
92f71742dfSmrg  # glx_beginend links directly with the GL library, so we need to check it
93f71742dfSmrg  # separately
94f71742dfSmrg  test('glx_beginend', executable('glx_beginend', 'glx_beginend.c',
95f71742dfSmrg                                  c_args: test_cflags,
96f71742dfSmrg                                  include_directories: libepoxy_inc,
97f71742dfSmrg                                  dependencies: [ libepoxy_dep, x11_dep, gl_dep, dl_dep ],
98f71742dfSmrg                                  link_with: glx_common_lib))
99f71742dfSmrg
100f71742dfSmrg  glx_tests = [
101f71742dfSmrg    [ 'glx_public_api', [ 'glx_public_api.c' ], [], [], true ],
102f71742dfSmrg    [ 'glx_public_api_core', [ 'glx_public_api_core.c' ], [], [], true ],
103f71742dfSmrg    [ 'glx_glxgetprocaddress_nocontext', [ 'glx_glxgetprocaddress_nocontext.c' ], [], [], true ],
104f71742dfSmrg    [ 'glx_has_extension_nocontext', [ 'glx_has_extension_nocontext.c' ], [], [], true ],
105f71742dfSmrg    [ 'glx_static', [ 'glx_static.c' ], [ '-DNEEDS_TO_BE_STATIC'], [ '-static' ], libtype == 'static' ],
106f71742dfSmrg    [ 'glx_shared_znow', [ 'glx_static.c', ], [], [ '-Wl,-z,now' ], has_znow ],
107ca86eba8Smrg    [ 'glx_alias_prefer_same_name', [ 'glx_alias_prefer_same_name.c', 'dlwrap.c', 'dlwrap.h' ], [], [ '-rdynamic' ], has_dlvsym ],
108ca86eba8Smrg    [ 'glx_gles2', [ 'glx_gles2.c', 'dlwrap.c', 'dlwrap.h' ], [], [ '-rdynamic' ], has_dlvsym ],
109f71742dfSmrg  ]
110f71742dfSmrg
111f71742dfSmrg  foreach test: glx_tests
112f71742dfSmrg    test_name = test[0]
113f71742dfSmrg    test_source = test[1]
114f71742dfSmrg    test_c_args = test[2]
115f71742dfSmrg    test_link_args = test[3]
116f71742dfSmrg    test_run = test[4]
117f71742dfSmrg
118f71742dfSmrg    if test_run
119f71742dfSmrg      test_bin = executable(test_name, test_source,
120f71742dfSmrg                            c_args: test_cflags + test_c_args,
121f71742dfSmrg                            include_directories: libepoxy_inc,
122f71742dfSmrg                            dependencies: [ libepoxy_dep, x11_dep, dl_dep ],
123f71742dfSmrg                            link_with: glx_common_lib,
124f71742dfSmrg                            link_args: test_link_args)
125f71742dfSmrg      test(test_name, test_bin)
126f71742dfSmrg    endif
127f71742dfSmrg  endforeach
128f71742dfSmrgendif
129f71742dfSmrg
130f71742dfSmrg# WGL
131f71742dfSmrgif build_wgl
132f71742dfSmrg  wgl_common_sources = [ 'wgl_common.h', 'wgl_common.c', ]
133f71742dfSmrg  wgl_common_lib = static_library('wgl_common',
134f71742dfSmrg                                  sources: wgl_common_sources,
135f71742dfSmrg                                  dependencies: libepoxy_dep,
136f71742dfSmrg                                  include_directories: libepoxy_inc,
137f71742dfSmrg                                  c_args: common_cflags,
138f71742dfSmrg                                  install: false)
139f71742dfSmrg
140f71742dfSmrg  wgl_tests = [
141f71742dfSmrg    [ 'wgl_core_and_exts', [ 'wgl_core_and_exts.c' ], [], ],
142f71742dfSmrg    [ 'wgl_per_context_funcptrs', [ 'wgl_per_context_funcptrs.c' ], [], ],
143f71742dfSmrg    [ 'wgl_usefontbitmaps', [ 'wgl_usefontbitmaps.c'], [], ],
144f71742dfSmrg    [ 'wgl_usefontbitmaps_unicode', [ 'wgl_usefontbitmaps.c' ], [ '-DUNICODE' ], ],
145f71742dfSmrg  ]
146f71742dfSmrg
147f71742dfSmrg  foreach test: wgl_tests
148f71742dfSmrg    test_name = test[0]
149f71742dfSmrg    test_source = test[1]
150f71742dfSmrg    test_c_args = test[2]
151f71742dfSmrg
152f71742dfSmrg    test_bin = executable(test_name, test_source,
153f71742dfSmrg                          c_args: test_cflags + test_c_args,
154f71742dfSmrg                          include_directories: libepoxy_inc,
155f71742dfSmrg                          dependencies: [ libepoxy_dep ],
156f71742dfSmrg                          link_with: wgl_common_lib)
157f71742dfSmrg
158f71742dfSmrg    test(test_name, test_bin)
159f71742dfSmrg  endforeach
160f71742dfSmrgendif
161ca86eba8Smrg
162ca86eba8Smrg# Apple
163ca86eba8Smrgif host_machine.system().contains('darwin')
164ca86eba8Smrg  opengl_dep = dependency('appleframeworks', modules: ['OpenGL', 'Carbon'], required: true)
165ca86eba8Smrg
166ca86eba8Smrg  cgl_tests = [
167ca86eba8Smrg    [ 'cgl_core', [ 'cgl_core.c' ] ],
168ca86eba8Smrg    [ 'cgl_epoxy_api', [ 'cgl_epoxy_api.c' ] ],
169ca86eba8Smrg  ]
170ca86eba8Smrg
171ca86eba8Smrg  foreach t: cgl_tests
172ca86eba8Smrg    test_name = t[0]
173ca86eba8Smrg    test_sources = t[1]
174ca86eba8Smrg
175ca86eba8Smrg    test(test_name,
176ca86eba8Smrg      executable(
177ca86eba8Smrg        test_name, test_sources,
178ca86eba8Smrg        c_args: test_cflags,
179ca86eba8Smrg        include_directories: libepoxy_inc,
180ca86eba8Smrg        dependencies: [ libepoxy_dep, opengl_dep ],
181ca86eba8Smrg      ),
182ca86eba8Smrg    )
183ca86eba8Smrg  endforeach
184ca86eba8Smrgendif
185