X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=meson.build;h=74300ec491cf438b6a7d71206e17f51465f89022;hb=cc55b304ef4ab1cd95f6348d33f268ccebaab8e8;hp=0a8846e1a5d0ab6479839cf27b0c7b8373ad3f14;hpb=aefc8007c6855ced471c8b5bcba83fccec1cc111;p=platform%2Fupstream%2Fgstreamer.git diff --git a/meson.build b/meson.build index 0a8846e..74300ec 100644 --- a/meson.build +++ b/meson.build @@ -1,14 +1,14 @@ -project('gstreamer', 'c', 'cpp', - version : '1.11.0.1', - meson_version : '>= 0.36.0', +project('gstreamer', 'c', + version : '1.15.0.1', + meson_version : '>= 0.46', 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 @@ -21,13 +21,13 @@ 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()) +libversion = '@0@.@1@.0'.format(soversion, gst_version_minor * 100 + gst_version_micro) prefix = get_option('prefix') -libtype = get_option('library_format') +libtype = get_option('default_library') libexecdir = get_option('libexecdir') -helpers_install_dir = libexecdir + '/gstreamer-1.0/' +helpers_install_dir = join_paths(libexecdir, 'gstreamer-1.0') cc = meson.get_compiler('c') @@ -42,39 +42,50 @@ if cc.get_id() == 'msvc' '/wd4244', # lossy type conversion (e.g. double -> int) '/wd4305', # truncating type conversion (e.g. double -> float) 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 + +# Symbol visibility +have_visibility_hidden = cc.has_argument('-fvisibility=hidden') +if have_visibility_hidden + add_project_arguments('-fvisibility=hidden', language: 'c') +endif + +# Disable strict aliasing +if cc.has_argument('-fno-strict-aliasing') + add_project_arguments('-fno-strict-aliasing', language: 'c') endif cdata = configuration_data() -cdata.set('GST_VERSION_MAJOR', gst_version_major) -cdata.set('GST_VERSION_MINOR', gst_version_minor) -cdata.set('GST_VERSION_MICRO', gst_version_micro) -cdata.set('GST_VERSION_NANO', gst_version_nano) -cdata.set('GST_API_VERSION', '"@0@"'.format(apiversion)) -cdata.set('GST_DATADIR', '"@0@/@1@"'.format(prefix, get_option('datadir'))) -cdata.set('LOCALEDIR', '"@0@/@1@"'.format(prefix, get_option('localedir'))) -cdata.set('LIBDIR', '"@0@/@1@"'.format(prefix, get_option('libdir'))) -cdata.set('GST_API_VERSION', '"1.0"') -cdata.set('GETTEXT_PACKAGE', '"gstreamer-1.0"') -cdata.set('GST_LICENSE', '"LGPL"') -cdata.set('GST_PACKAGE_ORIGIN', '"Unknown package origin"') -cdata.set('GST_PACKAGE_NAME', '"GStreamer source release"') -cdata.set('PACKAGE', '"gstreamer"') -cdata.set('PACKAGE_NAME', '"GStreamer"') -cdata.set('PACKAGE_STRING', '"GStreamer @0@"'.format(gst_version)) -cdata.set('PACKAGE_TARNAME', '"gstreamer"') -cdata.set('PACKAGE_BUGREPORT', '"http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer"') -cdata.set('PACKAGE_URL', '""') -cdata.set('PACKAGE_VERSION', '"@0@"'.format(gst_version)) -cdata.set('PLUGINDIR', '"@0@/@1@/gstreamer-1.0"'.format(get_option('prefix'),get_option('libdir'))) -cdata.set('VERSION', '"@0@"'.format(gst_version)) +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'))) +cdata.set_quoted('LIBDIR', join_paths(prefix, get_option('libdir'))) +cdata.set_quoted('GST_API_VERSION', '1.0') +cdata.set_quoted('GETTEXT_PACKAGE', 'gstreamer-1.0') +cdata.set_quoted('GST_LICENSE', 'LGPL') +cdata.set_quoted('PACKAGE', 'gstreamer') +cdata.set_quoted('PACKAGE_NAME', 'GStreamer') +cdata.set_quoted('PACKAGE_STRING', 'GStreamer @0@'.format(gst_version)) +cdata.set_quoted('PACKAGE_TARNAME', 'gstreamer') +cdata.set_quoted('PACKAGE_BUGREPORT', 'http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer') +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('GST_PLUGIN_SCANNER_INSTALLED', '"@0@/@1@/gst-plugin-scanner"'.format(prefix, helpers_install_dir)) -cdata.set('GST_PTP_HELPER_INSTALLED', '"@0@/@1@/gst-ptp-helper"'.format(prefix, helpers_install_dir)) +cdata.set('ENABLE_NLS', get_option('nls')) +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_SCANNER_SUBDIR', libexecdir, + description: 'libexecdir path component, used to find plugin-scanner on relocatable builds on windows') + +if host_system == 'darwin' + cdata.set_quoted('GST_EXTRA_MODULE_SUFFIX', '.dylib') +endif if gst_version_nano > 0 # Have GST_ERROR message printed when running from git @@ -83,6 +94,20 @@ else cdata.set('GST_LEVEL_DEFAULT', 'GST_LEVEL_NONE') endif +# 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 source release' + elif gst_version_nano == 1 + gst_package_name = 'GStreamer git' + else + gst_package_name = 'GStreamer prerelease' + endif +endif +cdata.set_quoted('GST_PACKAGE_NAME', gst_package_name) +cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('package-origin')) + # These are only needed/used by the ABI tests host_defines = [ [ 'x86', 'HAVE_CPU_I386' ], @@ -105,7 +130,7 @@ foreach h : host_defines endif endforeach # FIXME: should really be called HOST_CPU or such -cdata.set('TARGET_CPU', '"@0@"'.format(host_machine.cpu())) +cdata.set_quoted('TARGET_CPU', host_machine.cpu()) check_headers = [ 'dlfcn.h', @@ -154,6 +179,7 @@ check_functions = [ 'fseeko', 'ftello', 'poll', + 'ppoll', 'pselect', 'getpagesize', 'clock_gettime', @@ -178,10 +204,10 @@ if cc.has_function('localtime_r', prefix : '#include') endif if cc.links('''#include - int main() { - pthread_setname_np("example"); - }''', name : 'pthread_setname_np(const char*)') - cdata.set('HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID', 1) + int main() { + pthread_setname_np("example"); return 0; + }''', name : 'pthread_setname_np(const char*)') + cdata.set('HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID', 1) endif # Check for posix timers and the monotonic clock @@ -195,7 +221,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 @@ -204,7 +230,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 @@ -275,20 +301,24 @@ if host_machine.system() == 'windows' platform_deps = [cc.find_library('ws2_32')] endif -unwind_dep = dependency('libunwind', required : false) -dw_dep = dependency('libdw', required: false) -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 -else - if cc.has_function('backtrace') - cdata.set('HAVE_BACKTRACE', 1) +backtrace_deps = [] +if get_option('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 else - message('NO backtraces support.') + if cc.has_function('backtrace') + cdata.set('HAVE_BACKTRACE', 1) + else + message('NO backtraces support.') + endif endif endif @@ -304,12 +334,38 @@ 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', + '-Wnested-externs', + '-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()) @@ -321,24 +377,27 @@ 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)) - -configure_file(input : 'config.h.meson', - output : 'config.h', - configuration : cdata) - +cdata.set10('GST_ENABLE_EXTRA_CHECKS', get_option('extra-checks')) configinc = include_directories('.') libsinc = include_directories('libs') privinc = include_directories('gst') # Find dependencies -glib_dep = dependency('glib-2.0', version : '>=2.32.0') -gobject_dep = dependency('gobject-2.0') -gmodule_dep = dependency('gmodule-2.0') +glib_dep = dependency('glib-2.0', version : '>=2.32.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' - gio_dep = dependency('gio-2.0') + gio_dep = dependency('gio-2.0', + fallback: ['glib', 'libgio_dep']) else - gio_dep = [dependency('gio-2.0'), dependency('gio-unix-2.0')] + gio_dep = [dependency('gio-2.0', + fallback: ['glib', 'libgio_dep']), + dependency('gio-unix-2.0', + fallback: ['glib', 'libgio_dep'])] endif mathlib = cc.find_library('m', required : false) @@ -350,25 +409,60 @@ gir = find_program('g-ir-scanner', required : false) 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() and get_option('introspection') 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/' gst_c_args = ['-DHAVE_CONFIG_H'] + +# FIXME: This is only needed on windows and probably breaks when +# libtype=='both'. We should add this flag to static_c_args instead when Meson +# supports it: https://github.com/mesonbuild/meson/issues/3304 if libtype == 'static' gst_c_args += ['-DGST_STATIC_COMPILATION'] endif # Used in gst/parse/meson.build and below -py3 = find_program('python3', required : false) -if not py3.found() - # Maybe 'python' is Python 3 - py3 = find_program('python') +python3 = import('python3').find_python() + +bashcomp_dep = dependency('bash-completion', version : '>= 2.0', required : false) + +bashcomp_found = bashcomp_dep.found() +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 + 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\'.') + bashcomp_found = false + endif endif subdir('gst') @@ -377,11 +471,18 @@ subdir('plugins') subdir('tools') subdir('pkgconfig') subdir('tests') -subdir('po') +subdir('data') + +# xgettext is optional (on Windows for instance) +if get_option('nls') and find_program('xgettext', required : false).found() + 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') +elif not get_option('gtk_doc') message('gtk-doc is disabled via options') else if find_program('gtkdoc-scan', required : false).found() @@ -391,4 +492,6 @@ else endif endif -run_command(py3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")') +run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")') + +install_data('gst-element-check-1.0.m4', install_dir : join_paths(get_option('datadir'), 'aclocal'))