X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=meson.build;h=e99bec17b436924186c76916b65415f5caab664b;hb=cdcfffe031ebf170db6247961dae886eaeb6ebf3;hp=01690ff27034cf25cd2d6d1c6a63ba903575324e;hpb=a28a75652edc4ef925eee3568c886eb68ea5775e;p=platform%2Fupstream%2Fgstreamer.git diff --git a/meson.build b/meson.build index 01690ff..e99bec1 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ -project('gst-plugins-base', 'c', - version : '1.19.0.1', +project('gst-plugins-good', 'c', + version : '1.19.2', meson_version : '>= 0.54', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ]) @@ -9,52 +9,49 @@ version_arr = gst_version.split('.') 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 + 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() - have_cxx = add_languages('cpp', native: false, required: false) -if host_system in ['ios', 'darwin'] - have_objc = add_languages('objc', native: false) -else - have_objc = false -endif - glib_req = '>= 2.56.0' -orc_req = '>= 0.4.24' +orc_req = '>= 0.4.17' 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 -curversion = gst_version_minor * 100 + gst_version_micro -libversion = '@0@.@1@.0'.format(soversion, curversion) -osxversion = curversion + 1 plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0') plugins = [] 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 - # 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 - # NOTE: Only add warnings here if you are sure they're spurious - add_project_arguments( + msvc_args = [ + # 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 + # NOTE: Only add warnings here if you are sure they're spurious '/wd4018', # implicit signed/unsigned conversion '/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') + + # Enable some warnings on MSVC to match GCC/Clang behaviour + '/w14062', # enumerator 'identifier' in switch of enum 'enumeration' is not handled + '/w14101', # 'identifier' : unreferenced local variable + '/w14189', # 'identifier' : local variable is initialized but not referenced + ] + if have_cxx + add_project_arguments(msvc_args, language: ['c', 'cpp']) + else + add_project_arguments(msvc_args, language: 'c') + endif # Disable SAFESEH with MSVC for plugins and libs that use external deps that # are built with MinGW noseh_link_args = ['/SAFESEH:NO'] @@ -66,24 +63,11 @@ 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') +if cc.has_argument('-fvisibility=hidden') add_project_arguments('-fvisibility=hidden', language: 'c') - if have_objc - add_project_arguments('-fvisibility=hidden', language: 'objc') - endif - 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') @@ -113,107 +97,106 @@ if glib_checks.disabled() or (glib_checks.auto() and not gst_version_is_dev) add_project_arguments('-DG_DISABLE_CHECKS', language: 'c') endif -# These are only needed/used by the ABI tests from core -host_defines = [ - [ 'x86', 'HAVE_CPU_I386' ], - [ 'x86_64', 'HAVE_CPU_X86_64' ], - [ 'arm', 'HAVE_CPU_ARM' ], - [ 'aarch64', 'HAVE_CPU_AARCH64' ], - [ 'mips', 'HAVE_CPU_MIPS' ], - [ 'powerpc', 'HAVE_CPU_PPC' ], - [ 'powerpc64', 'HAVE_CPU_PPC64' ], - [ 'alpha', 'HAVE_CPU_ALPHA' ], - [ 'sparc', 'HAVE_CPU_SPARC' ], - [ 'ia64', 'HAVE_CPU_IA64' ], - [ 'hppa', 'HAVE_CPU_HPPA' ], - [ 'm68k', 'HAVE_CPU_M68K' ], - [ 's390', 'HAVE_CPU_S390' ], -] -foreach h : host_defines - if h.get(0) == host_machine.cpu_family() - core_conf.set(h.get(1), 1) - endif -endforeach -# FIXME: should really be called HOST_CPU or such -core_conf.set_quoted('TARGET_CPU', host_machine.cpu()) +cdata = configuration_data() check_headers = [ ['HAVE_DLFCN_H', 'dlfcn.h'], - ['HAVE_EMMINTRIN_H', 'emmintrin.h'], + ['HAVE_FCNTL_H', 'fcntl.h'], ['HAVE_INTTYPES_H', 'inttypes.h'], ['HAVE_MEMORY_H', 'memory.h'], - ['HAVE_NETINET_IN_H', 'netinet/in.h'], - ['HAVE_NETINET_TCP_H', 'netinet/tcp.h'], ['HAVE_PROCESS_H', 'process.h'], - ['HAVE_SMMINTRIN_H', 'smmintrin.h'], ['HAVE_STDINT_H', 'stdint.h'], + ['HAVE_STDLIB_H', 'stdlib.h'], ['HAVE_STRINGS_H', 'strings.h'], ['HAVE_STRING_H', 'string.h'], + ['HAVE_SYS_IOCTL_H', 'sys/ioctl.h'], + ['HAVE_SYS_PARAM_H', 'sys/param.h'], ['HAVE_SYS_SOCKET_H', 'sys/socket.h'], ['HAVE_SYS_STAT_H', 'sys/stat.h'], + ['HAVE_SYS_TIME_H', 'sys/time.h'], ['HAVE_SYS_TYPES_H', 'sys/types.h'], - ['HAVE_SYS_WAIT_H', 'sys/wait.h'], ['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)) - core_conf.set(h.get(0), 1) + cdata.set(h.get(0), 1) endif endforeach check_functions = [ + ['HAVE_ASINH', 'asinh', '#include'], + ['HAVE_CLOCK_GETTIME', 'clock_gettime', '#include'], + ['HAVE_COSH', 'cosh', '#include'], +# check token HAVE_CPU_ALPHA +# check token HAVE_CPU_ARM +# check token HAVE_CPU_CRIS +# check token HAVE_CPU_CRISV32 +# check token HAVE_CPU_HPPA +# check token HAVE_CPU_I386 +# check token HAVE_CPU_IA64 +# check token HAVE_CPU_M68K +# check token HAVE_CPU_MIPS +# check token HAVE_CPU_PPC +# check token HAVE_CPU_PPC64 +# check token HAVE_CPU_S390 +# check token HAVE_CPU_SPARC +# check token HAVE_CPU_X86_64 ['HAVE_DCGETTEXT', 'dcgettext', '#include'], - ['HAVE_GMTIME_R', 'gmtime_r', '#include'], - ['HAVE_LOCALTIME_R', 'localtime_r', '#include'], - ['HAVE_LRINTF', 'lrintf', '#include'], +# check token HAVE_DIRECTSOUND +# check token HAVE_EXPERIMENTAL +# check token HAVE_EXTERNAL +# check token HAVE_FPCLASS +# check token HAVE_GCC_ASM + ['HAVE_GETPAGESIZE', 'getpagesize', '#include'], +# check token HAVE_GETTEXT +# check token HAVE_GST_V4L2 + ['HAVE_ISINF', 'isinf', '#include'], +# check token HAVE_LIBV4L2 ['HAVE_MMAP', 'mmap', '#include'], - ['HAVE_LOG2', 'log2', '#include'], + ['HAVE_MMAP64', 'mmap64', '#include'], +# check token HAVE_OSX_AUDIO +# check token HAVE_OSX_VIDEO +# check token HAVE_RDTSC + ['HAVE_SINH', 'sinh', '#include'], +# check token HAVE_WAVEFORM + ['HAVE_GMTIME_R', 'gmtime_r', '#include'], ] libm = cc.find_library('m', required : false) + foreach f : check_functions if cc.has_function(f.get(1), prefix : f.get(2), dependencies : libm) - core_conf.set(f.get(0), 1) + cdata.set(f.get(0), 1) endif endforeach -core_conf.set('SIZEOF_CHAR', cc.sizeof('char')) -core_conf.set('SIZEOF_INT', cc.sizeof('int')) -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_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) +cdata.set('HAVE_IOS', host_system == 'ios') + +cdata.set('SIZEOF_CHAR', cc.sizeof('char')) +cdata.set('SIZEOF_INT', cc.sizeof('int')) +cdata.set('SIZEOF_LONG', cc.sizeof('long')) +cdata.set('SIZEOF_SHORT', cc.sizeof('short')) +cdata.set('SIZEOF_VOIDP', cc.sizeof('void*')) +cdata.set('SIZEOF_OFF_T', cc.sizeof('off_t')) + +# Here be fixmes. +# FIXME: check if this is correct +cdata.set('HAVE_CPU_X86_64', host_machine.cpu() == 'amd64') +cdata.set('HAVE_GCC_ASM', cc.get_id() != 'msvc') +cdata.set_quoted('VERSION', gst_version) +cdata.set_quoted('PACKAGE_VERSION', gst_version) +cdata.set_quoted('GST_LICENSE', 'LGPL') +cdata.set_quoted('PACKAGE', 'gst-plugins-good') +cdata.set_quoted('GETTEXT_PACKAGE', 'gst-plugins-good-1.0') +cdata.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir'))) 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', @@ -222,19 +205,12 @@ warning_flags = [ warning_c_flags = [ '-Wmissing-prototypes', '-Wdeclaration-after-statement', -] - -warning_cxx_flags = [ + '-Wold-style-definition', '-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 @@ -256,95 +232,127 @@ endforeach 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' + gst_package_name = 'GStreamer Good Plug-ins source release' elif gst_version_nano == 1 - gst_package_name = 'GStreamer Base Plug-ins git' + gst_package_name = 'GStreamer Good Plug-ins git' else - gst_package_name = 'GStreamer Base Plug-ins prerelease' + gst_package_name = 'GStreamer Good 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')) +cdata.set_quoted('GST_PACKAGE_NAME', gst_package_name) +cdata.set_quoted('GST_PACKAGE_ORIGIN', get_option('package-origin')) -# FIXME: These should be configure options -core_conf.set_quoted('DEFAULT_VIDEOSINK', 'autovideosink') -core_conf.set_quoted('DEFAULT_AUDIOSINK', 'autoaudiosink') +# Mandatory GST deps +gst_dep = dependency('gstreamer-1.0', version : gst_req, + fallback : ['gstreamer', 'gst_dep']) +gstbase_dep = dependency('gstreamer-base-1.0', version : gst_req, + fallback : ['gstreamer', 'gst_base_dep']) +gstnet_dep = dependency('gstreamer-net-1.0', version : gst_req, + fallback : ['gstreamer', 'gst_net_dep']) +gstcontroller_dep = dependency('gstreamer-controller-1.0', version : gst_req, + fallback : ['gstreamer', 'gst_controller_dep']) +gstcheck_dep = dependency('gstreamer-check-1.0', version : gst_req, + required : get_option('tests'), + fallback : ['gstreamer', 'gst_check_dep']) +gstpbutils_dep = dependency('gstreamer-pbutils-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'pbutils_dep']) +gstallocators_dep = dependency('gstreamer-allocators-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'allocators_dep']) +gstapp_dep = dependency('gstreamer-app-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'app_dep']) +gstaudio_dep = dependency('gstreamer-audio-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'audio_dep']) +gstfft_dep = dependency('gstreamer-fft-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'fft_dep']) +gstriff_dep = dependency('gstreamer-riff-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'riff_dep']) +gstrtp_dep = dependency('gstreamer-rtp-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'rtp_dep']) +gstrtsp_dep = dependency('gstreamer-rtsp-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'rtsp_dep']) +gstsdp_dep = dependency('gstreamer-sdp-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'sdp_dep']) +gsttag_dep = dependency('gstreamer-tag-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'tag_dep']) +gstvideo_dep = dependency('gstreamer-video-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'video_dep']) + +# GStreamer OpenGL +# FIXME: automagic +gstgl_dep = dependency('gstreamer-gl-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'gstgl_dep'], required: false) +gstglproto_dep = dependency('', required : false) +gstglx11_dep = dependency('', required : false) +gstglwayland_dep = dependency('', required : false) +gstglegl_dep = dependency('', required : false) + +have_gstgl = gstgl_dep.found() + +if have_gstgl + if gstgl_dep.type_name() == 'pkgconfig' + gst_gl_apis = gstgl_dep.get_pkgconfig_variable('gl_apis').split() + gst_gl_winsys = gstgl_dep.get_pkgconfig_variable('gl_winsys').split() + gst_gl_platforms = gstgl_dep.get_pkgconfig_variable('gl_platforms').split() + else + gstbase = subproject('gst-plugins-base') + gst_gl_apis = gstbase.get_variable('enabled_gl_apis') + gst_gl_winsys = gstbase.get_variable('enabled_gl_winsys') + gst_gl_platforms = gstbase.get_variable('enabled_gl_platforms') + endif -# Set whether the audioresampling method should be detected at runtime -core_conf.set('AUDIORESAMPLE_FORMAT_' + get_option('audioresample_format').to_upper(), true) + message('GStreamer OpenGL window systems: @0@'.format(' '.join(gst_gl_winsys))) + message('GStreamer OpenGL platforms: @0@'.format(' '.join(gst_gl_platforms))) + message('GStreamer OpenGL apis: @0@'.format(' '.join(gst_gl_apis))) -gst_plugins_base_args = ['-DHAVE_CONFIG_H'] -if get_option('default_library') == 'static' - gst_plugins_base_args += ['-DGST_STATIC_COMPILATION'] + foreach ws : ['x11', 'wayland', 'android', 'cocoa', 'eagl', 'win32', 'dispmanx', 'viv_fb'] + set_variable('gst_gl_have_window_@0@'.format(ws), gst_gl_winsys.contains(ws)) + endforeach + + foreach p : ['glx', 'egl', 'cgl', 'eagl', 'wgl'] + set_variable('gst_gl_have_platform_@0@'.format(p), gst_gl_platforms.contains(p)) + endforeach + + foreach api : ['gl', 'gles2'] + set_variable('gst_gl_have_api_@0@'.format(api), gst_gl_apis.contains(api)) + endforeach + + gstglproto_dep = dependency('gstreamer-gl-prototypes-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'gstglproto_dep'], required: true) + # Behind specific checks because meson fails at optional dependencies with a + # fallback to the same subproject. On the first failure, meson will never + # check the system again even if the fallback never existed. + # Last checked with meson 0.54.3 + if gst_gl_have_window_x11 + gstglx11_dep = dependency('gstreamer-gl-x11-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'gstglx11_dep'], required: true) + endif + if gst_gl_have_window_wayland + gstglwayland_dep = dependency('gstreamer-gl-wayland-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'gstglwayland_dep'], required: true) + endif + if gst_gl_have_platform_egl + gstglegl_dep = dependency('gstreamer-gl-egl-1.0', version : gst_req, + fallback : ['gst-plugins-base', 'gstglegl_dep'], required: true) + endif endif -# X11 checks are for sys/ and tests/ -x11_dep = dependency('x11', required : get_option('x11')) -# GLib checks are for the entire project -# Almost everything that uses glib also uses gobject +zlib_dep = dependency('zlib', required : false) +if not zlib_dep.found() + zlib_dep = cc.find_library('z', required : false) + if not zlib_dep.found() or not cc.has_header('zlib.h') + zlib_dep = subproject('zlib').get_variable('zlib_dep') + endif +endif +cdata.set('HAVE_ZLIB', true) + 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_X11', x11_dep.found()) -core_conf.set('HAVE_GIO_UNIX_2_0', giounix_dep.found()) - -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', join_paths(get_option('prefix'))) -endif +gst_plugins_good_args = ['-DHAVE_CONFIG_H'] configinc = include_directories('.') libsinc = include_directories('gst-libs') -# To use the subproject make subprojects directory -# and put gstreamer meson git there (symlinking is fine) -gst_dep = dependency('gstreamer-1.0', version : gst_req, - fallback : ['gstreamer', 'gst_dep']) -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']) -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']) - have_orcc = false orcc_args = [] orc_targets = [] @@ -355,75 +363,104 @@ 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) + cdata.set('HAVE_ORC', 1) else - message('Orc Compiler not found or disabled, will use backup C code') - core_conf.set('DISABLE_ORC', 1) + message('Orc Compiler not found, will use backup C code') + cdata.set('DISABLE_ORC', 1) endif -# Used to build SSE* things in audio-resampler -sse_args = '-msse' -sse2_args = '-msse2' -sse41_args = '-msse4.1' - -have_sse = cc.has_argument(sse_args) -have_sse2 = cc.has_argument(sse2_args) -have_sse41 = cc.has_argument(sse41_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) +have_nasm = false +# FIXME: nasm path needs testing on non-Linux, esp. Windows +host_cpu = host_machine.cpu_family() +if host_cpu == 'x86_64' + if cc.get_define('__ILP32__') == '1' + message('Nasm disabled on x32') + else + asm_option = get_option('asm') + nasm = find_program('nasm', native: true, required: asm_option) + if nasm.found() + # We can't use the version: kwarg for find_program because old versions + # of nasm don't support --version + ret = run_command(nasm, '-v') + if ret.returncode() == 0 + nasm_version = ret.stdout().strip().split()[2] + nasm_req = '>=2.13' + if nasm_version.version_compare(nasm_req) + message('nasm found on x86-64') + cdata.set('HAVE_NASM', 1) + have_nasm = true + else + if asm_option.enabled() + error('asm option is enabled, and nasm @0@ was found, but @1@ is required'.format(nasm_version, nasm_req)) + endif + message('nasm @0@ was found, but @1@ is required'.format(nasm_version, nasm_req)) + endif + else + if asm_option.enabled() + error('asm option is enabled, but nasm is not usable: @0@\n@1@'.format(ret.stdout(), ret.stderr())) + endif + message('nasm was found, but it\'s not usable') + endif + # Unset nasm to not be 'found' + if not have_nasm + nasm = disabler() + endif + endif endif endif -if gst_dep.type_name() == 'internal' - gst_proj = subproject('gstreamer') +# TIZEN_BUILD_OPTION - if not gst_proj.get_variable('gst_debug') - message('GStreamer debug system is disabled') - add_project_arguments('-Wno-unused', language: 'c') - else - message('GStreamer debug system is enabled') - endif -else - # We can't check that in the case of subprojects as we won't - # be able to build against an internal dependency (which is not built yet) - if not cc.compiles(''' -#include -#ifdef GST_DISABLE_GST_DEBUG -#error "debugging disabled, make compiler fail" -#endif''' , dependencies: gst_dep) - message('GStreamer debug system is disabled') - add_project_arguments('-Wno-unused', language: 'c') - else - message('GStreamer debug system is enabled') - endif +tbm_dep = dependency('libtbm', required : get_option('tbm')) +if tbm_dep.found() + cdata.set('TIZEN_FEATURE_V4L2_TBM_SUPPORT', 1) endif -if cc.has_member('struct tcp_info', '__tcpi_reordering', prefix: '#include ') - core_conf.set('HAVE_BSD_TCP_INFO', true) +gio_dep = dependency('gio-2.0') + +cdata.set('TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE', true) +cdata.set('TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID', true) +cdata.set('TIZEN_FEATURE_V4L2VIDEO_ADJ_RANK', true) +cdata.set('TIZEN_FEATURE_WAVPARSE_MODIFICATION', true) +cdata.set('TIZEN_FEATURE_MP3PARSE_MODIFICATION', true) +cdata.set('TIZEN_FEATURE_AACPARSE_MODIFICATION', true) +cdata.set('TIZEN_FEATURE_QTDEMUX_MODIFICATION', true) +cdata.set('TIZEN_FEATURE_QTDEMUX_DURATION', true) +cdata.set('TIZEN_FEATURE_FLVDEMUX_MODIFICATION', true) +cdata.set('TIZEN_FEATURE_RTSP_MODIFICATION', true) +cdata.set('TIZEN_FEATURE_SOUP_MODIFICATION', true) +cdata.set('TIZEN_FEATURE_RGVOLUME_MODIFICATION', true) +cdata.set('TIZEN_FEATURE_DISABLE_V4L2_DEPENDENCY', true) +cdata.set('TIZEN_FEATURE_AVIDEMUX_MODIFICATION', true) +cdata.set('TIZEN_FEATURE_USE_LIBV4L2', true) +cdata.set('TIZEN_FEATURE_V4L2_ADDITIONAL_CID_SUPPORT', true) + +# TIZEN_BUILD_OPTION end + +# Disable compiler warnings for unused variables and args if gst debug system is disabled +if gst_dep.type_name() == 'internal' + gst_debug_disabled = not subproject('gstreamer').get_variable('gst_debug') +else + # We can't check that in the case of subprojects as we won't + # be able to build against an internal dependency (which is not built yet) + gst_debug_disabled = cc.has_header_symbol('gst/gstconfig.h', 'GST_DISABLE_GST_DEBUG', dependencies: gst_dep) endif -if cc.has_member('struct tcp_info', 'tcpi_reordering', prefix: '#include ') - core_conf.set('HAVE_LINUX_TCP_INFO', true) +if gst_debug_disabled + message('GStreamer debug system is disabled') + if cc.has_argument('-Wno-unused') + add_project_arguments('-Wno-unused', language: 'c') + endif + if have_cxx and cxx.has_argument ('-Wno-unused') + add_project_arguments('-Wno-unused', language: 'cpp') + endif +else + message('GStreamer debug system is enabled') endif -gir = find_program('g-ir-scanner', required : get_option('introspection')) -gnome = import('gnome') -build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled()) -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);', '--quiet'] +presetdir = join_paths(get_option('datadir'), 'gstreamer-' + api_version, 'presets') +python3 = import('python').find_installation() pkgconfig = import('pkgconfig') plugins_pkgconfig_install_dir = join_paths(plugins_install_dir, 'pkgconfig') if get_option('default_library') == 'shared' @@ -431,49 +468,13 @@ if get_option('default_library') == 'shared' plugins_pkgconfig_install_dir = disabler() endif -pkgconfig_variables = ['exec_prefix=${prefix}', - 'toolsdir=${exec_prefix}/bin', - 'pluginsdir=${libdir}/gstreamer-1.0', - 'datarootdir=${prefix}/share', - 'datadir=${datarootdir}', - 'girdir=${datadir}/gir-1.0', - 'typelibdir=${libdir}/girepository-1.0', - 'libexecdir=${prefix}/libexec'] -pkgconfig_subdirs = ['gstreamer-1.0'] - -python3 = import('python').find_installation() -subdir('gst-libs') subdir('gst') -subdir('ext') subdir('sys') -if not get_option('tools').disabled() - subdir('tools') -endif +subdir('ext') subdir('tests') - -# 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 subdir('docs') -subdir('scripts') -base_libraries = ['allocators', 'app', 'audio', 'fft', 'pbutils', 'riff', 'rtp', 'rtsp', 'sdp', 'tag', 'video'] -if build_gstgl - base_libraries += 'gl' -endif -pkgconfig.generate( - libraries : [gst_dep], - variables : pkgconfig_variables + [ - 'libraries=' + ' '.join(base_libraries), - ], - subdirs : pkgconfig_subdirs, - name : 'gstreamer-plugins-base-1.0', - description : 'Streaming media framework, base plugins libraries', -) - -if have_orcc +if have_orcc and orc_targets.length() > 0 update_orc_dist_files = find_program('scripts/update-orc-dist-files.py') orc_update_targets = [] @@ -496,13 +497,21 @@ if have_orcc endif endif +# xgettext is optional (on Windows for instance) +if find_program('xgettext', required : get_option('nls')).found() + cdata.set('ENABLE_NLS', 1) + subdir('po') +endif + +subdir('scripts') + # Set release date if gst_version_nano == 0 extract_release_date = find_program('scripts/extract-release-date-from-doap-file.py') - run_result = run_command(extract_release_date, gst_version, files('gst-plugins-base.doap')) + run_result = run_command(extract_release_date, gst_version, files('gst-plugins-good.doap')) if run_result.returncode() == 0 release_date = run_result.stdout().strip() - core_conf.set_quoted('GST_PACKAGE_RELEASE_DATETIME', release_date) + cdata.set_quoted('GST_PACKAGE_RELEASE_DATETIME', release_date) message('Package release date: ' + release_date) else # Error out if our release can't be found in the .doap file @@ -510,8 +519,11 @@ if gst_version_nano == 0 endif endif -# Use core_conf after all subdirs have set values -configure_file(output : 'config.h', configuration : core_conf) +if gio_dep.version().version_compare('< 2.67.4') + cdata.set('g_memdup2(ptr,sz)', '(G_LIKELY(((guint64)(sz)) < G_MAXUINT)) ? g_memdup(ptr,sz) : (g_abort(),NULL)') +endif + +configure_file(output : 'config.h', configuration : cdata) run_command(python3, '-c', 'import shutil; shutil.copy("hooks/pre-commit.hook", ".git/hooks/pre-commit")')