1have_registry = true # FIXME get_option('registry') 2 3libparser = static_library('parser', 4 'elements/parser.c', 5 install : false, 6 dependencies : [gst_dep, gstcheck_dep], 7) 8 9libparser_dep = declare_dependency(link_with: libparser, 10 sources: ['elements/parser.h']) 11 12# FIXME: automagic 13exif_dep = dependency('libexif', version : '>= 0.6.16', required : false) 14 15# Since nalutils API is internal, need to build it again 16nalutils_dep = gstcodecparsers_dep.partial_dependency (compile_args: true, includes: true) 17 18enable_gst_play_tests = get_option('gst_play_tests') 19libsoup_dep = dependency('libsoup-2.4', version : '>=2.48', required : enable_gst_play_tests, 20 fallback : ['libsoup', 'libsoup_dep']) 21 22# name, condition when to skip the test and extra dependencies 23base_tests = [ 24 [['elements/aesenc.c'], not aes_dep.found(), [aes_dep]], 25 [['elements/aesdec.c'], not aes_dep.found(), [aes_dep]], 26 [['elements/aiffparse.c']], 27 [['elements/asfmux.c']], 28 [['elements/autoconvert.c']], 29 [['elements/autovideoconvert.c']], 30 [['elements/avwait.c']], 31 [['elements/camerabin.c']], 32 [['elements/ccconverter.c'], not closedcaption_dep.found(), [gstvideo_dep]], 33 [['elements/cccombiner.c'], not closedcaption_dep.found(), ], 34 [['elements/ccextractor.c'], not closedcaption_dep.found(), ], 35 [['elements/cudaconvert.c'], false, [gmodule_dep, gstgl_dep]], 36 [['elements/cudafilter.c'], false, [gmodule_dep, gstgl_dep]], 37 [['elements/d3d11colorconvert.c'], host_machine.system() != 'windows', ], 38 [['elements/gdpdepay.c']], 39 [['elements/gdppay.c']], 40 [['elements/h263parse.c'], false, [libparser_dep, gstcodecparsers_dep]], 41 [['elements/h264parse.c'], false, [libparser_dep, gstcodecparsers_dep]], 42 [['elements/h265parse.c'], false, [libparser_dep, gstcodecparsers_dep]], 43 [['elements/hlsdemux_m3u8.c'], not hls_dep.found(), [hls_dep]], 44 [['elements/id3mux.c']], 45 [['elements/interlace.c']], 46 [['elements/jpeg2000parse.c'], false, [libparser_dep, gstcodecparsers_dep]], 47 [['elements/line21.c'], not closedcaption_dep.found(), ], 48 [['elements/mfvideosrc.c'], host_machine.system() != 'windows', ], 49 [['elements/mpegtsdemux.c'], false, [gstmpegts_dep]], 50 [['elements/mpegtsmux.c'], false, [gstmpegts_dep]], 51 [['elements/mpeg4videoparse.c'], false, [libparser_dep, gstcodecparsers_dep]], 52 [['elements/mpegvideoparse.c'], false, [libparser_dep, gstcodecparsers_dep]], 53 [['elements/msdkh264enc.c'], not have_msdk, [msdk_dep]], 54 [['elements/mxfdemux.c']], 55 [['elements/mxfmux.c']], 56 [['elements/nvenc.c'], false, [gmodule_dep, gstgl_dep]], 57 [['elements/nvdec.c'], not gstgl_dep.found(), [gmodule_dep, gstgl_dep]], 58 [['elements/svthevcenc.c'], not svthevcenc_dep.found(), [svthevcenc_dep]], 59 [['elements/openjpeg.c'], not openjpeg_dep.found(), [openjpeg_dep]], 60 [['elements/pcapparse.c'], false, [libparser_dep]], 61 [['elements/pnm.c']], 62 [['elements/ristrtpext.c']], 63 [['elements/rtponvifparse.c']], 64 [['elements/rtponviftimestamp.c']], 65 [['elements/rtpsrc.c']], 66 [['elements/rtpsink.c']], 67 [['elements/switchbin.c']], 68 [['elements/videoframe-audiolevel.c']], 69 [['elements/viewfinderbin.c']], 70 [['elements/vp9parse.c'], false, [gstcodecparsers_dep]], 71 [['elements/av1parse.c'], false, [gstcodecparsers_dep]], 72 [['elements/wasapi.c'], host_machine.system() != 'windows', ], 73 [['elements/wasapi2.c'], host_machine.system() != 'windows', ], 74 [['libs/h264parser.c'], false, [gstcodecparsers_dep]], 75 [['libs/h265parser.c'], false, [gstcodecparsers_dep]], 76 [['libs/insertbin.c'], false, [gstinsertbin_dep]], 77 [['libs/isoff.c'], false, [gstisoff_dep]], 78 [['libs/nalutils.c', '../../gst-libs/gst/codecparsers/nalutils.c'], false, [nalutils_dep]], 79 [['libs/mpegts.c'], false, [gstmpegts_dep]], 80 [['libs/mpegvideoparser.c'], false, [gstcodecparsers_dep]], 81 [['libs/planaraudioadapter.c'], false, [gstbadaudio_dep]], 82 [['libs/play.c'], not enable_gst_play_tests, [gstplay_dep, libsoup_dep]], 83 [['libs/vc1parser.c'], false, [gstcodecparsers_dep]], 84 [['libs/vp8parser.c'], false, [gstcodecparsers_dep]], 85 [['libs/vp9parser.c'], false, [gstcodecparsers_dep]], 86 [['libs/av1parser.c'], false, [gstcodecparsers_dep]], 87 [['libs/vkmemory.c'], not gstvulkan_dep.found(), [gstvulkan_dep]], 88 [['elements/vkcolorconvert.c'], not gstvulkan_dep.found(), [gstvulkan_dep]], 89 [['libs/vkwindow.c'], not gstvulkan_dep.found(), [gstvulkan_dep]], 90 [['libs/vkdevice.c'], not gstvulkan_dep.found(), [gstvulkan_dep]], 91 [['elements/vkdeviceprovider.c'], not gstvulkan_dep.found(), [gstvulkan_dep]], 92 [['libs/vkcommandpool.c'], not gstvulkan_dep.found(), [gstvulkan_dep]], 93 [['libs/vkimage.c'], not gstvulkan_dep.found(), [gstvulkan_dep]], 94 [['libs/vkinstance.c'], not gstvulkan_dep.found(), [gstvulkan_dep]], 95 [['libs/d3d11device.cpp'], not gstd3d11_dep.found(), [gstd3d11_dep]], 96] 97 98# FIXME: unistd dependency, unstable or not tested yet on windows 99if host_machine.system() != 'windows' 100 base_tests += [ 101 [['elements/assrender.c'], not ass_dep.found(), [ass_dep]], 102 [['elements/avtpaafpay.c'], not avtp_dep.found(), [avtp_dep]], 103 [['elements/avtpaafdepay.c'], not avtp_dep.found(), [avtp_dep]], 104 [['elements/avtpcrfbase.c'], not avtp_dep.found(), [avtp_dep]], 105 [['elements/avtpcrfcheck.c'], not avtp_dep.found(), [avtp_dep], ['../../ext/avtp/gstavtpcrfutil.c']], 106 [['elements/avtpcrfsync.c'], not avtp_dep.found(), [avtp_dep], ['../../ext/avtp/gstavtpcrfutil.c', '../../ext/avtp/gstavtpcrfbase.c']], 107 [['elements/avtpcrfutil.c'], not avtp_dep.found(), [avtp_dep], ['../../ext/avtp/gstavtpcrfutil.c', '../../ext/avtp/gstavtpcrfbase.c']], 108 [['elements/avtpcvfpay.c'], not avtp_dep.found(), [avtp_dep]], 109 [['elements/avtpcvfdepay.c'], not avtp_dep.found(), [avtp_dep]], 110 [['elements/avtpsink.c'], not avtp_dep.found(), [avtp_dep]], 111 [['elements/avtpsrc.c'], not avtp_dep.found(), [avtp_dep]], 112 [['elements/clockselect.c']], 113 [['elements/curlhttpsink.c'], not curl_dep.found(), [curl_dep]], 114 [['elements/curlhttpsrc.c'], not curl_dep.found(), [curl_dep, gio_dep]], 115 [['elements/curlfilesink.c'], 116 not curl_dep.found() or not cdata.has('HAVE_UNISTD_H'), [curl_dep]], 117 [['elements/curlftpsink.c'], not curl_dep.found(), [curl_dep]], 118 [['elements/curlsmtpsink.c'], not curl_dep.found(), [curl_dep]], 119 [['elements/dash_mpd.c'], not xml2_dep.found(), [xml2_dep]], 120 [['elements/dtls.c'], not libcrypto_dep.found(), [libcrypto_dep]], 121 [['elements/faac.c'], 122 not faac_dep.found() or not cc.has_header_symbol('faac.h', 'faacEncOpen') or not cdata.has('HAVE_UNISTD_H'), 123 [faac_dep]], 124 [['elements/faad.c'], 125 not faad_dep.found() or not have_faad_2_7 or not cdata.has('HAVE_UNISTD_H'), 126 [faad_dep]], 127 [['elements/jifmux.c'], 128 not exif_dep.found() or not cdata.has('HAVE_UNISTD_H'), [exif_dep]], 129 [['elements/jpegparse.c'], not cdata.has('HAVE_UNISTD_H')], 130 [['elements/kate.c'], 131 not kate_dep.found() or not cdata.has('HAVE_UNISTD_H'), [kate_dep]], 132 [['elements/netsim.c']], 133 [['elements/shm.c'], not shm_enabled, shm_deps], 134 [['elements/voaacenc.c'], 135 not voaac_dep.found() or not cdata.has('HAVE_UNISTD_H'), [voaac_dep]], 136 [['elements/webrtcbin.c'], not libnice_dep.found(), [gstwebrtc_dep]], 137 [['elements/x265enc.c'], not x265_dep.found(), [x265_dep]], 138 [['elements/zbar.c'], not zbar_dep.found(), [zbar_dep]], 139 [['elements/zxing.c'], not zxing_dep.found(), [zxing_dep]], 140 ] 141endif 142 143# linux only tests 144if host_machine.system() == 'linux' 145 base_tests += [ 146 [['elements/vapostproc.c'], not gstva_dep.found(), [gstva_dep]], 147 ] 148endif 149 150test_defines = [ 151 '-UG_DISABLE_ASSERT', 152 '-UG_DISABLE_CAST_CHECKS', 153 '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_STATE_IGNORE_ELEMENTS"', 154 '-DGST_TEST_FILES_PATH="' + meson.current_source_dir() + '/../files"', 155 '-DTEST_PATH="' + meson.current_build_dir() + '/media"', 156 '-DDASH_MPD_DATADIR=' + meson.current_source_dir() + '/elements/dash_mpd_data', 157 '-DGST_USE_UNSTABLE_API', 158] 159 160test_deps = [gst_dep, gstapp_dep, gstbase_dep, 161 gstbasecamerabin_dep, gstphotography_dep, 162 gstpbutils_dep, gstcontroller_dep, gstaudio_dep, 163 gstvideo_dep, gstrtp_dep, gsturidownloader_dep, 164 gstcheck_dep, gio_dep, glib_dep, gsttag_dep] 165 166pluginsdirs = [ ] 167 168if gst_dep.type_name() == 'pkgconfig' 169 pbase = dependency('gstreamer-plugins-base-' + api_version) 170 171 pluginsdirs = [gst_dep.get_variable('pluginsdir'), 172 pbase.get_variable('pluginsdir')] 173 gst_plugin_scanner_dir = gst_dep.get_variable('pluginscannerdir') 174else 175 gst_plugin_scanner_dir = subproject('gstreamer').get_variable('gst_scanner_dir') 176endif 177gst_plugin_scanner_path = join_paths(gst_plugin_scanner_dir, 'gst-plugin-scanner') 178 179extra_args = [] 180# XXX: our MinGW 32bits toolchain complians when ComPtr is in use 181if host_system == 'windows' and cc.get_id() != 'msvc' 182 mingw_args = cc.get_supported_arguments([ 183 '-Wno-redundant-decls', 184 ]) 185 186 extra_args += mingw_args 187endif 188 189foreach t : base_tests 190 fnames = t.get(0) 191 test_name = fnames[0].split('.').get(0).underscorify() 192 skip_test = false 193 extra_deps = [ ] 194 195 if t.length() >= 3 196 extra_deps = t.get(2) 197 endif 198 199 if t.length() >= 2 200 skip_test = t.get(1) 201 endif 202 203 extra_sources = t.get(3, [ ]) 204 205 if not skip_test 206 exe = executable(test_name, fnames, extra_sources, 207 include_directories : [configinc], 208 c_args : gst_plugins_bad_args + test_defines + extra_args, 209 cpp_args : gst_plugins_bad_args + test_defines + extra_args, 210 dependencies : [libm] + test_deps + extra_deps, 211 ) 212 213 env = environment() 214 env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '') 215 env.set('CK_DEFAULT_TIMEOUT', '20') 216 env.set('GST_STATE_IGNORE_ELEMENTS', '') 217 env.set('GST_PLUGIN_PATH_1_0', [meson.global_build_root()] + pluginsdirs) 218 env.set('GST_REGISTRY', join_paths(meson.current_build_dir(), '@0@.registry'.format(test_name))) 219 env.set('GST_PLUGIN_LOADING_WHITELIST', 'gstreamer', 'gst-plugins-base', 220 'gst-plugins-good', 'gst-plugins-ugly','gst-libav', 'libnice', 221 'gst-plugins-bad@' + meson.project_build_root()) 222 env.set('GST_PLUGIN_SCANNER_1_0', gst_plugin_scanner_path) 223 test(test_name, exe, env: env, timeout: 3 * 60) 224 endif 225endforeach 226 227# orc tests 228orc_tests = [ 229 ['orc_bayer', files('../../gst/bayer/gstbayerorc.orc')], 230] 231 232orc_test_dep = dependency('', required : false) 233if have_orcc 234 # FIXME: there should really just be a separate orc-test-0.4.pc file for this 235 if orc_dep.type_name() == 'pkgconfig' 236 orc_test_dep = cc.find_library('orc-test-0.4', required : false) 237 else 238 orc_test_dep = dependency('', fallback: ['orc', 'orc_test_dep'], required: false) 239 endif 240endif 241 242if have_orcc and orc_test_dep.found() 243 foreach t : orc_tests 244 tname = t[0] 245 torcfile = t[1] 246 tcfilename = '@0@.c'.format(tname) 247 test_c = custom_target(tcfilename, 248 output: tcfilename, 249 input: torcfile, 250 command: [orcc, '--include', 'stdint.h', '--test', '-o', '@OUTPUT@', '@INPUT@']) 251 test_exe = executable(tname, test_c, dependencies: [orc_dep, orc_test_dep]) 252 test(tname, test_exe) 253 endforeach 254endif 255 256if enable_gst_play_tests 257 subdir ('media') 258endif 259