X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=meson.build;h=b55ecc559ace0f9727ff9be1abf73cfc116dcdaf;hb=dac5966da6a0f53d0443dfa1ac239289028c415d;hp=e17df40d02ce8fdb09b174a865971c34d211072b;hpb=5443ce69ff5c81b7947d553b4794d57dce3b0b95;p=platform%2Fupstream%2Fgstreamer.git diff --git a/meson.build b/meson.build index e17df40..b55ecc5 100644 --- a/meson.build +++ b/meson.build @@ -1,19 +1,20 @@ project('gstreamer', 'c', - version : '1.13.0.1', - meson_version : '>= 0.40.1', + version : '1.16.1', + 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].to_int() else gst_version_nano = 0 endif +gst_version_is_dev = gst_version_minor % 2 == 1 and gst_version_micro < 90 host_system = host_machine.system() @@ -21,16 +22,19 @@ apiversion = '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()) +curversion = gst_version_minor * 100 + gst_version_micro +libversion = '@0@.@1@.0'.format(soversion, curversion) +osxversion = curversion + 1 prefix = get_option('prefix') -libtype = get_option('library_format') libexecdir = get_option('libexecdir') helpers_install_dir = join_paths(libexecdir, 'gstreamer-1.0') cc = meson.get_compiler('c') +cdata = configuration_data() + # Ignore several spurious warnings for things gstreamer does very commonly # If a warning is completely useless and spammy, use '/wdXXXX' to suppress it # If a warning is harmless but hard to fix, use '/woXXXX' so it's shown once @@ -41,14 +45,57 @@ 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') -elif cc.has_argument('-Wl,-Bsymbolic-functions') +elif cc.has_link_argument('-Wl,-Bsymbolic-functions') # FIXME: Add an option for this if people ask for it add_project_link_arguments('-Wl,-Bsymbolic-functions', language : 'c') - # FIXME: Add FATAL_WARNINGS from configure.ac endif -cdata = configuration_data() +# Symbol visibility +have_visibility_hidden = false +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")))' + have_visibility_hidden = true +else + export_define = 'extern' +endif + +# Passing this through the command line would be too messy +cdata.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 + cdata.set_quoted('GST_API_VERSION', apiversion) cdata.set_quoted('GST_DATADIR', join_paths(prefix, get_option('datadir'))) cdata.set_quoted('LOCALEDIR', join_paths(prefix, get_option('localedir'))) @@ -65,10 +112,26 @@ cdata.set_quoted('PACKAGE_URL', '') cdata.set_quoted('PACKAGE_VERSION', gst_version) cdata.set_quoted('PLUGINDIR', join_paths(get_option('prefix'), get_option('libdir'), 'gstreamer-1.0')) cdata.set_quoted('VERSION', gst_version) -# FIXME: --with-memory-alignment],[8,N,malloc,pagesize (default is 32)]) option -cdata.set('MEMORY_ALIGNMENT_MALLOC', 1) cdata.set_quoted('GST_PLUGIN_SCANNER_INSTALLED', join_paths(prefix, helpers_install_dir, 'gst-plugin-scanner')) cdata.set_quoted('GST_PTP_HELPER_INSTALLED', join_paths(prefix, helpers_install_dir, 'gst-ptp-helper')) +cdata.set_quoted('GST_PLUGIN_SUBDIR', get_option('libdir'), + description: 'plugin directory path component, used to find plugins on relocatable builds on windows') +cdata.set_quoted('GST_PLUGIN_SCANNER_SUBDIR', libexecdir, + description: 'libexecdir path component, used to find plugin-scanner on relocatable builds on windows') +cdata.set('GST_DISABLE_OPTION_PARSING', not get_option('option-parsing')) + +mem_align_opt = get_option('memory-alignment') +if mem_align_opt == 'malloc' + cdata.set('MEMORY_ALIGNMENT_MALLOC', 1) +elif mem_align_opt == 'pagesize' + cdata.set('MEMORY_ALIGNMENT_PAGESIZE', 1) +else + cdata.set('MEMORY_ALIGNMENT', mem_align_opt.to_int()) +endif + +if ['darwin', 'ios'].contains(host_system) + cdata.set_quoted('GST_EXTRA_MODULE_SUFFIX', '.dylib') +endif if gst_version_nano > 0 # Have GST_ERROR message printed when running from git @@ -78,7 +141,7 @@ else endif # GStreamer package name and origin url -gst_package_name = get_option('with-package-name') +gst_package_name = get_option('package-name') if gst_package_name == '' if gst_version_nano == 0 gst_package_name = 'GStreamer source release' @@ -89,7 +152,7 @@ if gst_package_name == '' endif endif cdata.set_quoted('GST_PACKAGE_NAME', gst_package_name) -cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('with-package-origin')) +cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('package-origin')) # These are only needed/used by the ABI tests host_defines = [ @@ -140,7 +203,7 @@ check_headers = [ 'sys/resource.h', ] -if host_machine.system() == 'windows' +if host_system == 'windows' check_headers += ['winsock2.h'] endif @@ -204,7 +267,7 @@ posix_timers_src = time_prefix + ''' #error Either _POSIX_TIMERS or CLOCK_REALTIME not defined #endif ''' -if cc.compiles(posix_timers_src, prefix : time_prefix, name : 'posix timers from time.h') +if cc.compiles(posix_timers_src, name : 'posix timers from time.h') cdata.set('HAVE_POSIX_TIMERS', 1) endif @@ -213,7 +276,7 @@ monotonic_clock_src = time_prefix + ''' #error Either _POSIX_MONOTONIC_CLOCK or CLOCK_MONOTONIC not defined #endif ''' -if cc.compiles(monotonic_clock_src, prefix : time_prefix, name : 'monotonic clock from time.h') +if cc.compiles(monotonic_clock_src, name : 'monotonic clock from time.h') cdata.set('HAVE_MONOTONIC_CLOCK', 1) endif @@ -253,7 +316,7 @@ if cc.has_function('strdup') elif host_system == 'windows' and cc.has_function('_strdup') cdata.set('HAVE__STRDUP', 1) # Windows (MSVC) endif -if host_machine.system() != 'windows' +if host_system != 'windows' cdata.set('HAVE_FORK', 1) else # libcheck requires HAVE_FORK to be 0 when fork() is not available @@ -280,29 +343,28 @@ endif # Platform deps; only ws2_32 and execinfo for now platform_deps = [] -if host_machine.system() == 'windows' +if host_system == 'windows' platform_deps = [cc.find_library('ws2_32')] endif backtrace_deps = [] -if not get_option('disable_libunwind') - unwind_dep = dependency('libunwind', required : false) - dw_dep = dependency('libdw', required: false) - backtrace_deps = [unwind_dep, dw_dep] - if unwind_dep.found() - cdata.set('HAVE_UNWIND', 1) - if dw_dep.found() - cdata.set('HAVE_DW', 1) - else - message('Support for backtraces is partial only.') - endif +unwind_dep = dependency('libunwind', required : get_option('libunwind')) +dw_dep = dependency('libdw', required: get_option('libdw')) +dbghelp_dep = dependency('DbgHelp', required : get_option('dbghelp')) +backtrace_deps = [unwind_dep, dw_dep, dbghelp_dep] +if unwind_dep.found() + cdata.set('HAVE_UNWIND', 1) + if dw_dep.found() + cdata.set('HAVE_DW', 1) else - if cc.has_function('backtrace') - cdata.set('HAVE_BACKTRACE', 1) - else - message('NO backtraces support.') - endif + message('Support for backtraces is partial only.') endif +elif cc.has_function('backtrace') + cdata.set('HAVE_BACKTRACE', 1) +elif dbghelp_dep.found() + cdata.set('HAVE_DBGHELP', 1) +else + message('NO backtraces support.') endif if cc.has_header('execinfo.h') @@ -317,12 +379,37 @@ if cc.has_header('execinfo.h') endif endif -disable_gst_debug = get_option('disable_gst_debug') -if get_option('disable_gst_debug') - cdata.set('GST_DISABLE_GST_DEBUG_DEFINE', '#define GST_DISABLE_GST_DEBUG 1') +gst_debug = get_option('gst_debug') +if not gst_debug add_project_arguments(['-Wno-unused'], language: 'c') endif +warning_flags = [ + '-Wmissing-declarations', + '-Wmissing-prototypes', + '-Wredundant-decls', + '-Wundef', + '-Wwrite-strings', + '-Wformat', + '-Wformat-nonliteral', + '-Wformat-security', + '-Wold-style-definition', + '-Winit-self', + '-Wmissing-include-dirs', + '-Waddress', + '-Waggregate-return', + '-Wno-multichar', + '-Wdeclaration-after-statement', + '-Wvla', + '-Wpointer-arith', +] + +foreach extra_arg : warning_flags + if cc.has_argument (extra_arg) + add_project_arguments([extra_arg], language: 'c') + endif +endforeach + # Used by the gstutils test gmp_dep = cc.find_library('gmp', required : false) cdata.set('HAVE_GMP', gmp_dep.found()) @@ -334,20 +421,21 @@ test_deps = [gmp_dep, gsl_dep, gslcblas_dep] # Used by gstinfo.c dl_dep = cc.find_library('dl', required : false) cdata.set('HAVE_DLADDR', cc.has_function('dladdr', dependencies : dl_dep)) - +cdata.set('GST_ENABLE_EXTRA_CHECKS', get_option('extra-checks')) +cdata.set('USE_POISONING', get_option('poisoning')) configinc = include_directories('.') libsinc = include_directories('libs') privinc = include_directories('gst') # Find dependencies -glib_dep = dependency('glib-2.0', version : '>=2.32.0', +glib_dep = dependency('glib-2.0', version : '>=2.40.0', fallback: ['glib', 'libglib_dep']) gobject_dep = dependency('gobject-2.0', fallback: ['glib', 'libgobject_dep']) gmodule_dep = dependency('gmodule-2.0', fallback: ['glib', 'libgmodule_dep']) -if host_machine.system() == 'windows' +if host_system == 'windows' gio_dep = dependency('gio-2.0', fallback: ['glib', 'libgio_dep']) else @@ -362,83 +450,92 @@ mathlib = cc.find_library('m', required : false) # Also provides clock_gettime in glibc < 2.17 rt_lib = cc.find_library('rt', required : false) -gir = find_program('g-ir-scanner', required : false) +gir = find_program('g-ir-scanner', required : get_option('introspection')) gnome = import('gnome') -# Fixme, not very elegant. -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", "/no/way/this/exists.reg", TRUE);' + \ 'g_setenv("GST_PLUGIN_PATH_1_0", "", TRUE);' + \ 'g_setenv("GST_PLUGIN_SYSTEM_PATH_1_0", "", TRUE);' + \ - 'gst_init(NULL,NULL);' ] -vs_module_defs_dir = meson.current_source_dir() + '/win32/common/' - -# Used by the *_mkenum.py helper scripts -glib_mkenums = find_program('glib-mkenums') + 'gst_init(NULL,NULL);', '--quiet'] gst_c_args = ['-DHAVE_CONFIG_H'] -if libtype == 'static' + +# FIXME: This is only needed on windows and probably breaks when +# default_library = 'both'. We should add this flag to static_c_args instead +# when Meson supports it: https://github.com/mesonbuild/meson/issues/3304 +if get_option('default_library') == 'static' gst_c_args += ['-DGST_STATIC_COMPILATION'] endif # Used in gst/parse/meson.build and below -python3 = import('python3').find_python() +python3 = import('python').find_installation() -bashcomp_dep = dependency('bash-completion', version : '>= 2.0', required : false) - -bashcomp_found = bashcomp_dep.found() +bashcomp_option = get_option('bash-completion') +bashcomp_dep = dependency('bash-completion', version : '>= 2.0', required : bashcomp_option) bash_completions_dir = '' bash_helpers_dir = '' -if bashcomp_found - # get_pkgconfig_variable() won't let us set the prefix - pkgconfig = find_program('pkg-config') - - runcmd = run_command(pkgconfig, - '--define-variable=prefix=.', - '--variable=completionsdir', - 'bash-completion') - - if (runcmd.returncode() == 0) - bash_completions_dir = runcmd.stdout().strip() - else - message('Found bash-completion but the .pc file did not set \'completionsdir\'.') +bashcomp_found = false +if bashcomp_dep.found() + bashcomp_found = true + bash_completions_dir = bashcomp_dep.get_pkgconfig_variable('completionsdir', define_variable: ['prefix', '.']) + if bash_completions_dir == '' + msg = 'Found bash-completion but the .pc file did not set \'completionsdir\'.' + if bashcomp_option.enabled() + error(msg) + else + message(msg) + endif bashcomp_found = false endif - runcmd = run_command(pkgconfig, - '--define-variable=prefix=.', - '--variable=helpersdir', - 'bash-completion') - - if (runcmd.returncode() == 0) - bash_helpers_dir = runcmd.stdout().strip() - else - message('Found bash-completion, but the .pc file did not set \'helpersdir\'.') + bash_helpers_dir = bashcomp_dep.get_pkgconfig_variable('helpersdir', define_variable: ['prefix', '.']) + if bash_helpers_dir == '' + msg = 'Found bash-completion, but the .pc file did not set \'helpersdir\'.' + if bashcomp_option.enabled() + error(msg) + else + message(msg) + endif bashcomp_found = false endif endif +plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0') + +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') subdir('libs') subdir('plugins') -subdir('tools') +if not get_option('tools').disabled() + subdir('tools') +endif subdir('pkgconfig') subdir('tests') -subdir('po') subdir('data') +# xgettext is optional (on Windows for instance) +if find_program('xgettext', required : get_option('nls')).found() + cdata.set('ENABLE_NLS', 1) + subdir('po') +endif + configure_file(output : 'config.h', configuration : cdata) 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')