Add support for Meson as alternative/parallel build system
authorNirbheek Chauhan <nirbheek@centricular.com>
Fri, 12 Aug 2016 15:26:31 +0000 (20:56 +0530)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 20 Aug 2016 10:09:51 +0000 (11:09 +0100)
https://github.com/mesonbuild/meson

With contributions from:

Tim-Philipp Müller <tim@centricular.com>
Jussi Pakkanen <jpakkane@gmail.com> (original port)

Highlights of the features provided are:
* Faster builds on Linux (~40-50% faster)
* The ability to build with MSVC on Windows
* Generate Visual Studio project files
* Generate XCode project files
* Much faster builds on Windows (on-par with Linux)
* Seriously fast configure and building on embedded

... and many more. For more details see:

http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html

Building with Meson should work on both Linux and Windows, but may
need a few more tweaks on other operating systems.

56 files changed:
.gitignore
config.h.meson [new file with mode: 0644]
ext/alsa/meson.build [new file with mode: 0644]
ext/cdparanoia/meson.build [new file with mode: 0644]
ext/libvisual/meson.build [new file with mode: 0644]
ext/meson.build [new file with mode: 0644]
ext/ogg/meson.build [new file with mode: 0644]
ext/opus/meson.build [new file with mode: 0644]
ext/pango/meson.build [new file with mode: 0644]
ext/theora/meson.build [new file with mode: 0644]
ext/vorbis/meson.build [new file with mode: 0644]
gst-libs/gst/allocators/meson.build [new file with mode: 0644]
gst-libs/gst/app/meson.build [new file with mode: 0644]
gst-libs/gst/audio/audio_mkenum.py [new file with mode: 0755]
gst-libs/gst/audio/meson.build [new file with mode: 0644]
gst-libs/gst/fft/meson.build [new file with mode: 0644]
gst-libs/gst/meson.build [new file with mode: 0644]
gst-libs/gst/pbutils/meson.build [new file with mode: 0644]
gst-libs/gst/pbutils/pbutils_mkenum.py [new file with mode: 0755]
gst-libs/gst/riff/meson.build [new file with mode: 0644]
gst-libs/gst/rtp/meson.build [new file with mode: 0644]
gst-libs/gst/rtp/rtp_mkenum.py [new file with mode: 0755]
gst-libs/gst/rtsp/meson.build [new file with mode: 0644]
gst-libs/gst/rtsp/rtsp_mkenum.py [new file with mode: 0755]
gst-libs/gst/sdp/meson.build [new file with mode: 0644]
gst-libs/gst/tag/meson.build [new file with mode: 0644]
gst-libs/gst/video/meson.build [new file with mode: 0644]
gst-libs/gst/video/video_mkenum.py [new file with mode: 0755]
gst-libs/meson.build [new file with mode: 0644]
gst/adder/meson.build [new file with mode: 0644]
gst/app/meson.build [new file with mode: 0644]
gst/audioconvert/meson.build [new file with mode: 0644]
gst/audiorate/meson.build [new file with mode: 0644]
gst/audioresample/meson.build [new file with mode: 0644]
gst/audiotestsrc/meson.build [new file with mode: 0644]
gst/encoding/meson.build [new file with mode: 0644]
gst/gio/meson.build [new file with mode: 0644]
gst/meson.build [new file with mode: 0644]
gst/playback/meson.build [new file with mode: 0644]
gst/subparse/meson.build [new file with mode: 0644]
gst/tcp/meson.build [new file with mode: 0644]
gst/typefind/meson.build [new file with mode: 0644]
gst/videoconvert/meson.build [new file with mode: 0644]
gst/videorate/meson.build [new file with mode: 0644]
gst/videoscale/meson.build [new file with mode: 0644]
gst/videotestsrc/meson.build [new file with mode: 0644]
gst/volume/meson.build [new file with mode: 0644]
meson.build [new file with mode: 0644]
meson_options.txt [new file with mode: 0644]
pkgconfig/meson.build [new file with mode: 0644]
sys/meson.build [new file with mode: 0644]
sys/ximage/meson.build [new file with mode: 0644]
sys/xvimage/meson.build [new file with mode: 0644]
tests/check/meson.build [new file with mode: 0644]
tests/meson.build [new file with mode: 0644]
tools/meson.build [new file with mode: 0644]

index 74c865c..6d34656 100644 (file)
@@ -1,6 +1,5 @@
 aclocal.m4
 autom4te.cache
-config.h*
 config.h.in
 config.log
 config.status
@@ -69,3 +68,6 @@ Build
 /test-driver
 *.trs
 *.log
+
+/build
+/subprojects
diff --git a/config.h.meson b/config.h.meson
new file mode 100644 (file)
index 0000000..8e38a52
--- /dev/null
@@ -0,0 +1,405 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define if building universal (internal helper macro) */
+#mesondefine AC_APPLE_UNIVERSAL_BUILD
+
+/* The implementation that should be used for integer audio resampling witll
+   be benchmarked at runtime */
+#mesondefine AUDIORESAMPLE_FORMAT_AUTO
+
+/* The float implementation should be used for integer audio resampling */
+#mesondefine AUDIORESAMPLE_FORMAT_FLOAT
+
+/* The int implementation should be used for integer audio resampling */
+#mesondefine AUDIORESAMPLE_FORMAT_INT
+
+/* defined if cdda headers are in a cdda/ directory */
+#mesondefine CDPARANOIA_HEADERS_IN_DIR
+
+/* Default audio sink */
+#mesondefine DEFAULT_AUDIOSINK
+
+/* Default audio source */
+#mesondefine DEFAULT_AUDIOSRC
+
+/* Default video sink */
+#mesondefine DEFAULT_VIDEOSINK
+
+/* Default video source */
+#mesondefine DEFAULT_VIDEOSRC
+
+/* Default visualizer */
+#mesondefine DEFAULT_VISUALIZER
+
+/* Disable Orc */
+#mesondefine DISABLE_ORC
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#mesondefine ENABLE_NLS
+
+/* gettext package name */
+#mesondefine GETTEXT_PACKAGE
+
+/* The GIO library directory. */
+#mesondefine GIO_LIBDIR
+
+/* The GIO modules directory. */
+#mesondefine GIO_MODULE_DIR
+
+/* The GIO install prefix. */
+#mesondefine GIO_PREFIX
+
+/* major/minor version */
+#mesondefine GST_API_VERSION
+
+/* system wide data directory */
+#mesondefine GST_DATADIR
+
+/* Extra platform specific plugin suffix */
+#mesondefine GST_EXTRA_MODULE_SUFFIX
+
+/* macro to use to show function name */
+#mesondefine GST_FUNCTION
+
+/* Defined if gcov is enabled to force a rebuild due to config.h changing */
+#mesondefine GST_GCOV_ENABLED
+
+/* Defined when registry scanning through fork is unsafe */
+#mesondefine GST_HAVE_UNSAFE_FORK
+
+/* plugin install helper script */
+#mesondefine GST_INSTALL_PLUGINS_HELPER
+
+/* Default errorlevel to use */
+#mesondefine GST_LEVEL_DEFAULT
+
+/* GStreamer license */
+#mesondefine GST_LICENSE
+
+/* package name in plugins */
+#mesondefine GST_PACKAGE_NAME
+
+/* package origin */
+#mesondefine GST_PACKAGE_ORIGIN
+
+/* GStreamer package release date/time for plugins as YYYY-MM-DD */
+#mesondefine GST_PACKAGE_RELEASE_DATETIME
+
+/* Define if static plugins should be built */
+#mesondefine GST_PLUGIN_BUILD_STATIC
+
+/* Define to enable ALSA (used by alsa). */
+#mesondefine HAVE_ALSA
+
+/* ARM NEON support is enabled */
+#mesondefine HAVE_ARM_NEON
+
+/* Define to enable CDParanoia (used by cdparanoia). */
+#mesondefine HAVE_CDPARANOIA
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+#mesondefine HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#mesondefine HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the target CPU is AARCH64 */
+#mesondefine HAVE_CPU_AARCH64
+
+/* Define if the target CPU is an Alpha */
+#mesondefine HAVE_CPU_ALPHA
+
+/* Define if the target CPU is an ARC */
+#mesondefine HAVE_CPU_ARC
+
+/* Define if the target CPU is an ARM */
+#mesondefine HAVE_CPU_ARM
+
+/* Define if the target CPU is a CRIS */
+#mesondefine HAVE_CPU_CRIS
+
+/* Define if the target CPU is a CRISv32 */
+#mesondefine HAVE_CPU_CRISV32
+
+/* Define if the target CPU is a HPPA */
+#mesondefine HAVE_CPU_HPPA
+
+/* Define if the target CPU is an x86 */
+#mesondefine HAVE_CPU_I386
+
+/* Define if the target CPU is a IA64 */
+#mesondefine HAVE_CPU_IA64
+
+/* Define if the target CPU is a M68K */
+#mesondefine HAVE_CPU_M68K
+
+/* Define if the target CPU is a MIPS */
+#mesondefine HAVE_CPU_MIPS
+
+/* Define if the target CPU is a PowerPC */
+#mesondefine HAVE_CPU_PPC
+
+/* Define if the target CPU is a 64 bit PowerPC */
+#mesondefine HAVE_CPU_PPC64
+
+/* Define if the target CPU is a S390 */
+#mesondefine HAVE_CPU_S390
+
+/* Define if the target CPU is a SPARC */
+#mesondefine HAVE_CPU_SPARC
+
+/* Define if the target CPU is a x86_64 */
+#mesondefine HAVE_CPU_X86_64
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#mesondefine HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#mesondefine HAVE_DLFCN_H
+
+/* Define to 1 if you have the <emmintrin.h> header file. */
+#mesondefine HAVE_EMMINTRIN_H
+
+/* Define to enable building of experimental plug-ins. */
+#mesondefine HAVE_EXPERIMENTAL
+
+/* Define to enable building of plug-ins with external deps. */
+#mesondefine HAVE_EXTERNAL
+
+/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
+#mesondefine HAVE_FSEEKO
+
+/* defined if the compiler implements __func__ */
+#mesondefine HAVE_FUNC
+
+/* defined if the compiler implements __FUNCTION__ */
+#mesondefine HAVE_FUNCTION
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#mesondefine HAVE_GETTEXT
+
+/* Define to enable glib GIO unix (used by gio-unix-2.0). */
+#mesondefine HAVE_GIO_UNIX_2_0
+
+/* Define to 1 if you have the `gmtime_r' function. */
+#mesondefine HAVE_GMTIME_R
+
+/* Define if you have the iconv() function and it works. */
+#mesondefine HAVE_ICONV
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#mesondefine HAVE_INTTYPES_H
+
+/* make use of iso-codes for ISO-639 */
+#mesondefine HAVE_ISO_CODES
+
+/* Define to enable integer vorbis plug-in (used by ivorbisdec). */
+#mesondefine HAVE_IVORBIS
+
+/* Define to 1 if you have the `asound' library (-lasound). */
+#mesondefine HAVE_LIBASOUND
+
+/* Define to enable libvisual visualization library (used by libvisual). */
+#mesondefine HAVE_LIBVISUAL
+
+/* Define to 1 if you have the `localtime_r' function. */
+#mesondefine HAVE_LOCALTIME_R
+
+/* Define to 1 if you have the `log2' function. */
+#mesondefine HAVE_LOG2
+
+/* Define if you have C99's lrint function. */
+#mesondefine HAVE_LRINT
+
+/* Define if you have C99's lrintf function. */
+#mesondefine HAVE_LRINTF
+
+/* Define to 1 if you have the <memory.h> header file. */
+#mesondefine HAVE_MEMORY_H
+
+/* Defined if mmap is supported */
+#mesondefine HAVE_MMAP
+
+/* Define to enable Xiph Ogg library (used by ogg). */
+#mesondefine HAVE_OGG
+
+/* Use Orc */
+#mesondefine HAVE_ORC
+
+/* Defined if compiling for OSX */
+#mesondefine HAVE_OSX
+
+/* Define to enable Pango font rendering (used by pango). */
+#mesondefine HAVE_PANGO
+
+/* defined if the compiler implements __PRETTY_FUNCTION__ */
+#mesondefine HAVE_PRETTY_FUNCTION
+
+/* Define to 1 if you have the <process.h> header file. */
+#mesondefine HAVE_PROCESS_H
+
+/* Define if RDTSC is available */
+#mesondefine HAVE_RDTSC
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#mesondefine HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#mesondefine HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#mesondefine HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#mesondefine HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#mesondefine HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#mesondefine HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#mesondefine HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/wait.h> header file. */
+#mesondefine HAVE_SYS_WAIT_H
+
+/* Define to enable Xiph Theora video codec (used by theora). */
+#mesondefine HAVE_THEORA
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#mesondefine HAVE_UNISTD_H
+
+/* Define if valgrind should be used */
+#mesondefine HAVE_VALGRIND
+
+/* Define to enable Xiph Vorbis audio codec (used by vorbis). */
+#mesondefine HAVE_VORBIS
+
+/* defined if vorbis_synthesis_restart is present */
+#mesondefine HAVE_VORBIS_SYNTHESIS_RESTART
+
+/* Defined if compiling for Windows */
+#mesondefine HAVE_WIN32
+
+/* Define to 1 if you have the <winsock2.h> header file. */
+#mesondefine HAVE_WINSOCK2_H
+
+/* Define to enable X libraries and plugins (used by ximagesink). */
+#mesondefine HAVE_X
+
+/* Define to 1 if you have the <xmmintrin.h> header file. */
+#mesondefine HAVE_XMMINTRIN_H
+
+/* Define to enable X Shared Memory extension. */
+#mesondefine HAVE_XSHM
+
+/* Define to enable X11 XVideo extensions (used by xvimagesink). */
+#mesondefine HAVE_XVIDEO
+
+/* Define to enable zlib support for ID3 parsing in libgsttag. */
+#mesondefine HAVE_ZLIB
+
+/* the host CPU */
+#mesondefine HOST_CPU
+
+/* prefix */
+#mesondefine ISO_CODES_PREFIX
+
+/* */
+#mesondefine ISO_CODES_VERSION
+
+/* directory in which the detected libvisual's plugins are located */
+#mesondefine LIBVISUAL_PLUGINSBASEDIR
+
+/* gettext locale dir */
+#mesondefine LOCALEDIR
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#mesondefine LT_OBJDIR
+
+/* Name of package */
+#mesondefine PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#mesondefine PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#mesondefine PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#mesondefine PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#mesondefine PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#mesondefine PACKAGE_URL
+
+/* Define to the version of this package. */
+#mesondefine PACKAGE_VERSION
+
+/* directory where plugins are located */
+#mesondefine PLUGINDIR
+
+/* The size of `char', as computed by sizeof. */
+#mesondefine SIZEOF_CHAR
+
+/* The size of `int', as computed by sizeof. */
+#mesondefine SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#mesondefine SIZEOF_LONG
+
+/* The size of `short', as computed by sizeof. */
+#mesondefine SIZEOF_SHORT
+
+/* The size of `void*', as computed by sizeof. */
+#mesondefine SIZEOF_VOIDP
+
+/* Define to 1 if you have the ANSI C header files. */
+#mesondefine STDC_HEADERS
+
+/* the target CPU */
+#mesondefine TARGET_CPU
+
+/* "Define if building for android" */
+#mesondefine USE_TREMOLO
+
+/* Version number of package */
+#mesondefine VERSION
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+#  undef WORDS_BIGENDIAN
+# endif
+#endif
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#mesondefine _FILE_OFFSET_BITS
+
+/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
+#mesondefine _LARGEFILE_SOURCE
+
+/* Define for large files, on AIX-style hosts. */
+#mesondefine _LARGE_FILES
+
+/* We need at least WinXP SP2 for __stat64 */
+#mesondefine __MSVCRT_VERSION__
diff --git a/ext/alsa/meson.build b/ext/alsa/meson.build
new file mode 100644 (file)
index 0000000..06d65bd
--- /dev/null
@@ -0,0 +1,21 @@
+alsa_sources = [
+  'gstalsa.c',
+  'gstalsadeviceprobe.c',
+  'gstalsamidisrc.c',
+  'gstalsaplugin.c',
+  'gstalsasink.c',
+  'gstalsasrc.c',
+]
+
+alsa_dep = dependency('alsa', version : '>=0.9.1', required : false)
+
+if alsa_dep.found()
+  gstalsa = library('gstalsa',
+    alsa_sources,
+    c_args : gst_plugins_base_args,
+    include_directories: [configinc, libsinc],
+    dependencies : glib_deps + [alsa_dep, audio_dep, tag_dep, gst_dep, gst_base_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
diff --git a/ext/cdparanoia/meson.build b/ext/cdparanoia/meson.build
new file mode 100644 (file)
index 0000000..42dc804
--- /dev/null
@@ -0,0 +1,32 @@
+cdparanoia_deps = []
+cdparanoia_found = false
+
+# cdparanoia upstream has a pkg-config file only in post-10.2 SVN so far, no release yet
+cdparanoia_dep = dependency('cdparanoia-3', version : '>=10.2', required : false)
+if cdparanoia_dep.found()
+  cdparanoia_deps = [cdparanoia_dep]
+  cdparanoia_found = true
+else
+  cdparanoia_dep = cc.find_library('cdda_paranoia', required : false)
+  cdinterface_dep = cc.find_library('cdda_interface', required : false)
+  if cdparanoia_dep.found() and cdinterface_dep.found()
+    cdparanoia_deps = [cdparanoia_dep, cdinterface_dep]
+    cdparanoia_found = true
+    if cc.has_header_symbol('cdda/cdda_interface.h', 'cdda_open')
+      core_conf.set('CDPARANOIA_HEADERS_IN_DIR', true)
+    elif cc.has_header_symbol('cdda_interface.h', 'cdda_open')
+      core_conf.set('CDPARANOIA_HEADERS_IN_DIR', false)
+    endif
+  endif
+endif
+
+if cdparanoia_found
+  gstcdparanoia = library('gstcdparanoia',
+    ['gstcdparanoiasrc.c'],
+    include_directories: [configinc, libsinc],
+    c_args : gst_plugins_base_args,
+    dependencies : cdparanoia_deps + glib_deps + [audio_dep, gst_dep, gst_base_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
diff --git a/ext/libvisual/meson.build b/ext/libvisual/meson.build
new file mode 100644 (file)
index 0000000..1974751
--- /dev/null
@@ -0,0 +1,23 @@
+libvisual_sources = [
+  'visual.c',
+  'plugin.c',
+]
+
+libvisual_dep = dependency('libvisual-0.4', version : '>= 0.4.0', required : false)
+if libvisual_dep.found()
+  runcmd = run_command('pkg-config', '--variable=pluginsbasedir', 'libvisual-0.4')
+  if runcmd.returncode() == 0
+    core_conf.set('LIBVISUAL_PLUGINSBASEDIR', '"@0@"'.format(runcmd.stdout().strip()))
+  endif
+endif
+
+if libvisual_dep.found()
+  gstlibvisual = library('gstlibvisual',
+    libvisual_sources,
+    c_args : gst_plugins_base_args,
+    include_directories: [configinc, libsinc],
+    dependencies : glib_deps + [libvisual_dep, audio_dep, video_dep, pbutils_dep, gst_dep, gst_base_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
diff --git a/ext/meson.build b/ext/meson.build
new file mode 100644 (file)
index 0000000..2a9879a
--- /dev/null
@@ -0,0 +1,12 @@
+subdir('alsa')
+subdir('cdparanoia')
+if cc.get_id() != 'msvc'
+  # libvisual has MinGW-specific headers which are not compatible with MSVC
+  # If we want to build this with MSVC, we must build libvisual with it too
+  subdir('libvisual')
+endif
+subdir('ogg')
+subdir('opus')
+subdir('pango')
+subdir('theora')
+subdir('vorbis')
diff --git a/ext/ogg/meson.build b/ext/ogg/meson.build
new file mode 100644 (file)
index 0000000..2bb0f61
--- /dev/null
@@ -0,0 +1,26 @@
+ogg_sources = [
+  'dirac_parse.c',
+  'gstoggaviparse.c',
+  'gstogg.c',
+  'gstoggdemux.c',
+  'gstoggmux.c',
+  'gstoggparse.c',
+  'gstoggstream.c',
+  'gstogmparse.c',
+  'vorbis_parse.c',
+]
+
+ogg_dep = dependency('ogg', version : '>=1.0', required : false)
+core_conf.set('HAVE_OGG', ogg_dep.found())
+
+if ogg_dep.found()
+  gstogg = library('gstogg',
+    ogg_sources,
+    c_args : gst_plugins_base_args,
+    link_args : noseh_link_args,
+    include_directories: [configinc, libsinc],
+    dependencies : glib_deps + [ogg_dep, audio_dep, pbutils_dep, tag_dep, riff_dep, gst_dep, gst_base_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
diff --git a/ext/opus/meson.build b/ext/opus/meson.build
new file mode 100644 (file)
index 0000000..e0def6b
--- /dev/null
@@ -0,0 +1,21 @@
+opus_sources = [
+  'gstopus.c',
+  'gstopuscommon.c',
+  'gstopusdec.c',
+  'gstopusenc.c',
+  'gstopusheader.c',
+]
+
+opus_dep = dependency('opus', version : '>= 0.9.4', required : false)
+
+if opus_dep.found()
+  gstopus = library('gstopus',
+    opus_sources,
+    c_args : gst_plugins_base_args,
+    link_args : noseh_link_args,
+    include_directories: [configinc, libsinc],
+    dependencies : glib_deps + [pbutils_dep, tag_dep, audio_dep, gst_dep, gst_base_dep, opus_dep, libm],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
diff --git a/ext/pango/meson.build b/ext/pango/meson.build
new file mode 100644 (file)
index 0000000..89dd68a
--- /dev/null
@@ -0,0 +1,21 @@
+pango_sources = [
+  'gstbasetextoverlay.c',
+  'gstclockoverlay.c',
+  'gsttextoverlay.c',
+  'gsttextrender.c',
+  'gsttimeoverlay.c',
+]
+
+pango_dep = dependency('pangocairo', version : '>=1.22.0', required : false)
+
+if pango_dep.found()
+  gstpango = library('gstpango',
+    pango_sources,
+    c_args : gst_plugins_base_args,
+    link_args : noseh_link_args,
+    include_directories: [configinc, libsinc],
+    dependencies : glib_deps + [pango_dep, video_dep, gst_dep, gst_base_dep, libm],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
diff --git a/ext/theora/meson.build b/ext/theora/meson.build
new file mode 100644 (file)
index 0000000..1b5327e
--- /dev/null
@@ -0,0 +1,29 @@
+theora_sources = [
+  'gsttheora.c',
+  'gsttheoraparse.c',
+]
+
+theoradec_dep = dependency('theoradec', version : '>=1.1', required : false)
+theoraenc_dep = dependency('theoraenc', version : '>=1.1', required : false)
+core_conf.set('HAVE_THEORA', theoradec_dep.found() and theoraenc_dep.found())
+theora_deps = []
+
+if theoradec_dep.found() or theoraenc_dep.found()
+  if theoradec_dep.found()
+    theora_sources += [ 'gsttheoradec.c' ]
+    theora_deps += theoradec_dep
+  endif
+  if theoraenc_dep.found()
+    theora_sources += [ 'gsttheoraenc.c' ]
+    theora_deps += theoraenc_dep
+  endif
+  gsttheora = library('gsttheora',
+    theora_sources,
+    c_args : gst_plugins_base_args,
+    link_args : noseh_link_args,
+    include_directories: [configinc, libsinc],
+    dependencies : theora_deps + glib_deps + [video_dep, tag_dep, gst_dep, gst_base_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
diff --git a/ext/vorbis/meson.build b/ext/vorbis/meson.build
new file mode 100644 (file)
index 0000000..c0390ba
--- /dev/null
@@ -0,0 +1,54 @@
+vorbis_sources = [
+  'gstvorbis.c',
+  'gstvorbisdec.c',
+  'gstvorbisdeclib.c',
+  'gstvorbisenc.c',
+  'gstvorbisparse.c',
+  'gstvorbistag.c',
+  'gstvorbiscommon.c',
+]
+
+vorbisidec_sources = [
+  'gstivorbisdec.c',
+  'gstvorbisdec.c',
+  'gstvorbisdeclib.c',
+  'gstvorbiscommon.c',
+]
+
+vorbis_dep = dependency('vorbis', version : '>=1.0', required : false)
+vorbisenc_dep = dependency('vorbisenc', version : '>=1.0', required : false)
+vorbisidec_dep = dependency('vorbisidec', required : false)
+
+if vorbis_dep.found() or vorbisidec_dep.found()
+  if cc.has_header_symbol('vorbis/codec.h', 'vorbis_synthesis_restart')
+    core_conf.set('HAVE_VORBIS_SYNTHESIS_RESTART', true)
+  endif
+endif
+
+if vorbis_dep.found()
+  vorbis_deps = [vorbis_dep]
+  if vorbisenc_dep.found()
+    vorbis_deps += vorbisenc_dep
+  endif
+  gstvorbis = library('gstvorbis',
+    vorbis_sources,
+    c_args : gst_plugins_base_args,
+    link_args : noseh_link_args,
+    include_directories: [configinc, libsinc],
+    dependencies : vorbis_deps + glib_deps + [audio_dep, tag_dep, gst_dep, gst_base_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
+
+if vorbisidec_dep.found()
+  gstivorbisdec = library('gstivorbisdec',
+    vorbisidec_sources,
+    c_args : gst_plugins_base_args,
+    link_args : noseh_link_args,
+    include_directories: [configinc, libsinc],
+    dependencies : glib_deps + [vorbisidec_dep, audio_dep, tag_dep, gst_dep, gst_base_dep],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
diff --git a/gst-libs/gst/allocators/meson.build b/gst-libs/gst/allocators/meson.build
new file mode 100644 (file)
index 0000000..2a66aae
--- /dev/null
@@ -0,0 +1,22 @@
+gst_allocators_headers = [
+  'allocators.h',
+  'gstfdmemory.h',
+  'gstdmabuf.h',
+]
+install_headers(gst_allocators_headers, subdir : 'gstreamer-1.0/gst/allocators/')
+
+gstallocators = library('gstallocators-@0@'.format(api_version),
+  [ 'gstdmabuf.c', 'gstfdmemory.c' ],
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [gst_dep],
+  vs_module_defs: vs_module_defs_dir + 'libgstallocators.def',
+)
+# TODO: generate gir
+
+allocators_dep = declare_dependency(link_with: gstallocators,
+  include_directories : [libsinc],
+  dependencies : [gst_dep])
diff --git a/gst-libs/gst/app/meson.build b/gst-libs/gst/app/meson.build
new file mode 100644 (file)
index 0000000..4891a79
--- /dev/null
@@ -0,0 +1,20 @@
+app_sources = ['gstappsrc.c', 'gstappsink.c']
+
+app_headers = [ 'app.h', 'gstappsrc.h', 'gstappsink.h' ]
+install_headers(app_headers, subdir : 'gstreamer-1.0/gst/app/')
+
+gstapp = library('gstapp-@0@'.format(api_version),
+  app_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [gst_base_dep],
+  vs_module_defs: vs_module_defs_dir + 'libgstapp.def',
+)
+# TODO: generate gir
+
+app_dep = declare_dependency(link_with: gstapp,
+  include_directories : [libsinc],
+  dependencies : [gst_base_dep])
diff --git a/gst-libs/gst/audio/audio_mkenum.py b/gst-libs/gst/audio/audio_mkenum.py
new file mode 100755 (executable)
index 0000000..b3572de
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+# This is in its own file rather than inside meson.build
+# because a) mixing the two is ugly and b) trying to
+# make special characters such as \n go through all
+# backends is a fool's errand.
+
+import sys, os, shutil, subprocess
+
+h_array = ['--fhead',
+           "#ifndef __GST_AUDIO_ENUM_TYPES_H__\n#define __GST_AUDIO_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n",
+           '--fprod',
+           "\n/* enumerations from \"@filename@\" */\n",
+           '--vhead',
+           'GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n',
+           '--ftail',
+           'G_END_DECLS\n\n#endif /* __GST_AUDIO_ENUM_TYPES_H__ */',
+           ]
+
+c_array = ['--fhead',
+           "#include \"audio-enumtypes.h\"\n\n#include \"audio.h\" \n#include \"audio-format.h\" \n#include \"audio-channels.h\" \n#include \"audio-info.h\" \n#include \"gstaudioringbuffer.h\"",
+           '--fprod',
+           "\n/* enumerations from \"@filename@\" */",
+           '--vhead',
+           "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {",
+           '--vprod',
+           "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" },",
+           '--vtail',
+           "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n",
+           ]
+
+cmd = []
+argn = 1
+# Find the full command needed to run glib-mkenums
+# On UNIX-like, this is just the full path to glib-mkenums
+# On Windows, this is the full path to interpreter + full path to glib-mkenums
+for arg in sys.argv[1:]:
+    cmd.append(arg)
+    argn += 1
+    if arg.endswith('glib-mkenums'):
+        break
+ofilename = sys.argv[argn]
+headers = sys.argv[argn + 1:]
+
+if ofilename.endswith('.h'):
+    arg_array = h_array
+else:
+    arg_array = c_array
+
+cmd_array = cmd + arg_array + headers
+pc = subprocess.Popen(cmd_array, stdout=subprocess.PIPE)
+(stdo, _) = pc.communicate()
+if pc.returncode != 0:
+    sys.exit(pc.returncode)
+open(ofilename, 'wb').write(stdo)
diff --git a/gst-libs/gst/audio/meson.build b/gst-libs/gst/audio/meson.build
new file mode 100644 (file)
index 0000000..deb06c9
--- /dev/null
@@ -0,0 +1,103 @@
+audio_src= [
+  'audio.c',
+  'audio-channel-mixer.c',
+  'audio-channels.c',
+  'audio-converter.c',
+  'audio-format.c',
+  'audio-info.c',
+  'audio-quantize.c',
+  'audio-resampler.c',
+  'gstaudiobasesink.c',
+  'gstaudiobasesrc.c',
+  'gstaudiocdsrc.c',
+  'gstaudioclock.c',
+  'gstaudiodecoder.c',
+  'gstaudioencoder.c',
+  'gstaudiofilter.c',
+  'gstaudioiec61937.c',
+  'gstaudiometa.c',
+  'gstaudioringbuffer.c',
+  'gstaudiosink.c',
+  'gstaudiosrc.c',
+  'gstaudioutilsprivate.c',
+  'streamvolume.c',
+]
+
+audio_mkenum_headers = [
+  'audio.h',
+  'audio-format.h',
+  'audio-channels.h',
+  'audio-channel-mixer.h',
+  'audio-converter.h',
+  'audio-info.h',
+  'audio-quantize.h',
+  'audio-resampler.h',
+  'gstaudioringbuffer.h',
+]
+
+# FIXME: check headers
+audio_headers = audio_mkenum_headers + [
+  'gstaudiobasesink.h',
+  'gstaudiobasesrc.h',
+  'gstaudiocdsrc.h',
+  'gstaudioclock.h',
+  'gstaudiodecoder.h',
+  'gstaudioencoder.h',
+  'gstaudiofilter.h',
+  'gstaudioiec61937.h',
+  'gstaudiometa.h',
+  'gstaudiosink.h',
+  'gstaudiosrc.h',
+  'streamvolume.h',
+]
+install_headers(audio_headers, subdir : 'gstreamer-1.0/gst/audio/')
+
+mkenums = find_program('audio_mkenum.py')
+gstaudio_h = custom_target('gstaudioenum_h',
+  output : 'audio-enumtypes.h',
+  input : audio_mkenum_headers,
+  install : true,
+  install_dir : 'include/gstreamer-1.0/gst/audio/',
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+gstaudio_c = custom_target('gstaudioenum_c',
+  output : 'audio-enumtypes.c',
+  input : audio_mkenum_headers,
+  depends : [gstaudio_h],
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+orcsrc = 'gstaudiopack'
+if have_orcc
+  orc_h = custom_target(orcsrc + '.h',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.h',
+    command : orcc_args + ['--header', '-o', '@OUTPUT@', '@INPUT@'])
+  orc_c = custom_target(orcsrc + '.c',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.c',
+    command : orcc_args + ['--implementation', '-o', '@OUTPUT@', '@INPUT@'])
+else
+  orc_h = configure_file(input : orcsrc + '-dist.h',
+    output : orcsrc + '.h',
+    configuration : configuration_data())
+  orc_c = configure_file(input : orcsrc + '-dist.c',
+    output : orcsrc + '.c',
+    configuration : configuration_data())
+endif
+
+gstaudio = library('gstaudio-@0@'.format(api_version),
+  audio_src, gstaudio_h, gstaudio_c, orc_c, orc_h,
+  c_args: gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [tag_dep, gst_base_dep, libm],
+  vs_module_defs: vs_module_defs_dir + 'libgstaudio.def',
+)
+# TODO: generate gir
+
+audio_dep = declare_dependency(link_with : gstaudio,
+  include_directories : [libsinc],
+  dependencies : [gst_base_dep, tag_dep],
+  sources : [gstaudio_h])
diff --git a/gst-libs/gst/fft/meson.build b/gst-libs/gst/fft/meson.build
new file mode 100644 (file)
index 0000000..9a5fabb
--- /dev/null
@@ -0,0 +1,41 @@
+fft_sources = [
+  'gstfft.c',
+  'gstffts16.c',
+  'gstffts32.c',
+  'gstfftf32.c',
+  'gstfftf64.c',
+  'kiss_fft_s16.c',
+  'kiss_fft_s32.c',
+  'kiss_fft_f32.c',
+  'kiss_fft_f64.c',
+  'kiss_fftr_s16.c',
+  'kiss_fftr_s32.c',
+  'kiss_fftr_f32.c',
+  'kiss_fftr_f64.c'
+]
+
+fft_headers = [
+  'fft.h',
+  'gstfftf32.h',
+  'gstfftf64.h',
+  'gstfft.h',
+  'gstffts16.h',
+  'gstffts32.h',
+]
+install_headers(fft_headers, subdir : 'gstreamer-1.0/gst/fft/')
+
+gstfft = library('gstfft-@0@'.format(api_version),
+  fft_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [gst_dep, libm],
+  vs_module_defs: vs_module_defs_dir + 'libgstfft.def',
+)
+# TODO: generate gir
+
+fft_dep = declare_dependency(link_with: gstfft,
+  include_directories : [libsinc],
+  dependencies : [gst_dep])
diff --git a/gst-libs/gst/meson.build b/gst-libs/gst/meson.build
new file mode 100644 (file)
index 0000000..9f98006
--- /dev/null
@@ -0,0 +1,11 @@
+subdir('tag')
+subdir('fft')
+subdir('rtsp')
+subdir('video')
+subdir('audio')
+subdir('rtp')
+subdir('sdp')
+subdir('pbutils')
+subdir('riff')
+subdir('app')
+subdir('allocators')
diff --git a/gst-libs/gst/pbutils/meson.build b/gst-libs/gst/pbutils/meson.build
new file mode 100644 (file)
index 0000000..38383f3
--- /dev/null
@@ -0,0 +1,69 @@
+pbutils_sources = [
+  'gstpluginsbaseversion.c',
+  'pbutils.c',
+  'codec-utils.c',
+  'descriptions.c',
+  'encoding-profile.c',
+  'encoding-target.c',
+  'install-plugins.c',
+  'missing-plugins.c',
+  'gstaudiovisualizer.c',
+  'gstdiscoverer.c',
+  'gstdiscoverer-types.c'
+  ]
+
+pbconf = configuration_data()
+pbconf.set('PACKAGE_VERSION_MAJOR', gst_version_major)
+pbconf.set('PACKAGE_VERSION_MINOR', gst_version_minor)
+pbconf.set('PACKAGE_VERSION_MICRO', gst_version_micro)
+pbconf.set('PACKAGE_VERSION_NANO', gst_version_nano)
+configure_file(input : 'gstpluginsbaseversion.h.in',
+  output: 'gstpluginsbaseversion.h',
+  install_dir : 'include/gstreamer-1.0/gst/pbutils/',
+  configuration: pbconf)
+
+pbutils_headers = [
+  'pbutils.h',
+  'codec-utils.h',
+  'descriptions.h',
+  'encoding-profile.h',
+  'encoding-target.h',
+  'install-plugins.h',
+  'missing-plugins.h',
+  'gstdiscoverer.h',
+  'gstaudiovisualizer.h',
+]
+install_headers(pbutils_headers, subdir : 'gstreamer-1.0/gst/pbutils/')
+
+pbutils_mkenum_headers = pbutils_headers
+
+mkenums = find_program('pbutils_mkenum.py')
+gstpbutils_h = custom_target('gstpbutilsenum_h',
+  output : 'pbutils-enumtypes.h',
+  input : pbutils_mkenum_headers,
+  install : true,
+  install_dir : 'include/gstreamer-1.0/gst/pbutils/',
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+gstpbutils_c = custom_target('gstpbutilsenum_c',
+  output : 'pbutils-enumtypes.c',
+  input : pbutils_mkenum_headers,
+  depends : [gstaudio_h, gstvideo_h, gstpbutils_h],
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+pbutils = library('gstpbutils-@0@'.format(api_version),
+  pbutils_sources, gstpbutils_c, gstpbutils_h,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [video_dep, audio_dep, tag_dep],
+  vs_module_defs: vs_module_defs_dir + 'libgstpbutils.def',
+)
+# TODO: generate gir
+
+pbutils_dep = declare_dependency(link_with : pbutils,
+  include_directories : [libsinc],
+  dependencies : [video_dep, audio_dep, tag_dep],
+  sources : [gstpbutils_h])
diff --git a/gst-libs/gst/pbutils/pbutils_mkenum.py b/gst-libs/gst/pbutils/pbutils_mkenum.py
new file mode 100755 (executable)
index 0000000..8032c96
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+# This is in its own file rather than inside meson.build
+# because a) mixing the two is ugly and b) trying to
+# make special characters such as \n go through all
+# backends is a fool's errand.
+
+import sys, os, shutil, subprocess
+
+h_array = ['--fhead',
+           "#ifndef __PB_UTILS_ENUM_TYPES_H__\n#define __PB_UTILS_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n",
+           '--fprod',
+           "\n/* enumerations from \"@filename@\" */\n",
+           '--vhead',
+           "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n",
+           '--ftail',
+           "G_END_DECLS\n\n#endif /* __PB_UTILS_ENUM_TYPES_H__ */"
+]
+
+c_array = ['--fhead',
+           "#include \"pbutils-enumtypes.h\"\n\n#include \"pbutils.h\" \n#include \"codec-utils.h\" \n#include \"descriptions.h\" \n#include \"encoding-profile.h\" \n#include \"encoding-target.h\" \n#include \"install-plugins.h\" \n#include \"missing-plugins.h\" \n#include \"gstdiscoverer.h\" \n#include \"gstaudiovisualizer.h\"",
+           '--fprod',
+           "\n/* enumerations from \"@filename@\" */",
+           '--vhead',
+           "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {",
+           '--vprod',
+           "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" },",
+           '--vtail',
+           "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n"
+]
+
+cmd = []
+argn = 1
+# Find the full command needed to run glib-mkenums
+# On UNIX-like, this is just the full path to glib-mkenums
+# On Windows, this is the full path to interpreter + full path to glib-mkenums
+for arg in sys.argv[1:]:
+    cmd.append(arg)
+    argn += 1
+    if arg.endswith('glib-mkenums'):
+        break
+ofilename = sys.argv[argn]
+headers = sys.argv[argn + 1:]
+
+if ofilename.endswith('.h'):
+    arg_array = h_array
+else:
+    arg_array = c_array
+
+cmd_array = cmd + arg_array + headers
+pc = subprocess.Popen(cmd_array, stdout=subprocess.PIPE)
+(stdo, _) = pc.communicate()
+if pc.returncode != 0:
+    sys.exit(pc.returncode)
+open(ofilename, 'wb').write(stdo)
diff --git a/gst-libs/gst/riff/meson.build b/gst-libs/gst/riff/meson.build
new file mode 100644 (file)
index 0000000..6017348
--- /dev/null
@@ -0,0 +1,29 @@
+riff_sources = [
+  'riff.c',
+  'riff-media.c',
+  'riff-read.c',
+]
+
+riff_headers = [
+  'riff.h',
+  'riff-ids.h',
+  'riff-media.h',
+  'riff-read.h',
+]
+install_headers(riff_headers, subdir : 'gstreamer-1.0/gst/riff/')
+
+gstriff = library('gstriff-@0@'.format(api_version),
+  riff_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [audio_dep, tag_dep],
+  vs_module_defs: vs_module_defs_dir + 'libgstriff.def',
+)
+# TODO: generate gir
+
+riff_dep = declare_dependency(link_with: gstriff,
+  include_directories : [libsinc],
+  dependencies : [audio_dep, tag_dep])
diff --git a/gst-libs/gst/rtp/meson.build b/gst-libs/gst/rtp/meson.build
new file mode 100644 (file)
index 0000000..c79913a
--- /dev/null
@@ -0,0 +1,54 @@
+rtp_sources = [
+  'gstrtpbuffer.c',
+  'gstrtcpbuffer.c',
+  'gstrtppayloads.c',
+  'gstrtphdrext.c',
+  'gstrtpbaseaudiopayload.c',
+  'gstrtpbasepayload.c',
+  'gstrtpbasedepayload.c'
+  ]
+
+rtp_headers = [
+  'gstrtcpbuffer.h',
+  'gstrtpbaseaudiopayload.h',
+  'gstrtpbasedepayload.h',
+  'gstrtpbasepayload.h',
+  'gstrtpbuffer.h',
+  'gstrtpdefs.h',
+  'gstrtphdrext.h',
+  'gstrtppayloads.h',
+  'rtp.h',
+]
+install_headers(rtp_headers, subdir : 'gstreamer-1.0/gst/rtp/')
+
+mkenums = find_program('rtp_mkenum.py')
+
+gstrtp_enum_h = custom_target('gstrtp_enum_h',
+  output : 'gstrtp-enumtypes.h',
+  input : rtp_headers,
+  install : true,
+  install_dir : 'include/gstreamer-1.0/gst/rtp/',
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+gstrtp_enum_c = custom_target('gstrtp_enum_c',
+  output : 'gstrtp-enumtypes.c',
+  input : rtp_headers,
+  depends : [gstaudio_h, gstrtp_enum_h],
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+gst_rtp = library('gstrtp-@0@'.format(api_version),
+  rtp_sources, gstrtp_enum_c, gstrtp_enum_h,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [audio_dep, gst_base_dep],
+  vs_module_defs: vs_module_defs_dir + 'libgstrtp.def',
+)
+# TODO: generate gir
+
+rtp_dep = declare_dependency(link_with : gst_rtp,
+  include_directories : [libsinc],
+  dependencies : [audio_dep, gst_base_dep],
+  sources : [gstrtp_enum_h])
diff --git a/gst-libs/gst/rtp/rtp_mkenum.py b/gst-libs/gst/rtp/rtp_mkenum.py
new file mode 100755 (executable)
index 0000000..954fc90
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+# This is in its own file rather than inside meson.build
+# because a) mixing the two is ugly and b) trying to
+# make special characters such as \n go through all
+# backends is a fool's errand.
+
+import sys, os, shutil, subprocess
+
+h_array = ['--fhead',
+           "#ifndef __GST_RTP_ENUM_TYPES_H__\n#define __GST_RTP_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n",
+           '--fprod',
+           "\n/* enumerations from \"@filename@\" */\n",
+           '--vhead',
+           'GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n',
+           '--ftail',
+           'G_END_DECLS\n\n#endif /* __GST_RTP_ENUM_TYPES_H__ */',
+           ]
+
+c_array = ['--fhead',
+           '#include "rtp.h"',
+           '--fprod',
+           "\n/* enumerations from \"@filename@\" */",
+           '--vhead',
+           "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {",
+           '--vprod',
+           "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" },",
+           '--vtail',
+           "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n",
+           ]
+
+cmd = []
+argn = 1
+# Find the full command needed to run glib-mkenums
+# On UNIX-like, this is just the full path to glib-mkenums
+# On Windows, this is the full path to interpreter + full path to glib-mkenums
+for arg in sys.argv[1:]:
+    cmd.append(arg)
+    argn += 1
+    if arg.endswith('glib-mkenums'):
+        break
+ofilename = sys.argv[argn]
+headers = sys.argv[argn + 1:]
+
+if ofilename.endswith('.h'):
+    arg_array = h_array
+else:
+    arg_array = c_array
+
+cmd_array = cmd + arg_array + headers
+pc = subprocess.Popen(cmd_array, stdout=subprocess.PIPE)
+(stdo, _) = pc.communicate()
+if pc.returncode != 0:
+    sys.exit(pc.returncode)
+open(ofilename, 'wb').write(stdo)
diff --git a/gst-libs/gst/rtsp/meson.build b/gst-libs/gst/rtsp/meson.build
new file mode 100644 (file)
index 0000000..875f638
--- /dev/null
@@ -0,0 +1,57 @@
+rtsp_sources = [
+  'gstrtsptransport.c',
+  'gstrtspurl.c',
+  'gstrtspmessage.c',
+  'gstrtspconnection.c',
+  'gstrtspdefs.c',
+  'gstrtspextension.c',
+  'gstrtsprange.c'
+  ]
+
+rtsp_headers = [
+  'gstrtspconnection.h',
+  'gstrtspdefs.h',
+  'gstrtspextension.h',
+  'gstrtsp.h',
+  'gstrtspmessage.h',
+  'gstrtsprange.h',
+  'gstrtsptransport.h',
+  'gstrtspurl.h',
+  'rtsp.h',
+]
+install_headers(rtsp_headers, subdir : 'gstreamer-1.0/gst/rtsp/')
+
+mkenums = find_program('rtsp_mkenum.py')
+
+gstrtsp_h = custom_target('gstrtspenum_h',
+  output : 'gstrtsp-enumtypes.h',
+  input : rtsp_headers,
+  install : true,
+  install_dir : 'include/gstreamer-1.0/gst/rtsp/',
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+gstrtsp_c = custom_target('gstrtspenum_c',
+  output : 'gstrtsp-enumtypes.c',
+  input : rtsp_headers,
+  depends : [gstrtsp_h],
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+winsock2 = cc.find_library('ws2_32', required : false)
+
+gst_rtsp = library('gstrtsp-@0@'.format(api_version),
+  rtsp_sources,
+  gstrtsp_h, gstrtsp_c,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [gst_dep, gio_dep, libm, winsock2],
+  vs_module_defs: vs_module_defs_dir + 'libgstrtsp.def',
+)
+# TODO: generate gir
+
+rtsp_dep = declare_dependency(link_with : gst_rtsp,
+  include_directories : [libsinc],
+  dependencies : [gst_dep, gio_dep],
+  sources : [gstrtsp_h])
diff --git a/gst-libs/gst/rtsp/rtsp_mkenum.py b/gst-libs/gst/rtsp/rtsp_mkenum.py
new file mode 100755 (executable)
index 0000000..5cad36b
--- /dev/null
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+
+# This is in its own file rather than inside meson.build
+# because a) mixing the two is ugly and b) trying to
+# make special characters such as \n go through all
+# backends is a fool's errand.
+
+import sys, os, shutil, subprocess
+
+h_array = [
+    '--fhead',
+    "#ifndef __gst_rtsp_ENUM_TYPES_H__\n#define __gst_rtsp_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n",
+    '--fprod',
+    "\n/* enumerations from \"@filename@\" */\n",
+    '--vhead',
+    "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n",
+    '--ftail',
+    "G_END_DECLS\n\n#endif /* __gst_rtsp_ENUM_TYPES_H__ */"
+]
+
+c_array = ['--fhead',
+           "#include \"gstrtsp-enumtypes.h\"\n\n#include \"rtsp.h\"",
+           '--fprod',
+           "\n/* enumerations from \"@filename@\" */",
+           '--vhead',
+           "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {",
+           '--vprod',
+           "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" },",
+           '--vtail',
+           "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n"
+]
+
+
+cmd = []
+argn = 1
+# Find the full command needed to run glib-mkenums
+# On UNIX-like, this is just the full path to glib-mkenums
+# On Windows, this is the full path to interpreter + full path to glib-mkenums
+for arg in sys.argv[1:]:
+    cmd.append(arg)
+    argn += 1
+    if arg.endswith('glib-mkenums'):
+        break
+ofilename = sys.argv[argn]
+headers = sys.argv[argn + 1:]
+
+if ofilename.endswith('.h'):
+    arg_array = h_array
+else:
+    arg_array = c_array
+
+cmd_array = cmd + arg_array + headers
+pc = subprocess.Popen(cmd_array, stdout=subprocess.PIPE)
+(stdo, _) = pc.communicate()
+if pc.returncode != 0:
+    sys.exit(pc.returncode)
+open(ofilename, 'wb').write(stdo)
diff --git a/gst-libs/gst/sdp/meson.build b/gst-libs/gst/sdp/meson.build
new file mode 100644 (file)
index 0000000..b68cad7
--- /dev/null
@@ -0,0 +1,23 @@
+gst_sdp_headers = [
+  'sdp.h',
+  'gstsdp.h',
+  'gstmikey.h',
+  'gstsdpmessage.h',
+]
+install_headers(gst_sdp_headers, subdir : 'gstreamer-1.0/gst/sdp/')
+
+gstsdp = library('gstsdp-@0@'.format(api_version),
+  'gstsdpmessage.c', 'gstmikey.c',
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [rtp_dep, gst_dep, gio_dep],
+  vs_module_defs: vs_module_defs_dir + 'libgstsdp.def',
+)
+# TODO: generate gir
+
+sdp_dep = declare_dependency(link_with: gstsdp,
+  include_directories : [libsinc],
+  dependencies : [rtp_dep, gst_dep, gio_dep])
diff --git a/gst-libs/gst/tag/meson.build b/gst-libs/gst/tag/meson.build
new file mode 100644 (file)
index 0000000..3358517
--- /dev/null
@@ -0,0 +1,54 @@
+tag_sources = [
+  'gstvorbistag.c',
+  'gstid3tag.c',
+  'gstxmptag.c',
+  'gstexiftag.c',
+  'lang.c',
+  'licenses.c',
+  'tags.c',
+  'gsttagdemux.c',
+  'gsttagmux.c',
+  'gsttageditingprivate.c',
+  'id3v2.c',
+  'id3v2frames.c',
+  'xmpwriter.c',
+]
+
+tag_headers = [
+  'gsttagdemux.h',
+  'gsttagmux.h',
+  'tag.h',
+  'xmpwriter.h',
+]
+install_headers(tag_headers, subdir : 'gstreamer-1.0/gst/tag/')
+
+gsttag = library('gsttag-@0@'.format(api_version),
+  tag_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [gst_base_dep, libm],
+  vs_module_defs: vs_module_defs_dir + 'libgsttag.def',
+)
+# TODO: generate gir
+
+tag_dep = declare_dependency(link_with: gsttag,
+  include_directories : [libsinc],
+  dependencies : [gst_base_dep])
+
+# FIXME: iso-codes stuff
+# little program that reads iso_639.xml and outputs tables for us as fallback
+# for when iso-codes are not available (and so we don't have to read the xml
+# just to map codes)
+#executable('mklangtables', 'mklangtables.c',
+#  dependencies : gst_dep,
+#  install : false,
+#)
+executable('mklicensestables', 'mklicensestables.c',
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc],
+  dependencies : [tag_dep, gst_base_dep],
+  install : false,
+)
diff --git a/gst-libs/gst/video/meson.build b/gst-libs/gst/video/meson.build
new file mode 100644 (file)
index 0000000..7733c8c
--- /dev/null
@@ -0,0 +1,132 @@
+video_sources = [
+  'colorbalance.c',
+  'colorbalancechannel.c',
+  'convertframe.c',
+  'gstvideoaffinetransformationmeta.c',
+  'gstvideodecoder.c',
+  'gstvideoencoder.c',
+  'gstvideofilter.c',
+  'gstvideometa.c',
+  'gstvideopool.c',
+  'gstvideosink.c',
+  'gstvideotimecode.c',
+  'gstvideoutils.c',
+  'gstvideoutilsprivate.c',
+  'navigation.c',
+  'video.c',
+  'video-blend.c',
+  'video-chroma.c',
+  'video-color.c',
+  'video-converter.c',
+  'video-dither.c',
+  'video-event.c',
+  'video-format.c',
+  'video-frame.c',
+  'video-info.c',
+  'video-multiview.c',
+  'video-resampler.c',
+  'video-scaler.c',
+  'video-tile.c',
+  'video-overlay-composition.c',
+  'videoorientation.c',
+  'videooverlay.c',
+]
+
+video_headers = [
+  'colorbalance.h',
+  'colorbalancechannel.h',
+  'gstvideoaffinetransformationmeta.h',
+  'gstvideodecoder.h',
+  'gstvideoencoder.h',
+  'gstvideofilter.h',
+  'gstvideometa.h',
+  'gstvideopool.h',
+  'gstvideosink.h',
+  'gstvideotimecode.h',
+  'gstvideoutils.h',
+  'navigation.h',
+  'video.h',
+  'video-event.h',
+  'video-format.h',
+  'video-chroma.h',
+  'video-color.h',
+  'video-converter.h',
+  'video-dither.h',
+  'video-info.h',
+  'video-frame.h',
+  'video-scaler.h',
+  'video-tile.h',
+  'videoorientation.h',
+  'videooverlay.h',
+  'video-resampler.h',
+  'video-blend.h',
+  'video-overlay-composition.h',
+  'video-multiview.h',
+]
+install_headers(video_headers, subdir : 'gstreamer-1.0/gst/video/')
+
+video_mkenum_headers = [
+  'video.h',
+  'video-format.h',
+  'video-frame.h',
+  'video-chroma.h',
+  'video-color.h',
+  'video-converter.h',
+  'video-dither.h',
+  'video-info.h',
+  'video-resampler.h',
+  'video-scaler.h',
+  'video-tile.h',
+  'colorbalance.h',
+  'navigation.h',
+]
+
+mkenums = find_program('video_mkenum.py')
+gstvideo_h = custom_target('gstvideoenum_h',
+  output : 'video-enumtypes.h',
+  input : video_mkenum_headers,
+  install : true,
+  install_dir : 'include/gstreamer-1.0/gst/video/',
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+gstvideo_c = custom_target('gstvideoenum_c',
+  output : 'video-enumtypes.c',
+  input : video_mkenum_headers,
+  depends : [gstvideo_h],
+  command : [mkenums, glib_mkenums, '@OUTPUT@', '@INPUT@'])
+
+orcsrc = 'video-orc'
+if have_orcc
+  orc_h = custom_target(orcsrc + '.h',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.h',
+    command : orcc_args + ['--header', '-o', '@OUTPUT@', '@INPUT@'])
+  orc_c = custom_target(orcsrc + '.c',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.c',
+    command : orcc_args + ['--implementation', '-o', '@OUTPUT@', '@INPUT@'])
+else
+  orc_h = configure_file(input : orcsrc + '-dist.h',
+    output : orcsrc + '.h',
+    configuration : configuration_data())
+  orc_c = configure_file(input : orcsrc + '-dist.c',
+    output : orcsrc + '.c',
+    configuration : configuration_data())
+endif
+
+gstvideo = library('gstvideo-@0@'.format(api_version),
+  video_sources, gstvideo_h, gstvideo_c, orc_c, orc_h,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  version : libversion,
+  soversion : soversion,
+  install : true,
+  dependencies : [gst_base_dep, libm],
+  vs_module_defs: vs_module_defs_dir + 'libgstvideo.def',
+)
+# TODO: generate gir
+
+video_dep = declare_dependency(link_with : gstvideo,
+  include_directories : [libsinc],
+  dependencies : [gst_base_dep],
+  sources : [gstvideo_h])
diff --git a/gst-libs/gst/video/video_mkenum.py b/gst-libs/gst/video/video_mkenum.py
new file mode 100755 (executable)
index 0000000..b1073f2
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env python3
+
+# This is in its own file rather than inside meson.build
+# because a) mixing the two is ugly and b) trying to
+# make special characters such as \n go through all
+# backends is a fool's errand.
+
+import sys, os, shutil, subprocess
+
+h_array = ['--fhead',
+           "#ifndef __GST_VIDEO_ENUM_TYPES_H__\n#define __GST_VIDEO_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n",
+           '--fprod',
+           "\n/* enumerations from \"@filename@\" */\n",
+           '--vhead',
+           "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n",
+           '--ftail',
+           "G_END_DECLS\n\n#endif /* __GST_VIDEO_ENUM_TYPES_H__ */"
+]
+
+c_array = ['--fhead',
+           "#include \"video-enumtypes.h\"\n\n#include \"video.h\" \n#include \"video-format.h\" \n#include \"video-color.h\" \n#include \"video-info.h\" \n#include \"colorbalance.h\" \n#include \"navigation.h\" \n#include \"video-chroma.h\" \n#include \"video-tile.h\"",
+           '--fprod',
+           "\n/* enumerations from \"@filename@\" */",
+           '--vhead',
+           "GType\n@enum_name@_get_type (void)\n{\n  static volatile gsize g_define_type_id__volatile = 0;\n  if (g_once_init_enter (&g_define_type_id__volatile)) {\n    static const G@Type@Value values[] = {",
+           '--vprod',
+           "      { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" },",
+           '--vtail',
+           "      { 0, NULL, NULL }\n    };\n    GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n    g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n  }\n  return g_define_type_id__volatile;\n}\n"
+]
+
+cmd = []
+argn = 1
+# Find the full command needed to run glib-mkenums
+# On UNIX-like, this is just the full path to glib-mkenums
+# On Windows, this is the full path to interpreter + full path to glib-mkenums
+for arg in sys.argv[1:]:
+    cmd.append(arg)
+    argn += 1
+    if arg.endswith('glib-mkenums'):
+        break
+ofilename = sys.argv[argn]
+headers = sys.argv[argn + 1:]
+
+if ofilename.endswith('.h'):
+    arg_array = h_array
+else:
+    arg_array = c_array
+
+cmd_array = cmd + arg_array + headers
+pc = subprocess.Popen(cmd_array, stdout=subprocess.PIPE)
+(stdo, _) = pc.communicate()
+if pc.returncode != 0:
+    sys.exit(pc.returncode)
+open(ofilename, 'wb').write(stdo)
diff --git a/gst-libs/meson.build b/gst-libs/meson.build
new file mode 100644 (file)
index 0000000..668dcba
--- /dev/null
@@ -0,0 +1 @@
+subdir('gst')
diff --git a/gst/adder/meson.build b/gst/adder/meson.build
new file mode 100644 (file)
index 0000000..dcd0c5f
--- /dev/null
@@ -0,0 +1,27 @@
+orcsrc = 'gstadderorc'
+if have_orcc
+  orc_h = custom_target(orcsrc + '.h',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.h',
+    command : orcc_args + ['--header', '-o', '@OUTPUT@', '@INPUT@'])
+  orc_c = custom_target(orcsrc + '.c',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.c',
+    command : orcc_args + ['--implementation', '-o', '@OUTPUT@', '@INPUT@'])
+else
+  orc_h = configure_file(input : orcsrc + '-dist.h',
+    output : orcsrc + '.h',
+    configuration : configuration_data())
+  orc_c = configure_file(input : orcsrc + '-dist.c',
+    output : orcsrc + '.c',
+    configuration : configuration_data())
+endif
+
+adder = library('gstadder',
+  'gstadder.c', orc_c, orc_h,
+  c_args: gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [audio_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/app/meson.build b/gst/app/meson.build
new file mode 100644 (file)
index 0000000..90873a9
--- /dev/null
@@ -0,0 +1,8 @@
+adder = library('gstapp',
+  'gstapp.c',
+  c_args: gst_plugins_base_args,
+  include_directories: [configinc],
+  dependencies : [gst_base_dep, app_dep, tag_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/audioconvert/meson.build b/gst/audioconvert/meson.build
new file mode 100644 (file)
index 0000000..ffe914d
--- /dev/null
@@ -0,0 +1,13 @@
+aconv_sources = [
+  'gstaudioconvert.c',
+  'plugin.c'
+  ]
+
+gstaudioconvert = library('gstaudioconvert',
+  aconv_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [audio_dep, gst_base_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/audiorate/meson.build b/gst/audiorate/meson.build
new file mode 100644 (file)
index 0000000..a586269
--- /dev/null
@@ -0,0 +1,8 @@
+audiorate = library('gstaudiorate',
+  'gstaudiorate.c',
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [audio_dep, gst_base_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/audioresample/meson.build b/gst/audioresample/meson.build
new file mode 100644 (file)
index 0000000..6dcfd88
--- /dev/null
@@ -0,0 +1,10 @@
+resample_sources = ['gstaudioresample.c']
+
+audioresample = library('gstaudioresample',
+  resample_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [audio_dep, gst_base_dep, libm],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/audiotestsrc/meson.build b/gst/audiotestsrc/meson.build
new file mode 100644 (file)
index 0000000..14df1df
--- /dev/null
@@ -0,0 +1,8 @@
+audiotest = library('gstaudiotestsrc',
+  'gstaudiotestsrc.c', gstaudio_h,
+  c_args: gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [audio_dep, gst_base_dep, libm],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/encoding/meson.build b/gst/encoding/meson.build
new file mode 100644 (file)
index 0000000..c2f0255
--- /dev/null
@@ -0,0 +1,14 @@
+encoding_sources = ['gstencodebin.c',
+  'gstsmartencoder.c',
+  'gststreamcombiner.c',
+  'gststreamsplitter.c',
+  ]
+
+gstencoding = library('gstencodebin',
+  encoding_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [pbutils_dep, video_dep, gst_base_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/gio/meson.build b/gst/gio/meson.build
new file mode 100644 (file)
index 0000000..4c0b46e
--- /dev/null
@@ -0,0 +1,17 @@
+gio_sources = ['gstgio.c',
+  'gstgiobasesink.c',
+  'gstgiobasesrc.c',
+  'gstgiosink.c',
+  'gstgiosrc.c',
+  'gstgiostreamsink.c',
+  'gstgiostreamsrc.c',
+]
+
+gstgio = library('gstgio',
+  gio_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [gst_base_dep, gio_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/meson.build b/gst/meson.build
new file mode 100644 (file)
index 0000000..03d7c66
--- /dev/null
@@ -0,0 +1,17 @@
+subdir('adder')
+subdir('app')
+subdir('audioconvert')
+subdir('audiorate')
+subdir('audioresample')
+subdir('audiotestsrc')
+subdir('encoding')
+subdir('gio')
+subdir('playback')
+subdir('subparse')
+subdir('tcp')
+subdir('typefind')
+subdir('videoconvert')
+subdir('videorate')
+subdir('videoscale')
+subdir('videotestsrc')
+subdir('volume')
diff --git a/gst/playback/meson.build b/gst/playback/meson.build
new file mode 100644 (file)
index 0000000..d8411a2
--- /dev/null
@@ -0,0 +1,27 @@
+playback_sources = [
+  'gstdecodebin2.c',
+  'gstdecodebin3.c',
+  'gsturidecodebin.c',
+  'gsturisourcebin.c',
+  'gstparsebin.c',
+  'gstplayback.c',
+  'gstplaybackutils.c',
+  'gstplaybin2.c',
+  'gstplaybin3.c',
+  'gstplaysink.c',
+  'gstplay-enum.c',
+  'gstsubtitleoverlay.c',
+  'gstplaysinkvideoconvert.c',
+  'gstplaysinkaudioconvert.c',
+  'gstplaysinkconvertbin.c',
+  'gststreamsynchronizer.c'
+]
+
+gstplayback = library('gstplayback',
+  playback_sources,
+  c_args : gst_plugins_base_args + ['-DCOLORSPACE="videoconvert"'],
+  include_directories: [configinc, libsinc],
+  dependencies : [audio_dep, video_dep, pbutils_dep, tag_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/subparse/meson.build b/gst/subparse/meson.build
new file mode 100644 (file)
index 0000000..f3b02ac
--- /dev/null
@@ -0,0 +1,17 @@
+subparse_sources = [
+  'gstssaparse.c',
+  'gstsubparse.c',
+  'samiparse.c',
+  'tmplayerparse.c',
+  'mpl2parse.c',
+  'qttextparse.c',
+]
+
+gstsubparse = library('gstsubparse',
+  subparse_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [gst_base_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/tcp/meson.build b/gst/tcp/meson.build
new file mode 100644 (file)
index 0000000..7129371
--- /dev/null
@@ -0,0 +1,23 @@
+tcp_sources = [
+  'gstmultihandlesink.c',
+  'gstmultisocketsink.c',
+  'gstsocketsrc.c',
+  'gsttcpclientsrc.c',
+  'gsttcpclientsink.c',
+  'gsttcpserversrc.c',
+  'gsttcpserversink.c',
+  'gsttcpplugin.c',
+]
+
+if core_conf.has('HAVE_SYS_SOCKET_H')
+   tcp_sources += 'gstmultifdsink.c'
+endif
+
+gsttcp = library('gsttcp',
+  tcp_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [gio_dep, gst_base_dep, gst_net_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/typefind/meson.build b/gst/typefind/meson.build
new file mode 100644 (file)
index 0000000..bae11f0
--- /dev/null
@@ -0,0 +1,8 @@
+gsttypefind = library('gsttypefindfunctions',
+  'gsttypefindfunctions.c',
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [pbutils_dep, gst_base_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/videoconvert/meson.build b/gst/videoconvert/meson.build
new file mode 100644 (file)
index 0000000..e0fbd4b
--- /dev/null
@@ -0,0 +1,12 @@
+vconvert_sources = [
+  'gstvideoconvert.c',
+]
+
+gstvideoconvert = library('gstvideoconvert',
+  vconvert_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [video_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/videorate/meson.build b/gst/videorate/meson.build
new file mode 100644 (file)
index 0000000..df386fc
--- /dev/null
@@ -0,0 +1,8 @@
+gstvideorate = library('gstvideorate',
+  'gstvideorate.c',
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : [video_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/videoscale/meson.build b/gst/videoscale/meson.build
new file mode 100644 (file)
index 0000000..1a0916a
--- /dev/null
@@ -0,0 +1,12 @@
+videoscale_sources = [
+  'gstvideoscale.c',
+]
+
+gstvideoscale = library('gstvideoscale',
+  videoscale_sources,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : glib_deps + [video_dep, gst_dep, gst_base_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/videotestsrc/meson.build b/gst/videotestsrc/meson.build
new file mode 100644 (file)
index 0000000..d9fd400
--- /dev/null
@@ -0,0 +1,27 @@
+orcsrc = 'gstvideotestsrcorc'
+if have_orcc
+  orc_h = custom_target(orcsrc + '.h',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.h',
+    command : orcc_args + ['--header', '-o', '@OUTPUT@', '@INPUT@'])
+  orc_c = custom_target(orcsrc + '.c',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.c',
+    command : orcc_args + ['--implementation', '-o', '@OUTPUT@', '@INPUT@'])
+else
+  orc_h = configure_file(input : orcsrc + '-dist.h',
+    output : orcsrc + '.h',
+    configuration : configuration_data())
+  orc_c = configure_file(input : orcsrc + '-dist.c',
+    output : orcsrc + '.c',
+    configuration : configuration_data())
+endif
+
+gstvideotestsrc = library('gstvideotestsrc',
+  'gstvideotestsrc.c', 'videotestsrc.c', orc_c, orc_h,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : glib_deps + [video_dep, gst_dep, gst_base_dep, libm],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/gst/volume/meson.build b/gst/volume/meson.build
new file mode 100644 (file)
index 0000000..e5bdd88
--- /dev/null
@@ -0,0 +1,26 @@
+orcsrc = 'gstvolumeorc'
+if have_orcc
+  orc_h = custom_target(orcsrc + '.h',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.h',
+    command : orcc_args + ['--header', '-o', '@OUTPUT@', '@INPUT@'])
+  orc_c = custom_target(orcsrc + '.c',
+    input : orcsrc + '.orc',
+    output : orcsrc + '.c',
+    command : orcc_args + ['--implementation', '-o', '@OUTPUT@', '@INPUT@'])
+else
+  orc_h = configure_file(input : orcsrc + '-dist.h',
+    output : orcsrc + '.h',
+    configuration : configuration_data())
+  orc_c = configure_file(input : orcsrc + '-dist.c',
+    output : orcsrc + '.c',
+    configuration : configuration_data())
+endif
+
+gstvolume = library('gstvolume', 'gstvolume.c', orc_c, orc_h,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : glib_deps + [audio_dep, gst_dep, gst_base_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/meson.build b/meson.build
new file mode 100644 (file)
index 0000000..3e17022
--- /dev/null
@@ -0,0 +1,185 @@
+project('gst-plugins-base', 'c', 'cpp',
+  version : '1.9.1.1',
+  meson_version : '>= 0.33.0',
+  default_options : [ 'warning_level=1',
+                      'c_std=gnu99',
+                      '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
+# 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())
+
+plugins_install_dir = '@0@/gstreamer-1.0'.format(get_option('libdir'))
+
+cc = meson.get_compiler('c')
+
+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_global_arguments('/wd4018', '/wd4244', '/wd4996', language : 'c')
+  # Disable SAFESEH with MSVC for plugins and libs that use external deps that
+  # are built with MinGW
+  noseh_link_args = ['/SAFESEH:NO']
+else
+  noseh_link_args = []
+endif
+
+core_conf = configuration_data()
+check_headers = [
+  ['HAVE_DLFCN_H', 'dlfcn.h'],
+  ['HAVE_EMMINTRIN_H', 'emmintrin.h'],
+  ['HAVE_INTTYPES_H', 'inttypes.h'],
+  ['HAVE_MEMORY_H', 'memory.h'],
+  ['HAVE_PROCESS_H', 'process.h'],
+  ['HAVE_STDINT_H', 'stdint.h'],
+  ['HAVE_STDLIB_H', 'stdlib.h'],
+  ['HAVE_STRINGS_H', 'strings.h'],
+  ['HAVE_STRING_H', 'string.h'],
+  ['HAVE_SYS_SOCKET_H', 'sys/socket.h'],
+  ['HAVE_SYS_STAT_H', 'sys/stat.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'],
+]
+foreach h : check_headers
+  if cc.has_header(h.get(1))
+    core_conf.set(h.get(0), 1)
+  endif
+endforeach
+
+check_functions = [
+  ['HAVE_DCGETTEXT', 'dcgettext'],
+  ['HAVE_GMTIME_R', 'gmtime_r'],
+  ['HAVE_LRINTF', 'lrintf'],
+  ['HAVE_MMAP', 'mmap'],
+]
+
+foreach f : check_functions
+  if cc.has_function(f.get(1))
+    core_conf.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('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('DISABLE_ORC', 1)
+# FIXME: These should be configure options
+core_conf.set('DEFAULT_VIDEOSINK', '"autovideosink"')
+core_conf.set('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)
+
+gst_plugins_base_args = ['-DHAVE_CONFIG_H']
+if get_option('default_library') == 'static'
+  gst_plugins_base_args += ['-DGST_STATIC_COMPILATION']
+endif
+
+libm = cc.find_library('m', required : false)
+# X11 checks are for sys/ and tests/
+x11_dep = dependency('x11', required : false)
+# 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)
+
+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()))
+endif
+
+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,
+  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.source_root() + '/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
+  orcc = find_program('orcc', required : need_orc)
+  if orcc.found()
+    have_orcc = true
+    orcc_args = [orcc, '--include', 'glib.h']
+  else
+    message('Orc Compiler not found, will use backup C code')
+  endif
+endif
+
+subdir('gst-libs')
+subdir('gst')
+subdir('ext')
+subdir('sys')
+subdir('tools')
+subdir('tests')
+subdir('pkgconfig')
+
+# Use core_conf after all subdirs have set values
+configure_file(input : 'config.h.meson',
+  output : 'config.h',
+  configuration : core_conf)
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644 (file)
index 0000000..d44b3f3
--- /dev/null
@@ -0,0 +1,2 @@
+option('audioresample_format', type : 'combo', choices : ['int', 'float', 'auto'], value : 'auto')
+option('use_orc', type : 'combo', choices : ['yes', 'no', 'auto'], value : 'auto')
diff --git a/pkgconfig/meson.build b/pkgconfig/meson.build
new file mode 100644 (file)
index 0000000..578f39e
--- /dev/null
@@ -0,0 +1,35 @@
+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'))
+
+pkg_files = [
+  'gstreamer-allocators',
+  'gstreamer-app',
+  'gstreamer-audio',
+  'gstreamer-fft',
+  'gstreamer-pbutils',
+  'gstreamer-plugins-base',
+  'gstreamer-riff',
+  'gstreamer-rtp',
+  'gstreamer-rtsp',
+  'gstreamer-sdp',
+  'gstreamer-tag',
+  'gstreamer-video',
+]
+
+# FIXME: -uninstalled.pc files (if still needed?)
+foreach p : pkg_files
+  infile = p + '.pc.in'
+  outfile = p + '-1.0.pc'
+  configure_file(input : infile,
+    output : outfile,
+    configuration : pkgconf,
+    install_dir : pkg_install_dir)
+endforeach
diff --git a/sys/meson.build b/sys/meson.build
new file mode 100644 (file)
index 0000000..da6dc24
--- /dev/null
@@ -0,0 +1,9 @@
+if x11_dep.found()
+  # XShm is only used by ximage and xvimage
+  # FIXME: Need to check for XShmAttach inside libXext
+  xshm_dep = dependency('xext', required : false)
+  core_conf.set('HAVE_XSHM', xshm_dep.found())
+
+  subdir('ximage')
+  subdir('xvimage')
+endif
diff --git a/sys/ximage/meson.build b/sys/ximage/meson.build
new file mode 100644 (file)
index 0000000..063b147
--- /dev/null
@@ -0,0 +1,8 @@
+gstximage = library('gstximagesink',
+  'ximagesink.c', 'ximage.c', 'ximagepool.c',
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc, libsinc],
+  dependencies : glib_deps + [video_dep, gst_base_dep, gst_dep, x11_dep, xshm_dep],
+  install : true,
+  install_dir : plugins_install_dir,
+)
diff --git a/sys/xvimage/meson.build b/sys/xvimage/meson.build
new file mode 100644 (file)
index 0000000..2c736af
--- /dev/null
@@ -0,0 +1,21 @@
+xvimage_sources = [
+  'xvcontext.c',
+  'xvimage.c',
+  'xvimageallocator.c',
+  'xvimagepool.c',
+  'xvimagesink.c',
+]
+
+xvideo_dep = dependency('xv', required : false)
+core_conf.set('HAVE_XVIDEO', x11_dep.found() and xvideo_dep.found())
+
+if xvideo_dep.found()
+  gstxvimage = library('gstxvimage',
+    xvimage_sources,
+    c_args : gst_plugins_base_args,
+    include_directories: [configinc, libsinc],
+    dependencies : glib_deps + [video_dep, gst_base_dep, gst_dep, x11_dep, xshm_dep, xvideo_dep, libm],
+    install : true,
+    install_dir : plugins_install_dir,
+  )
+endif
diff --git a/tests/check/meson.build b/tests/check/meson.build
new file mode 100644 (file)
index 0000000..e60aa81
--- /dev/null
@@ -0,0 +1,137 @@
+have_registry = true # FIXME not get_option('disable_registry')
+
+# name, condition when to skip the test and extra dependencies
+base_tests = [
+  [ 'gst/typefindfunctions', not have_registry ],
+  [ 'libs/allocators' ],
+  [ 'libs/audio' ],
+  [ 'libs/audiocdsrc' ],
+  [ 'libs/audiodecoder' ],
+  [ 'libs/audioencoder' ],
+  [ 'libs/baseaudiovisualizer' ],
+  [ 'libs/discoverer' ],
+  [ 'libs/fft' ],
+  [ 'libs/libsabi' ],
+  [ 'libs/mikey' ],
+  [ 'libs/navigation' ],
+  [ 'libs/pbutils' ],
+  [ 'libs/profile' ],
+  [ 'libs/rtpbasedepayload' ],
+  [ 'libs/rtpbasepayload' ],
+  [ 'libs/rtp' ],
+  [ 'libs/rtsp' ],
+  [ 'libs/rtspconnection' ],
+  [ 'libs/sdp' ],
+  [ 'libs/tag' ],
+#  [ 'libs/video' ], # FIXME: times out, perhaps split or spawn conversions into benchmark tool and/or multiple threads
+  [ 'libs/videodecoder' ],
+  [ 'libs/videoencoder' ],
+  [ 'libs/videotimecode' ],
+  [ 'libs/xmpwriter' ],
+  [ 'elements/adder' ],
+  [ 'elements/appsink' ],
+  [ 'elements/appsrc' ],
+  [ 'elements/audioconvert' ],
+  [ 'elements/audiorate' ],
+  [ 'elements/audiotestsrc' ],
+  [ 'elements/audioresample' ],
+  [ 'elements/libvisual', not libvisual_dep.found() ],
+  [ 'elements/decodebin' ],
+  [ 'elements/encodebin', not theoraenc_dep.found() or not vorbisenc_dep.found() ],
+  [ 'elements/multifdsink' ],
+  [ 'elements/multisocketsink' ],
+  [ 'elements/playbin' ],
+  [ 'elements/playbin-complex' ],
+  [ 'elements/playsink' ],
+  [ 'elements/streamsynchronizer' ],
+  [ 'elements/subparse' ],
+  [ 'elements/textoverlay', not pango_dep.found() ],
+  [ 'elements/videoconvert' ],
+  [ 'elements/videorate' ],
+  [ 'elements/videoscale' ],
+  [ 'elements/videotestsrc' ],
+  [ 'elements/volume', false, [ gst_controller_dep ] ],
+  [ 'elements/vorbisdec', not vorbis_dep.found(), [ vorbis_dep, vorbisenc_dep ] ],
+  [ 'elements/vorbistag', not vorbisenc_dep.found(), [ vorbis_dep, vorbisenc_dep ] ],
+  [ 'generic/clock-selection' ],
+  [ 'generic/states' ],
+  [ 'pipelines/simple-launch-lines' ],
+  [ 'pipelines/basetime' ],
+  [ 'pipelines/capsfilter-renegotiation' ],
+  [ 'pipelines/gio' ],
+  [ 'pipelines/oggmux', not ogg_dep.found(), [ ogg_dep, ] ],
+  [ 'pipelines/streamsynchronizer' ],
+  [ 'pipelines/tcp' ], # FIXME: -DHAVE_GIO_UNIX_2_0=1
+  [ 'pipelines/theoraenc', not theoraenc_dep.found(), [ theoraenc_dep ] ],
+  [ 'pipelines/vorbisenc', not vorbisenc_dep.found() ],
+  [ 'pipelines/vorbisdec', not vorbisenc_dep.found(),],
+]
+
+# FIXME: enable orc testing
+#orc_tests = [
+#  'orc/video',
+#  'orc/audio',
+#  'orc/adder',
+#  'orc/volume',
+#  'orc/videotestsrc'
+#]
+
+test_defines = [
+  '-UG_DISABLE_ASSERT',
+  '-UG_DISABLE_CAST_CHECKS',
+  '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_PLUGIN_LOADING_WHITELIST"',
+  '-DGST_TEST_FILES_PATH="' + meson.source_root() + '/tests/files"',
+  '-DGST_TEST_FILE="' + meson.source_root() + '/tests/files/partialframe.mjpeg"', # for libs/discoverer
+  '-DGST_USE_UNSTABLE_API',
+]
+
+runcmd = run_command('pkg-config', '--variable=pluginsdir', 'gstreamer-1.0')
+if runcmd.returncode() == 0
+  core_plugins_dir = runcmd.stdout().strip()
+  message('Using GStreamer plug-ins in ' + core_plugins_dir)
+else
+  error('Could not determine GStreamer core plugins directory for unit tests.')
+endif
+
+test_env = [
+  'GST_PLUGIN_SYSTEM_PATH_1_0=',
+  'GST_PLUGIN_PATH_1_0=' + meson.build_root() + '/gst:' + meson.build_root() + '/ext:' + meson.build_root() + '/sys:' + core_plugins_dir,
+  'GST_PLUGIN_LOADING_WHITELIST=gstreamer:gst-plugins-base@' + meson.build_root(),
+  'GST_TAG_LICENSE_TRANSLATIONS_DICT=' + meson.source_root() + '/gst-libs/gst/tag/license-translations.dict',
+  'GST_STATE_IGNORE_ELEMENTS=cdio cdparanoiasrc libvisual_ alsasrc alsasink',
+  'CK_DEFAULT_TIMEOUT=20',
+]
+
+test_deps = [gst_dep, gst_base_dep, gst_net_dep, gst_check_dep, audio_dep,
+  video_dep, pbutils_dep, rtp_dep, rtsp_dep, tag_dep, allocators_dep, app_dep,
+  fft_dep, riff_dep, sdp_dep, gio_dep] + glib_deps
+
+foreach t : base_tests
+  test_name = t.get(0)
+  extra_deps = [ ]
+  if t.length() == 3
+    extra_deps = t.get(2)
+    skip_test = t.get(1)
+  elif t.length() == 2
+    skip_test = t.get(1)
+  else
+    skip_test = false
+  endif
+  if not skip_test
+    exe = executable(test_name, '@0@.c'.format(test_name),
+      include_directories : [configinc],
+      c_args : ['-DHAVE_CONFIG_H=1' ] + test_defines,
+      dependencies : [libm] + test_deps + extra_deps,
+    )
+    test(test_name, exe,
+      env: test_env + ['GST_REGISTRY=@0@/@1@.registry'.format(meson.current_build_dir(), test_name)]
+    )
+  endif
+endforeach
+
+# ===============> FIXME <==========
+test('gstlibscpp', executable('gstlibscpp', 'libs/gstlibscpp.cc',
+  include_directories : [configinc],
+  cpp_args : gst_plugins_base_args,
+  dependencies : test_deps),
+  env: test_env + [ 'GST_REGISTRY=@0@/gstlibscpp.registry'.format(meson.current_build_dir()) ])
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644 (file)
index 0000000..9133bed
--- /dev/null
@@ -0,0 +1,4 @@
+#subdir('check')
+#subdir('examples')
+#subdir('files')
+#subdir('icles')
diff --git a/tools/meson.build b/tools/meson.build
new file mode 100644 (file)
index 0000000..98757eb
--- /dev/null
@@ -0,0 +1,25 @@
+tool_deps = glib_deps + [pbutils_dep, audio_dep, video_dep, tag_dep, gst_dep, gst_base_dep]
+
+executable('gst-device-monitor-@0@'.format(api_version),
+  'gst-device-monitor.c',
+  install: true,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc],
+  dependencies : tool_deps,
+)
+
+executable('gst-discoverer-@0@'.format(api_version),
+  'gst-discoverer.c',
+  install: true,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc],
+  dependencies : tool_deps,
+)
+
+executable('gst-play-@0@'.format(api_version),
+  'gst-play.c', 'gst-play-kb.c',
+  install: true,
+  c_args : gst_plugins_base_args,
+  include_directories: [configinc],
+  dependencies : tool_deps + [libm],
+)