diff --git a/config.h.meson b/config.h.meson new file mode 100644 index 0000000000..c7709c8bd7 --- /dev/null +++ b/config.h.meson @@ -0,0 +1,16 @@ +#mesondefine ENABLE_NLS +#mesondefine GETTEXT_PACKAGE +#mesondefine GST_API_VERSION +#mesondefine GST_LICENSE +#mesondefine GST_PACKAGE_NAME +#mesondefine GST_PACKAGE_ORIGIN +#mesondefine GST_PACKAGE_RELEASE_DATETIME +#mesondefine LOCALEDIR +#mesondefine PACKAGE +#mesondefine PACKAGE_BUGREPORT +#mesondefine PACKAGE_NAME +#mesondefine PACKAGE_STRING +#mesondefine PACKAGE_TARNAME +#mesondefine PACKAGE_URL +#mesondefine PACKAGE_VERSION +#mesondefine VERSION diff --git a/examples/meson.build b/examples/meson.build new file mode 100644 index 0000000000..0a504470f3 --- /dev/null +++ b/examples/meson.build @@ -0,0 +1,35 @@ +examples = [ + 'test-appsrc', + 'test-auth', + 'test-launch', + 'test-mp4', + 'test-multicast2', + 'test-multicast', + 'test-netclock', + 'test-netclock-client', + 'test-ogg', + 'test-readme', + 'test-record-auth', + 'test-record', + 'test-sdp', + 'test-uri', + 'test-video', + 'test-video-rtx', +] + +foreach example : examples + executable(example, '@0@.c'.format(example), + c_args : rtspserver_args, + include_directories : rtspserver_incs, + dependencies : [glib_dep, gst_dep, gstnet_dep, gst_rtsp_server_dep], + install: false) +endforeach + +cgroup_dep = dependency('libcgroup', version : '>= 0.26', required : false) +if cgroup_dep.found() + executable('test-cgroups', 'test-cgroups.c', + c_args : rtspserver_args, + include_directories : rtspserver_incs, + dependencies : [glib_dep, gst_dep, gstnet_dep, gst_rtsp_server_dep, cgroup_dep], + install: false) +endif diff --git a/gst/meson.build b/gst/meson.build new file mode 100644 index 0000000000..229c861eed --- /dev/null +++ b/gst/meson.build @@ -0,0 +1,2 @@ +subdir('rtsp-server') +subdir('rtsp-sink') diff --git a/gst/rtsp-server/meson.build b/gst/rtsp-server/meson.build new file mode 100644 index 0000000000..ef47015ae5 --- /dev/null +++ b/gst/rtsp-server/meson.build @@ -0,0 +1,58 @@ +rtsp_server_sources = [ + 'rtsp-address-pool.c', + 'rtsp-auth.c', + 'rtsp-client.c', + 'rtsp-context.c', + 'rtsp-media.c', + 'rtsp-media-factory.c', + 'rtsp-media-factory-uri.c', + 'rtsp-mount-points.c', + 'rtsp-params.c', + 'rtsp-permissions.c', + 'rtsp-sdp.c', + 'rtsp-server.c', + 'rtsp-session.c', + 'rtsp-session-media.c', + 'rtsp-session-pool.c', + 'rtsp-stream.c', + 'rtsp-stream-transport.c', + 'rtsp-thread-pool.c', + 'rtsp-token.c', +] + +rtsp_server_headers = [ + 'rtsp-auth.h', + 'rtsp-address-pool.h', + 'rtsp-context.h', + 'rtsp-params.h', + 'rtsp-sdp.h', + 'rtsp-thread-pool.h', + 'rtsp-media.h', + 'rtsp-media-factory.h', + 'rtsp-media-factory-uri.h', + 'rtsp-mount-points.h', + 'rtsp-permissions.h', + 'rtsp-stream.h', + 'rtsp-stream-transport.h', + 'rtsp-session.h', + 'rtsp-session-media.h', + 'rtsp-session-pool.h', + 'rtsp-token.h', + 'rtsp-client.h', + 'rtsp-server.h', +] +install_headers(rtsp_server_headers, subdir : 'gstreamer-1.0/gst/rtsp-server') + +gst_rtsp_server = library('gstrtspserver-@0@'.format(api_version), + rtsp_server_sources, + include_directories : rtspserver_incs, + c_args: rtspserver_args, + version : libversion, + soversion : soversion, + install : true, + dependencies : [gstrtsp_dep, gstrtp_dep, gstsdp_dep, gstnet_dep, gstapp_dep], +) + +gst_rtsp_server_dep = declare_dependency(link_with : gst_rtsp_server, + include_directories : rtspserver_incs, + dependencies : [gstrtsp_dep, gstrtp_dep, gstsdp_dep, gstnet_dep, gstapp_dep]) diff --git a/gst/rtsp-sink/meson.build b/gst/rtsp-sink/meson.build new file mode 100644 index 0000000000..b8fe2f0c64 --- /dev/null +++ b/gst/rtsp-sink/meson.build @@ -0,0 +1,12 @@ +rtspsink_sources = [ + 'gstrtspclientsink.c', + 'plugin.c', +] + +rtspsink = library('gstrtspclientsink', + rtspsink_sources, + c_args : rtspserver_args, + include_directories : rtspserver_incs, + dependencies : [gstrtsp_dep, gstsdp_dep, gst_rtsp_server_dep], + install : true, + install_dir : plugins_install_dir) diff --git a/meson.build b/meson.build new file mode 100644 index 0000000000..d861ffef0e --- /dev/null +++ b/meson.build @@ -0,0 +1,58 @@ +project('gst-rtsp-server', 'c', + version : '1.9.1.1', + meson_version : '>= 0.33.0', + default_options : ['warning_level=1', 'buildtype=debugoptimized']) + +gst_version = meson.project_version() +version_arr = gst_version.split('.') +gst_version_major = version_arr[0] +gst_version_minor = version_arr[1] +gst_version_micro = version_arr[2] +if version_arr.length() == 4 + gst_version_nano = version_arr[3] +else + gst_version_nano = 0 +endif + +glib_req = '>= 2.40.0' +gst_req = '>= @0@.@1@.0'.format(gst_version_major, gst_version_minor) + +api_version = '1.0' +soversion = 0 +# maintaining compatibility with the previous libtool versioning +# current = minor * 100 + micro +libversion = '@0@.@1@.0'.format(soversion, gst_version_minor.to_int() * 100 + gst_version_micro.to_int()) + +plugins_install_dir = '@0@/gstreamer-1.0'.format(get_option('libdir')) + +cdata = configuration_data() +cdata.set('GETTEXT_PACKAGE', '"gst-rtsp-server-1.0"') +cdata.set('PACKAGE', '"gst-rtsp-server"') +cdata.set('VERSION', '"@0@"'.format(gst_version)) +cdata.set('PACKAGE_VERSION', '"@0@"'.format(gst_version)) +cdata.set('GST_PACKAGE_NAME', '"GStreamer RTSP Server Library"') +cdata.set('GST_PACKAGE_ORIGIN', '"Unknown package origin"') +#cdata.set('GST_API_VERSION', '"@0@"'.format(api_version)) +cdata.set('GST_LICENSE', '"LGPL"') + +configure_file(input : 'config.h.meson', + output : 'config.h', + configuration : cdata) + +rtspserver_args = ['-DHAVE_CONFIG_H'] + +rtspserver_incs = include_directories('gst/rtsp-server', '.') + +glib_dep = dependency('glib-2.0', version : glib_req) +gst_dep = dependency('gstreamer-1.0', version : gst_req) +gstcheck_dep = dependency('gstreamer-check-1.0', version : gst_req) +gstrtsp_dep = dependency('gstreamer-rtsp-1.0', version : gst_req) +gstrtp_dep = dependency('gstreamer-rtp-1.0', version : gst_req) +gstsdp_dep = dependency('gstreamer-sdp-1.0', version : gst_req) +gstapp_dep = dependency('gstreamer-app-1.0', version : gst_req) +gstnet_dep = dependency('gstreamer-net-1.0', version : gst_req) + +subdir('gst') +subdir('tests') +subdir('examples') +subdir('pkgconfig') diff --git a/pkgconfig/meson.build b/pkgconfig/meson.build new file mode 100644 index 0000000000..c4b7179f1f --- /dev/null +++ b/pkgconfig/meson.build @@ -0,0 +1,17 @@ +pkgconf = configuration_data() + +pkgconf.set('prefix', get_option('prefix')) +pkgconf.set('exec_prefix', '${prefix}') +pkgconf.set('libdir', '${prefix}/@0@'.format(get_option('libdir'))) +pkgconf.set('includedir', '${prefix}/@0@'.format(get_option('includedir'))) +pkgconf.set('GST_API_VERSION', api_version) +pkgconf.set('VERSION', gst_version) + +pkg_install_dir = '@0@/pkgconfig'.format(get_option('libdir')) + +# FIXME: -uninstalled.pc files (if still needed?) +configure_file(input : 'gstreamer-rtsp-server.pc.in', + output : 'gstreamer-rtsp-server-1.0.pc', + configuration : pkgconf, + install_dir : pkg_install_dir, +) diff --git a/tests/check/meson.build b/tests/check/meson.build new file mode 100644 index 0000000000..622c6c5606 --- /dev/null +++ b/tests/check/meson.build @@ -0,0 +1,72 @@ +# FIXME: something is wrong with plugin paths / whitelisting here + +test_plugins_modules = [ + ['gstreamer-1.0', true], + ['gstreamer-plugins-base-1.0', true], + ['gstreamer-plugins-good-1.0', false], + ['gstreamer-plugins-bad-1.0', false], +] +test_plugin_path = '' +foreach m : test_plugins_modules + m_name = m[0] + m_required = m[1] + runcmd = run_command('pkg-config', '--variable=pluginsdir', m_name + ' ' + gst_req) + if runcmd.returncode() == 0 + module_plugin_path = runcmd.stdout().strip() + message('Using '+ m_name + ' plugins in ' + module_plugin_path) + if test_plugin_path == '' + test_plugin_path = module_plugin_path + elif module_plugin_path != test_plugin_path + test_plugin_path = test_plugin_path + ':' + module_plugin_path + endif + elif m_required + error('Could not determine ' + m_name + ' plugins directory for unit tests.') + endif +endforeach + +test_c_args = [ + '-UG_DISABLE_ASSERT', + '-UG_DISABLE_CAST_CHECKS', + '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_PLUGIN_LOADING_WHITELIST"', +] + +test_env = [ + 'GST_PLUGIN_SYSTEM_PATH_1_0=', + 'GST_PLUGIN_PATH_1_0=' + meson.build_root() + '/gst/rtsp-sink:' + test_plugin_path, + 'GST_PLUGIN_LOADING_WHITELIST=gstreamer:gst-plugins-base:gst-plugins-good:gst-plugins-bad:gst-rtsp-server', + 'CK_DEFAULT_TIMEOUT=120', +] + +rtsp_server_tests = [ + 'gst/addresspool', + 'gst/client', + 'gst/mountpoints', + 'gst/mediafactory', + 'gst/media', + 'gst/permissions', + 'gst/rtspserver', + 'gst/rtspclientsink', + 'gst/sessionmedia', + 'gst/sessionpool', + 'gst/stream', + 'gst/threadpool', + 'gst/token', +] + +all_env = '' +foreach e : test_env + all_env = all_env + ' ' + e +endforeach +message('test env:' + all_env) + +foreach test_name : rtsp_server_tests + exe = executable(test_name, '@0@.c'.format(test_name), + include_directories : rtspserver_incs, + c_args : rtspserver_args + test_c_args, + dependencies : [gstcheck_dep, gstrtsp_dep, gstrtp_dep, gst_rtsp_server_dep] + ) + test(test_name, exe, + env : test_env + [ 'GST_REGISTRY=@0@/@1@.registry'.format(meson.current_build_dir(), test_name) ], + timeout : 120, + ) +endforeach diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 0000000000..5f1c1c96c8 --- /dev/null +++ b/tests/meson.build @@ -0,0 +1 @@ +#subdir('check') # FIXME