X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=meson.build;h=767f98f114f4cfd39d79d2aba656db7142a55106;hb=c53705b8eac90dcdbc40048d78ace63c77f3ab2d;hp=72c008291cbb1f206af6c6d924ce4f7b1f3f8b1b;hpb=1debd803dee50df8439a96a66f923ed0db0cf9fb;p=platform%2Fupstream%2Fgstreamer.git diff --git a/meson.build b/meson.build index 72c0082..767f98f 100644 --- a/meson.build +++ b/meson.build @@ -1,19 +1,23 @@ -project('gst-plugins-base', 'c', 'cpp', - version : '1.11.91', - meson_version : '>= 0.36.0', +project('gst-plugins-base', 'c', + version : '1.16.2', + meson_version : '>= 0.47', 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] +gst_version_major = version_arr[0].to_int() +gst_version_minor = version_arr[1].to_int() +gst_version_micro = version_arr[2].to_int() if version_arr.length() == 4 - gst_version_nano = version_arr[3] + gst_version_nano = version_arr[3].to_int() else gst_version_nano = 0 endif +gst_version_is_dev = gst_version_minor % 2 == 1 and gst_version_micro < 90 + +have_cxx = add_languages('cpp', required : false) +have_objc = add_languages('objc', required : false) glib_req = '>= 2.40.0' orc_req = '>= 0.4.24' @@ -23,12 +27,14 @@ api_version = '1.0' soversion = 0 # maintaining compatibility with the previous libtool versioning # current = minor * 100 + micro -# FIXME: should be able to convert string to int somehow so we can just do maths -libversion = '@0@.@1@.0'.format(soversion, gst_version_minor.to_int() * 100 + gst_version_micro.to_int()) +curversion = gst_version_minor * 100 + gst_version_micro +libversion = '@0@.@1@.0'.format(soversion, curversion) +osxversion = curversion + 1 -plugins_install_dir = '@0@/gstreamer-1.0'.format(get_option('libdir')) +plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0') cc = meson.get_compiler('c') +host_system = host_machine.system() if cc.get_id() == 'msvc' # Ignore several spurious warnings for things gstreamer does very commonly @@ -40,6 +46,7 @@ if cc.get_id() == 'msvc' '/wd4146', # unary minus on unsigned (beware INT_MIN) '/wd4244', # lossy type conversion (e.g. double -> int) '/wd4305', # truncating type conversion (e.g. double -> float) + cc.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8 language : 'c') # Disable SAFESEH with MSVC for plugins and libs that use external deps that # are built with MinGW @@ -48,7 +55,54 @@ else noseh_link_args = [] endif +if cc.has_link_argument('-Wl,-Bsymbolic-functions') + add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c') +endif + core_conf = configuration_data() + +# Symbol visibility +if cc.get_id() == 'msvc' + export_define = '__declspec(dllexport) extern' +elif cc.has_argument('-fvisibility=hidden') + add_project_arguments('-fvisibility=hidden', language: 'c') + export_define = 'extern __attribute__ ((visibility ("default")))' +else + export_define = 'extern' +endif + +# Passing this through the command line would be too messy +core_conf.set('GST_API_EXPORT', export_define) + +# Disable strict aliasing +if cc.has_argument('-fno-strict-aliasing') + add_project_arguments('-fno-strict-aliasing', language: 'c') +endif + +# Define G_DISABLE_DEPRECATED for development versions +if gst_version_is_dev + message('Disabling deprecated GLib API') + add_project_arguments('-DG_DISABLE_DEPRECATED', language: 'c') +endif + +cast_checks = get_option('gobject-cast-checks') +if cast_checks.disabled() or (cast_checks.auto() and not gst_version_is_dev) + message('Disabling GLib cast checks') + add_project_arguments('-DG_DISABLE_CAST_CHECKS', language: 'c') +endif + +glib_asserts = get_option('glib-asserts') +if glib_asserts.disabled() or (glib_asserts.auto() and not gst_version_is_dev) + message('Disabling GLib asserts') + add_project_arguments('-DG_DISABLE_ASSERT', language: 'c') +endif + +glib_checks = get_option('glib-checks') +if glib_checks.disabled() or (glib_checks.auto() and not gst_version_is_dev) + message('Disabling GLib checks') + add_project_arguments('-DG_DISABLE_CHECKS', language: 'c') +endif + check_headers = [ ['HAVE_DLFCN_H', 'dlfcn.h'], ['HAVE_EMMINTRIN_H', 'emmintrin.h'], @@ -67,6 +121,7 @@ check_headers = [ ['HAVE_UNISTD_H', 'unistd.h'], ['HAVE_WINSOCK2_H', 'winsock2.h'], ['HAVE_XMMINTRIN_H', 'xmmintrin.h'], + ['HAVE_LINUX_DMA_BUF_H', 'linux/dma-buf.h'], ] foreach h : check_headers if cc.has_header(h.get(1)) @@ -95,19 +150,89 @@ core_conf.set('SIZEOF_LONG', cc.sizeof('long')) core_conf.set('SIZEOF_SHORT', cc.sizeof('short')) core_conf.set('SIZEOF_VOIDP', cc.sizeof('void*')) -core_conf.set('GETTEXT_PACKAGE', '"gst-plugins-base-1.0"') -core_conf.set('PACKAGE', '"gst-plugins-base"') -core_conf.set('VERSION', '"@0@"'.format(gst_version)) -core_conf.set('PACKAGE_VERSION', '"@0@"'.format(gst_version)) -core_conf.set('GST_PACKAGE_NAME', '"GStreamer Base Plug-ins"') -core_conf.set('GST_PACKAGE_ORIGIN', '"Unknown package origin"') -core_conf.set('GST_API_VERSION', '"@0@"'.format(api_version)) -core_conf.set('GST_INSTALL_PLUGINS_HELPER', '"/FIXME"') -core_conf.set('GST_DATADIR', '"/FIXME"') -core_conf.set('GST_LICENSE', '"LGPL"') +core_conf.set_quoted('GETTEXT_PACKAGE', 'gst-plugins-base-1.0') +core_conf.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir'))) +core_conf.set_quoted('PACKAGE', 'gst-plugins-base') +core_conf.set_quoted('VERSION', gst_version) +core_conf.set_quoted('PACKAGE_VERSION', gst_version) +core_conf.set_quoted('GST_API_VERSION', api_version) +core_conf.set_quoted('GST_DATADIR', join_paths(get_option('prefix'), get_option('datadir'))) +core_conf.set_quoted('GST_LICENSE', 'LGPL') + +install_plugins_helper = get_option('install_plugins_helper') +if install_plugins_helper == '' + install_plugins_helper = join_paths(get_option('prefix'), + get_option('libexecdir'), + 'gst-install-plugins-helper') +endif +core_conf.set_quoted('GST_INSTALL_PLUGINS_HELPER', install_plugins_helper) + +warning_flags = [ + '-Wmissing-declarations', + '-Wredundant-decls', + '-Wundef', + '-Wwrite-strings', + '-Wformat', + '-Wformat-nonliteral', + '-Wformat-security', + '-Winit-self', + '-Wmissing-include-dirs', + '-Waddress', + '-Wno-multichar', + '-Wvla', + '-Wpointer-arith', +] + +warning_c_flags = [ + '-Wmissing-prototypes', + '-Wdeclaration-after-statement', +] + +warning_cxx_flags = [ + '-Waggregate-return', +] + +if have_cxx + cxx = meson.get_compiler('cpp') + foreach extra_arg : warning_cxx_flags + if cxx.has_argument (extra_arg) + add_project_arguments([extra_arg], language: 'cpp') + endif + endforeach +endif + +foreach extra_arg : warning_flags + if cc.has_argument (extra_arg) + add_project_arguments([extra_arg], language: 'c') + endif + if have_cxx and cxx.has_argument (extra_arg) + add_project_arguments([extra_arg], language: 'cpp') + endif +endforeach + +foreach extra_arg : warning_c_flags + if cc.has_argument (extra_arg) + add_project_arguments([extra_arg], language: 'c') + endif +endforeach + +# GStreamer package name and origin url +gst_package_name = get_option('package-name') +if gst_package_name == '' + if gst_version_nano == 0 + gst_package_name = 'GStreamer Base Plug-ins source release' + elif gst_version_nano == 1 + gst_package_name = 'GStreamer Base Plug-ins git' + else + gst_package_name = 'GStreamer Base Plug-ins prerelease' + endif +endif +core_conf.set_quoted('GST_PACKAGE_NAME', gst_package_name) +core_conf.set_quoted('GST_PACKAGE_ORIGIN', get_option('package-origin')) + # FIXME: These should be configure options -core_conf.set('DEFAULT_VIDEOSINK', '"autovideosink"') -core_conf.set('DEFAULT_AUDIOSINK', '"autoaudiosink"') +core_conf.set_quoted('DEFAULT_VIDEOSINK', 'autovideosink') +core_conf.set_quoted('DEFAULT_AUDIOSINK', 'autoaudiosink') # Set whether the audioresampling method should be detected at runtime core_conf.set('AUDIORESAMPLE_FORMAT_' + get_option('audioresample_format').to_upper(), true) @@ -118,28 +243,53 @@ if get_option('default_library') == 'static' endif # X11 checks are for sys/ and tests/ -x11_dep = dependency('x11', required : false) +x11_dep = dependency('x11', required : get_option('x11')) # GLib checks are for the entire project -giounix_dep = dependency('gio-unix-2.0', version : glib_req, required : false) # Almost everything that uses glib also uses gobject -glib_deps = [dependency('glib-2.0', version : glib_req), - dependency('gobject-2.0', version : glib_req)] -gio_dep = dependency('gio-2.0', version : glib_req) +glib_deps = [dependency('glib-2.0', version : glib_req, fallback: ['glib', 'libglib_dep']), + dependency('gobject-2.0', fallback: ['glib', 'libgobject_dep'])] +# GIO is used by the GIO plugin, and by the TCP, SDP, and RTSP plugins +gio_dep = dependency('gio-2.0', fallback: ['glib', 'libgio_dep']) +giounix_dep = dependency('', required: false) +if host_system != 'windows' + giounix_dep = dependency('gio-unix-2.0', version : glib_req, + fallback: ['glib', 'libgiounix_dep']) +endif +gmodule_dep = dependency('gmodule-no-export-2.0', + fallback: ['glib', 'libgmodule_dep']) + +# some of the examples can use gdk-pixbuf and GTK+3 +gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0', required : get_option('examples')) +gtk_dep = dependency('gtk+-3.0', version : '>= 3.10', required : get_option('examples')) +# TODO: https://github.com/mesonbuild/meson/issues/3941 +if not get_option('x11').disabled() + gtk_x11_dep = dependency('gtk+-x11-3.0', version : '>= 3.10', required : get_option('examples')) +else + gtk_x11_dep = dependency('', required : false) +endif +# gtk+ quartz backend is only available on macOS +if host_system == 'darwin' + gtk_quartz_dep = dependency('gtk+-quartz-3.0', version : '>= 3.10', required : get_option('examples')) +else + gtk_quartz_dep = dependency('', required : false) +endif core_conf.set('HAVE_X', x11_dep.found()) core_conf.set('HAVE_GIO_UNIX_2_0', giounix_dep.found()) -runcmd = run_command('pkg-config', '--variable=giomoduledir', 'gio-2.0') -if runcmd.returncode() == 0 - core_conf.set('GIO_MODULE_DIR', '"@0@"'.format(runcmd.stdout().strip())) -endif -runcmd = run_command('pkg-config', '--variable=libdir', 'gio-2.0') -if runcmd.returncode() == 0 - core_conf.set('GIO_LIBDIR', '"@0@"'.format(runcmd.stdout().strip())) -endif -runcmd = run_command('pkg-config', '--variable=prefix', 'gio-2.0') -if runcmd.returncode() == 0 - core_conf.set('GIO_PREFIX', '"@0@"'.format(runcmd.stdout().strip())) +if gio_dep.type_name() == 'pkgconfig' + core_conf.set_quoted('GIO_MODULE_DIR', + gio_dep.get_pkgconfig_variable('giomoduledir')) + core_conf.set_quoted('GIO_LIBDIR', + gio_dep.get_pkgconfig_variable('libdir')) + core_conf.set_quoted('GIO_PREFIX', + gio_dep.get_pkgconfig_variable('prefix')) +else + core_conf.set_quoted('GIO_MODULE_DIR', join_paths(get_option('prefix'), + get_option('libdir'), 'gio/modules')) + core_conf.set_quoted('GIO_LIBDIR', join_paths(get_option('prefix'), + get_option('libdir'))) + core_conf.set_quoted('GIO_PREFIX', get_option('prefix')) endif configinc = include_directories('.') @@ -153,34 +303,24 @@ gst_base_dep = dependency('gstreamer-base-1.0', version : gst_req, fallback : ['gstreamer', 'gst_base_dep']) gst_net_dep = dependency('gstreamer-net-1.0', version : gst_req, fallback : ['gstreamer', 'gst_net_dep']) -if host_machine.system() != 'windows' - gst_check_dep = dependency('gstreamer-check-1.0', version : gst_req, - fallback : ['gstreamer', 'gst_check_dep']) -endif +gst_check_dep = dependency('gstreamer-check-1.0', version : gst_req, + required : get_option('tests'), + fallback : ['gstreamer', 'gst_check_dep']) gst_controller_dep = dependency('gstreamer-controller-1.0', version : gst_req, fallback : ['gstreamer', 'gst_controller_dep']) -vs_module_defs_dir = meson.current_source_dir() + '/win32/common/' - -# Used by the *_mkenum.py helper scripts -glib_mkenums = find_program('glib-mkenums') - have_orcc = false orcc_args = [] -if get_option('use_orc') != 'no' - need_orc = get_option('use_orc') == 'yes' - # Used by various libraries/elements that use Orc code - orc_dep = dependency('orc-0.4', version : orc_req, required : need_orc) - orcc = find_program('orcc', required : need_orc) - if orc_dep.found() and orcc.found() - have_orcc = true - orcc_args = [orcc, '--include', 'glib.h'] - core_conf.set('HAVE_ORC', 1) - else - message('Orc Compiler not found, will use backup C code') - core_conf.set('DISABLE_ORC', 1) - endif +# Used by various libraries/elements that use Orc code +orc_dep = dependency('orc-0.4', version : orc_req, required : get_option('orc'), + fallback : ['orc', 'orc_dep']) +orcc = find_program('orcc', required : get_option('orc')) +if orc_dep.found() and orcc.found() + have_orcc = true + orcc_args = [orcc, '--include', 'glib.h'] + core_conf.set('HAVE_ORC', 1) else + message('Orc Compiler not found or disabled, will use backup C code') core_conf.set('DISABLE_ORC', 1) endif @@ -193,18 +333,22 @@ have_sse = cc.has_argument(sse_args) have_sse2 = cc.has_argument(sse2_args) have_sse41 = cc.has_argument(sse41_args) -# FIXME: Meson should have a way for portably adding -fPIC when needed for use -# with static libraries that are linked into shared libraries. Or, it should -# add it by default with an option to turn it off if needed. -pic_args = ['-fPIC'] -if host_machine.system() == 'windows' - pic_args = [] +if host_machine.cpu_family() == 'arm' + if cc.compiles(''' +#include +int32x4_t testfunc(int16_t *a, int16_t *b) { + asm volatile ("vmull.s16 q0, d0, d0" : : : "q0"); + return vmull_s16(vld1_s16(a), vld1_s16(b)); +} +''', name : 'NEON support') + core_conf.set('HAVE_ARM_NEON', true) + endif endif if gst_dep.type_name() == 'internal' gst_proj = subproject('gstreamer') - if gst_proj.get_variable('disable_gst_debug') + if not gst_proj.get_variable('gst_debug') message('GStreamer debug system is disabled') add_project_arguments('-Wno-unused', language: 'c') else @@ -225,29 +369,43 @@ else endif endif -gir = find_program('g-ir-scanner', required : false) +gir = find_program('g-ir-scanner', required : get_option('introspection')) gnome = import('gnome') -build_gir = gir.found() and not meson.is_cross_build() and not get_option('disable_introspection') +build_gir = gir.found() and not meson.is_cross_build() gir_init_section = [ '--add-init-section=extern void gst_init(gint*,gchar**);' + \ + 'g_setenv("GST_REGISTRY_DISABLE", "yes", TRUE);' + \ 'g_setenv("GST_REGISTRY_1.0", "@0@", TRUE);'.format(meson.current_build_dir() + '/gir_empty_registry.reg') + \ 'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \ 'g_setenv("GST_PLUGIN_SYSTEM_PATH_1_0", "", TRUE);' + \ - 'gst_init(NULL,NULL);' ] + 'gst_init(NULL,NULL);', '--quiet'] + +pkgconfig = import('pkgconfig') +plugins_pkgconfig_install_dir = join_paths(plugins_install_dir, 'pkgconfig') +if get_option('default_library') == 'shared' + # If we don't build static plugins there is no need to generate pc files + plugins_pkgconfig_install_dir = disabler() +endif subdir('gst-libs') subdir('gst') subdir('ext') subdir('sys') -subdir('tools') +if not get_option('tools').disabled() + subdir('tools') +endif subdir('tests') subdir('pkgconfig') +# xgettext is optional (on Windows for instance) +if find_program('xgettext', required : get_option('nls')).found() + core_conf.set('ENABLE_NLS', 1) + subdir('po') +endif + if build_machine.system() == 'windows' message('Disabling gtk-doc while building on Windows') -elif get_option('disable_gtkdoc') - message('gtk-doc is disabled via options') else - if find_program('gtkdoc-scan', required : false).found() + if find_program('gtkdoc-scan', required : get_option('gtk_doc')).found() subdir('docs') else message('Not building documentation as gtk-doc was not found') @@ -255,9 +413,7 @@ else endif # Use core_conf after all subdirs have set values -configure_file(input : 'config.h.meson', - output : 'config.h', - configuration : core_conf) +configure_file(output : 'config.h', configuration : core_conf) -python3 = find_program('python3') +python3 = import('python').find_installation() run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')