meson: add initial meson build system

Co-authored-by: Tanguy Dubroca <tanguy.dubroca@lse.epita.fr>
Co-authored-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
Co-authored-by: Alexandre Janniaux <ajanni@videolabs.io>
This commit is contained in:
Marvin Scholz 2019-06-20 15:39:55 +02:00 committed by Steve Lhomme
parent 87baf64853
commit d5f07af209
42 changed files with 7816 additions and 0 deletions

33
bin/meson.build Normal file
View File

@ -0,0 +1,33 @@
vlc_sources = []
vlc_deps = [m_lib, dl_lib, threads_dep]
if host_system == 'darwin'
vlc_sources += ['darwinvlc.m']
vlc_deps += corefoundation_dep
vlc_deps += dependency('Cocoa', required: true)
elif host_system == 'windows'
vlc_sources += ['winvlc.c']
else
vlc_sources += ['vlc.c', 'override.c']
endif
executable('vlc',
vlc_sources,
link_with: [libvlc],
include_directories: [vlc_include_dirs],
dependencies: vlc_deps,
install: true
)
vlc_top_builddir_def = '-DTOP_BUILDDIR="@0@"'.format(vlc_build_root)
vlc_top_srcdir_def = '-DTOP_SRCDIR="@0@"'.format(vlc_src_root)
executable('vlc-static',
vlc_sources,
link_with: [libvlc],
include_directories: [vlc_include_dirs],
dependencies: vlc_deps,
c_args: [vlc_top_builddir_def, vlc_top_srcdir_def],
objc_args: [vlc_top_builddir_def, vlc_top_srcdir_def]
)

View File

@ -0,0 +1,34 @@
#!/usr/bin/env python3
import os, re, argparse
parser = argparse.ArgumentParser()
# Input files
parser.add_argument("copying", type=argparse.FileType('r', encoding='UTF-8'))
parser.add_argument("thanks", type=argparse.FileType('r', encoding='UTF-8'))
parser.add_argument("authors", type=argparse.FileType('r', encoding='UTF-8'))
# Output files
parser.add_argument("output", type=argparse.FileType('w', encoding='UTF-8'))
args = parser.parse_args()
# Regex to remove emails in thanks and authors files
email_regex = re.compile(r'<.*.>')
output_str = '/* Automatically generated file - DO NOT EDIT */\n\n'
with args.copying:
output_str += 'static const char psz_license[] =\n"'
output_str += args.copying.read().replace('"', '\\"').replace('\r', '').replace('\n', '\\n"\n"')
output_str += '";\n\n'
with args.thanks:
output_str += 'static const char psz_thanks[] =\n"'
output_str += email_regex.sub('', args.thanks.read().replace('"', '\\"').replace('\r', '').replace('\n', '\\n"\n"'))
output_str += '";\n\n'
with args.authors:
output_str += 'static const char psz_authors[] =\n"'
output_str += email_regex.sub('', args.authors.read().replace('"', '\\"').replace('\r', '').replace('\n', '\\n"\n"'))
output_str += '";\n\n'
with args.output:
args.output.write(output_str)

View File

@ -0,0 +1,133 @@
# SIMD checks
# Check for fully workin SSE2 intrinsics
have_sse2_intrinsics = cc.compiles('''
#include <emmintrin.h>
#include <stdint.h>
uint64_t frobzor;
void f() {
__m128i a, b, c;
a = b = c = _mm_set1_epi64((__m64)frobzor);
a = _mm_slli_epi16(a, 3);
a = _mm_adds_epi16(a, b);
c = _mm_srli_epi16(c, 8);
c = _mm_slli_epi16(c, 3);
b = _mm_adds_epi16(b, c);
a = _mm_unpacklo_epi8(a, b);
frobzor = (uint64_t)_mm_movepi64_pi64(a);
}
''', args: ['-msse2'], name: 'SSE2 intrinsics check')
cdata.set('HAVE_SSE2_INTRINSICS', have_sse2_intrinsics)
# Check for SSE inline assembly support
can_compile_sse = cc.compiles('''
void f() {
void *p;
asm volatile("xorps %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
}
''', args: ['-msse'], name: 'SSE inline asm check')
cdata.set('CAN_COMPILE_SSE', can_compile_sse)
have_sse = can_compile_sse
# Check for SSE2 inline assembly support
can_compile_sse2 = cc.compiles('''
void f() {
void *p;
asm volatile("punpckhqdq %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
}
''', args: ['-msse'], name: 'SSE2 inline asm check')
cdata.set('CAN_COMPILE_SSE2', can_compile_sse2)
have_sse2 = can_compile_sse2
# Check for SSE3 inline assembly support
can_compile_sse3 = cc.compiles('''
void f() {
void *p;
asm volatile("movsldup %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
}
''', args: ['-msse'], name: 'SSE3 inline asm check')
cdata.set('CAN_COMPILE_SSE3', can_compile_sse3)
# Check for SSSE3 inline assembly support
can_compile_2_sse3 = cc.compiles('''
void f() {
void *p;
asm volatile("pabsw %%xmm0,%%xmm0"::"r"(p):"xmm0");
}
''', args: ['-msse'], name: 'SSSE3 inline asm check')
cdata.set('CAN_COMPILE_SSSE3', can_compile_2_sse3)
have_sse3 = can_compile_sse3 and can_compile_2_sse3
# Check for SSE4.1 inline assembly support
can_compile_sse4_1 = cc.compiles('''
void f() {
void *p;
asm volatile("pmaxsb %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
}
''', args: ['-msse'], name: 'SSE4.1 inline asm check')
cdata.set('CAN_COMPILE_SSE4_1', can_compile_sse4_1)
have_sse4_1 = can_compile_sse4_1
# Check for SSE4.2 inline assembly support
can_compile_sse4_2 = cc.compiles('''
void f() {
void *p;
asm volatile("pcmpgtq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
}
''', args: ['-msse'], name: 'SSE4.2 inline asm check')
cdata.set('CAN_COMPILE_SSE4_2', can_compile_sse4_2)
have_sse4_2 = can_compile_sse4_2
# Check for SSE4A inline assembly support
can_compile_sse4A = cc.compiles('''
void f() {
void *p;
asm volatile("insertq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
}
''', args: ['-msse'], name: 'SSE4A inline asm check')
cdata.set('CAN_COMPILE_SSE4A', can_compile_sse4A)
have_sse4A = can_compile_sse4A
# Check for fully workin AVX2 intrinsics
have_avx2_intrinsics = cc.compiles('''
#include <immintrin.h>
#include <stdint.h>
uint64_t frobzor;
void f() {
__m256i a, b, c;
a = b = c = _mm256_set1_epi64x((int64_t)frobzor);
a = _mm256_slli_epi16(a, 3);
a = _mm256_adds_epi16(a, b);
c = _mm256_srli_epi16(c, 8);
c = _mm256_slli_epi16(c, 3);
b = _mm256_adds_epi16(b, c);
a = _mm256_unpacklo_epi8(a, b);
frobzor = (uint64_t)_mm256_extract_epi64(a, 0);
}
''', args: ['-mavx2'], name: 'AVX2 intrinsics check')
cdata.set('HAVE_AVX2_INTRINSICS', have_avx2_intrinsics)
# Check for AVX inline assembly support
can_compile_avx = cc.compiles('''
void f() {
void *p;
asm volatile("vxorps %%ymm1,%%ymm2,%%ymm3"::"r"(p):"ymm1", "ymm2", "ymm3");
}
''', args: ['-mavx'], name: 'AVX inline asm check')
cdata.set('CAN_COMPILE_AVX', can_compile_avx)
have_avx = can_compile_avx
# Check for AVX2 inline assembly support
can_compile_avx2 = cc.compiles('''
void f() {
void *p;
asm volatile("vpunpckhqdq %%ymm1,%%ymm2,%%ymm3"::"r"(p):"ymm1", "ymm2", "ymm3");
}
''', args: ['-mavx'], name: 'AVX2 inline asm check')
cdata.set('CAN_COMPILE_AVX2', can_compile_avx2)
have_avx2 = can_compile_avx2
# TODO: ARM Neon checks and SVE checks
# TODO: Altivec checks

13
compat/meson.build Normal file
View File

@ -0,0 +1,13 @@
vlc_libcompat = []
if libcompat_sources.length() > 0
vlc_libcompat = static_library(
'compat',
libcompat_sources,
include_directories: [vlc_include_dirs],
dependencies: [m_lib],
pic: true,
install: true,
install_dir: get_option('libdir') / 'vlc'
)
endif

650
config.h.meson Normal file
View File

@ -0,0 +1,650 @@
/* Config template used by meson to generate config.h */
/* Define so that reentrant versions of several functions get declared. */
#ifndef _REENTRANT
#mesondefine _REENTRANT
#endif
/* Same as _REENTANT for some other OSes. */
#ifndef _THREAD_SAFE
#mesondefine _THREAD_SAFE
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
#mesondefine _GNU_SOURCE
#endif
/* Define if the zvbi module is built */
// #undef ZVBI_COMPILED
/* ISO C, POSIX, and 4.3BSD things. */
#mesondefine _BSD_SOURCE
/* Define to 64 for large files support. */
#mesondefine _FILE_OFFSET_BITS
/* Enable compile-time and run-time bounds-checking, and some warnings,
without upsetting glibc 2.15+ or toolchains predefining _FORTIFY_SOURCE */
#if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
# define _FORTIFY_SOURCE 2
#endif
/* Define to 1 is X display is not avaliable */
#mesondefine X_DISPLAY_MISSING
#ifdef _WIN32
/* Define to limit the scope of <windows.h>. */
#define WIN32_LEAN_AND_MEAN 1
/* Define to 1 for Unicode (Wide Chars) APIs. */
#mesondefine UNICODE
#mesondefine _UNICODE
# ifndef _WIN32_WINNT
/* Define for Windows 7 APIs. */
#mesondefine _WIN32_WINNT
# endif
# ifndef _WIN32_IE
/* Define for IE 6.0 (and shell) APIs. */
#mesondefine _WIN32_IE
# endif
/* Extensions to ISO C89 from ISO C99. */
#mesondefine _ISOC99_SOURCE
/* Extensions to ISO C99 from ISO C11. */
#mesondefine _ISOC11_SOURCE
/* IEEE Std 1003.1. */
#mesondefine _POSIX_SOURCE
/* IEEE Std 1003.1. */
#mesondefine _POSIX_C_SOURCE
/* POSIX and XPG 7th edition */
#mesondefine _XOPEN_SOURCE
/* TODO: Still needed? XPG things and X/Open Unix extensions. */
#mesondefine _XOPEN_SOURCE_EXTENDED
/* ISO C, POSIX, and 4.3BSD things. */
#mesondefine _BSD_SOURCE
/* ISO C, POSIX, and SVID things. */
#mesondefine _SVID_SOURCE
/* Define to 1 to force use of MinGW provided C99 *printf over msvcrt */
#mesondefine __USE_MINGW_ANSI_STDIO
#endif /* _WIN32 */
/* Define within the LibVLC source code tree. */
#define __LIBVLC__
/* Define to the libdir */
#mesondefine LIBDIR
/* Define to the libexecdir */
#mesondefine LIBEXECDIR
/* Define to the pkgdatadir */
#mesondefine PKGDATADIR
/* Define to the pkglibdir */
#mesondefine PKGLIBDIR
/* Define to the pkglibexecdir */
#mesondefine PKGLIBEXECDIR
/* Define to the sysdatadir */
#mesondefine SYSDATADIR
/* Define to the localedir */
#mesondefine LOCALEDIR
/* Default font family */
#mesondefine DEFAULT_FAMILY
/* Default font */
#mesondefine DEFAULT_FONT_FILE
/* Default monospace font family */
#mesondefine DEFAULT_MONOSPACE_FAMILY
/* Default monospace font */
#mesondefine DEFAULT_MONOSPACE_FONT_FILE
/* Define to 1 to allow running VLC as root (uid 0). */
#mesondefine ALLOW_RUN_AS_ROOT
/* Binary specific version */
#mesondefine DISTRO_VERSION
/* Define to 1 for stream output support. */
#mesondefine ENABLE_SOUT
/* Define to 1 for VideoLAN manager support */
#mesondefine ENABLE_VLM
/* Define if you want to optimize memory usage over performance */
#mesondefine OPTIMIZE_MEMORY
/* Define to 1 if SSE2 intrinsics are available. */
#mesondefine HAVE_SSE2_INTRINSICS
/* Define to 1 if SSE inline assembly is available. */
#mesondefine CAN_COMPILE_SSE
/* Define to 1 if SSE2 inline assembly is available. */
#mesondefine CAN_COMPILE_SSE2
/* Define to 1 if SSE3 inline assembly is available. */
#mesondefine CAN_COMPILE_SSE3
/* Define to 1 if SSE4A inline assembly is available. */
#mesondefine CAN_COMPILE_SSE4A
/* Define to 1 if SSE4_1 inline assembly is available. */
#mesondefine CAN_COMPILE_SSE4_1
/* Define to 1 if SSE4_2 inline assembly is available. */
#mesondefine CAN_COMPILE_SSE4_2
/* Define to 1 if SSSE3 inline assembly is available. */
#mesondefine CAN_COMPILE_SSSE3
/* The ./configure command line */
#mesondefine CONFIGURE_LINE
/* The copyright years */
#mesondefine COPYRIGHT_YEARS
/* Copyright string */
#mesondefine COPYRIGHT_MESSAGE
/* Dynamic object extension */
#mesondefine LIBEXT
/* libvlc version major number */
#mesondefine LIBVLC_ABI_MAJOR
/* libvlc version micro number */
#mesondefine LIBVLC_ABI_MICRO
/* libvlc version minor number */
#mesondefine LIBVLC_ABI_MINOR
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#mesondefine ENABLE_NLS
/*
* Type/attributes/etc macros
*/
/* Support for __attribute__((packed)) for structs */
#mesondefine HAVE_ATTRIBUTE_PACKED
/* Define to 1 if C++ headers define locale_t */
#mesondefine HAVE_CXX_LOCALE_T
/* Defined to 1 if C11 _Thread_local storage qualifier is supported */
#mesondefine HAVE_THREAD_LOCAL
/*
* Library check macros
*/
/* Define to 1 if you have GNU libidn. */
#mesondefine HAVE_IDN
/*
* Header check macros
*/
/* TODO: Properly check for the avformat header
*/
#define HAVE_LIBAVFORMAT_AVFORMAT_H 1
/* Define to 1 if you have the <execinfo.h> header file. */
#mesondefine HAVE_EXECINFO_H
/* Define to 1 if you have the <features.h> header file. */
#mesondefine HAVE_FEATURES_H
/* Define to 1 if you have the <getopt.h> header file. */
#mesondefine HAVE_GETOPT_H
/* Define to 1 if you have the <GL/wglew.h> header file. */
#mesondefine HAVE_GL_WGLEW_H
/* Define to 1 if you have the <linux/dccp.h> header file. */
#mesondefine HAVE_LINUX_DCCP_H
/* Define to 1 if you have the <linux/magic.h> header file. */
#mesondefine HAVE_LINUX_MAGIC_H
/* Define to 1 if you have the <netinet/tcp.h> header file. */
#mesondefine HAVE_NETINET_TCP_H
/* Define to 1 if you have the <netinet/udplite.h> header file. */
#mesondefine HAVE_NETINET_UDPLITE_H
/* Define to 1 if you have the <net/if.h> header file. */
#mesondefine HAVE_NET_IF_H
/* Define to 1 if you have the <pthread.h> header file. */
#mesondefine HAVE_PTHREAD_H
/* Define to 1 if your have the <arpa/inet.h> header file. */
#mesondefine HAVE_ARPA_INET_H
/* Define to 1 if your have the <poll.h> header file. */
#mesondefine HAVE_POLL_H
/* Define to 1 if you have the <search.h> header file. */
#mesondefine HAVE_SEARCH_H
/* Define to 1 if you have the <sys/eventfd.h> header file. */
#mesondefine HAVE_SYS_EVENTFD_H
/* Define to 1 if you have the <sys/mount.h> header file. */
#mesondefine HAVE_SYS_MOUNT_H
/* Define to 1 if you have the <sys/shm.h> header file. */
#mesondefine HAVE_SYS_SHM_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/soundcard.h> header file. */
#mesondefine HAVE_SYS_SOUNDCARD_H
/* Define to 1 if you have the <sys/uio.h> header file. */
#mesondefine HAVE_SYS_UIO_H
/* Define to 1 if you have the <threads.h> header file. */
#mesondefine HAVE_THREADS_H
/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
#mesondefine HAVE_VALGRIND_VALGRIND_H
/* Define to 1 if you have the <X11/Xlib.h> header file. */
#mesondefine HAVE_X11_XLIB_H
/* Define to 1 if you have the <xlocale.h> header file. */
#mesondefine HAVE_XLOCALE_H
/* Define to 1 if you have the <zlib.h> header file. */
#mesondefine HAVE_ZLIB_H
/* Define to 1 if you have the <wordexp.h> header file. */
#mesondefine HAVE_WORDEXP_H
/*
* Function check macros
*/
/* Define to 1 if you have the `accept4' function. */
#mesondefine HAVE_ACCEPT4
/* Define to 1 if you have the `aligned_alloc' function. */
#mesondefine HAVE_ALIGNED_ALLOC
/* Define to 1 if you have asprintf function */
#mesondefine HAVE_ASPRINTF
/* Define to 1 if you have the `atof' function. */
#mesondefine HAVE_ATOF
/* Define to 1 if you have the `atoll' function. */
#mesondefine HAVE_ATOLL
/* Define to 1 if you have the `qsort_r' function. */
#mesondefine HAVE_QSORT_R
/* Define to 1 if you have the `backtrace' function. */
#mesondefine HAVE_BACKTRACE
/* Define to 1 if you have the `dirfd' function. */
#mesondefine HAVE_DIRFD
/* Define to 1 if you have the `eventfd' function. */
#mesondefine HAVE_EVENTFD
/* Define to 1 if you have the `dup3' function. */
#mesondefine HAVE_DUP3
/* Define to 1 if you have the `fcntl' function. */
#mesondefine HAVE_FCNTL
/* Define to 1 if you have the `fdopendir' function. */
#mesondefine HAVE_FDOPENDIR
/* Define to 1 if you have the `flock' function. */
#mesondefine HAVE_FLOCK
/* Define to 1 if you have the `flockfile' function. */
#mesondefine HAVE_FLOCKFILE
/* Define to 1 if you have the `fork' function. */
#mesondefine HAVE_FORK
/* Define to 1 if you have the `fstatat' function. */
#mesondefine HAVE_FSTATAT
/* Define to 1 if you have the `fstatvfs' function. */
#mesondefine HAVE_FSTATVFS
/* Define to 1 if you have the `fsync' function. */
#mesondefine HAVE_FSYNC
/* Define to 1 if you have the `getdelim' function. */
#mesondefine HAVE_GETDELIM
/* Define to 1 if you have the `getenv' function. */
#mesondefine HAVE_GETENV
/* Define to 1 if you have the `getmntent_r' function. */
#mesondefine HAVE_GETMNTENT_R
/* Define to 1 if you have the `getpid' function. */
#mesondefine HAVE_GETPID
/* Define to 1 if you have the `getpwuid_r' function. */
#mesondefine HAVE_GETPWUID_R
/* Define if the GNU gettext() function is already present or preinstalled. */
#mesondefine HAVE_GETTEXT
/* Define to 1 if you have the `gettimeofday' function. */
#mesondefine HAVE_GETTIMEOFDAY
/* Define to 1 if you have the `gmtime_r' function */
#mesondefine HAVE_GMTIME_R
/* Define to 1 if you have the `iconv' function */
#mesondefine HAVE_ICONV
/* Define as const if the declaration of iconv() needs const. */
#mesondefine ICONV_CONST
/* Define to 1 if you have the `if_nameindex' function. */
#mesondefine HAVE_IF_NAMEINDEX
/* Define to 1 if you have the type `if_nameindex' struct */
#mesondefine HAVE_STRUCT_IF_NAMEINDEX
/* Define to 1 if you have the `if_nametoindex' function. */
#mesondefine HAVE_IF_NAMETOINDEX
/* Define to 1 if you have inet_pton function */
#mesondefine HAVE_INET_PTON
/* Define to 1 if you have inet_ntop function */
#mesondefine HAVE_INET_NTOP
/* Define to 1 if you have the `getauxval' function. */
#mesondefine HAVE_GETAUXVAL
/* Define to 1 if you have the `isatty' function. */
#mesondefine HAVE_ISATTY
/* Define to 1 if you have the `lfind' function. */
#mesondefine HAVE_LFIND
/* Define to 1 if you have the `lldiv' function. */
#mesondefine HAVE_LLDIV
/* Define to 1 if you have localtime_r function */
#mesondefine HAVE_LOCALTIME_R
/* Define to 1 if the system has the type `max_align_t'. */
#mesondefine HAVE_MAX_ALIGN_T
/* Define to 1 if you have the `memalign' function. */
#mesondefine HAVE_MEMALIGN
/* Define to 1 if you have the `memfd_create' function. */
#mesondefine HAVE_MEMFD_CREATE
/* Define to 1 if you have the `memrchr' function. */
#mesondefine HAVE_MEMRCHR
/* Define to 1 if you have the `mkostemp' function. */
#mesondefine HAVE_MKOSTEMP
/* Define to 1 if you have the `mmap' function. */
#mesondefine HAVE_MMAP
/* Define to 1 if you have the `nanf' function */
#mesondefine HAVE_NANF
/* Define to 1 if you have the `newlocale' function. */
#mesondefine HAVE_NEWLOCALE
/* Define to 1 if you have the `nrand48' function. */
#mesondefine HAVE_NRAND48
/* Define to 1 if you have the `open_memstream' function. */
#mesondefine HAVE_OPEN_MEMSTREAM
/* Define to 1 if you have the `pipe2' function. */
#mesondefine HAVE_PIPE2
/* Define to 1 if you have the `poll' function. */
#mesondefine HAVE_POLL
/* Define to 1 if you have the `posix_fadvise' function. */
#mesondefine HAVE_POSIX_FADVISE
/* Define to 1 if you have the `posix_memalign' function. */
#mesondefine HAVE_POSIX_MEMALIGN
/* TODO: Define to 1 if the system has the type
`PROCESS_MITIGATION_IMAGE_LOAD_POLICY'. */
#undef HAVE_PROCESS_MITIGATION_IMAGE_LOAD_POLICY
/* Define to 1 if you have the `readv' function. */
#mesondefine HAVE_READV
/* Define to 1 if you have realpath function */
#mesondefine HAVE_REALPATH
/* Define to 1 if you have the `recvmmsg' function. */
#mesondefine HAVE_RECVMMSG
/* Define to 1 if you have the `recvmsg' function. */
#mesondefine HAVE_RECVMSG
/* Define to 1 if you have the `rewind' function. */
#mesondefine HAVE_REWIND
/* Define to 1 if you have the `sched_getaffinity' function. */
#mesondefine HAVE_SCHED_GETAFFINITY
/* Define to 1 if you have the `sendmsg' function. */
#mesondefine HAVE_SENDMSG
/* Define to 1 if you have the `setenv' function. */
#mesondefine HAVE_SETENV
/* Define to 1 if you have the `setlocale' function. */
#mesondefine HAVE_SETLOCALE
/* Define to 1 if you have the sincos function. */
#mesondefine HAVE_SINCOS
/* Define to 1 if <assert.h> defines static_assert. */
#mesondefine HAVE_STATIC_ASSERT
/* Define to 1 if you have the `strcasecmp' function. */
#mesondefine HAVE_STRCASECMP
/* Define to 1 if you have the `strcasestr' function. */
#mesondefine HAVE_STRCASESTR
/* Define to 1 if you have the `strcoll' function */
#mesondefine HAVE_STRCOLL
/* Define to 1 if you have the `strdup' function. */
#mesondefine HAVE_STRDUP
/* Define to 1 if you have the `stricmp' function. */
#mesondefine HAVE_STRICMP
/* Define to 1 if you have the `strlcpy' function. */
#mesondefine HAVE_STRLCPY
/* Define to 1 if you have the `strndup' function. */
#mesondefine HAVE_STRNDUP
/* Define to 1 if you have the `strnlen' function. */
#mesondefine HAVE_STRNLEN
/* Define to 1 if you have the `strnstr' function. */
#mesondefine HAVE_STRNSTR
/* Define to 1 if you have the `strsep' function. */
#mesondefine HAVE_STRSEP
/* Define to 1 if you have the `strtof' function. */
#mesondefine HAVE_STRTOF
/* Define to 1 if you have the `strtok_r' function. */
#mesondefine HAVE_STRTOK_R
/* Define to 1 if you have the `strtoll' function. */
#mesondefine HAVE_STRTOLL
/* Define to 1 if the system has the type `struct pollfd'. */
#mesondefine HAVE_STRUCT_POLLFD
/* Define to 1 if the system has the type `struct timespec'. */
#mesondefine HAVE_STRUCT_TIMESPEC
/* Define to 1 if you have the `strverscmp' function. */
#mesondefine HAVE_STRVERSCMP
/* Define to 1 if you have the `swab' function. */
#mesondefine HAVE_SWAB
/* Define to 1 if you have the `tdestroy' function. */
#mesondefine HAVE_TDESTROY
/* Define to 1 if you have the `tfind' function. */
#mesondefine HAVE_TFIND
/* Define to 1 if you have the `timegm' function. */
#mesondefine HAVE_TIMEGM
/* Define to 1 if you have the `timespec_get' function. */
#mesondefine HAVE_TIMESPEC_GET
/* Define to 1 if you have the `uselocale' function. */
#mesondefine HAVE_USELOCALE
/* Define to 1 if you have vasprintf function */
#mesondefine HAVE_VASPRINTF
/* Define to 1 if you have the `vmsplice' function. */
#mesondefine HAVE_VMSPLICE
/* Define to 1 if you have the `wordexp' function. */
#mesondefine HAVE_WORDEXP
/* Define to 1 if you have the `writev' function. */
#mesondefine HAVE_WRITEV
/* Define to 1 if you have the `_lock_file' function. */
#mesondefine HAVE__LOCK_FILE
/* Defined to 1 if the qsort_r() prototype contradicts the upcoming POSIX
standard. */
#mesondefine HAVE_BROKEN_QSORT_R
/* Name of package */
#mesondefine PACKAGE
/* 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 version of this package. */
#mesondefine PACKAGE_VERSION
/* version development string */
#mesondefine PACKAGE_VERSION_DEV
/* version extra number */
#mesondefine PACKAGE_VERSION_EXTRA
/* version major number */
#mesondefine PACKAGE_VERSION_MAJOR
/* version minor number */
#mesondefine PACKAGE_VERSION_MINOR
/* version revision number */
#mesondefine PACKAGE_VERSION_REVISION
/* Version number of package */
#mesondefine VERSION
/* Simple version string */
#mesondefine VERSION_MESSAGE
/* compiler */
#mesondefine VLC_COMPILER
/* user who ran configure */
#mesondefine VLC_COMPILE_BY
/* host which ran configure */
#mesondefine VLC_COMPILE_HOST
/* TODO: Define to 1 if you want to build for Windows Store apps */
#undef VLC_WINSTORE_APP
/* Define to 1 if build machine is big endian */
#mesondefine WORDS_BIGENDIAN
/* Alias fdatasync() to fsync() if missing. */
#mesondefine fdatasync
/* Define to the equivalent of the C99 'restrict' keyword, or to
nothing if this is not supported. Do not define if restrict is
supported directly. */
#mesondefine restrict
/* Define if the compiler supports typeof. */
#mesondefine HAVE_CXX_TYPEOF
/* Define to `sockaddr' if <sys/socket.h> does not define. */
#mesondefine sockaddr_storage
/* Define to `sa_family' if <sys/socket.h> does not define. */
#mesondefine ss_family
/* Define to `int' if <sys/types.h> does not define. */
#mesondefine ssize_t
#include <vlc_fixups.h>
#if defined(_MSC_VER) && !defined(__clang__)
# pragma fenv_access(off)
# pragma fp_contract(on)
#elif defined(__GNUC__)
/* Not supported so far */
#else
# pragma STDC FENV_ACCESS OFF
# pragma STDC FP_CONTRACT ON
#endif

118
include/meson.build Normal file
View File

@ -0,0 +1,118 @@
# Install LibVLC headers
install_headers(
'vlc/vlc.h',
'vlc/libvlc.h',
'vlc/libvlc_dialog.h',
'vlc/libvlc_events.h',
'vlc/libvlc_media.h',
'vlc/libvlc_media_discoverer.h',
'vlc/libvlc_media_list.h',
'vlc/libvlc_media_list_player.h',
'vlc/libvlc_media_player.h',
'vlc/libvlc_picture.h',
'vlc/libvlc_renderer_discoverer.h',
'vlc/deprecated.h',
'vlc/libvlc_version.h',
subdir : 'vlc')
# Install VLC plugin headers
install_headers(
'vlc_access.h',
'vlc_actions.h',
'vlc_addons.h',
'vlc_aout.h',
'vlc_aout_volume.h',
'vlc_arrays.h',
'vlc_atomic.h',
'vlc_avcodec.h',
'vlc_bits.h',
'vlc_block.h',
'vlc_block_helper.h',
'vlc_boxes.h',
'vlc_charset.h',
'vlc_codec.h',
'vlc_codecs.h',
'vlc_common.h',
'vlc_config.h',
'vlc_config_cat.h',
'vlc_configuration.h',
'vlc_cpu.h',
'vlc_cxx_helpers.hpp',
'vlc_decoder.h',
'vlc_demux.h',
'vlc_dialog.h',
'vlc_epg.h',
'vlc_es.h',
'vlc_es_out.h',
'vlc_events.h',
'vlc_extensions.h',
'vlc_filter.h',
'vlc_fingerprinter.h',
'vlc_fixups.h',
'vlc_fourcc.h',
'vlc_fs.h',
'vlc_gcrypt.h',
'vlc_http.h',
'vlc_httpd.h',
'vlc_image.h',
'vlc_inhibit.h',
'vlc_input.h',
'vlc_input_item.h',
'vlc_interface.h',
'vlc_interrupt.h',
'vlc_intf_strings.h',
'vlc_iso_lang.h',
'vlc_keystore.h',
'vlc_list.h',
'vlc_hash.h',
'vlc_media_library.h',
'vlc_media_source.h',
'vlc_memstream.h',
'vlc_messages.h',
'vlc_meta.h',
'vlc_meta_fetcher.h',
'vlc_mime.h',
'vlc_modules.h',
'vlc_mouse.h',
'vlc_network.h',
'vlc_objects.h',
'vlc_opengl.h',
'vlc_pgpkey.h',
'vlc_picture.h',
'vlc_picture_fifo.h',
'vlc_picture_pool.h',
'vlc_player.h',
'vlc_playlist.h',
'vlc_playlist_export.h',
'vlc_plugin.h',
'vlc_probe.h',
'vlc_rand.h',
'vlc_renderer_discovery.h',
'vlc_services_discovery.h',
'vlc_sort.h',
'vlc_sout.h',
'vlc_spu.h',
'vlc_stream.h',
'vlc_stream_extractor.h',
'vlc_strings.h',
'vlc_subpicture.h',
'vlc_text_style.h',
'vlc_threads.h',
'vlc_thumbnailer.h',
'vlc_tick.h',
'vlc_timestamp_helper.h',
'vlc_tls.h',
'vlc_update.h',
'vlc_url.h',
'vlc_variables.h',
'vlc_vector.h',
'vlc_video_splitter.h',
'vlc_viewpoint.h',
'vlc_vlm.h',
'vlc_vout.h',
'vlc_vout_display.h',
'vlc_vout_osd.h',
'vlc_window.h',
'vlc_xlib.h',
'vlc_xml.h',
subdir : 'vlc/plugins')

27
lib/meson.build Normal file
View File

@ -0,0 +1,27 @@
libvlc_sources = [
'core.c',
'dialog.c',
'renderer_discoverer.c',
'error.c',
'log.c',
'playlist.c',
'video.c',
'audio.c',
'event.c',
'media.c',
'media_track.c',
'media_player.c',
'media_list.c',
'media_list_path.h',
'media_list_player.c',
'media_discoverer.c',
'picture.c'
]
libvlc = library('vlc',
libvlc_sources, rev_target,
include_directories: [vlc_include_dirs],
link_with: [vlc_libcompat],
dependencies: [libvlccore_dep, m_lib, threads_dep],
install: true
)

874
meson.build Normal file
View File

@ -0,0 +1,874 @@
project('VLC', ['c', 'cpp'],
version : '4.0.0-dev',
default_options : ['c_std=gnu11', 'cpp_std=c++14'],
meson_version : '>=0.60.0')
vlc_copyright_years = '1996-2018'
vlc_version_codename = 'Otto Chriek'
# LibVLC library (ABI) version
# Format must be major.minor.micro
libvlc_abi_version = '12.0.0'
libvlc_abi_version_parts = libvlc_abi_version.split('.')
libvlc_abi_version_major = libvlc_abi_version_parts[0].to_int()
libvlc_abi_version_minor = libvlc_abi_version_parts[1].to_int()
libvlc_abi_version_micro = libvlc_abi_version_parts[2].to_int()
vlc_version_full = meson.project_version()
vlc_version_parts = vlc_version_full.split('-')[0].split('.')
vlc_version_type = vlc_version_full.split('-').get(1, '')
if (vlc_version_parts.length() < 3 or vlc_version_parts.length() > 4)
error(f'Unexpected project version "@vlc_version_full@".',
'Expected a format of major.minor.revision[.extra][-dev]')
endif
vlc_version_major = vlc_version_parts[0].to_int()
vlc_version_minor = vlc_version_parts[1].to_int()
vlc_version_revision = vlc_version_parts[2].to_int()
vlc_version_extra = vlc_version_parts.get(3, '0').to_int()
# Short version (major.minor.revision)
vlc_version_short = f'@vlc_version_major@.@vlc_version_minor@.@vlc_version_revision@'
# Normal VLC version (major.minor.revision[-dev])
vlc_version = vlc_version_short + ((vlc_version_type != '') ? f'-@vlc_version_type@' : '')
vlc_package_name = meson.project_name().to_lower()
vlc_src_root = meson.current_source_dir()
vlc_build_root = meson.current_build_dir()
cdata = configuration_data()
vlc_include_dirs = include_directories('.', 'include')
gen_vlc_about = find_program('buildsystem/gen-vlc-about.py')
vlc_about = custom_target('vlc_about.h',
input: ['COPYING', 'THANKS', 'AUTHORS'],
output: ['vlc_about.h'],
command: [gen_vlc_about,
'@INPUT0@',
'@INPUT1@',
'@INPUT2@',
'@OUTPUT@'])
add_project_arguments('-DHAVE_CONFIG_H=1', language : ['c', 'cpp', 'objc'])
# If building with contribs, read the relevant paths from the machine file
# to use it during checks (check_header, find_library) later.
contrib_dir = meson.get_external_property('contrib_dir', '')
if contrib_dir != ''
message('Using contribs: ' + contrib_dir)
contrib_incdir = meson.get_external_property('contrib_incdir')
contrib_libdir = meson.get_external_property('contrib_libdir')
# TODO: Remove contrib_inc_args and use contrib_incdir directly
# once upstream solution to
# https://github.com/mesonbuild/meson/pull/1386#issuecomment-1353858080
# is found.
contrib_inc_args = [f'-I@contrib_incdir@']
# Contrib depdendency
# This should be used ONLY in cases where you can not otherwise
# form a proper dependency (by using a dependency() or find_library())
# to contribs. It will add the contrib include and library directory
# to the target it is used with.
contrib_dep = declare_dependency(
link_args: '-L' + contrib_libdir,
compile_args: contrib_inc_args)
else
contrib_incdir = []
contrib_libdir = []
contrib_inc_args = []
contrib_dep = dependency('', required: false)
endif
cc = meson.get_compiler('c')
cpp = meson.get_compiler('cpp')
host_system = host_machine.system()
if host_system == 'darwin'
add_languages('objc', native: false)
add_project_arguments('-mmacosx-version-min=10.11',
language: ['c', 'cpp', 'objc'])
add_project_link_arguments('-mmacosx-version-min=10.11',
language: ['c', 'cpp', 'objc'])
endif
#
# General feature defines
#
vlc_conf_prefix = ''
feature_defines = [
['_GNU_SOURCE', 1], # Enable GNU extensions on systems that have them
]
foreach d : feature_defines
cdata.set(d.get(0), d.get(1))
vlc_conf_prefix = vlc_conf_prefix + '#define @0@ @1@\n'.format(d.get(0), d.get(1))
endforeach
#
# SIMD support
#
subdir('buildsystem/simd_checks')
#
# Check for global dependencies
# These are dependencies needed by libvlc or
# libvlccore and by some modules too.
#
# ATTENTION: Take care to follow the naming convetions:
# - Libraries found with find_lirary() must be named `name_lib`
# - Libraries (or Frameworks) found with dependency() must be
# named `name_dep`
#
# zlib library
z_lib = cc.find_library('z', required: false)
# Math library
m_lib = cc.find_library('m', required: false)
# Dynamic library loading library
dl_lib = cc.find_library('dl', required: false)
# iconv library
iconv_dep = dependency('iconv', required: false)
iconv_const_test = '''
#include <stddef.h>
#include <iconv.h>
_Static_assert(_Generic((iconv),
size_t (*)(iconv_t, const char **, size_t *, char **, size_t *) : 1, default: 0),
"Const prototype not matched");
'''
if iconv_dep.found()
cdata.set('HAVE_ICONV', 1)
# Check if iconv() prototype uses const
if cc.compiles(iconv_const_test, name: 'Test iconv() for const-using prototype')
cdata.set('ICONV_CONST', 'const')
else
cdata.set('ICONV_CONST', '')
endif
endif
if host_system == 'darwin'
corefoundation_dep = dependency('CoreFoundation', required: true)
foundation_dep = dependency('Foundation', required: true)
else
corefoundation_dep = []
foundation_dep = []
endif
# Gettext
intl_dep = dependency('intl', required: get_option('nls'))
if intl_dep.found()
cdata.set('HAVE_GETTEXT', 1)
cdata.set('ENABLE_NLS', 1)
endif
# Domain name i18n support via GNU libidn
idn_dep = dependency('libidn', required: false)
if idn_dep.found()
cdata.set('HAVE_IDN', 1)
endif
# Threads
threads_dep = dependency('threads', required: true)
# Check for X11
if (get_option('x11')
.disable_auto_if(host_system in ['darwin', 'windows'])
.allowed())
x11_dep = dependency('x11', required: get_option('x11'))
if not x11_dep.found()
cdata.set('X_DISPLAY_MISSING', 1)
endif
else
x11_dep = disabler()
cdata.set('X_DISPLAY_MISSING', 1)
endif
#
# Check for headers
#
check_headers = [
['arpa/inet.h'],
['threads.h'],
['netinet/tcp.h'],
['search.h'],
['sys/uio.h'],
['sys/socket.h'],
['net/if.h'],
['execinfo.h'],
['features.h'],
['getopt.h'],
['linux/dccp.h'],
['linux/magic.h'],
['netinet/udplite.h'],
['pthread.h'],
['poll.h'],
['sys/eventfd.h'],
['sys/mount.h'],
['sys/shm.h'],
['sys/socket.h'],
['sys/soundcard.h'],
['sys/uio.h'],
['valgrind/valgrind.h'],
['X11/Xlib.h'],
['xlocale.h'],
['zlib.h'],
['dcomp.h'],
['wordexp.h'],
['GL/wglew.h',
{ 'prefix': ['#include <windows.h>', '#include <GL/glew.h>'],
'args' : [contrib_inc_args] }],
]
foreach header : check_headers
header_kwargs = header.get(1, {})
# TODO: Once we require meson 1.0, drop the array join here
# See: https://github.com/mesonbuild/meson/pull/11099
if cc.check_header(header[0],
prefix: '\n'.join(header_kwargs.get('prefix', [])),
args: header_kwargs.get('args', []))
cdata.set('HAVE_' + header[0].underscorify().to_upper(), 1)
endif
endforeach
#
# Darwin specific checks
#
if host_system == 'darwin'
# Check if compiling for iOS
have_ios = cc.get_define('TARGET_OS_IPHONE',
prefix : '#include <TargetConditionals.h>') == '1'
# Check if compiling for tvOS
have_tvos = cc.get_define('TARGET_OS_TV',
prefix : '#include <TargetConditionals.h>') == '1'
# If none of the above, assume compiling for macOS
have_osx = not have_ios and not have_tvos
else
have_ios = false
have_tvos = false
have_osx = false
endif
#
# Windows and MinGW checks
#
have_mingw = false
mingw_libs = []
if host_system == 'windows'
# Defines needed for Windows
windows_defines = [
['UNICODE', 1], # Define to 1 for Unicode (Wide Chars) APIs
['_WIN32_WINNT', '0x0601'], # Define for Windows 7 APIs
]
foreach d : windows_defines
cdata.set(d.get(0), d.get(1))
vlc_conf_prefix = vlc_conf_prefix + '#define @0@ @1@\n'.format(d.get(0), d.get(1))
endforeach
mingw_check = '''
#ifndef __MINGW32__
# error Not compiling with mingw
#endif
'''
# Check if MinGW is used at all
if cc.compiles(mingw_check)
# Check which kind of MinGW
mingw_version_major = cc.get_define('__MINGW64_VERSION_MAJOR',
prefix : '#include <_mingw.h>')
if mingw_version_major == ''
error('Cannot compile with MinGW, use MinGW-w64 >= 5.0 instead.')
endif
# Check that MinGW w64 is at least 5.0
if mingw_version_major.to_int() < 5
error('MinGW-w64 5.0 or higher required!')
endif
have_mingw = true
mingw_version_minor = cc.get_define('__MINGW64_VERSION_MINOR',
prefix : '#include <_mingw.h>')
mingw_version = '@0@.@1@'.format(mingw_version_major, mingw_version_minor)
message('Using MinGW-w64 ' + mingw_version)
# Defines needed for MinGW
mingw_defines = [
['__USE_MINGW_ANSI_STDIO', 1], # Define to force use of MinGW printf
['_ISOC99_SOURCE', 1], # Extensions to ISO C89 from ISO C99
['_ISOC11_SOURCE', 1], # Extensions to ISO C99 from ISO C11
['_POSIX_SOURCE', 1], # IEEE Std 1003.1
['_POSIX_C_SOURCE', '200809L'], #IEEE Std 1003.1
['_XOPEN_SOURCE', 700], # POSIX and XPG 7th edition
['_XOPEN_SOURCE_EXTENDED', 1], # XPG things and X/Open Unix extensions
['_BSD_SOURCE', 1], # ISO C, POSIX, and 4.3BSD things
['_SVID_SOURCE', 1], # ISO C, POSIX, and SVID things
]
foreach d : mingw_defines
cdata.set(d.get(0), d.get(1))
vlc_conf_prefix = vlc_conf_prefix + '#define @0@ @1@\n'.format(d.get(0), d.get(1))
endforeach
# Check for the need to link to the mingwex lib for MinGW-w64 32bit
mingwex_lib = cc.find_library('mingwex', required : false)
if mingwex_lib.found() and not cc.find_library('mingw32', required: false).found()
mingw_libs += mingwex_lib
endif
# Check for fnative-struct or mms-bitfields support for MinGW
if cc.has_argument('-mms-bitfields')
add_project_arguments('-mms-bitfields',
language : ['c', 'cpp'])
# Check for the warning flag without "-Wno-", GCC accepts
# -Wno-<anything> for unsupported warnings, which can trigger
# other warnings instead.
if cc.has_argument('-Wincompatible-ms-struct')
add_project_arguments('-Wno-incompatible-ms-struct',
language : ['c', 'cpp'])
endif
elif cc.has_argument('-fnative-struct')
add_project_arguments('-fnative-struct',
language : ['c', 'cpp'])
endif
# DEP, ASLR, NO SEH
add_project_link_arguments('-Wl,--nxcompat', '-Wl,--no-seh', '-Wl,--dynamicbase',
language: ['c', 'cpp'])
endif
endif
#
# Check if other libs are needed
#
rt_lib = []
possible_rt_libs = ['rt', 'pthread']
foreach l : possible_rt_libs
possible_rt_lib_lib = cc.find_library(l, required: false)
if possible_rt_lib_lib.found() and \
cc.has_function('clock_nanosleep', dependencies: possible_rt_lib_lib)
rt_lib = possible_rt_lib_lib
break
endif
endforeach
#
# Socket library checks
#
# Check for socket library
socket_libs = cc.find_library('socket', required: false)
# Check for function 'connect' (optionally link with socket lib if it exists)
if not cc.has_function('connect', prefix: vlc_conf_prefix + '#include <sys/socket.h>', dependencies: socket_libs)
if host_system == 'windows'
# If not found and on windows:
socket_libs = []
socket_libs += cc.find_library('iphlpapi', required: true)
socket_libs += cc.find_library('ws2_32', required: true)
endif
endif
# Define some strings for the function check since the required headers
# will differ based on the platform we're building for
if host_system == 'windows'
arpa_inet_h = '#include <ws2tcpip.h>\n#include <windows.h>'
net_if_h = '#include <iphlpapi.h>'
else
arpa_inet_h = '#include <arpa/inet.h>'
net_if_h = '#include <net.if.h>'
endif
#
# Check for functions
# Entry format: [function, prefix]
# General functions
check_functions = [
['accept4', '#include <sys/socket.h>'],
['dup3', '#include <unistd.h>'],
['qsort_r', '#include <stdlib.h>'],
['fcntl', '#include <fcntl.h>'],
['flock', '#include <sys/file.h>'],
['fstatvfs', '#include <sys/statvfs.h>'],
['fstatat', '#include <sys/stat.h>'],
['fork', '#include <unistd.h>'],
['getmntent_r', '#include <mntent.h>'],
['getpwuid_r', '#include <pwd.h>'],
['isatty', '#include <unistd.h>'],
['memalign', '#include <malloc.h>'],
['mkostemp', '#include <unistd.h>'],
['mkostemp', '#include <stdlib.h>'],
['mmap', '#include <sys/mman.h>'],
['open_memstream', '#include <stdio.h>'],
['pipe2', '#include <unistd.h>'],
['posix_fadvise', '#include <fcntl.h>'],
['stricmp', '#include <string.h>'],
['strcoll', '#include <string.h>'],
['wordexp', '#include <wordexp.h>'],
['uselocale', '#include <locale.h>'],
['uselocale', '#include <xlocale.h>'],
['newlocale', '#include <locale.h>'],
['newlocale', '#include <xlocale.h>'],
['setlocale', '#include <locale.h>'],
['getenv', '#include <stdlib.h>'],
['if_nametoindex', net_if_h],
['if_nameindex', net_if_h],
['backtrace', '#include <execinfo.h>'],
['_lock_file', '#include <stdio.h>'],
]
# Linux specific functions
if host_system == 'linux'
check_functions += [
['eventfd', '#include <sys/eventfd.h>'],
['vmsplice', '#include <fcntl.h>'],
['sched_getaffinity', '#include <sched.h>'],
['recvmmsg', '#include <sys/socket.h>'],
['memfd_create', '#include <sys/mman.h>'],
]
endif
# Windows specific functions
if host_system == 'windows'
check_functions += [
['_lock_file', '#include <windows.h>'],
]
endif
foreach f : check_functions
# DO NOT SIMPLIFY this if away by moving the the has_function
# into the cdata.set! There are some functions checked twice
# in different headers, if one is found with one header and
# then not found using the other header, it would overwrite
# the previous value!
if cc.has_function(f[0], prefix : vlc_conf_prefix + f[1], dependencies: [socket_libs])
cdata.set('HAVE_' + f[0].underscorify().to_upper(), 1)
endif
endforeach
# Libcompat functions (if missing, provided in compat)
# Entry format: [function, prefix]
libcompat_functions = [
['aligned_alloc', '#include <stdlib.h>'],
['atof', '#include <stdlib.h>'],
['atoll', '#include <stdlib.h>'],
['dirfd', '#include <dirent.h>'],
['fdopendir', '#include <dirent.h>'],
['flockfile', '#include <stdio.h>'],
['fsync', '#include <unistd.h>'],
['getdelim', '#include <stdio.h>'],
['getpid', '#include <unistd.h>'],
['lfind', '#include <search.h>'],
['lldiv', '#include <stdlib.h>'],
['memrchr', '#include <string.h>'],
['nrand48', '#include <stdlib.h>'],
['poll', '#include <poll.h>'],
['posix_memalign', '#include <stdlib.h>'],
['readv', '#include <sys/uio.h>'],
['recvmsg', '#include <sys/socket.h>'],
['rewind', '#include <stdio.h>'],
['sendmsg', '#include <sys/socket.h>'],
['setenv', '#include <stdlib.h>'],
['strcasecmp', '#include <strings.h>'],
['strcasestr', '#include <string.h>'],
['strdup', '#include <string.h>'],
['strlcpy', '#include <string.h>'],
['strndup', '#include <string.h>'],
['strnlen', '#include <string.h>'],
['strnstr', '#include <string.h>'],
['strsep', '#include <string.h>'],
['strtof', '#include <stdlib.h>'],
['strtok_r', '#include <string.h>'],
['strtoll', '#include <stdlib.h>'],
['swab', '#include <unistd.h>'],
['tdestroy', '#include <search.h>'],
['tfind', '#include <search.h>'],
['timegm', '#include <time.h>'],
['timespec_get', '#include <time.h>'],
['strverscmp', '#include <string.h>'],
['writev', '#include <sys/uio.h>'],
['gettimeofday', '#include <sys/time.h>'],
['clock_gettime', '#include <time.h>'],
['clock_nanosleep', '#include <time.h>'],
['clock_getres', '#include <time.h>'],
['inet_pton', arpa_inet_h],
['inet_ntop', arpa_inet_h],
]
# Linux specific functions
if host_system == 'linux'
libcompat_functions += [
['getauxval', '#include <sys/auxv.h>'],
]
endif
libcompat_sources = []
# Check all functions in libcompat_functions array
foreach f : libcompat_functions
if cc.has_function(f[0], prefix : vlc_conf_prefix + f[1], dependencies: [rt_lib, socket_libs])
cdata.set('HAVE_' + f[0].underscorify().to_upper(), 1)
else
libcompat_sources += f[0] + '.c'
endif
endforeach
# These functions need to be checked with has_header_symbol as
# MinGW-w64 implements those as static inline, not functions with C linkage
libcompat_functions = [
['gmtime_r', 'time.h'],
['realpath', 'stdlib.h'],
['asprintf', 'stdio.h'],
['vasprintf', 'stdio.h'],
['localtime_r', 'time.h'],
]
foreach f : libcompat_functions
if cc.has_header_symbol(f[1], f[0], prefix : vlc_conf_prefix)
cdata.set('HAVE_' + f[0].underscorify().to_upper(), 1)
else
libcompat_sources += f[0] + '.c'
endif
endforeach
# Check for function 'nanf' (optionally link with libm if it exists)
if cc.has_function('nanf', prefix: vlc_conf_prefix + '#include <math.h>', dependencies: m_lib)
cdata.set('HAVE_NANF', 1)
endif
# Check for function 'sincos' (optionally link with libm if it exists)
if cc.has_function('sincos', prefix: vlc_conf_prefix + '#include <math.h>', dependencies: m_lib)
cdata.set('HAVE_SINCOS', 1)
else
libcompat_sources += 'sincos.c'
endif
# Check for function 'fdatasync' (define it to 'fsync' if missing)
if not cc.has_function('fdatasync', prefix: vlc_conf_prefix + '#include <unistd.h>')
cdata.set('fdatasync', 'fsync')
endif
#
# Additional checks
#
# Check which kind of restrict keyword is supported
# Program based on autoconf c.m4
#
# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# Written by David MacKenzie, with help from
# Akim Demaille, Paul Eggert,
# Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
# Roland McGrath, Noah Friedman, david d zuhn, and many others.
restrict_test = '''
#define restrict_kw @0@
typedef int * int_ptr;
int foo (int_ptr restrict_kw ip) { return ip[0]; }
int main() {
int s[1];
int * restrict_kw t = s;
t[0] = 0;
return foo(t);
}
'''
# Order is the same as in AC_C_RESTRICT
# Check for __restrict support
if cc.compiles(restrict_test.format('__restrict'), name: 'Test __restrict support')
cdata.set('restrict', '__restrict')
# Check for __restrict__ support
elif cc.compiles(restrict_test.format('__restrict__'), name: 'Test __restrict__ support')
cdata.set('restrict', '__restrict__')
# Check for _Restrict support
elif cc.compiles(restrict_test.format('_Restrict'), name: 'Test _Restrict support')
cdata.set('restrict', '_Restrict')
# Check for restrict support
elif not cc.compiles(restrict_test.format('restrict'), name: 'Test restrict support')
cdata.set('restrict', '')
endif
# Check for C++ typeof support
if cpp.compiles('int a; typeof(a) foo[1];', name: 'Test C++ typeof support')
cdata.set('HAVE_CXX_TYPEOF', 1)
endif
# Check for __attribute__((packed)) support
if cc.compiles('struct __attribute__((packed)) foo { int bar; };',
name : '__attribute__((packed))')
cdata.set('HAVE_ATTRIBUTE_PACKED', 1)
endif
# Check for C11 _Thread_local storage qualifier support
if cc.compiles('_Thread_local int foo = 0;', name: 'Test _Thread_local support')
cdata.set('HAVE_THREAD_LOCAL', 1)
endif
# Check for wrong (non-POSIX) qsort_r prototype
qsort_r_test = '''
#define _GNU_SOURCE
#include <stdlib.h>
_Static_assert(_Generic((qsort_r),
void (*)(void *, size_t, size_t, void *,
int (*)(void *, const void *, const void *)) : 1, default: 0),
"Bad prototype not matched");
'''
if cc.compiles(qsort_r_test, name: 'Test qsort_r non-POSIX prototype')
cdata.set('HAVE_BROKEN_QSORT_R', 1)
endif
# Check for max_align_t type
if cc.has_type('max_align_t', prefix: '#include <stddef.h>')
cdata.set('HAVE_MAX_ALIGN_T', 1)
endif
# Check for struct timespec
if cc.has_type('struct timespec', prefix: '#include <time.h>')
cdata.set('HAVE_STRUCT_TIMESPEC', 1)
endif
# Add -fvisibility=hidden if compiler supports those
add_project_arguments(
cc.get_supported_arguments('-fvisibility=hidden'),
language : ['c'])
# Check for struct sockaddr_storage type
# Define it to `sockaddr` if missing
have_sockaddr_storage = cc.has_type('struct sockaddr_storage', prefix: '#include <sys/socket.h>')
if not have_sockaddr_storage
have_sockaddr_storage = cc.has_type('struct sockaddr_storage', prefix: '#include <winsock2.h>')
endif
if not have_sockaddr_storage
cdata.set('sockaddr_storage', 'sockaddr')
endif
# Check for struct ss_family type
# Define it to `sa_family` if missing
if not cc.has_type('struct ss_family', prefix: '#include <sys/socket.h>')
cdata.set('ss_family', 'sa_family')
endif
# Check for ssize_t type
# Define it to `int` if missing
if not cc.has_type('ssize_t', prefix: '#include <sys/types.h>')
cdata.set('ssize_t', 'int')
endif
# Check for struct pollfd type
# TODO: Refactor once updating to meson 1.0.0
# which supports prefix arrays.
pollfd_prefix = '#include <sys/types.h>\n'
if cdata.get('HAVE_POLL', 0) == 1
pollfd_prefix += '#include <poll.h>'
elif host_system == 'windows'
pollfd_prefix += '#include <winsock2.h>'
endif
if cc.has_type('struct pollfd', prefix: '\n'.join([vlc_conf_prefix, pollfd_prefix]))
cdata.set('HAVE_STRUCT_POLLFD', 1)
endif
# Check for if_nameindex function and struct
if cc.has_function('if_nameindex', prefix : '#include <net/if.h>')
cdata.set('HAVE_IF_NAMEINDEX', 1)
endif
if cc.has_type('struct if_nameindex', prefix : '#include <net/if.h>')
cdata.set('HAVE_STRUCT_IF_NAMEINDEX', 1)
endif
# Check for locale_t type in C++ locale header
if cpp.has_type('locale_t', prefix : '#include <locale>')
cdata.set('HAVE_CXX_LOCALE_T', 1)
endif
# Check if assert.h has static_assert
if cc.has_header_symbol('assert.h', 'static_assert')
cdata.set('HAVE_STATIC_ASSERT', 1)
endif
# Check if build machine is big endian
if build_machine.endian() == 'big'
cdata.set('WORDS_BIGENDIAN', 1)
endif
# Define the shared library extension
if host_system == 'windows'
cdata.set_quoted('LIBEXT', '.dll')
elif host_system == 'darwin'
cdata.set_quoted('LIBEXT', '.dylib')
else
cdata.set_quoted('LIBEXT', '.so')
endif
#
# Populate config.h with additional infos
#
cdata.set_quoted('VERSION', vlc_version)
cdata.set_quoted('PACKAGE_VERSION', vlc_version)
cdata.set_quoted('VERSION_MESSAGE', f'@vlc_version@ @vlc_version_codename@')
cdata.set('VERSION_MAJOR', vlc_version_major)
cdata.set('VERSION_MINOR', vlc_version_minor)
cdata.set('VERSION_REVISION', vlc_version_revision)
cdata.set('VERSION_EXTRA', vlc_version_extra)
cdata.set('PACKAGE_VERSION_MAJOR', vlc_version_major)
cdata.set('PACKAGE_VERSION_MINOR', vlc_version_minor)
cdata.set('PACKAGE_VERSION_REVISION', vlc_version_revision)
cdata.set('PACKAGE_VERSION_EXTRA', vlc_version_extra)
cdata.set('PACKAGE_VERSION_DEV', vlc_version_type)
cdata.set('LIBVLC_ABI_MAJOR', libvlc_abi_version_major)
cdata.set('LIBVLC_ABI_MINOR', libvlc_abi_version_minor)
cdata.set('LIBVLC_ABI_MICRO', libvlc_abi_version_micro)
cdata.set_quoted('PACKAGE', vlc_package_name)
cdata.set_quoted('PACKAGE_NAME', vlc_package_name)
cdata.set_quoted('PACKAGE_STRING', f'@vlc_package_name@ @vlc_version@')
cdata.set_quoted('COPYRIGHT_YEARS', vlc_copyright_years)
cdata.set_quoted('COPYRIGHT_MESSAGE', f'Copyright © @vlc_copyright_years@ the VideoLAN team')
# Compiler and build system info
cdata.set_quoted('VLC_COMPILER', cc.get_id() + ' ' + cc.version())
cdata.set_quoted('VLC_COMPILE_BY', '[not implemented with meson]') # TODO
cdata.set_quoted('VLC_COMPILE_HOST', '[not implemented with meson]') # TODO
cdata.set_quoted('CONFIGURE_LINE', '[not implemented with meson]') # TODO
# Paths
prefix_path = get_option('prefix')
vlc_pkg_suffix = meson.project_name().to_lower()
libdir_path = prefix_path / get_option('libdir')
pkglibdir_path = libdir_path / vlc_pkg_suffix
libexecdir_path = prefix_path / get_option('libexecdir')
pkglibexecdir_path = libexecdir_path / vlc_pkg_suffix
sysdatadir_path = prefix_path / get_option('datadir')
pkgdatadir_path = sysdatadir_path / vlc_pkg_suffix
localedir_path = prefix_path / get_option('localedir')
cdata.set_quoted('LIBDIR', libdir_path)
cdata.set_quoted('PKGLIBDIR', pkglibdir_path)
cdata.set_quoted('LIBEXECDIR', libexecdir_path)
cdata.set_quoted('PKGLIBEXECDIR', pkglibexecdir_path)
cdata.set_quoted('SYSDATADIR', sysdatadir_path)
cdata.set_quoted('PKGDATADIR', pkgdatadir_path)
cdata.set_quoted('LOCALEDIR', localedir_path)
# Enable stream outputs
cdata.set('ENABLE_SOUT', get_option('stream_outputs'))
# Enable VLM
if get_option('videolan_manager')
if not get_option('stream_outputs')
error('The VideoLAN manager requires stream outputs.')
endif
cdata.set('ENABLE_VLM', 1)
endif
# Allow running as root
# (useful for people running on embedded platforms)
cdata.set('ALLOW_RUN_AS_ROOT', get_option('run_as_root'))
# Optimize for memory usage vs speed
cdata.set('OPTIMIZE_MEMORY', get_option('optimize_memory'))
# Allow binary package maintainer to pass a custom string
# to avoid cache problem
if get_option('binary_version') != ''
cdata.set_quoted('DISTRO_VERSION', get_option('binary_version'))
endif
# Font options
if get_option('default_font_path') != ''
cdata.set_quoted('DEFAULT_FONT_FILE', get_option('default_font_path'))
endif
if get_option('default_monospace_font_path') != ''
cdata.set_quoted('DEFAULT_MONOSPACE_FONT_FILE', get_option('default_monospace_font_path'))
endif
if get_option('default_font_family') != ''
cdata.set_quoted('DEFAULT_FAMILY', get_option('default_font_family'))
endif
if get_option('default_monospace_font_family') != ''
cdata.set_quoted('DEFAULT_MONOSPACE_FAMILY', get_option('default_monospace_font_family'))
endif
# Generate config.h
configure_file(input: 'config.h.meson',
output: 'config.h',
configuration: cdata)
# Some missing functions are implemented in compat
subdir('compat')
# Headers
subdir('include')
# libvlccore
subdir('src')
# LibVLC
subdir('lib')
# VLC binaries
subdir('bin')
# VLC plugins
subdir('modules')
warning('''
The Meson build system of VLC is currently EXPERIMENTAL and INCOMPLETE.
Testing and reporting or contributing missing plugins and features is welcome!
''')

612
meson_options.txt Normal file
View File

@ -0,0 +1,612 @@
# General options
option('nls',
type : 'feature',
value : 'auto',
description : 'Native Language Support')
option('optimize_memory',
type : 'boolean',
value : false,
description : 'Optimize memory usage over performance')
option('binary_version',
type : 'string',
value : '',
description : 'To avoid plugins cache problem between binary version')
option('stream_outputs',
type : 'boolean',
value : true,
description : 'Build the VLC stream output modules')
option('videolan_manager',
type : 'boolean',
value : true,
description : 'Build the VideoLAN manager')
option('addon_manager',
type : 'boolean',
value : true,
description : 'Build the VLC add-on manager modules')
option('run_as_root',
type : 'boolean',
value : false,
description : 'Allow running VLC as root')
# TODO: Missing pdb option, this should probably be solved in meson itself
# TODO: Missing ssp option
# TODO: Missing sse option
# TODO: Missing avx option
# TODO: Missing neon option
# TODO: Missing sve option
# TODO: Missing branch_protection option
# TODO: Missing altivec option
# TODO: Missing vlc option
# TODO: Missing update-check option
# Font options
option('default_font_path',
type : 'string',
value : '',
description : 'Path to the default font')
option('default_monospace_font_path',
type : 'string',
value : '',
description : 'Path to the default monospace font')
option('default_font_family',
type : 'string',
value : '',
description : 'Name of the default font family')
option('default_monospace_font_family',
type : 'string',
value : '',
description : 'Name of the default monospace font family')
# Module options
option('vcd_module',
type : 'boolean',
value : true,
description : 'Built-in VCD and CD-DA support')
option('css_engine',
type : 'feature',
value : 'auto',
description : 'CSS selector engine for WebVTT')
# Dependency options
option('qt',
type : 'feature',
value : 'auto',
description : 'Enable/disable Qt support')
option('dbus',
type : 'feature',
value : 'auto',
description : 'Enable/disable D-Bus message bus support')
option('wayland',
type : 'feature',
value : 'auto',
description : 'Enable/disable wayland support')
option('x11',
type : 'feature',
value : 'auto',
description : 'X11 support')
option('xcb',
type : 'feature',
value : 'auto',
description : 'Enable/disable X11 support with XCB')
option('avcodec',
type : 'feature',
value : 'enabled',
description : 'Enable/disable avcodec support')
option('libva',
type: 'feature',
value: 'auto',
description: 'VAAPI GPU decoding support (libVA)')
option('omxil',
type: 'boolean',
value: false,
description: 'Enable/disable OpenMAX IL codec')
option('avformat',
type : 'feature',
value : 'enabled',
description : 'Enable/disable avformat support')
option('alsa',
type : 'feature',
value : 'auto',
description : 'Enable/disable ALSA support')
option('pulse',
type : 'feature',
value : 'auto',
description : 'Enable/disable Pulseaudio support')
option('oss',
type: 'feature',
value: 'auto',
description: 'Enable/disable OSS support (default-enabled on BSD)')
option('ogg',
type : 'feature',
value : 'auto',
description : 'Enable/disable libogg support')
option('dca',
type : 'feature',
value : 'auto',
description : 'Enable/disable libdca support')
option('mpg123',
type : 'feature',
value : 'auto',
description : 'Enable/disable libmpg123 support')
option('mpeg2',
type : 'feature',
value : 'auto',
description : 'Enable/disable libmpeg2 support')
option('schroedinger',
type : 'feature',
value : 'auto',
description : 'Enable/disable schroedinger support')
option('rsvg',
type : 'feature',
value : 'auto',
description : 'Enable/disable librsvg support')
option('cairo',
type : 'feature',
value : 'auto',
description : 'Enable/disable libcairo support')
option('freetype',
type : 'feature',
value : 'auto',
description : 'Font rasterization support with freetype')
option('flac',
type : 'feature',
value : 'auto',
description : 'Enable/disable libflac support')
option('opus',
type : 'feature',
value : 'auto',
description : 'Enable/disable libopus support')
option('theoraenc',
type : 'feature',
value : 'auto',
description : 'Enable/disable theoraenc support')
option('theoradec',
type : 'feature',
value : 'auto',
description : 'Enable/disable theoradec support')
option('daaladec',
type : 'feature',
value : 'auto',
description : 'Enable/disable daaladec support')
option('daalaenc',
type : 'feature',
value : 'auto',
description : 'Enable/disable daalaenc support')
option('vorbis',
type : 'feature',
value : 'auto',
description : 'Enable/disable vorbis support')
option('x265',
type : 'feature',
value : 'auto',
description : 'Enable/disable libx265 support')
option('x264',
type : 'feature',
value : 'auto',
description : 'Enable/disable libx264 support')
option('x262',
type : 'feature',
value : 'auto',
description : 'Enable/disable libx262 support')
option('fdk-aac',
type : 'feature',
value : 'auto',
description : 'Enable/disable fdk-aac support')
option('vpx',
type : 'feature',
value : 'auto',
description : 'libvpx VP8/VP9 encoder and decoder')
option('shine',
type : 'feature',
value : 'auto',
description : 'Enable/disable shine support')
option('aom',
type : 'feature',
value : 'auto',
description : 'libaom AV1 decoder support')
option('rav1e',
type: 'feature',
value: 'auto',
description: 'rav1e AV1 encoder support')
option('dav1d',
type : 'feature',
value : 'auto',
description : 'libdav1d AV1 decoder support')
option('twolame',
type : 'feature',
value : 'auto',
description : 'Enable/disable twolame support')
option('mfx',
type : 'feature',
value : 'auto',
description : 'Enable/disable libmfx support')
option('spatialaudio',
type : 'feature',
value : 'auto',
description : 'Enable/disable libspatialaudio support')
option('samplerate',
type : 'feature',
value : 'auto',
description : 'Enable/disable libsamplerate support')
option('soxr',
type : 'feature',
value : 'auto',
description : 'Enable/disable soxr support')
option('speexdsp',
type : 'feature',
value : 'auto',
description : 'Enable/disable speexdsp support')
option('caca',
type : 'feature',
value : 'auto',
description : 'Enable/disable caca support')
option('drm',
type : 'feature',
value : 'auto',
description : 'Enable/disable libdrm support')
option('goom2',
type : 'feature',
value : 'auto',
description : 'Enable/disable goom2 visualization plugin')
option('avahi',
type : 'feature',
value : 'auto',
description : 'Enable/disable zeroconf (avahi) services discovery plugin')
option('upnp',
type : 'feature',
value : 'auto',
description : 'Enable/disable UPnP plugin (Intel SDK)')
option('libxml2',
type : 'feature',
value : 'auto',
description : 'Enable/disable XML support')
option('medialibrary',
type : 'feature',
value : 'auto',
description : 'Enable/disable medialibrary support')
option('a52',
type : 'feature',
value : 'auto',
description : 'Enable/disable a52 support')
option('faad',
type : 'feature',
value : 'auto',
description : 'Enable/disable faad support')
option('fluidsynth',
type : 'feature',
value : 'auto',
description : 'Enable/disable fluidsynth/fluidlite support')
option('microdns',
type : 'feature',
value : 'auto',
description : 'Enable/disable microdns support')
option('gnutls',
type : 'feature',
value : 'auto',
description : 'Enable/disable GnuTLS support')
option('libsecret',
type : 'feature',
value : 'auto',
description : 'Enable/disable libsecret support')
option('matroska',
type : 'feature',
value : 'auto',
description : 'Enable/disable matroska (MKV) support')
option('libdvbpsi',
type : 'feature',
value : 'auto',
description : 'Enable/disable libdvbpsi support')
option('aribb24',
type : 'feature',
value : 'auto',
description : 'Enable/disable aribb24 support')
option('libmodplug',
type : 'feature',
value : 'auto',
description : 'Enable/disable libmodplug support')
option('taglib',
type : 'feature',
value : 'auto',
description : 'Enable/disable taglib support')
option('libcddb',
type : 'feature',
value : 'auto',
description : 'Enable/disable libcddb support')
option('libass',
type : 'feature',
value : 'auto',
description : 'ASS/SSA subtitle support using libass')
option('libchromaprint',
type : 'feature',
value : 'auto',
description : 'Audio fingerprinting support using chromaprint')
option('mad',
type : 'feature',
value : 'auto',
description : 'MP3 decoding support using libmad')
option('png',
type : 'feature',
value : 'enabled',
description : 'PNG support')
option('jpeg',
type : 'feature',
value : 'auto',
description : 'JPEG support')
option('bpg',
type : 'feature',
value : 'disabled',
description : 'BPG support')
option('aribsub',
type : 'feature',
value : 'auto',
description : 'ARIB Subtitles support')
option('telx',
type : 'feature',
value : 'auto',
description : 'Teletext decoding support (conflicting with zvbi, default enabled if zvbi is absent)')
option('zvbi',
type : 'feature',
value : 'enabled',
description : 'VBI (inc. Teletext) decoding support with libzvbi')
option('kate',
type : 'feature',
value : 'auto',
description : 'kate codec')
option('tiger',
type : 'feature',
value : 'auto',
description : 'Tiger rendering library for Kate streams')
option('libplacebo',
type : 'feature',
value : 'auto',
description : 'libplacebo support')
option('gles2',
type : 'feature',
value : 'disabled',
description : 'GLES2 support')
option('lua',
type : 'feature',
value : 'enabled',
description : 'Lua support')
option('srt',
type : 'feature',
value : 'auto',
description : 'SRT input/output plugin')
option('vulkan',
type : 'feature',
value : 'auto',
description : 'vulkan output')
option('screen',
type : 'feature',
value : 'enabled',
description : 'screen capture')
option('freerdp',
type : 'feature',
value : 'auto',
description : 'RDP/Remote Client Desktop support')
option('vnc',
type : 'feature',
value : 'auto',
description : 'VNC/rfb client support')
option('swscale',
type : 'feature',
value : 'enabled',
description : 'libswscale image scaling and conversion')
option('postproc',
type : 'feature',
value : 'auto',
description : 'libpostproc image post-processing')
option('ebur128',
type : 'feature',
value : 'auto',
description : 'EBU R 128 standard for loudness normalisation')
option('rnnoise',
type : 'feature',
value : 'auto',
description : 'Rnnoise denoiser')
option('mtp',
type : 'feature',
value : 'auto',
description : 'MTP devices support')
option('wasapi',
type: 'feature',
value: 'auto',
description: 'Use the Windows Audio Session API')
option('macosx_avfoundation',
type: 'feature',
value: 'auto',
description: 'macOS AVCapture (Video) module')
option('dc1394',
type: 'feature',
value: 'auto',
description: 'IIDC FireWire input module')
option('dv1394',
type: 'feature',
value: 'auto',
description: 'DV FireWire input module')
option('linsys',
type: 'feature',
value: 'auto',
description: 'Linux Linear Systems Ltd. SDI and HD-SDI input cards')
option('dvdnav',
type: 'feature',
value: 'auto',
description: 'DVD with navigation input module (dvdnav)')
option('dvdread',
type: 'feature',
value: 'auto',
description: 'DVD input module (dvdread)')
option('bluray',
type: 'feature',
value: 'auto',
description: 'Blu-ray input module (libbluray)')
option('shout',
type: 'feature',
value: 'auto',
description: 'Icecast/Shoutcast stream output (libshout)')
option('ncurses',
type: 'feature',
value: 'auto',
description: 'Text-based interface (ncurses)')
option('minimal_macosx',
type: 'feature',
value: 'auto',
description: 'Minimal macOS interface support')
option('udev',
type: 'feature',
value: 'auto',
description: 'Linux udev services discovery')
# TODO: Missing live555
# TODO: Missing v4l2
# TODO: Missing nvdec
# TODO: Missing decklink
# TODO: Missing gme
# TODO: Missing sid
# TODO: Missing mpc
# TODO: Missing rpi-omxil
# TODO: Missing gst-decode
# TODO: Missing merge-ffmpeg
# TODO: Missing libva
# TODO: Missing dxva2
# TODO: Missing d3d11va
# TODO: Missing tremor
# TODO: Missing x26410b
# TODO: Missing vdpau
# TODO: Missing fribidi
# TODO: Missing harfbuzz
# TODO: Missing fontconfig
# TODO: Missing directx
# TODO: Missing kva
# TODO: Missing mmal
# TODO: Missing sndio
# TODO: Missing jack
# TODO: Missing opensles
# TODO: Missing kai
# TODO: Missing qt-qml-cache
# TODO: Missing qt-qml-debug
# TODO: Missing skins2
# TODO: Missing libtar
# TODO: Missing macosx
# TODO: Missing sparkle
# TODO: Missing lirc
# TODO: Missing projectm
# TODO: Missing vsxu
# TODO: Missing libgcrypt
# TODO: Missing kwallet
# TODO: Missing osx_notifications
# TODO: Missing dsm
# TODO: Missing asdcplib
# TODO: Missing faad2
# TODO: Missing chromecast

View File

@ -0,0 +1,95 @@
#
# HTTP(S) lib
#
vlc_http_lib = static_library('vlc_http',
files(
'message.c',
'resource.c',
'file.c',
'live.c',
'hpack.c',
'hpackenc.c',
'h2frame.c',
'h2output.c',
'h2conn.c',
'h1conn.c',
'chunked.c',
'tunnel.c',
'connmgr.c',
'ports.c',
'outfile.c',
),
dependencies: [threads_dep, socket_libs, libvlccore_dep],
link_with: [vlc_libcompat],
install: false,
include_directories : [vlc_include_dirs],
)
#
# Tests
#
hpack_test = executable('hpack_test',
files('hpack.c'),
c_args : ['-DDEC_TEST'],
include_directories : [vlc_include_dirs])
hpackenc_test = executable('hpackenc_test',
files('hpack.c', 'hpackenc.c'),
c_args : ['-DENC_TEST'],
include_directories : [vlc_include_dirs])
h2frame_test = executable('h2frame_test',
files(
'h2frame_test.c',
'hpack.c',
'hpackenc.c',
'h2frame.c',
),
include_directories : [vlc_include_dirs])
h2output_test = executable('h2output_test',
files('h2output_test.c'),
link_with : vlc_http_lib,
include_directories : [vlc_include_dirs])
h2conn_test = executable('h2conn_test',
files('h2conn_test.c'),
link_with : vlc_http_lib,
include_directories : [vlc_include_dirs])
h1conn_test = executable('h1conn_test',
files('h1conn_test.c'),
link_with : vlc_http_lib,
include_directories : [vlc_include_dirs])
h1chunked_test = executable('h1chunked_test',
files('chunked_test.c'),
link_with : vlc_http_lib,
include_directories : [vlc_include_dirs])
http_msg_test = executable('http_msg_test',
files('message_test.c', 'message.c'),
link_with : vlc_http_lib,
include_directories : [vlc_include_dirs])
http_file_test = executable('http_file_test',
files('file_test.c', 'message.c', 'resource.c', 'file.c'),
link_with : vlc_http_lib,
include_directories : [vlc_include_dirs])
http_tunnel_test = executable('http_tunnel_test',
files('tunnel_test.c'),
link_with : vlc_http_lib,
include_directories : [vlc_include_dirs])
test('http_hpack', hpack_test, suite : 'http')
test('http_hpackenc', hpackenc_test, suite : 'http')
test('http_h2frame_test', h2frame_test, suite : 'http')
test('http_h2output_test', h2output_test, suite : 'http')
test('http_h2conn_test', h2conn_test, suite : 'http')
test('http_h1conn_test', h1conn_test, suite : 'http')
test('http_h1chunked_test', h1chunked_test, suite : 'http')
test('http_msg_test', http_msg_test, suite : 'http')
test('http_file_test', http_file_test, suite : 'http')
test('http_tunnel_test', http_tunnel_test, suite : 'http', timeout : 90)
#
# HTTP(S) module
#
vlc_modules += {
'name' : 'https',
'sources' : files('access.c'),
'link_with' : [vlc_http_lib]
}

446
modules/access/meson.build Normal file
View File

@ -0,0 +1,446 @@
#
# File access modules
#
# Data URL-scheme access
vlc_modules += {
'name' : 'data',
'sources' : files('data.c')
}
# Filesystem access module
vlc_modules += {
'name' : 'filesystem',
'sources' : files('file.c', 'directory.c', 'fs.c'),
}
# Dummy access module
vlc_modules += {
'name' : 'idummy',
'sources' : files('idummy.c')
}
# In-memory bitstream input module
vlc_modules += {
'name' : 'imem',
'sources' : files('imem-access.c'),
'dependencies' : [m_lib]
}
# Memory input module
vlc_modules += {
'name' : 'access_imem',
'sources' : files('imem.c')
}
# Fake sdp:// scheme input module
vlc_modules += {
'name' : 'sdp',
'sources' : files('sdp.c')
}
# Timecode sub-picture generator module
vlc_modules += {
'name' : 'timecode',
'sources' : files('timecode.c')
}
# VDR recordings access module
vlc_modules += {
'name' : 'vdr',
'sources' : files('vdr.c')
}
## Audio capture
# Alsa capture access
if alsa_dep.found()
vlc_modules += {
'name' : 'access_alsa',
'sources' : files('alsa.c'),
'dependencies' : [alsa_dep]
}
endif
# OSS access
if get_option('oss').disable_auto_if(
host_machine.system() not in ['freebsd', 'netbsd', 'dragonfly']).allowed()
# TODO: Actually add the OSS module
endif
# JACK input module
if jack_dep.found()
vlc_modules += {
'name' : 'access_jack',
'sources' : files('jack.c'),
'dependencies' : [jack_dep]
}
endif
# Pulseaudio module
if pulse_dep.found()
vlc_modules += {
'name' : 'pulsesrc',
'sources' : files('pulse.c'),
'dependencies' : [pulse_dep],
'link_with' : [libvlc_pulse],
}
endif
# AVFoundation audio capture access
if host_system == 'darwin'
vlc_modules += {
'name' : 'avaudiocapture',
'sources' : files('avaudiocapture.m'),
'objc_args' : ['-fobjc-arc'],
'dependencies' : [avfoundation_dep, coremedia_dep, foundation_dep]
}
endif
# WASAPI access
if (get_option('wasapi')
.require(host_system == 'windows', error_message: 'WASAPI requires Windows')
.allowed() and ksuser_lib.found())
vlc_modules += {
'name' : 'access_wasapi',
'sources' : files('wasapi.c'),
'dependencies' : [ksuser_lib]
}
endif
## Video capture
# macOS AVFoundation-based video capture
if (get_option('macosx_avfoundation')
.require(host_system == 'darwin', error_message: 'AVCapture requires macOS/iOS')
.allowed())
vlc_modules += {
'name' : 'avcapture',
'sources' : files('avcapture.m'),
'dependencies' : [avfoundation_dep, coremedia_dep, foundation_dep, corevideo_dep]
}
endif
# IIDC FireWire input
libdc1394_dep = dependency('libdc1394-2', version: '>= 2.1.0', required: get_option('dc1394'))
if libdc1394_dep.found()
vlc_modules += {
'name' : 'dc1394',
'sources' : files('dc1394.c'),
'dependencies' : [libdc1394_dep]
}
endif
# DV FireWire input
libraw1394_dep = dependency('libraw1394', version: '>= 2.0.1', required: get_option('dv1394'))
libavc1394_dep = dependency('libavc1394', version: '>= 0.5.3', required: get_option('dv1394'))
if libraw1394_dep.found() and libavc1394_dep.found()
vlc_modules += {
'name' : 'dv1394',
'sources' : files('dv.c'),
'dependencies' : [libraw1394_dep, libavc1394_dep, threads_dep],
}
endif
# Linsys
if (get_option('linsys')
.require(host_system == 'linux', error_message: 'Linsys requires Linux')
.allowed())
vlc_modules += {
'name' : 'linsys_hdsdi',
'sources' : files('linsys/linsys_hdsdi.c'),
'dependencies' : [threads_dep]
}
if zvbi_dep.found()
vlc_modules += {
'name' : 'linsys_sdi',
'sources' : files('linsys/linsys_sdi.c'),
'dependencies' : [zvbi_dep]
}
endif
endif
# Shared memory frame buffer capture
vlc_modules += {
'name' : 'shm',
'sources' : files('shm.c'),
'dependencies': [m_lib]
}
## Screen grab plugins
subdir('screen')
# RDP/Remote Client Desktop capture
freerdp_dep = dependency('freerdp', required: get_option('freerdp'))
if freerdp_dep.found()
vlc_modules += {
'name': 'rdp',
'sources' : files('rdp.c'),
'dependencies' : [freerdp_dep]
}
endif
# VNC capture
vncclient_dep = dependency('libvncclient', required: get_option('vnc'))
if vncclient_dep.found()
vlc_modules += {
'name' : 'vnc',
'sources': files('vnc.c'),
'dependencies' : [vncclient_dep]
}
endif
## Optical media
# VCD and CD-DA access module
if get_option('vcd_module')
vcd_cdda_flags = []
# TODO: Add gcrypt dependency if it's present
libcddb_dep = dependency('libcddb', version : '>= 0.9.5', required : get_option('libcddb'))
if libcddb_dep.found()
vcd_cdda_flags += '-DHAVE_LIBCDDB'
endif
if cc.has_header_symbol('linux/cdrom.h', 'struct cdrom_msf0')
needed_vcd_unix_headers_present = true
elif cc.has_header_symbol('sys/scsiio.h', 'struct scsireq')
needed_vcd_unix_headers_present = true
vcd_cdda_flags += '-DHAVE_SCSIREQ_IN_SYS_SCSIIO_H'
elif cc.has_header_symbol('sys/cdio.h', 'struct ioc_toc_header')
needed_vcd_unix_headers_present = true
vcd_cdda_flags += '-DHAVE_IOC_TOC_HEADER_IN_SYS_CDIO_H'
else
needed_vcd_unix_headers_present = false
endif
if (needed_vcd_unix_headers_present or
host_system in ['darwin', 'windows'])
vcd_cdda_darwin_deps = []
if host_system == 'darwin'
vcd_cdda_darwin_deps = [iokit_dep, corefoundation_dep]
endif
vlc_modules += {
'name' : 'cdda',
'sources' : files(
'cdda.c',
'vcd/cdrom.c',
'../misc/webservices/json.c',
'../misc/webservices/musicbrainz.c',
),
'c_args' : vcd_cdda_flags,
'dependencies' : [libcddb_dep, vcd_cdda_darwin_deps]
}
vlc_modules += {
'name' : 'vcd',
'sources' : files(
'vcd/vcd.c',
'vcd/cdrom.c',
),
'c_args' : vcd_cdda_flags,
'dependencies' : [libcddb_dep, vcd_cdda_darwin_deps]
}
endif
endif
# DVD with navigation (dvdnav) access
dvdnav_dep = dependency('dvdnav', version: '>= 6.0.0', required: get_option('dvdnav'))
if dvdnav_dep.found()
vlc_modules += {
'name' : 'dvdnav',
'sources' : files('dvdnav.c'),
'dependencies' : [
dvdnav_dep,
(host_system == 'darwin') ? [corefoundation_dep, iokit_dep] : []
]
}
endif
# DVD access
dvdread_dep = dependency('dvdread', version: '>= 6.0.0', required: get_option('dvdread'))
if dvdread_dep.found()
vlc_modules += {
'name' : 'dvdread',
'sources' : files('dvdread.c'),
'dependencies' : [
dvdread_dep,
(host_system == 'darwin') ? [corefoundation_dep, iokit_dep] : []
]
}
endif
# Blu-ray access
libbluray_dep = dependency('libbluray', version: '>= 0.6.2', required: get_option('bluray'))
if libbluray_dep.found()
vlc_modules += {
'name' : 'bluray',
'sources' : files('bluray.c'),
'dependencies' : [libbluray_dep]
}
endif
## Digital TV
# DTV access
dtv_common_sources = files('dtv/access.c')
if host_system == 'linux'
has_linux_dvb_5_1 = cc.compiles(
'''
#include <linux/dvb/version.h>
#if (DVB_API_VERSION < 5)
# error Linux DVB API v3.2 and older are not supported.
#endif
#if (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR < 1)
# error Linux DVB API v5.0 is unsupported. Please update.
#endif
'''
)
if (has_linux_dvb_5_1)
message('Has Linux DVB 5.1 or higher: YES')
vlc_modules += {
'name' : 'dtv',
'sources' : [
dtv_common_sources,
files('dtv/linux.c', 'dtv/en50221.c')
],
'c_args' : ['-DHAVE_LINUX_DVB']
}
else
message('Has Linux DVB 5.1 or higher: NO')
endif
endif
if host_system == 'windows'
strmiids_lib = cc.find_library('strmiids', required: true)
vlc_modules += {
'name' : 'dtv',
'sources' : [
dtv_common_sources,
files('dtv/bdagraph.cpp')
],
'dependencies' : [strmiids_lib]
}
endif
## Network stream access modules
# FTP
vlc_modules += {
'name' : 'ftp',
'sources' : files('ftp.c'),
'dependencies' : [socket_libs]
}
# Gopher
vlc_modules += {
'name' : 'gopher',
'sources' : files('gopher.c'),
'dependencies' : [socket_libs]
}
# Old HTTP
vlc_modules += {
'name' : 'http',
'sources' : files('http.c'),
'dependencies' : [socket_libs]
}
# New HTTP(S)
subdir('http')
# TCP
vlc_modules += {
'name' : 'tcp',
'sources' : files('tcp.c'),
'dependencies' : [socket_libs]
}
# UDP
vlc_modules += {
'name' : 'udp',
'sources' : files('udp.c'),
'dependencies' : [socket_libs]
}
# AMT
vlc_modules += {
'name' : 'amt',
'sources' : files('amt.c'),
'dependencies' : [socket_libs]
}
# Windows UNC
if host_system == 'windows'
mpr_lib = cc.find_library('mpr', required: true)
netapi32_lib = cc.find_library('netapi32', required: true)
vlc_modules += {
'name' : 'unc',
'sources' : files('unc.c'),
'dependencies' : [mpr_lib, netapi32_lib]
}
endif
# AVIO access module
if avformat_dep.found()
vlc_modules += {
'name' : 'avio',
'sources' : files('avio.c'),
'dependencies' : [avutil_dep, avformat_dep, m_lib]
}
endif
# SAT>IP
vlc_modules += {
'name' : 'satip',
'sources' : files('satip.c'),
'dependencies' : [socket_libs, threads_dep]
}
## Misc
vlc_modules += {
'name': 'access_concat',
'sources' : files('concat.c')
}
# Media Transfer Protocol (MTP)
if mtp_dep.found()
vlc_modules += {
'name' : 'access_mtp',
'sources' : files('mtp.c'),
'dependencies' : [mtp_dep]
}
endif
# SRT
if srt_dep.found()
vlc_modules += {
'name' : 'access_srt',
'sources' : files('srt.c', 'srt_common.c'),
'dependencies' : [srt_dep]
}
endif
# RIST
if librist_dep.found()
vlc_modules += {
'name' : 'rist',
'sources' : files('rist.c'),
'dependencies' : [socket_libs, librist_dep]
}
endif

View File

@ -0,0 +1,39 @@
if get_option('screen').allowed()
# XCB screen grab
if xcb_dep.found() and xcb_shm_dep.found() and xcb_composite_dep.found()
vlc_modules += {
'name' : 'xcb_screen',
'sources' : files('xcb.c'),
'dependencies' : [xcb_dep, xcb_shm_dep, xcb_composite_dep]
}
endif
# screen
if host_system == 'windows' or host_system == 'darwin'
screen_files = files(
'screen.c',
'screen.h'
)
screen_deps = []
screen_link_with = []
if host_system == 'windows'
screen_files += files('win32.c', 'dxgi.cpp')
gdi32_dep = cc.find_library('gdi32')
screen_deps += [gdi32_dep]
screen_link_with += d3d9_common_lib
else
screen_files += files('mac.c')
applicationservices_dep = dependency('ApplicationServices', required: true)
screen_deps += [applicationservices_dep]
endif
vlc_modules += {
'name' : 'screen',
'sources' : screen_files,
'dependencies': screen_deps,
'link_with': screen_link_with,
}
endif
endif

View File

@ -0,0 +1,59 @@
# Access output plugins
# Dummy
vlc_modules += {
'name' : 'access_output_dummy',
'sources': files('dummy.c')
}
# File
vlc_modules += {
'name' : 'access_output_file',
'sources': files('file.c')
}
# HTTP
vlc_modules += {
'name' : 'access_output_http',
'sources': files('http.c')
}
# TODO: Add HAVE_GCRYPT + livehttp
# Shout (Icecast and old Shoutcast)
shout_dep = dependency('shout', version: '>= 2.1', required: get_option('shout'))
if shout_dep.found()
vlc_modules += {
'name' : 'access_output_shout',
'sources' : files('shout.c'),
'dependencies' : [shout_dep, socket_libs]
}
endif
# HTTP PUT
vlc_modules += {
'name' : 'access_output_http_put',
'sources' : files('http-put.c'),
'include_directories' : include_directories('../access/http'),
'link_with' : [vlc_http_lib]
}
# SRT
if srt_dep.found()
vlc_modules += {
'name' : 'access_output_srt',
'sources' : files('srt.c', '../access/srt_common.c'),
'include_directories' : include_directories('../access/'),
'dependencies' : [srt_dep],
}
endif
# RIST
if librist_dep.found()
vlc_modules += {
'name' : 'access_output_rist',
'sources' : files('rist.c'),
'include_directories' : include_directories('../access/'),
'dependencies' : [librist_dep]
}
endif

View File

@ -0,0 +1,249 @@
#
# Audio filter modules
#
include_dir = include_directories('.')
# Audio bar graph a module
vlc_modules += {
'name' : 'audiobargraph_a',
'sources' : files('audiobargraph_a.c'),
'dependencies' : [m_lib]
}
# Chorus flanger module
vlc_modules += {
'name' : 'chorus_flanger',
'sources' : files('chorus_flanger.c'),
'dependencies' : [m_lib]
}
# Compressor module
vlc_modules += {
'name' : 'compressor',
'sources' : files('compressor.c'),
'dependencies' : [m_lib]
}
# Equalizer filter module
vlc_modules += {
'name' : 'equalizer',
'sources' : files('equalizer.c'),
'dependencies' : [m_lib]
}
# Karaoke filter module
vlc_modules += {
'name' : 'karaoke',
'sources' : files('karaoke.c')
}
# Volume normalization module
vlc_modules += {
'name' : 'normvol',
'sources' : files('normvol.c'),
'dependencies' : [m_lib]
}
# Gain module
vlc_modules += {
'name' : 'gain',
'sources' : files('gain.c')
}
# Parametrical Equalizer module
vlc_modules += {
'name' : 'param_eq',
'sources' : files('param_eq.c'),
'dependencies' : [m_lib]
}
# Scaletempo module
scaletempo_sources = files('scaletempo.c')
scaletempo_deps = [m_lib]
vlc_modules += {
'name' : 'scaletempo',
'sources' : scaletempo_sources,
'dependencies' : scaletempo_deps
}
# Scaletempo pitch module
vlc_modules += {
'name' : 'scaletempo_pitch',
'sources' : scaletempo_sources,
'dependencies' : scaletempo_deps,
'c_args' : ['-DPITCH_SHIFTER']
}
# Stereo widen module
vlc_modules += {
'name' : 'stereo_widen',
'sources' : files('stereo_widen.c')
}
# Spatializer module
vlc_modules += {
'name' : 'spatializer',
'sources' : files(
'spatializer/spatializer.cpp',
'spatializer/allpass.cpp',
'spatializer/comb.cpp',
'spatializer/denormals.c',
'spatializer/revmodel.cpp'),
'dependencies' : [m_lib]
}
# Central channel filter
vlc_modules += {
'name' : 'center',
'sources' : files('center.c'),
'dependencies' : [m_lib]
}
# Stereo panning filter
vlc_modules += {
'name' : 'stereopan',
'sources' : files('stereo_pan.c'),
'dependencies' : [m_lib]
}
## Channel mixer
# Dolby surround module
vlc_modules += {
'name' : 'dolby_surround_decoder',
'sources' : files('channel_mixer/dolby.c')
}
# Headphone mixer module
vlc_modules += {
'name' : 'headphone_channel_mixer',
'sources' : files('channel_mixer/headphone.c'),
'dependencies' : [m_lib]
}
# Mono mixer module
vlc_modules += {
'name' : 'mono',
'sources' : files('channel_mixer/mono.c'),
'dependencies' : [m_lib]
}
# Channel remap mixer module
vlc_modules += {
'name' : 'remap',
'sources' : files('channel_mixer/remap.c')
}
# Trivial channel mixer module
vlc_modules += {
'name' : 'trivial_channel_mixer',
'sources' : files('channel_mixer/trivial.c')
}
# Simple channel mixer module
vlc_modules += {
'name' : 'simple_channel_mixer',
'sources' : files('channel_mixer/simple.c')
}
# TODO: NEON optimized channel mixer plugin
# simple_channel_mixer_plugin_arm_neon
# Spatial audio (ambisonics/binaural) mixer
spatial_dep = dependency('spatialaudio', required : get_option('spatialaudio'))
if spatial_dep.found()
vlc_modules += {
'name' : 'spatialaudio',
'sources' : files('channel_mixer/spatialaudio.cpp'),
'dependencies' : [spatial_dep]
}
endif
## Converters
# Format converter module
vlc_modules += {
'name' : 'audio_format',
'sources' : files('converter/format.c'),
'dependencies' : [m_lib]
}
# SPDIF converter module
vlc_modules += {
'name' : 'tospdif',
'sources' : files(
'converter/tospdif.c',
'../packetizer/dts_header.c'
),
'include_directories' : include_dir
}
## Resampler
# TODO: Band-limited resampler module
#vlc_modules += {
# 'name' : 'bandlimited_resampler',
# 'sources' : files('resampler/bandlimited.c')
#}
# Ugly resampler module
vlc_modules += {
'name' : 'ugly_resampler',
'sources' : files('resampler/ugly.c')
}
# libsamplerate resampler
samplerate_dep = dependency('samplerate', required: get_option('samplerate'))
if samplerate_dep.found()
vlc_modules += {
'name' : 'samplerate',
'sources' : files('resampler/src.c'),
'dependencies' : [m_lib, samplerate_dep]
}
endif
# SoX resampler
soxr_dep = dependency('soxr', version: '>= 0.1.2', required: get_option('soxr'))
if soxr_dep.found()
vlc_modules += {
'name' : 'soxr',
'sources' : files('resampler/soxr.c'),
'dependencies' : [m_lib, soxr_dep]
}
endif
# EBU R 128
ebur128_dep = dependency('libebur128', version: '>= 1.2.4', required: get_option('ebur128'))
if ebur128_dep.found()
vlc_modules += {
'name' : 'ebur128',
'sources' : files('libebur128.c'),
'dependencies' : [ebur128_dep]
}
endif
# Speex resampler
speexdsp_dep = dependency('speexdsp', required : get_option('speexdsp'))
if speexdsp_dep.found()
vlc_modules += {
'name' : 'speex_resampler',
'sources' : files('resampler/speex.c'),
'dependencies' : [speexdsp_dep]
}
endif
# Rnnoise denoiser
rnnoise_dep = dependency('rnnoise', required : get_option('rnnoise'))
if rnnoise_dep.found()
vlc_modules += {
'name' : 'rnnoise',
'sources' : files('rnnoise.c'),
'dependencies' : [m_lib, rnnoise_dep]
}
endif

View File

@ -0,0 +1,13 @@
# Float mixer
vlc_modules += {
'name' : 'float_mixer',
'sources' : files('float.c'),
'dependencies' : [m_lib]
}
# Integer mixer
vlc_modules += {
'name' : 'integer_mixer',
'sources' : files('integer.c'),
'dependencies' : [m_lib]
}

View File

@ -0,0 +1,75 @@
# Audio output modules
# Dummy audio output
vlc_modules += {
'name' : 'adummy',
'sources' : files('adummy.c')
}
# File audio output
vlc_modules += {
'name' : 'afile',
'sources' : files('file.c')
}
# Memory audio output
vlc_modules += {
'name' : 'amem',
'sources' : files('amem.c')
}
# Pulseaudio output
if pulse_dep.found()
vlc_modules += {
'name' : 'pulse',
'sources' : files('pulse.c'),
'dependencies' : [m_lib, pulse_dep],
'link_with' : [libvlc_pulse],
}
endif
# ALSA audio output
if alsa_dep.found()
vlc_modules += {
'name' : 'alsa',
'sources' : files('alsa.c'),
'dependencies' : [m_lib, alsa_dep]
}
endif
# JACK audio output
if jack_dep.found()
vlc_modules += {
'name' : 'jack',
'sources' : files('jack.c'),
'dependencies' : [jack_dep]
}
endif
# AUHAL output module (macOS only)
if have_osx
vlc_modules += {
'name' : 'auhal',
'sources' : files('auhal.c', 'coreaudio_common.c'),
'dependencies' : [
corefoundation_dep,
audiounit_dep,
audiotoolbox_dep,
coreaudio_dep,
]
}
endif
# AudioUnit output (iOS/tvOS)
if have_ios or have_tvos
vlc_modules += {
'name' : 'audiounit_ios',
'sources' : files('audiounit_ios.m', 'coreaudio_common.c'),
'dependencies' : [
foundation_dep,
avfoundation_dep,
audiotoolbox_dep,
coreaudio_dep,
]
}
endif

798
modules/codec/meson.build Normal file
View File

@ -0,0 +1,798 @@
#
# Encoder and decoder modules
#
# Dummy codec
vlc_modules += {
'name' : 'ddummy',
'sources' : files('ddummy.c')
}
# Dummy codec
vlc_modules += {
'name' : 'edummy',
'sources' : files('edummy.c')
}
## Audio codecs
# SPDIF codec
vlc_modules += {
'name' : 'spdif',
'sources' : files('spdif.c')
}
# a52 codec
a52_lib = cc.find_library('a52', required: get_option('a52'))
if a52_lib.found()
vlc_modules += {
'name' : 'a52',
'sources' : files('a52.c'),
'dependencies' : [a52_lib]
}
endif
# DTS Coherent Acoustics decoder
dca_dep = dependency('libdca', version : '>= 0.0.5', required : get_option('dca'))
if dca_dep.found()
vlc_modules += {
'name' : 'dca',
'sources' : files('dca.c'),
'dependencies' : [dca_dep, m_lib]
}
endif
# adpcm codec
vlc_modules += {
'name' : 'adpcm',
'sources' : files('adpcm.c')
}
# AES3 codec
vlc_modules += {
'name' : 'aes3',
'sources' : files('aes3.c')
}
# Raw PCM demux module
vlc_modules += {
'name' : 'araw',
'sources' : files(['araw.c']),
}
# faad decoder plugin
faad_lib = cc.find_library('faad', required: get_option('faad'))
if faad_lib.found()
vlc_modules += {
'name' : 'faad',
'sources' : files('faad.c'),
'dependencies' : [faad_lib, m_lib]
}
endif
# g711 codec
vlc_modules += {
'name' : 'g711',
'sources' : files('g711.c')
}
# libfluidsynth (MIDI synthetizer) plugin
fluidsynth_option = get_option('fluidsynth')
fluidsynth_module_flags = []
if not fluidsynth_option.disabled()
fluidsynth_module_flags += f'-DDATADIR="@sysdatadir_path@"'
fluidsynth_dep = dependency('fluidsynth', version : '>= 1.1.2', required : false)
if not fluidsynth_dep.found()
fluidsynth_dep = dependency('fluidlite', required : false)
if fluidsynth_dep.found()
fluidsynth_module_flags += '-DHAVE_FLUIDLITE_H'
endif
endif
if fluidsynth_option.enabled() and not fluidsynth_dep.found()
error('Neither fluidsynth or fluidlite were found.')
endif
else
fluidsynth_dep = dependency('', required : false)
endif
if fluidsynth_dep.found()
vlc_modules += {
'name' : 'fluidsynth',
'sources' : files('fluidsynth.c'),
'dependencies' : [fluidsynth_dep, m_lib],
'c_args' : fluidsynth_module_flags
}
endif
# Audiotoolbox MIDI plugin (Darwin only)
if host_system == 'darwin'
vlc_modules += {
'name' : 'audiotoolboxmidi',
'sources' : files('audiotoolbox_midi.c'),
'dependencies' : [corefoundation_dep, audiounit_dep, audiotoolbox_dep]
}
endif
# LPCM codec
vlc_modules += {
'name' : 'lpcm',
'sources' : files('lpcm.c')
}
# libmad codec
mad_dep = dependency('mad', required : get_option('mad'))
if mad_dep.found()
vlc_modules += {
'name' : 'mad',
'sources' : files('mad.c'),
'dependencies' : [mad_dep]
}
endif
# libmpg123 decoder
mpg123_dep = dependency('libmpg123', required : get_option('mpg123'))
if mpg123_dep.found()
vlc_modules += {
'name' : 'mpg123',
'sources' : files('mpg123.c'),
'dependencies' : [mpg123_dep]
}
endif
# Ulead DV Audio codec
vlc_modules += {
'name' : 'uleaddvaudio',
'sources' : files('uleaddvaudio.c')
}
## Video codecs
# CDG codec
vlc_modules += {
'name' : 'cdg',
'sources' : files('cdg.c')
}
# libmpeg2 decoder
mpeg2_dep = dependency('libmpeg2', version : '> 0.3.2', required : get_option('mpeg2'))
if mpeg2_dep.found()
vlc_modules += {
'name' : 'libmpeg2',
'sources' : files('libmpeg2.c', 'synchro.c'),
'dependencies' : [mpeg2_dep]
}
endif
# Raw video codec
vlc_modules += {
'name' : 'rawvideo',
'sources' : files('rawvideo.c')
}
# RTP video codec
vlc_modules += {
'name' : 'rtpvideo',
'sources' : files('rtpvideo.c')
}
# Dirac decoder and encoder using schroedinger
schroedinger_dep = dependency('schroedinger-1.0',
version: '>= 1.0.10',
required: get_option('schroedinger'))
if schroedinger_dep.found()
vlc_modules += {
'name' : 'schroedinger',
'sources' : files('schroedinger.c'),
'dependencies' : [schroedinger_dep]
}
endif
# RTP Raw video codec
vlc_modules += {
'name' : 'rtp_rawvid',
'sources' : files('rtp-rawvid.c')
}
## Image codecs
# PNG codec
png_dep = dependency('libpng', required: get_option('png'))
if png_dep.found()
vlc_modules += {
'name' : 'png',
'sources' : files('png.c'),
'dependencies' : [png_dep, m_lib]
}
endif
# JPEG codec
jpeg_dep = dependency('libjpeg', required: get_option('jpeg'))
if jpeg_dep.found()
vlc_modules += {
'name' : 'jpeg',
'sources' : files('jpeg.c'),
'dependencies' : [jpeg_dep]
}
endif
# BPG codec
bpg_lib = cc.find_library('bpg', required : get_option('bpg'))
if bpg_lib.found()
vlc_modules += {
'name' : 'bpg',
'sources' : files('bpg.c'),
'dependencies' : [bpg_lib]
}
endif
# SVG image decoder
cairo_dep = dependency('cairo', version : '>= 1.13.1', required : get_option('cairo'))
if rsvg_dep.found() and cairo_dep.found()
vlc_modules += {
'name' : 'svgdec',
'sources' : files('svg.c'),
'dependencies' : [rsvg_dep, cairo_dep]
}
endif
# xwd
xproto_dep = dependency('xproto', required : get_option('xcb'))
if xproto_dep.found()
vlc_modules += {
'name' : 'xwd',
'sources' : files('xwd.c'),
'dependencies' : [xproto_dep]
}
endif
## SPU codecs
# Substation Alpha subtitle decoder (libass)
# TODO: Needs -ldwrite for UWP builds
libass_dep = dependency('libass',
version: '>= 0.9.8',
required: get_option('libass'))
libass_deps = [libass_dep]
if host_system == 'darwin'
libass_deps += [corefoundation_dep, coregraphics_dep, coretext_dep]
endif
if libass_dep.found()
if freetype_dep.found()
libass_deps += freetype_dep
endif
vlc_modules += {
'name' : 'libass',
'sources' : files('libass.c'),
'dependencies' : libass_deps
}
endif
# Closed captioning decoder
vlc_modules += {
'name' : 'cc',
'sources' : files('cc.c', 'cea708.c')
}
# cvdsub decoder
vlc_modules += {
'name' : 'cvdsub',
'sources' : files('cvdsub.c')
}
# dvbsub decoder
vlc_modules += {
'name' : 'dvbsub',
'sources' : files('dvbsub.c')
}
# aribsub
aribb24_dep = dependency('aribb24', version : '>= 1.0.1', required : get_option('aribsub'))
if aribb24_dep.found()
vlc_modules += {
'name' : 'aribsub',
'sources' : files('arib/aribsub.c'),
'dependencies' : [aribb24_dep],
'cpp_args' : ['-DHAVE_ARIBB24']
}
endif
# scte18 decoder
vlc_modules += {
'name' : 'scte18',
'sources' : files('scte18.c', 'atsc_a65.c')
}
# scte27 decoder
vlc_modules += {
'name' : 'scte27',
'sources' : files('scte27.c')
}
# SPU decoder
vlc_modules += {
'name' : 'spudec',
'sources' : files('spudec/spudec.c', 'spudec/parse.c')
}
# STL codec
vlc_modules += {
'name' : 'stl',
'sources' : files('stl.c')
}
# subsdec
vlc_modules += {
'name' : 'subsdec',
'sources' : files('subsdec.c')
}
# subsusf
vlc_modules += {
'name' : 'subsusf',
'sources' : files('subsusf.c')
}
# TTML decoder
vlc_modules += {
'name' : 'ttml',
'sources' : files('ttml/substtml.c', 'ttml/ttml.c', '../demux/ttml.c'),
'include_directories' : include_directories('.')
}
# svcdsub
vlc_modules += {
'name' : 'svcdsub',
'sources' : files('svcdsub.c')
}
# t140
vlc_modules += {
'name' : 't140',
'sources' : files('t140.c')
}
# zvbi
use_zvbi = zvbi_dep.found() and get_option('zvbi').enabled()
if use_zvbi
vlc_modules += {
'name' : 'zvbi',
'sources' : files('zvbi.c'),
'dependencies' : [zvbi_dep, socket_libs]
}
endif
# telx
if not use_zvbi and get_option('telx').enabled()
vlc_modules += {
'name' : 'telx',
'sources' : files('telx.c')
}
endif
# textst
vlc_modules += {
'name' : 'textst',
'sources' : files('textst.c')
}
# substx3g
vlc_modules += {
'name' : 'substx3g',
'sources' : files('substx3g.c')
}
# WebVTT plugin
webvtt_sources = files(
'webvtt/webvtt.c',
'webvtt/subsvtt.c',
'../demux/webvtt.c',
)
if get_option('stream_outputs')
webvtt_sources += files('webvtt/encvtt.c')
endif
# WebVTT CSS engine requires Flex and Bison
flex = find_program('flex', required: get_option('css_engine'))
bison = find_program('bison', required: get_option('css_engine'))
if flex.found() and bison.found() and not get_option('css_engine').disabled()
bison_gen = generator(bison,
output: ['@BASENAME@.c', '@BASENAME@.h'],
arguments: ['@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@'])
webvtt_bison_files = bison_gen.process('webvtt/CSSGrammar.y')
flex_gen = generator(flex,
output: '@PLAINNAME@.yy.c',
arguments: ['-o', '@OUTPUT@', '@INPUT@'])
webvtt_lex_files = flex_gen.process('webvtt/CSSLexer.l')
webvtt_sources += [
files(
'webvtt/css_parser.c',
'webvtt/css_style.c',
),
webvtt_lex_files,
webvtt_bison_files,
]
# CSS parser test
css_parser_test = executable('css_parser_test',
files(
'webvtt/css_test.c',
'webvtt/css_parser.c'
),
webvtt_lex_files, webvtt_bison_files,
link_with: [vlc_libcompat],
dependencies: [libvlccore_dep],
include_directories: [
vlc_include_dirs,
include_directories('webvtt')])
test('css_parser', css_parser_test, suite : 'css_parser')
endif
vlc_modules += {
'name' : 'webvtt',
'sources' : webvtt_sources,
'include_directories' : include_directories('webvtt')
}
## Xiph.org codecs
ogg_dep = dependency('ogg', required: get_option('ogg'))
# FLAC codec
flac_dep = dependency('flac', required: get_option('flac'))
if flac_dep.found()
vlc_modules += {
'name' : 'flac',
'sources' : files('flac.c'),
'dependencies' : [flac_dep]
}
endif
# Kate codec
kate_dep = dependency('kate', version: '>= 0.3.0', required: get_option('kate'))
if kate_dep.found()
kate_deps = [kate_dep, m_lib]
kate_cpp_args = []
tiger_dep = dependency('tiger', version: '>= 0.3.1', required: get_option('tiger'))
if tiger_dep.found()
kate_cpp_args += ['-DHAVE_TIGER=1']
kate_deps += tiger_dep
endif
vlc_modules += {
'name' : 'kate',
'sources' : files('kate.c'),
'dependencies' : kate_deps,
'cpp_args' : kate_cpp_args
}
endif
# Opus codec
opus_dep = dependency('opus', version: '>= 1.0.3', required: get_option('opus'))
if opus_dep.found() and ogg_dep.found()
vlc_modules += {
'name' : 'opus',
'sources' : files('opus.c', 'opus_header.c'),
'dependencies' : [opus_dep, ogg_dep]
}
endif
# Theora codec
theoraenc_dep = dependency('theoraenc', required: get_option('theoraenc'))
theoradec_dep = dependency('theoradec', version: '>= 1.0', required: get_option('theoradec'))
if theoraenc_dep.found() and theoradec_dep.found() and ogg_dep.found()
vlc_modules += {
'name' : 'theora',
'sources' : files('theora.c'),
'dependencies' : [theoraenc_dep, theoradec_dep, ogg_dep]
}
endif
# Daala codec plugin
daaladec_dep = dependency('daaladec', required: get_option('daaladec'))
daalaenc_dep = dependency('daalaenc', required: get_option('daalaenc'))
if daaladec_dep.found() and daalaenc_dep.found()
vlc_modules += {
'name' : 'daala',
'sources' : files('daala.c'),
'dependencies' : [daaladec_dep, daalaenc_dep]
}
endif
# Vorbis codec
vorbis_dep = dependency('vorbis', version: '>= 1.1', required: get_option('vorbis'))
vorbisenc_dep = dependency('vorbisenc', version: '>= 1.1', required: get_option('vorbis'))
if vorbis_dep.found() and vorbisenc_dep.found() and ogg_dep.found()
vlc_modules += {
'name' : 'vorbis',
'sources' : files('vorbis.c'),
'dependencies' : [vorbis_dep, vorbisenc_dep, ogg_dep]
}
endif
# OggSpots decoder
if ogg_dep.found()
vlc_modules += {
'name' : 'oggspots',
'sources' : files('oggspots.c'),
'dependencies' : [ogg_dep]
}
endif
# VideoToolbox (Apples hardware-accelerated video decoder/encoder)
# TODO: Set proper flags for minimum iOS/tvOS versions
if host_system == 'darwin'
vlc_modules += {
'name' : 'videotoolbox',
'sources' : files(
'videotoolbox.c',
'vt_utils.c',
'hxxx_helper.c',
'../packetizer/hxxx_nal.c',
'../packetizer/hxxx_sei.c',
'../packetizer/h264_slice.c',
'../packetizer/h264_nal.c',
'../packetizer/hevc_nal.c'
),
'dependencies' : [videotoolbox_dep, foundation_dep, coremedia_dep, corevideo_dep],
}
endif
# FFmpeg common helper library
if avcodec_dep.found()
libavcodec_common = static_library('avcodec_common',
files('avcodec/fourcc.c', 'avcodec/chroma.c'),
dependencies: [avutil_dep, avcodec_dep],
install: false,
include_directories : [
vlc_include_dirs,
include_directories('avcodec')
],
)
endif
# FFmpeg codec module
if avcodec_dep.found()
avcodec_extra_sources = []
if get_option('stream_outputs')
avcodec_extra_sources += 'avcodec/encoder.c'
endif
# TODO: Implement the merge-ffmpeg option
vlc_modules += {
'name' : 'avcodec',
'sources' : files(
'avcodec/video.c',
'avcodec/subtitle.c',
'avcodec/audio.c',
'avcodec/va.c',
'avcodec/avcodec.c',
avcodec_extra_sources
),
'dependencies' : [avutil_dep, avcodec_dep],
'link_with' : [libavcodec_common]
}
endif
if get_option('libva').enabled() and get_option('avcodec').disabled()
error('-Dlibva=enabled and -Davcodec=disabled options are mutually exclusive. Use -Davcodec=disabled')
endif
libva_dep = dependency('libva', version: '>= 1.0', required: get_option('libva'))
if get_option('libva').require(
avcodec_dep.found() and avutil_dep.found(),
error_message: 'VAAPI requires avcodec').allowed() and libva_dep.found()
vlc_modules += {
'name' : 'vaapi',
'sources' : files(
'avcodec/vaapi.c',
'../hw/vaapi/vlc_vaapi.c',
'avcodec/va_surface.c',
),
'dependencies' : [avcodec_dep, libva_dep, avutil_dep]
}
endif
# D3D9 common library
# TODO: Do not build for Winstore
if host_system == 'windows'
d3d9_common_lib = static_library('d3d9_common',
files(
'../video_chroma/d3d9_fmt.c',
'../video_chroma/dxgi_fmt.c',
),
include_directories: [vlc_include_dirs],
pic: true,
install: false
)
endif
# OpenMAX IL codec
if get_option('omxil')
vlc_modules += {
'name' : 'omxil',
'sources' : files(
'omxil/utils.c',
'omxil/qcom.c',
'omxil/omxil.c',
'omxil/omxil_core.c',
'../packetizer/h264_nal.c',
'../packetizer/hevc_nal.c',
),
'link_with' : [chroma_copy_lib, dl_lib]
}
endif
## x26X encoders
# x265 encoder
x265_dep = dependency('x265', required: get_option('x265'))
if x265_dep.found()
vlc_modules += {
'name' : 'x265',
'sources' : files('x265.c'),
'dependencies' : [x265_dep]
}
endif
# x262 encoder
x262_dep = dependency('x262', required: get_option('x262'))
if x262_dep.found()
vlc_modules += {
'name' : 'x262',
'sources' : files('x264.c'),
'dependencies' : [x262_dep],
'c_args' : ['-DPLUGIN_X262']
}
endif
# x264 10-bit encoder (requires x264 >= 0.153)
x26410b_dep = dependency('x264', version: '>= 0.153', required: get_option('x264'))
if x26410b_dep.found()
vlc_modules += {
'name' : 'x26410b',
'sources' : files('x264.c'),
'dependencies' : [x26410b_dep],
'c_args' : ['-DPLUGIN_X264_10B']
}
endif
# x264 encoder
x264_dep = dependency('x264', version: '>= 0.148', required: get_option('x264'))
if x264_dep.found()
vlc_modules += {
'name' : 'x264',
'sources' : files('x264.c'),
'dependencies' : [x264_dep],
'c_args' : ['-DPLUGIN_X264']
}
endif
## Misc codecs
# fdkaac encoder
fdkaac_dep = dependency('fdk-aac', required: get_option('fdk-aac'))
if fdkaac_dep.found()
vlc_modules += {
'name' : 'fdkaac',
'sources' : files('fdkaac.c'),
'dependencies' : [fdkaac_dep]
}
endif
# Shine MPEG Audio Layer 3 encoder
shine_dep = dependency('shine', version: '>= 3.0.0', required: get_option('shine'))
if shine_dep.found()
vlc_modules += {
'name' : 'shine',
'sources' : files('shine.c'),
'dependencies' : [shine_dep]
}
endif
# VP8/VP9 encoder/decoder (libvpx)
vpx_dep = dependency('vpx', version: '>= 1.5.0', required: get_option('vpx'))
if vpx_dep.found()
vpx_cpp_args = []
if cc.has_function('vpx_codec_vp8_dx', dependencies: [vpx_dep])
vpx_cpp_args += '-DENABLE_VP8_DECODER'
endif
if cc.has_function('vpx_codec_vp9_dx', dependencies: [vpx_dep])
vpx_cpp_args += '-DENABLE_VP9_DECODER'
endif
if cc.has_function('vpx_codec_vp8_cx', dependencies: [vpx_dep])
vpx_cpp_args += '-DENABLE_VP8_ENCODER'
endif
if cc.has_function('vpx_codec_vp9_cx', dependencies: [vpx_dep])
vpx_cpp_args += '-DENABLE_VP9_ENCODER'
endif
vlc_modules += {
'name' : 'vpx',
'sources' : files('vpx.c'),
'cpp_args' : vpx_cpp_args,
'dependencies' : [vpx_dep]
}
endif
# libaom AV1 codec
aom_dep = dependency('aom', required: get_option('aom'))
if aom_dep.found()
vlc_modules += {
'name' : 'aom',
'sources' : files('aom.c'),
'dependencies' : [aom_dep]
}
endif
rav1e_dep = dependency('rav1e', required: get_option('rav1e'))
if rav1e_dep.found()
vlc_modules += {
'name' : 'rav1e',
'sources' : files('rav1e.c'),
'dependencies' : [rav1e_dep]
}
endif
# Twolame MPEG Audio Layer 2 encoder
twolame_dep = dependency('twolame', required: get_option('twolame'))
if twolame_dep.found()
vlc_modules += {
'name' : 'twolame',
'sources' : files('twolame.c'),
'dependencies' : [twolame_dep],
'c_args' : ['-DLIBTWOLAME_STATIC']
}
endif
# dav1d AV1 decoder
dav1d_dep = dependency('dav1d', version: '>= 0.5.0', required: get_option('dav1d'))
if dav1d_dep.found()
vlc_modules += {
'name' : 'dav1d',
'sources' : files(
'dav1d.c',
'../packetizer/av1_obu.c'
),
'dependencies' : [dav1d_dep]
}
endif
## Hardware encoders
# QSV encoder
qsv_dep = dependency('libmfx', required: get_option('mfx'))
if qsv_dep.found()
vlc_modules += {
'name' : 'qsv',
'sources' : files('qsv.c'),
'dependencies' : [qsv_dep]
}
endif
## External frameworks

104
modules/control/meson.build Normal file
View File

@ -0,0 +1,104 @@
# Dummy interface module
vlc_modules += {
'name' : 'dummy',
'sources' : files('dummy.c'),
}
# Gestures
vlc_modules += {
'name' : 'gestures',
'sources' : files('gestures.c')
}
# Hotkeys
vlc_modules += {
'name' : 'hotkeys',
'sources' : files('hotkeys.c'),
'dependencies' : [m_lib]
}
# XXX: netsync disabled, move current code to new playlist/player and add a
# way to control the output clock from the player
# vlc_modules += {
# 'name' : 'netsync',
# 'sources' : files('netsync.c'),
# 'dependencies' : [socket_libs]
# }
# Remote control
vlc_modules += {
'name' : 'rc',
'sources' : files(
'cli/player.c',
'cli/playlist.c',
'cli/cli.c',
'cli/cli.h'
),
'dependencies' : [socket_libs, m_lib]
}
# XCB hotkeys
if xcb_dep.found() and xcb_keysyms_dep.found()
vlc_modules += {
'name' : 'xcb_hotkeys',
'sources' : files('globalhotkeys/xcb.c'),
'dependencies' : [xcb_dep, xcb_keysyms_dep]
}
endif
# libvlc_motion
vlc_motion_deps = []
vlc_motion_cflags = []
vlc_motion_sources = [
'motionlib.c',
]
if host_system == 'darwin'
vlc_motion_cflags += ['-fconstant-cfstrings']
vlc_motion_sources += ['unimotion.c']
vlc_motion_deps += [corefoundation_dep, iokit_dep]
endif
vlc_motion_lib = static_library('vlc_motion',
vlc_motion_sources,
c_args: vlc_motion_cflags,
include_directories: vlc_include_dirs,
dependencies: vlc_motion_deps
)
# DBUS
dbus_dep = dependency('dbus-1', version : '>= 1.6.0', required : get_option('dbus'))
if dbus_dep.found()
vlc_modules += {
'name' : 'dbus',
'sources' : files(
'dbus/dbus_root.c',
'dbus/dbus_player.c',
'dbus/dbus_tracklist.c',
'dbus/dbus.c',
),
'dependencies' : [dbus_dep, m_lib]
}
endif
if host_system == 'windows'
# NT service control
vlc_modules += {
'name' : 'ntservice',
'sources' : files('ntservice.c')
}
# Windows hotkeys control
vlc_modules += {
'name' : 'win_hotkeys',
'sources' : files('globalhotkeys/win32.c')
}
# Windows message control
vlc_modules += {
'name' : 'win_msg',
'sources' : files('win_msg.c')
}
endif

585
modules/demux/meson.build Normal file
View File

@ -0,0 +1,585 @@
#
# Demux modules
#
# Common Xiph metadata library
xiph_meta_lib = static_library('xiph_metadata',
sources : files('xiph_metadata.c'),
include_directories : [vlc_include_dirs],
install : false,
pic : true
)
# FLAC demux
vlc_modules += {
'name' : 'flacsys',
'sources' : files('flac.c'),
'include_directories' : include_directories('../packetizer'),
'link_with' : [xiph_meta_lib]
}
# OGG demux
ogg_dep = dependency('ogg', version : '>= 1.0', required : get_option('ogg'))
if ogg_dep.found()
vlc_modules += {
'name' : 'ogg',
'sources' : files('ogg.c', 'oggseek.c', 'ogg_granule.c'),
'link_with' : [xiph_meta_lib],
'dependencies' : [ogg_dep]
}
endif
# Xiph test
xiph_test = executable('xiph_test',
files('xiph_test.c'),
include_directories : [vlc_include_dirs])
test('xiph_test', hpack_test, suite : 'demux')
# Demux dump
vlc_modules += {
'name' : 'demuxdump',
'sources' : files('demuxdump.c')
}
# Raw DV demux
vlc_modules += {
'name' : 'rawdv',
'sources' : files('rawdv.c')
}
# Raw Vid demux
vlc_modules += {
'name' : 'rawvid',
'sources' : files('rawvid.c')
}
# au demux
vlc_modules += {
'name' : 'au',
'sources' : files('au.c')
}
# Raw AUD demux
vlc_modules += {
'name' : 'rawaud',
'sources' : files('rawaud.c')
}
# WAV demux module
vlc_modules += {
'name' : 'wav',
'sources' : files(['wav.c']),
}
# NSV demux
vlc_modules += {
'name' : 'nsv',
'sources' : files('nsv.c')
}
# HX raw video/audio IP camera demuxer
vlc_modules += {
'name' : 'hx',
'sources' : files('hx.c'),
}
# MPEG PS demux
vlc_modules += {
'name' : 'ps',
'sources' : files('mpeg/ps.c')
}
# libmodplug
libmodplug_dep = dependency('libmodplug', version : ['>= 0.8.4', '!= 0.8.8'],
required : get_option('libmodplug'))
if libmodplug_dep.found()
vlc_modules += {
'name' : 'mod',
'sources' : files('mod.c'),
'dependencies' : [libmodplug_dep]
}
endif
# PVA demux
vlc_modules += {
'name' : 'pva',
'sources' : files('pva.c')
}
# AIFF demux
vlc_modules += {
'name' : 'aiff',
'sources' : files('aiff.c')
}
# MJPEG demux
vlc_modules += {
'name' : 'mjpeg',
'sources' : files('mjpeg.c')
}
# Subtitle demux
vlc_modules += {
'name' : 'subtitle',
'sources' : files(['subtitle.c']),
'dependencies' : [m_lib]
}
# ty demux
vlc_modules += {
'name' : 'ty',
'sources' : files('ty.c')
}
# vobsub demux
vlc_modules += {
'name' : 'vobsub',
'sources' : files('vobsub.c')
}
# voc demux
vlc_modules += {
'name' : 'voc',
'sources' : files('voc.c')
}
# xa demux
vlc_modules += {
'name' : 'xa',
'sources' : files('xa.c')
}
# nuv demux
vlc_modules += {
'name' : 'nuv',
'sources' : files('nuv.c')
}
# tta demux
vlc_modules += {
'name' : 'tta',
'sources' : files('tta.c')
}
# VC1 demux
vlc_modules += {
'name' : 'vc1',
'sources' : files('vc1.c')
}
# CDG demux
vlc_modules += {
'name' : 'demux_cdg',
'sources' : files('cdg.c')
}
# SMF demux
vlc_modules += {
'name' : 'smf',
'sources' : files('smf.c')
}
# DMX Audio Music demux
vlc_modules += {
'name' : 'dmxmus',
'sources' : files('dmxmus.c')
}
# Image demux
vlc_modules += {
'name' : 'image',
'sources' : files('image.c')
}
# STL demux
vlc_modules += {
'name' : 'demux_stl',
'sources' : files('stl.c')
}
# ASF demux
vlc_modules += {
'name' : 'asf',
'sources' : files('asf/asf.c', 'asf/libasf.c', 'asf/asfpacket.c')
}
# AVI demux
vlc_modules += {
'name' : 'avi',
'sources' : files('avi/avi.c', 'avi/libavi.c')
}
# CAF demux
vlc_modules += {
'name' : 'caf',
'sources' : files('caf.c'),
'dependencies' : [m_lib]
}
# FFmpeg AVFormat demuxer
if avformat_dep.found()
avformat_extra_sources = []
if get_option('stream_outputs')
avformat_extra_sources += 'avformat/mux.c'
endif
vlc_modules += {
'name' : 'avformat',
'sources' : files(
'avformat/demux.c',
'avformat/avformat.c',
avformat_extra_sources
),
'dependencies' : [avformat_dep, avutil_dep],
'link_with' : [libavcodec_common]
}
endif
# Directory demuxer
vlc_modules += {
'name' : 'directory_demux',
'sources' : files('directory.c')
}
# ES demux
vlc_modules += {
'name' : 'es',
'sources' : files('mpeg/es.c', '../packetizer/dts_header.c')
}
# h.26x demux
vlc_modules += {
'name' : 'h26x',
'sources' : files('mpeg/h26x.c', '../packetizer/h264_nal.c')
}
# MKV demux
libebml_dep = dependency('libebml', required : get_option('matroska'))
libmatroska_dep = dependency('libmatroska', required : get_option('matroska'))
if libebml_dep.found() and libmatroska_dep.found()
vlc_modules += {
'name' : 'mkv',
'sources' : files(
'mkv/mkv.cpp',
'mkv/util.cpp',
'mkv/virtual_segment.cpp',
'mkv/matroska_segment.cpp',
'mkv/matroska_segment_parse.cpp',
'mkv/matroska_segment_seeker.cpp',
'mkv/demux.cpp',
'mkv/events.cpp',
'mkv/Ebml_parser.cpp',
'mkv/chapters.cpp',
'mkv/chapter_command.cpp',
'mkv/stream_io_callback.cpp',
'mp4/libmp4.c',
'../packetizer/dts_header.c',
),
'dependencies' : [libebml_dep, libmatroska_dep, z_lib]
}
endif
# MP4 demux
vlc_modules += {
'name' : 'mp4',
'sources' : files(
'mp4/mp4.c',
'mp4/fragments.c',
'mp4/libmp4.c',
'mp4/heif.c',
'mp4/essetup.c',
'mp4/meta.c',
'asf/asfpacket.c',
'mp4/attachments.c',
),
'dependencies' : [m_lib, z_lib]
}
# mpgv demux
vlc_modules += {
'name' : 'mpgv',
'sources' : files('mpeg/mpgv.c')
}
# Playlist demux
vlc_modules += {
'name' : 'playlist',
'sources' : files(
'playlist/asx.c',
'playlist/b4s.c',
'playlist/bdmv.c',
'playlist/dvb.c',
'playlist/ifo.c',
'playlist/itml.c',
'playlist/m3u.c',
'playlist/pls.c',
'playlist/podcast.c',
'playlist/qtl.c',
'playlist/ram.c',
'playlist/sgimb.c',
'playlist/wpl.c',
'playlist/wms.c',
'playlist/xspf.c',
'playlist/playlist.c')
}
# TS demux
aribb24_dep = dependency('aribb24', version : '>= 1.0.1', required : get_option('aribb24'))
libdvbpsi_dep = dependency('libdvbpsi', version : '>= 1.2.0', required : get_option('libdvbpsi'))
if libdvbpsi_dep.found()
arrib24_define = []
if aribb24_dep.found()
arrib24_define += '-DHAVE_ARIBB24=1'
endif
vlc_modules += {
'name' : 'ts',
'sources' : files(
'mpeg/ts.c',
'mpeg/ts_pes.c',
'mpeg/ts_pid.c',
'mpeg/ts_psi.c',
'mpeg/ts_si.c',
'mpeg/ts_psip.c',
'mpeg/ts_psip_dvbpsi_fixes.c',
'mpeg/ts_decoders.c',
'mpeg/ts_streams.c',
'mpeg/ts_scte.c',
'mpeg/sections.c',
'mpeg/mpeg4_iod.c',
'mpeg/ts_arib.c',
'mpeg/ts_sl.c',
'mpeg/ts_metadata.c',
'mpeg/ts_hotfixes.c',
'../mux/mpeg/csa.c',
'../mux/mpeg/tables.c',
'../mux/mpeg/tsutil.c',
'../codec/atsc_a65.c',
'../codec/opus_header.c',
),
'dependencies' : [libdvbpsi_dep, aribb24_dep],
'c_args' : arrib24_define
}
endif
# Adaptive streams demuxer
vlc_modules += {
'name' : 'adaptive',
'sources' : files(
# DASH specific sources
'dash/mpd/AdaptationSet.cpp',
'dash/mpd/AdaptationSet.h',
'dash/mpd/DASHCommonAttributesElements.cpp',
'dash/mpd/DASHCommonAttributesElements.h',
'dash/mpd/DASHSegment.cpp',
'dash/mpd/DASHSegment.h',
'dash/mpd/ContentDescription.cpp',
'dash/mpd/ContentDescription.h',
'dash/mpd/IsoffMainParser.cpp',
'dash/mpd/IsoffMainParser.h',
'dash/mpd/MPD.cpp',
'dash/mpd/MPD.h',
'dash/mpd/Profile.cpp',
'dash/mpd/Profile.hpp',
'dash/mpd/ProgramInformation.cpp',
'dash/mpd/ProgramInformation.h',
'dash/mpd/Representation.cpp',
'dash/mpd/Representation.h',
'dash/mpd/TemplatedUri.cpp',
'dash/mpd/TemplatedUri.hpp',
'dash/mp4/IndexReader.cpp',
'dash/mp4/IndexReader.hpp',
'dash/DASHManager.cpp',
'dash/DASHManager.h',
'dash/DASHStream.cpp',
'dash/DASHStream.hpp',
# HLS specific sources
'hls/playlist/M3U8.hpp',
'hls/playlist/M3U8.cpp',
'hls/playlist/Parser.hpp',
'hls/playlist/Parser.cpp',
'hls/playlist/HLSRepresentation.hpp',
'hls/playlist/HLSRepresentation.cpp',
'hls/playlist/HLSSegment.hpp',
'hls/playlist/HLSSegment.cpp',
'hls/playlist/Tags.hpp',
'hls/playlist/Tags.cpp',
'hls/HLSManager.hpp',
'hls/HLSManager.cpp',
'hls/HLSStreams.hpp',
'hls/HLSStreams.cpp',
'mpeg/timestamps.h',
'../meta_engine/ID3Meta.h',
# Smooth specific sources
'smooth/mp4/SmoothIndexReader.cpp',
'smooth/mp4/SmoothIndexReader.hpp',
'smooth/playlist/CodecParameters.cpp',
'smooth/playlist/CodecParameters.hpp',
'smooth/playlist/ForgedInitSegment.hpp',
'smooth/playlist/ForgedInitSegment.cpp',
'smooth/playlist/Manifest.hpp',
'smooth/playlist/Manifest.cpp',
'smooth/playlist/MemoryChunk.hpp',
'smooth/playlist/MemoryChunk.cpp',
'smooth/playlist/SmoothParser.hpp',
'smooth/playlist/SmoothParser.cpp',
'smooth/playlist/QualityLevel.cpp',
'smooth/playlist/QualityLevel.hpp',
'smooth/playlist/SmoothSegment.hpp',
'smooth/playlist/SmoothSegment.cpp',
'smooth/SmoothManager.hpp',
'smooth/SmoothManager.cpp',
'smooth/SmoothStream.hpp',
'smooth/SmoothStream.cpp',
'../mux/mp4/libmp4mux.c',
'../mux/mp4/libmp4mux.h',
'../packetizer/h264_nal.c',
'../packetizer/hevc_nal.c',
# General adaptive sources
# TODO: Remove this source once the adaptive
# sources are move to a convenience library
# (needed for tests)
'adaptive/adaptive.cpp',
'adaptive/playlist/BaseAdaptationSet.cpp',
'adaptive/playlist/BaseAdaptationSet.h',
'adaptive/playlist/BasePeriod.cpp',
'adaptive/playlist/BasePeriod.h',
'adaptive/playlist/BasePlaylist.cpp',
'adaptive/playlist/BasePlaylist.hpp',
'adaptive/playlist/BaseRepresentation.cpp',
'adaptive/playlist/BaseRepresentation.h',
'adaptive/playlist/CodecDescription.cpp',
'adaptive/playlist/CodecDescription.hpp',
'adaptive/playlist/CommonAttributesElements.cpp',
'adaptive/playlist/CommonAttributesElements.h',
'adaptive/playlist/ICanonicalUrl.hpp',
'adaptive/playlist/Inheritables.hpp',
'adaptive/playlist/Inheritables.cpp',
'adaptive/playlist/Role.hpp',
'adaptive/playlist/Role.cpp',
'adaptive/playlist/Segment.cpp',
'adaptive/playlist/Segment.h',
'adaptive/playlist/SegmentBase.cpp',
'adaptive/playlist/SegmentBase.h',
'adaptive/playlist/SegmentBaseType.cpp',
'adaptive/playlist/SegmentBaseType.hpp',
'adaptive/playlist/SegmentChunk.cpp',
'adaptive/playlist/SegmentChunk.hpp',
'adaptive/playlist/SegmentList.cpp',
'adaptive/playlist/SegmentList.h',
'adaptive/playlist/SegmentTimeline.cpp',
'adaptive/playlist/SegmentTimeline.h',
'adaptive/playlist/SegmentInformation.cpp',
'adaptive/playlist/SegmentInformation.hpp',
'adaptive/playlist/SegmentTemplate.cpp',
'adaptive/playlist/SegmentTemplate.h',
'adaptive/playlist/Url.cpp',
'adaptive/playlist/Url.hpp',
'adaptive/playlist/Templates.hpp',
'adaptive/encryption/CommonEncryption.cpp',
'adaptive/encryption/CommonEncryption.hpp',
'adaptive/encryption/Keyring.cpp',
'adaptive/encryption/Keyring.hpp',
'adaptive/logic/AbstractAdaptationLogic.cpp',
'adaptive/logic/AbstractAdaptationLogic.h',
'adaptive/logic/AlwaysBestAdaptationLogic.cpp',
'adaptive/logic/AlwaysBestAdaptationLogic.h',
'adaptive/logic/AlwaysLowestAdaptationLogic.cpp',
'adaptive/logic/AlwaysLowestAdaptationLogic.hpp',
'adaptive/logic/BufferingLogic.cpp',
'adaptive/logic/BufferingLogic.hpp',
'adaptive/logic/IDownloadRateObserver.h',
'adaptive/logic/NearOptimalAdaptationLogic.cpp',
'adaptive/logic/NearOptimalAdaptationLogic.hpp',
'adaptive/logic/PredictiveAdaptationLogic.hpp',
'adaptive/logic/PredictiveAdaptationLogic.cpp',
'adaptive/logic/RateBasedAdaptationLogic.h',
'adaptive/logic/RateBasedAdaptationLogic.cpp',
'adaptive/logic/Representationselectors.hpp',
'adaptive/logic/Representationselectors.cpp',
'adaptive/logic/RoundRobinLogic.cpp',
'adaptive/logic/RoundRobinLogic.hpp',
'adaptive/mp4/AtomsReader.cpp',
'adaptive/mp4/AtomsReader.hpp',
'adaptive/http/AuthStorage.cpp',
'adaptive/http/AuthStorage.hpp',
'adaptive/http/BytesRange.cpp',
'adaptive/http/BytesRange.hpp',
'adaptive/http/Chunk.cpp',
'adaptive/http/Chunk.h',
'adaptive/http/ConnectionParams.cpp',
'adaptive/http/ConnectionParams.hpp',
'adaptive/http/Downloader.cpp',
'adaptive/http/Downloader.hpp',
'adaptive/http/HTTPConnection.cpp',
'adaptive/http/HTTPConnection.hpp',
'adaptive/http/HTTPConnectionManager.cpp',
'adaptive/http/HTTPConnectionManager.h',
'adaptive/plumbing/CommandsQueue.cpp',
'adaptive/plumbing/CommandsQueue.hpp',
'adaptive/plumbing/Demuxer.cpp',
'adaptive/plumbing/Demuxer.hpp',
'adaptive/plumbing/FakeESOut.cpp',
'adaptive/plumbing/FakeESOut.hpp',
'adaptive/plumbing/FakeESOutID.cpp',
'adaptive/plumbing/FakeESOutID.hpp',
'adaptive/plumbing/SourceStream.cpp',
'adaptive/plumbing/SourceStream.hpp',
'adaptive/AbstractSource.hpp',
'adaptive/ID.hpp',
'adaptive/ID.cpp',
'adaptive/PlaylistManager.cpp',
'adaptive/PlaylistManager.h',
'adaptive/SegmentTracker.cpp',
'adaptive/SegmentTracker.hpp',
'adaptive/SharedResources.cpp',
'adaptive/SharedResources.hpp',
'adaptive/StreamFormat.cpp',
'adaptive/StreamFormat.hpp',
'adaptive/Streams.cpp',
'adaptive/Streams.hpp',
'adaptive/Time.hpp',
'adaptive/tools/Conversions.hpp',
'adaptive/tools/Conversions.cpp',
'adaptive/tools/Debug.hpp',
'adaptive/tools/FormatNamespace.cpp',
'adaptive/tools/FormatNamespace.hpp',
'adaptive/tools/Helper.cpp',
'adaptive/tools/Helper.h',
'adaptive/tools/MovingAverage.hpp',
'adaptive/tools/Properties.hpp',
'adaptive/tools/Retrieve.cpp',
'adaptive/tools/Retrieve.hpp',
'adaptive/xml/DOMHelper.cpp',
'adaptive/xml/DOMHelper.h',
'adaptive/xml/DOMParser.cpp',
'adaptive/xml/DOMParser.h',
'adaptive/xml/Node.cpp',
'adaptive/xml/Node.h',
'mp4/libmp4.c',
'mp4/libmp4.h',
'../meta_engine/ID3Tag.h',
),
'include_directories' : include_directories('adaptive', './'),
'dependencies' : [socket_libs, m_lib, z_lib],
'link_with': vlc_http_lib,
# TODO: Add optional GCRYPT dependency!
}
# noseek demux
vlc_modules += {
'name' : 'noseek',
'sources' : files('filter/noseek.c')
}

29
modules/gui/meson.build Normal file
View File

@ -0,0 +1,29 @@
# Graphical user interface (GUI) modules
# ncurses text-based interface
ncursesw_dep = dependency('ncursesw', required: get_option('ncurses'))
if ncursesw_dep.found()
vlc_modules += {
'name' : 'ncurses',
'sources' : files('ncurses.c'),
'dependencies' : [m_lib, threads_dep, ncursesw_dep]
}
endif
# Minimal macOS interface
if get_option('minimal_macosx').require(have_osx).allowed()
vlc_modules += {
'name' : 'minimal_macosx',
'sources' : files(
'minimal_macosx/intf.m',
'minimal_macosx/misc.m',
'minimal_macosx/VLCMinimalVoutWindow.m',
'minimal_macosx/macosx.c'
),
'dependencies' : [cocoa_dep],
'objc_args' : ['-fobjc-arc', '-fobjc-exceptions']
}
endif
# Qt interface module
subdir('qt')

570
modules/gui/qt/meson.build Normal file
View File

@ -0,0 +1,570 @@
#
# Qt-based interface module
#
qt5 = import('qt5')
qt_include_dir = include_directories('.')
qt_extra_deps = []
qt_extra_flags = []
qt5_dep = dependency('qt5',
modules : [
'Core', 'Gui', 'Widgets', 'Svg', 'Qml',
'Quick', 'QuickWidgets', 'QuickControls2',
],
required: get_option('qt'))
moc_headers = files(
'dialogs/bookmarks/bookmarks.hpp',
'dialogs/dialogs/dialogmodel.hpp',
'dialogs/dialogs_provider.hpp',
'dialogs/epg/EPGChannels.hpp',
'dialogs/epg/EPGProgram.hpp',
'dialogs/epg/EPGRuler.hpp',
'dialogs/epg/EPGView.hpp',
'dialogs/epg/EPGWidget.hpp',
'dialogs/epg/epg.hpp',
'dialogs/errors/errors.hpp',
'dialogs/extended/extended.hpp',
'dialogs/extended/extended_panels.hpp',
'dialogs/extensions/extensions.hpp',
'dialogs/extensions/extensions_manager.hpp',
'dialogs/fingerprint/chromaprint.hpp',
'dialogs/fingerprint/fingerprintdialog.hpp',
'dialogs/firstrun/firstrunwizard.hpp',
'dialogs/gototime/gototime.hpp',
'dialogs/help/aboutmodel.hpp',
'dialogs/help/help.hpp',
'dialogs/mediainfo/info_panels.hpp',
'dialogs/mediainfo/info_widgets.hpp',
'dialogs/mediainfo/mediainfo.hpp',
'dialogs/messages/messages.hpp',
'dialogs/open/open.hpp',
'dialogs/open/open_panels.hpp',
'dialogs/open/openurl.hpp',
'dialogs/plugins/addons_manager.hpp',
'dialogs/plugins/plugins.hpp',
'dialogs/podcast/podcast_configuration.hpp',
'dialogs/preferences/complete_preferences.hpp',
'dialogs/preferences/expert_model.hpp',
'dialogs/preferences/expert_view.hpp',
'dialogs/preferences/preferences.hpp',
'dialogs/preferences/preferences_widgets.hpp',
'dialogs/preferences/simple_preferences.hpp',
'dialogs/sout/convert.hpp',
'dialogs/sout/profile_selector.hpp',
'dialogs/sout/sout.hpp',
'dialogs/sout/sout_widgets.hpp',
'dialogs/toolbar/controlbar_profile.hpp',
'dialogs/toolbar/controlbar_profile_model.hpp',
'dialogs/playlists/playlists.hpp',
'dialogs/vlm/vlm.hpp',
'maininterface/compositor.hpp',
'maininterface/compositor_dummy.hpp',
'maininterface/interface_window_handler.hpp',
'maininterface/mainctx.hpp',
'maininterface/mainui.hpp',
'maininterface/videosurface.hpp',
'maininterface/video_window_handler.hpp',
'medialibrary/medialib.hpp',
'medialibrary/mlalbum.hpp',
'medialibrary/mlalbummodel.hpp',
'medialibrary/mlalbumtrack.hpp',
'medialibrary/mlalbumtrackmodel.hpp',
'medialibrary/mlartist.hpp',
'medialibrary/mlartistmodel.hpp',
'medialibrary/mlbookmarkmodel.hpp',
'medialibrary/mlbasemodel.hpp',
'medialibrary/mlfoldersmodel.hpp',
'medialibrary/mlgenremodel.hpp',
'medialibrary/mllistcache.hpp',
'medialibrary/mlthreadpool.hpp',
'medialibrary/mlqmltypes.hpp',
'medialibrary/mlrecentsmodel.hpp',
'medialibrary/mlrecentsvideomodel.hpp',
'medialibrary/mlurlmodel.hpp',
'medialibrary/mlvideo.hpp',
'medialibrary/mlvideomodel.hpp',
'medialibrary/mlplaylistlistmodel.hpp',
'medialibrary/mlplaylistmodel.hpp',
'medialibrary/mlvideofoldersmodel.hpp',
'medialibrary/mlvideogroupsmodel.hpp',
'medialibrary/thumbnailcollector.hpp',
'menus/custom_menus.hpp',
'menus/qml_menu_wrapper.hpp',
'menus/menus.hpp',
'network/networkdevicemodel.hpp',
'network/networksourcesmodel.hpp',
'network/networkmediamodel.hpp',
'network/servicesdiscoverymodel.hpp',
'network/standardpathmodel.hpp',
'style/systempalette.hpp',
'player/input_models.hpp',
'player/player_controller.hpp',
'player/player_controlbar_model.hpp',
'player/control_list_model.hpp',
'player/control_list_filter.hpp',
'playlist/playlist_common.hpp',
'playlist/playlist_controller.hpp',
'playlist/playlist_item.hpp',
'playlist/playlist_model.hpp',
'util/asynctask.hpp',
'util/audio_device_model.hpp',
'util/cliplistmodel.hpp',
'util/color_scheme_model.hpp',
'util/color_svg_image_provider.hpp',
'util/imageluminanceextractor.hpp',
'util/i18n.hpp',
'util/keyhelper.hpp',
'util/navigation_history.hpp',
'util/item_key_event_filter.hpp',
'util/mouse_event_filter.hpp',
'util/effects_image_provider.hpp',
'util/flickable_scroll_handler.hpp',
'util/qvlcapp.hpp',
'util/renderer_manager.hpp',
'util/selectable_list_model.hpp',
'util/sortfilterproxymodel.hpp',
'util/validators.hpp',
'util/varchoicemodel.hpp',
'util/variables.hpp',
'util/vlctick.hpp',
'util/qmlinputitem.hpp',
'util/qsgroundedrectangularimagenode.hpp',
'widgets/native/animators.hpp',
'widgets/native/csdthemeimage.hpp',
'widgets/native/customwidgets.hpp',
'widgets/native/interface_widgets.hpp',
'widgets/native/navigation_attached.hpp',
'widgets/native/mlfolderseditor.hpp',
'widgets/native/roundimage.hpp',
'widgets/native/searchlineedit.hpp',
'widgets/native/viewblockingrectangle.hpp',
)
if host_system == 'windows'
moc_headers += files(
'maininterface/mainctx_win32.hpp',
'maininterface/compositor_win7.hpp',
)
if cdata.has('HAVE_DCOMP_H')
moc_headers += files(
'maininterface/compositor_dcomp.hpp',
'maininterface/compositor_dcomp_acrylicsurface.hpp',
'maininterface/compositor_dcomp_uisurface.hpp',
)
endif
endif
if (xcb_dep.found() and
xcb_damage_dep.found() and
xcb_xfixes_dep.found())
moc_headers += files(
'maininterface/compositor_x11.hpp',
'maininterface/compositor_x11_renderclient.hpp',
'maininterface/compositor_x11_renderwindow.hpp',
'maininterface/compositor_x11_uisurface.hpp',
'maininterface/compositor_x11_utils.hpp',
)
endif
some_sources = files(
'qt.cpp',
'qt.hpp',
'plugins.hpp',
'dialogs/bookmarks/bookmarks.cpp',
'dialogs/bookmarks/bookmarks.hpp',
'dialogs/dialogs/dialogmodel.cpp',
'dialogs/dialogs/dialogmodel.hpp',
'dialogs/dialogs_provider.cpp',
'dialogs/dialogs_provider.hpp',
'dialogs/epg/EPGChannels.cpp',
'dialogs/epg/EPGChannels.hpp',
'dialogs/epg/EPGItem.cpp',
'dialogs/epg/EPGItem.hpp',
'dialogs/epg/EPGProgram.cpp',
'dialogs/epg/EPGProgram.hpp',
'dialogs/epg/EPGRuler.cpp',
'dialogs/epg/EPGRuler.hpp',
'dialogs/epg/EPGView.cpp',
'dialogs/epg/EPGView.hpp',
'dialogs/epg/EPGWidget.cpp',
'dialogs/epg/EPGWidget.hpp',
'dialogs/epg/epg.cpp',
'dialogs/epg/epg.hpp',
'dialogs/errors/errors.cpp',
'dialogs/errors/errors.hpp',
'dialogs/extended/extended.cpp',
'dialogs/extended/extended.hpp',
'dialogs/extended/extended_panels.cpp',
'dialogs/extended/extended_panels.hpp',
'dialogs/extensions/extensions.cpp',
'dialogs/extensions/extensions.hpp',
'dialogs/extensions/extensions_manager.cpp',
'dialogs/extensions/extensions_manager.hpp',
'dialogs/fingerprint/chromaprint.cpp',
'dialogs/fingerprint/chromaprint.hpp',
'dialogs/fingerprint/fingerprintdialog.cpp',
'dialogs/fingerprint/fingerprintdialog.hpp',
'dialogs/firstrun/firstrunwizard.cpp',
'dialogs/firstrun/firstrunwizard.hpp',
'dialogs/gototime/gototime.cpp',
'dialogs/gototime/gototime.hpp',
'dialogs/help/aboutmodel.cpp',
'dialogs/help/aboutmodel.hpp',
'dialogs/help/help.cpp',
'dialogs/help/help.hpp',
'dialogs/mediainfo/info_panels.cpp',
'dialogs/mediainfo/info_panels.hpp',
'dialogs/mediainfo/info_widgets.cpp',
'dialogs/mediainfo/info_widgets.hpp',
'dialogs/mediainfo/mediainfo.cpp',
'dialogs/mediainfo/mediainfo.hpp',
'dialogs/messages/messages.cpp',
'dialogs/messages/messages.hpp',
'dialogs/open/open.cpp',
'dialogs/open/open.hpp',
'dialogs/open/open_panels.cpp',
'dialogs/open/open_panels.hpp',
'dialogs/open/openurl.cpp',
'dialogs/open/openurl.hpp',
'dialogs/plugins/addons_manager.cpp',
'dialogs/plugins/addons_manager.hpp',
'dialogs/plugins/plugins.cpp',
'dialogs/plugins/plugins.hpp',
'dialogs/podcast/podcast_configuration.cpp',
'dialogs/podcast/podcast_configuration.hpp',
'dialogs/preferences/complete_preferences.cpp',
'dialogs/preferences/complete_preferences.hpp',
'dialogs/preferences/expert_model.cpp',
'dialogs/preferences/expert_model.hpp',
'dialogs/preferences/expert_view.cpp',
'dialogs/preferences/expert_view.hpp',
'dialogs/preferences/preferences.cpp',
'dialogs/preferences/preferences.hpp',
'dialogs/preferences/preferences_widgets.cpp',
'dialogs/preferences/preferences_widgets.hpp',
'dialogs/preferences/simple_preferences.cpp',
'dialogs/preferences/simple_preferences.hpp',
'dialogs/sout/convert.cpp',
'dialogs/sout/convert.hpp',
'dialogs/sout/profile_selector.cpp',
'dialogs/sout/profile_selector.hpp',
'dialogs/sout/profiles.hpp',
'dialogs/sout/sout.cpp',
'dialogs/sout/sout.hpp',
'dialogs/sout/sout_widgets.cpp',
'dialogs/sout/sout_widgets.hpp',
'dialogs/toolbar/controlbar_profile.hpp',
'dialogs/toolbar/controlbar_profile.cpp',
'dialogs/toolbar/controlbar_profile_model.cpp',
'dialogs/toolbar/controlbar_profile_model.hpp',
'dialogs/vlm/vlm.cpp',
'dialogs/playlists/playlists.cpp',
'dialogs/playlists/playlists.hpp',
'maininterface/compositor.hpp',
'maininterface/compositor.cpp',
'maininterface/compositor_dummy.hpp',
'maininterface/compositor_dummy.cpp',
'maininterface/interface_window_handler.cpp',
'maininterface/interface_window_handler.hpp',
'maininterface/mainctx.cpp',
'maininterface/mainctx.hpp',
'maininterface/mainui.cpp',
'maininterface/mainui.hpp',
'maininterface/videosurface.cpp',
'maininterface/videosurface.hpp',
'maininterface/video_window_handler.cpp',
'maininterface/video_window_handler.hpp',
'medialibrary/medialib.cpp',
'medialibrary/medialib.hpp',
'medialibrary/mlalbum.cpp',
'medialibrary/mlalbum.hpp',
'medialibrary/mlalbummodel.cpp',
'medialibrary/mlalbummodel.hpp',
'medialibrary/mlalbumtrack.cpp',
'medialibrary/mlalbumtrack.hpp',
'medialibrary/mlalbumtrackmodel.cpp',
'medialibrary/mlalbumtrackmodel.hpp',
'medialibrary/mlartist.cpp',
'medialibrary/mlartist.hpp',
'medialibrary/mlartistmodel.cpp',
'medialibrary/mlartistmodel.hpp',
'medialibrary/mlbasemodel.cpp',
'medialibrary/mlbasemodel.hpp',
'medialibrary/mlbookmarkmodel.cpp',
'medialibrary/mlbookmarkmodel.hpp',
'medialibrary/mlevent.hpp',
'medialibrary/mlfolder.cpp',
'medialibrary/mlfolder.hpp',
'medialibrary/mlfoldersmodel.cpp',
'medialibrary/mlfoldersmodel.hpp',
'medialibrary/mlgenre.cpp',
'medialibrary/mlgenre.hpp',
'medialibrary/mlgenremodel.cpp',
'medialibrary/mlgenremodel.hpp',
'medialibrary/mlgroup.cpp',
'medialibrary/mlgroup.hpp',
'medialibrary/mlhelper.cpp',
'medialibrary/mlhelper.hpp',
'medialibrary/mllistcache.cpp',
'medialibrary/mllistcache.hpp',
'medialibrary/mlthreadpool.cpp',
'medialibrary/mlthreadpool.hpp',
'medialibrary/mlqmltypes.hpp',
'medialibrary/mlqueryparams.cpp',
'medialibrary/mlqueryparams.hpp',
'medialibrary/mlrecentsmodel.cpp',
'medialibrary/mlrecentsmodel.hpp',
'medialibrary/mlrecentsvideomodel.cpp',
'medialibrary/mlrecentsvideomodel.hpp',
'medialibrary/mlurlmodel.cpp',
'medialibrary/mlurlmodel.hpp',
'medialibrary/mlvideo.cpp',
'medialibrary/mlvideo.hpp',
'medialibrary/mlvideofoldersmodel.cpp',
'medialibrary/mlvideofoldersmodel.hpp',
'medialibrary/mlvideogroupsmodel.cpp',
'medialibrary/mlvideogroupsmodel.hpp',
'medialibrary/mlvideomodel.cpp',
'medialibrary/mlvideomodel.hpp',
'medialibrary/mlplaylist.cpp',
'medialibrary/mlplaylist.hpp',
'medialibrary/mlplaylistlistmodel.cpp',
'medialibrary/mlplaylistlistmodel.hpp',
'medialibrary/mlplaylistmedia.cpp',
'medialibrary/mlplaylistmedia.hpp',
'medialibrary/mlplaylistmodel.cpp',
'medialibrary/mlplaylistmodel.hpp',
'medialibrary/thumbnailcollector.hpp',
'medialibrary/thumbnailcollector.cpp',
'medialibrary/mlcustomcover.hpp',
'medialibrary/mlcustomcover.cpp',
'menus/custom_menus.cpp',
'menus/custom_menus.hpp',
'menus/qml_menu_wrapper.cpp',
'menus/qml_menu_wrapper.hpp',
'menus/menus.cpp',
'menus/menus.hpp',
'network/mediatreelistener.cpp',
'network/mediatreelistener.hpp',
'network/networkdevicemodel.cpp',
'network/networkdevicemodel.hpp',
'network/networksourcesmodel.cpp',
'network/networksourcesmodel.hpp',
'network/networkmediamodel.cpp',
'network/networkmediamodel.hpp',
'network/servicesdiscoverymodel.cpp',
'network/servicesdiscoverymodel.hpp',
'network/standardpathmodel.cpp',
'network/standardpathmodel.hpp',
'style/qtthemeprovider.hpp',
'style/systempalette.cpp',
'style/systempalette.hpp',
'style/defaultthemeproviders.hpp',
'style/systempalettethemeprovider.cpp',
'player/input_models.cpp',
'player/input_models.hpp',
'player/player_controller.cpp',
'player/player_controller.hpp',
'player/player_controller_p.hpp',
'player/player_controlbar_model.cpp',
'player/player_controlbar_model.hpp',
'player/control_list_model.cpp',
'player/control_list_model.hpp',
'player/control_list_filter.cpp',
'player/control_list_filter.hpp',
'playlist/media.hpp',
'playlist/playlist_common.cpp',
'playlist/playlist_common.hpp',
'playlist/playlist_controller.cpp',
'playlist/playlist_controller.hpp',
'playlist/playlist_controller_p.hpp',
'playlist/playlist_item.cpp',
'playlist/playlist_item.hpp',
'playlist/playlist_model.cpp',
'playlist/playlist_model.hpp',
'playlist/playlist_model_p.hpp',
'util/asynctask.hpp',
'util/audio_device_model.cpp',
'util/audio_device_model.hpp',
'util/cliplistmodel.cpp',
'util/cliplistmodel.hpp',
'util/color_scheme_model.cpp',
'util/color_scheme_model.hpp',
'util/color_svg_image_provider.cpp',
'util/color_svg_image_provider.hpp',
'util/covergenerator.cpp',
'util/covergenerator.hpp',
'util/imageluminanceextractor.cpp',
'util/imageluminanceextractor.hpp',
'util/imagehelper.cpp',
'util/imagehelper.hpp',
'util/i18n.cpp',
'util/i18n.hpp',
'util/keyhelper.cpp',
'util/keyhelper.hpp',
'util/listcacheloader.hpp',
'util/navigation_history.cpp',
'util/navigation_history.hpp',
'util/item_key_event_filter.cpp',
'util/item_key_event_filter.hpp',
'util/flickable_scroll_handler.cpp',
'util/flickable_scroll_handler.hpp',
'util/qt_dirs.cpp',
'util/qt_dirs.hpp',
'util/qvlcapp.hpp',
'util/proxycolumnmodel.hpp',
'util/registry.cpp',
'util/registry.hpp',
'util/renderer_manager.cpp',
'util/renderer_manager.hpp',
'util/selectable_list_model.cpp',
'util/selectable_list_model.hpp',
'util/singleton.hpp',
'util/sortfilterproxymodel.cpp',
'util/sortfilterproxymodel.hpp',
'util/soutchain.cpp',
'util/soutchain.hpp',
'util/validators.cpp',
'util/validators.hpp',
'util/varcommon_p.hpp',
'util/varchoicemodel.cpp',
'util/varchoicemodel.hpp',
'util/variables.cpp',
'util/variables.hpp',
'util/vlctick.cpp',
'util/vlctick.hpp',
'util/qmlinputitem.hpp',
'util/mouse_event_filter.cpp',
'util/mouse_event_filter.hpp',
'util/effects_image_provider.cpp',
'util/effects_image_provider.hpp',
'util/qsgroundedrectangularimagenode.cpp',
'util/qsgroundedrectangularimagenode.hpp',
'widgets/native/animators.cpp',
'widgets/native/animators.hpp',
'widgets/native/customwidgets.cpp',
'widgets/native/customwidgets.hpp',
'widgets/native/csdthemeimage.cpp',
'widgets/native/csdthemeimage.hpp',
'widgets/native/interface_widgets.cpp',
'widgets/native/interface_widgets.hpp',
'widgets/native/navigation_attached.cpp',
'widgets/native/navigation_attached.hpp',
'widgets/native/mlfolderseditor.cpp',
'widgets/native/mlfolderseditor.hpp',
'widgets/native/qvlcframe.cpp',
'widgets/native/qvlcframe.hpp',
'widgets/native/roundimage.cpp',
'widgets/native/roundimage.hpp',
'widgets/native/searchlineedit.cpp',
'widgets/native/searchlineedit.hpp',
'widgets/native/viewblockingrectangle.cpp',
'widgets/native/viewblockingrectangle.hpp',
)
if host_system == 'windows'
some_sources += files(
'maininterface/mainctx_win32.cpp',
'maininterface/mainctx_win32.hpp',
'maininterface/compositor_win7.cpp',
'maininterface/compositor_win7.hpp',
'style/windowsthemeprovider.cpp',
)
if cdata.has('HAVE_DCOMP_H')
some_sources += files(
'maininterface/compositor_dcomp.cpp',
'maininterface/compositor_dcomp_acrylicsurface.cpp',
'maininterface/compositor_dcomp_uisurface.cpp',
)
endif
endif
if (xcb_dep.found() and
xcb_damage_dep.found() and
xcb_xfixes_dep.found())
some_sources += files(
'maininterface/compositor_x11.cpp',
'maininterface/compositor_x11_renderclient.cpp',
'maininterface/compositor_x11_renderwindow.cpp',
'maininterface/compositor_x11_uisurface.cpp',
'maininterface/compositor_x11_utils.cpp',
)
endif
ui_sources = files(
'dialogs/extended/equalizer.ui',
'dialogs/extended/video_effects.ui',
'dialogs/fingerprint/fingerprintdialog.ui',
'dialogs/firstrun/firstrunwizard.ui',
'dialogs/help/about.ui',
'dialogs/help/update.ui',
'dialogs/messages/messages_panel.ui',
'dialogs/open/open.ui',
'dialogs/open/open_capture.ui',
'dialogs/open/open_disk.ui',
'dialogs/open/open_file.ui',
'dialogs/open/open_net.ui',
'dialogs/podcast/podcast_configuration.ui',
'dialogs/preferences/sprefs_audio.ui',
'dialogs/preferences/sprefs_input.ui',
'dialogs/preferences/sprefs_interface.ui',
'dialogs/preferences/sprefs_medialibrary.ui',
'dialogs/preferences/sprefs_subtitles.ui',
'dialogs/preferences/sprefs_video.ui',
'dialogs/sout/profiles.ui',
'dialogs/sout/sout.ui',
'dialogs/vlm/vlm.ui',
)
if qt5_dep.found()
qt5pre_files = qt5.preprocess(ui_files : ui_sources,
moc_headers : moc_headers,
qresources : files('vlc.qrc'),
include_directories: qt_include_dir)
qt_sources = files('qt.cpp')
if host_system == 'windows'
qt_extra_deps += [
cc.find_library('comctl32'),
cc.find_library('d3d11'),
]
endif
if x11_dep.found()
qt5_x11_dep = dependency('qt5',
modules: ['X11Extras'],
required: get_option('qt'))
qt_extra_flags += '-DQT5_HAS_X11'
qt_extra_deps += [x11_dep, qt5_x11_dep]
endif
if xcb_dep.found()
qt_extra_deps += xcb_dep
qt_extra_flags += '-DQT5_HAS_XCB'
if xcb_damage_dep.found() and xcb_xfixes_dep.found()
qt_extra_deps += [
xcb_render_dep,
xcb_composite_dep,
xcb_damage_dep,
xcb_xfixes_dep
]
qt_extra_flags += '-DQT5_HAS_X11_COMPOSITOR'
endif
endif
vlc_modules += {
'name' : 'qt',
'sources' : [qt5pre_files, qt_sources, some_sources],
'dependencies' : [qt5_dep, qt_extra_deps],
'include_directories' : qt_include_dir,
'c_args' : qt_extra_flags,
'cpp_args' : qt_extra_flags
}
endif

View File

@ -0,0 +1,48 @@
# Memory keystore
vlc_modules += {
'name' : 'memory_keystore',
'sources' : files('memory.c', 'list_util.c')
}
# File keystore
file_keystore_extra_sources = []
file_keystore_extra_deps = []
if host_system == 'windows'
file_keystore_extra_sources += 'file_crypt_win32.c'
file_keystore_extra_deps += cc.find_library('crypt32', required: true)
endif
# TODO: Add Android-specific sources
vlc_modules += {
'name' : 'file_keystore',
'sources' : files('file.c', 'list_util.c', file_keystore_extra_sources),
'dependencies' : file_keystore_extra_deps
}
# libsecret keystore
libsecret_dep = dependency('libsecret-1', version: '>= 0.18', required: get_option('libsecret'))
if libsecret_dep.found()
vlc_modules += {
'name' : 'secret',
'sources' : files('secret.c'),
'dependencies' : [libsecret_dep]
}
endif
# KWallet keystore
if dbus_dep.found()
vlc_modules += {
'name' : 'kwallet',
'sources' : files('kwallet.c'),
'dependencies' : [dbus_dep, m_lib]
}
endif
# Keychain (for appleOSes)
if host_system == 'darwin'
vlc_modules += {
'name' : 'keychain',
'sources' : files('keychain.m', 'list_util.c'),
'objc_args' : ['-fobjc-arc'],
'dependencies' : [foundation_dep, security_dep]
}
endif

View File

@ -0,0 +1,34 @@
# Console logger module
vlc_modules += {
'name' : 'console_logger',
'sources' : files(['console.c']),
}
# File logger
vlc_modules += {
'name' : 'file_logger',
'sources' : files('file.c')
}
# Syslog logger
if cc.check_header('syslog.h')
vlc_modules += {
'name' : 'syslog',
'sources' : files('syslog.c')
}
endif
# Systemd journal logger
libsystemd_dep = dependency('libsystemd', required : false)
if libsystemd_dep.found()
vlc_modules += {
'name' : 'sd_journal',
'sources' : files('journal.c'),
'dependencies' : [libsystemd_dep]
}
endif
vlc_modules += {
'name' : 'json_tracer',
'sources' : files('json.c')
}

66
modules/lua/meson.build Normal file
View File

@ -0,0 +1,66 @@
lua_dep = dependency(
[
'lua',
'lua-5.4', 'lua54',
'lua-5.3', 'lua53',
'lua-5.2', 'lua52',
'lua-5.1', 'lua51',
],
version: '>=5.1', required: false)
if not get_option('lua').disabled() and not lua_dep.found()
error('Could not find lua. Lua is needed for some interfaces (rc, telnet, http) as well as many other custom scripts. Use -Dlua=disabled to ignore this error.')
endif
if lua_dep.found() and get_option('lua').enabled()
lua_sources = files(
'extension.c',
'extension.h',
'extension_thread.c',
'intf.c',
'meta.c',
'stream_filter.c',
'services_discovery.c',
'vlc.c',
'vlc.h',
'libs.h',
'libs/configuration.c',
'libs/equalizer.c',
'libs/gettext.c',
'libs/dialog.c',
'libs/httpd.c',
'libs/input.c',
'libs/input.h',
'libs/messages.c',
'libs/misc.c',
'libs/misc.h',
'libs/net.c',
'libs/objects.c',
'libs/osd.c',
'libs/playlist.c',
'libs/sd.c',
'libs/stream.c',
'libs/strings.c',
'libs/variables.c',
'libs/variables.h',
'libs/video.c',
'libs/vlm.c',
'libs/volume.c',
'libs/xml.c',
'libs/io.c',
'libs/errno.c',
'libs/rand.c',
'libs/renderers.c',
'libs/medialibrary.c',
)
if host_system == 'windows'
lua_sources += files('libs/win.c')
endif
vlc_modules += {
'name': 'lua',
'sources': lua_sources,
'dependencies': [lua_dep, socket_libs]
}
endif

298
modules/meson.build Normal file
View File

@ -0,0 +1,298 @@
#
# VLC plugins
# This file contains the top-level build definition for VLC
# plugins, in the subdirectories are the actual build definitions
# for the individual plugins.
#
# Module dependencies
# The following section contains dependencies that are needed
# by multiple module types. (There is no need to put dependencies
# here that are used by multiple modules in the same subdirectory)
# Check for X C bindings (XCB)
if (host_system != 'darwin' and host_system != 'windows') or get_option('xcb').enabled()
xcb_dep = dependency('xcb', version: '>= 1.6', required: get_option('xcb'))
xcb_composite_dep = dependency('xcb-composite', required: get_option('xcb'))
xcb_randr_dep = dependency('xcb-randr', version: '>= 1.3', required: get_option('xcb'))
xcb_render_dep = dependency('xcb-render', required: get_option('xcb'))
xcb_shm_dep = dependency('xcb-shm', version: '>= 1.9.2', required: get_option('xcb'))
xcb_xkb_dep = dependency('xcb-xkb', required: get_option('xcb'))
xcb_keysyms_dep = dependency('xcb-keysyms', version: '>= 0.3.4', required: get_option('xcb'))
xproto_dep = dependency('xproto', required: get_option('xcb'))
xcb_damage_dep = dependency('xcb-damage', required: get_option('xcb'))
xcb_xfixes_dep = dependency('xcb-xfixes', required: get_option('xcb'))
else
xcb_dep = dependency('', required : false)
endif
# Check for Wayland
if (host_system != 'darwin' and host_system != 'windows') or get_option('xcb').enabled()
wayland_scanner_dep = dependency('wayland-scanner', version : '>= 1.15',
required : get_option('wayland'), native : true)
wayland_protocols_dep = dependency('wayland-protocols', version: '>= 1.15',
required : get_option('wayland'))
wayland_deps = [
dependency('wayland-client', version : '>= 1.5.91', required : get_option('wayland')),
dependency('wayland-cursor', required : get_option('wayland')),
dependency('wayland-egl', required : get_option('wayland')),
wayland_scanner_dep,
wayland_protocols_dep
]
have_wayland = true
foreach iter_wayland_dep : wayland_deps
if (iter_wayland_dep.found() == false)
message('Wayland disabled. (not all needed dependencies found)')
have_wayland = false
break
endif
endforeach
if have_wayland
wayland_scanner = find_program(
wayland_scanner_dep.get_pkgconfig_variable('wayland_scanner'),
native: true
)
wayland_protocols_dir = wayland_protocols_dep.get_pkgconfig_variable('pkgdatadir')
endif
else
have_wayland = false
endif
# Pulse audio
pulse_dep = dependency('libpulse', version: '>= 1.0', required: get_option('pulse'))
# ALSA
alsa_dep = dependency('alsa', version : '>= 1.0.24', required : get_option('alsa'))
# JACK (TODO: set required based on a get_option())
jack_dep = dependency('jack', version : '>= 1.9.7', required : false)
if not jack_dep.found()
# Try jack1 instead
jack_dep = dependency('jack', version : ['>= 0.120.1', '< 1.0'],
required : false)
endif
# Darwin-specific dependencies
if host_system == 'darwin'
security_dep = dependency('Security', required : true)
coremedia_dep = dependency('CoreMedia', required : true)
avfoundation_dep = dependency('AVFoundation', required : true)
corevideo_dep = dependency('CoreVideo', required : true)
videotoolbox_dep = dependency('VideoToolbox', required : true)
audiounit_dep = dependency('AudioUnit', required: true)
audiotoolbox_dep = dependency('AudioToolbox', required : true)
iokit_dep = dependency('IOKit', required : true)
quartz_dep = dependency('QuartzCore', required: true)
coretext_dep = dependency('CoreText', required: true)
coreaudio_dep = dependency('CoreAudio', required: true)
coreimage_dep = dependency('CoreImage', required: true)
coregraphics_dep = dependency('CoreGraphics', required: true)
endif
# macOS specific dependencies
if have_osx
cocoa_dep = dependency('Cocoa', required: true)
endif
# iOS/tvOS specific dependencies
if have_ios or have_tvos
uikit_dep = dependency('UIKit', required: true)
endif
# Windows-specific dependencies
if host_system == 'windows'
# WASAPI-related dependency
ksuser_lib = cc.find_library('ksuser',
has_headers: ['audioclient.h'],
required: get_option('wasapi'))
endif
# Helper libraries for modules
# These are helper libraries used by some modules
if pulse_dep.found()
libvlc_pulse = library('vlc_pulse',
files('audio_output/vlcpulse.c'),
include_directories: [include_directories('audio_output'), vlc_include_dirs],
dependencies: [libvlccore_dep, pulse_dep],
link_with: [vlc_libcompat],
)
endif
# SRT
srt_dep = dependency('srt', version : '>=1.3.0', required : get_option('srt'))
# libRist
librist_dep = dependency('librist', required : false)
# MTP
mtp_dep = dependency('libmtp', version : '>=1.0.0', required : get_option('mtp'))
# FFmpeg
avformat_dep = dependency('libavformat', version: '>= 53.21.0', required: get_option('avformat'))
avcodec_dep = dependency('libavcodec', version: '>= 57.37.100', required: get_option('avcodec'))
avutil_dep = dependency('libavutil', version: '>= 55.22.101', required: false)
# Freetype, used by text_renderer and ASS access
freetype_dep = dependency('freetype2', required : get_option('freetype'))
# ZVBI, used by Linsys SDI access and VBI/Teletext decoders
zvbi_dep = dependency('zvbi-0.2', version: '>= 0.2.28', required: false)
# rsvg, used by SVG codec and text renderer
rsvg_dep = dependency('librsvg-2.0', version : '>= 2.9.0', required : get_option('rsvg'))
# Array that holds all enabled VLC module dicts
vlc_modules = []
# codec modules
subdir('codec')
# access modules
subdir('access')
# demux modules
subdir('demux')
# access_output modules
subdir('access_output')
# audio filter modules
subdir('audio_filter')
# audio mixer
subdir('audio_mixer')
# audio output modules
subdir('audio_output')
# control modules
subdir('control')
# gui modules
subdir('gui')
# keystore modules
subdir('keystore')
# logger modules
subdir('logger')
# misc modules
subdir('misc')
# meta engine modules
subdir('meta_engine')
# packetizer modules
subdir('packetizer')
# service discovery modules
subdir('services_discovery')
# stream output modules
subdir('stream_out')
# stream filter modules
subdir('stream_filter')
# spu modules
subdir('spu')
# text renderer modules
subdir('text_renderer')
# video chroma modules
subdir('video_chroma')
# video filter modules
subdir('video_filter')
# video output modules
subdir('video_output')
# video splitter modules
subdir('video_splitter')
# visualization modules
subdir('visualization')
# lua module
subdir('lua')
# Qt check executable
# This has to be declared here as it needs to end up
# in the modules folder, not in gui/qt/ subfolder as
# vlc-static would not find it there.
if qt5_dep.found()
executable('vlc-qt-check',
files('gui/qt/vlc-qt-check.cpp'),
dependencies: [qt5_dep],
include_directories: [vlc_include_dirs],
build_by_default: true,
install: true,
install_dir: get_option('libexecdir')
)
endif
#
# Common module handling code
#
# In order to reduce boilerplate code, plugins are defined by a
# dictionary which is added to the `vlc_modules` array. This
# array is then iterated over and a library is defined for each
# entry with the needed build definition for a VLC plugin.
#
foreach module : vlc_modules
if not module.has_key('name')
error('Got invalid vlc_modules entry without \'name\' key')
endif
if not module.has_key('sources')
error('The vlc_modules entry for ' + module['name'] + ' has no sources')
endif
# This list MUST be kept in sync with the keys used below!
valid_dict_keys = [
'name',
'sources',
'link_with',
'link_depends',
'link_language',
'include_directories',
'dependencies',
'c_args',
'cpp_args',
'objc_args',
]
foreach key : module.keys()
if key not in valid_dict_keys
error('Invalid key \'@0@\' found in vlc_modules entry for \'@1@\''
.format(key, module['name']))
endif
endforeach
common_args = [
'-DMODULE_STRING="@0@"'.format(module['name']),
'-D__PLUGIN__'
]
library(module['name'] + '_plugin',
module['sources'],
link_with: [module.get('link_with', []), vlc_libcompat],
link_args: module.get('link_args', []),
link_depends: module.get('link_depends', []),
link_language: module.get('link_language', []),
include_directories: [module.get('include_directories', []), vlc_include_dirs],
dependencies: [module.get('dependencies', []), libvlccore_dep],
c_args: [module.get('c_args', []), common_args],
cpp_args: [module.get('cpp_args', []), common_args],
objc_args: [module.get('objc_args', []), common_args],
build_by_default: true,
install: true,
install_dir: get_option('libdir') / 'vlc/plugins'
)
endforeach

View File

@ -0,0 +1,15 @@
# Folder
vlc_modules += {
'name' : 'folder',
'sources' : files('folder.c')
}
# Taglib
taglib_dep = dependency('taglib', version: '>= 1.11', required: get_option('taglib'))
if taglib_dep.found()
vlc_modules += {
'name' : 'taglib',
'sources' : files('taglib.cpp', '../demux/xiph_metadata.c'),
'dependencies' : [taglib_dep, z_lib]
}
endif

176
modules/misc/meson.build Normal file
View File

@ -0,0 +1,176 @@
# stats module
vlc_modules += {
'name' : 'stats',
'sources' : files('stats.c')
}
# audioscrobbler module
vlc_modules += {
'name' : 'audioscrobbler',
'sources' : files('audioscrobbler.c'),
'dependencies' : [threads_dep, socket_libs]
}
# export module
vlc_modules += {
'name' : 'export',
'sources' : files(
'playlist/export.c',
'playlist/html.c',
'playlist/m3u.c',
'playlist/xspf.c',
)
}
# audio fingerprinter module
vlc_modules += {
'name' : 'fingerprinter',
'sources' : files(
'fingerprinter.c',
'webservices/json.c',
'webservices/acoustid.c',
),
'dependencies' : [m_lib]
}
# libxml2 module
libxml2_dep = dependency('libxml-2.0', version : '>= 2.5', required : get_option('libxml2'))
if libxml2_dep.found()
vlc_modules += {
'name' : 'xml',
'sources' : files('xml/libxml.c'),
'dependencies' : [libxml2_dep]
}
endif
# medialibrary module
medialibrary_dep = dependency('medialibrary', required : get_option('medialibrary'), method : 'pkg-config')
if medialibrary_dep.found()
vlc_modules += {
'name' : 'medialibrary',
'sources' : files(
'medialibrary/medialibrary.cpp',
'medialibrary/MetadataExtractor.cpp',
'medialibrary/entities.cpp',
'medialibrary/Thumbnailer.cpp',
'medialibrary/medialibrary.h',
'medialibrary/fs/device.h',
'medialibrary/fs/device.cpp',
'medialibrary/fs/directory.h',
'medialibrary/fs/directory.cpp',
'medialibrary/fs/file.h',
'medialibrary/fs/file.cpp',
'medialibrary/fs/fs.h',
'medialibrary/fs/fs.cpp',
'medialibrary/fs/devicelister.cpp',
'medialibrary/fs/devicelister.h',
'medialibrary/fs/util.h',
'medialibrary/fs/util.cpp',
),
'dependencies' : [medialibrary_dep]
}
endif
# Securetransport
if host_system == 'darwin'
vlc_modules += {
'name' : 'securetransport',
'sources' : files('securetransport.c'),
'dependencies' : [security_dep, corefoundation_dep]
}
endif
# GnuTLS module
gnutls_dep = dependency('gnutls', version : '>= 3.5.0', required : get_option('gnutls'))
if gnutls_dep.found()
gnutls_darwin_deps = []
if host_system == 'darwin'
# In theory these deps should be in the gnutls .pc file,
# apparently they are missing there.
gnutls_darwin_deps = [corefoundation_dep, security_dep]
endif
vlc_modules += {
'name' : 'gnutls',
'sources' : files('gnutls.c'),
'dependencies' : [gnutls_dep, gnutls_darwin_deps]
}
endif
# IOKit inhibit module (macOS only)
if have_osx
vlc_modules += {
'name' : 'iokit_inhibit',
'sources' : files('inhibit/iokit-inhibit.c'),
'dependencies' : [corefoundation_dep, iokit_dep]
}
endif
if have_ios or have_tvos
vlc_modules += {
'name' : 'uikit_inhibit',
'sources' : files('inhibit/uikit-inhibit.m'),
'dependencies' : [uikit_dep, foundation_dep],
'objc_args' : ['-fobjc-arc']
}
endif
if get_option('addon_manager')
# Add-on manager module
vlc_modules += {
'name' : 'addonsvorepository',
'sources' : files('addons/vorepository.c')
}
# Add-on filesystem storage module
vlc_modules += {
'name' : 'addonsfsstorage',
'sources' : files('addons/fsstorage.c')
}
endif
# Wayland inhibit module
if have_wayland
# FIXME: Includes are currently set up in a way that they will not
# include this file correctly. This needs to be fixed.
wl_inhibit_client_proto = custom_target(
'idle-inhibit-client-protocol-generator',
output : 'idle-inhibit-client-protocol.h',
input : wayland_protocols_dir / 'unstable/idle-inhibit/idle-inhibit-unstable-v1.xml',
command : [wayland_scanner, 'client-header', '@INPUT@', '@OUTPUT@'],
)
wl_inhibit_proto = custom_target(
'idle-inhibit-protocol-generator',
output : 'idle-inhibit-protocol.c',
input : wayland_protocols_dir / 'unstable/idle-inhibit/idle-inhibit-unstable-v1.xml',
command : [wayland_scanner, 'private-code', '@INPUT@', '@OUTPUT@'],
)
vlc_modules += {
'name' : 'wl_idle_inhibit',
'sources' : [
files('inhibit/wl-idle-inhibit.c'),
wl_inhibit_client_proto,
wl_inhibit_proto,
],
'dependencies' : [wayland_deps],
}
endif
# XCB screensaver inhibit module
if xcb_dep.found()
vlc_modules += {
'name' : 'xdg_screensaver',
'sources' : files('inhibit/xdg.c'),
'dependencies' : [xcb_dep]
}
endif
# DBUS
if dbus_dep.found()
vlc_modules += {
'name' : 'dbus_screensaver',
'sources' : files('inhibit/dbus.c'),
'dependencies' : [dbus_dep]
}
endif

View File

@ -0,0 +1,104 @@
# AV1 packetizer
vlc_modules += {
'name' : 'packetizer_av1',
'sources' : files('av1.c', 'av1_obu.c')
}
# Copy packetizer
vlc_modules += {
'name' : 'packetizer_copy',
'sources' : files('copy.c')
}
# MPEG-I/II video packetizer
vlc_modules += {
'name' : 'packetizer_mpegvideo',
'sources' : files('mpegvideo.c')
}
# MPEG audio layer I/II/III packetizer
vlc_modules += {
'name' : 'packetizer_mpegaudio',
'sources' : files('mpegaudio.c')
}
# MPEG4 video packetizer
vlc_modules += {
'name' : 'packetizer_mpeg4video',
'sources' : files('mpeg4video.c')
}
# MPEG4 audio packetizer
vlc_modules += {
'name' : 'packetizer_mpeg4audio',
'sources' : files('mpeg4audio.c')
}
# MJPEG packetizer
vlc_modules += {
'name' : 'packetizer_mjpeg',
'sources' : files('mjpeg.c')
}
# H.264 packetizer
vlc_modules += {
'name' : 'packetizer_h264',
'sources' : files(
'h264.c',
'h264_nal.c',
'h264_slice.c',
'hxxx_sei.c',
'hxxx_common.c'
)
}
# VC-1 packetizer
vlc_modules += {
'name' : 'packetizer_vc1',
'sources' : files('vc1.c')
}
# Meridian Lossless Packing packetizer
vlc_modules += {
'name' : 'packetizer_mlp',
'sources' : files('mlp.c')
}
# FLAC packetizer
vlc_modules += {
'name' : 'packetizer_flac',
'sources' : files('flac.c')
}
# HEVC packetizer
vlc_modules += {
'name' : 'packetizer_hevc',
'sources' : files(
'hevc.c',
'hevc_nal.c',
'hxxx_sei.c',
'hxxx_common.c'
)
}
# A/52 audio packetizer
vlc_modules += {
'name' : 'packetizer_a52',
'sources' : files('a52.c')
}
# DTS audio packetizer
vlc_modules += {
'name' : 'packetizer_dts',
'sources' : files('dts.c', 'dts_header.c')
}
# FFmpeg-based packetizer
if avcodec_dep.found()
vlc_modules += {
'name' : 'packetizer_avparser',
'sources' : files('avparser.c'),
'dependencies' : [avutil_dep, avcodec_dep],
'link_with' : [libavcodec_common]
}
endif

View File

@ -0,0 +1,112 @@
# Podcast
vlc_modules += {
'name' : 'podcast',
'sources' : files('podcast.c'),
'dependencies' : [threads_dep]
}
# SAP
vlc_modules += {
'name' : 'sap',
'sources' : files('sap.c', '../access/rtp/sdp.c'),
'dependencies' : [socket_libs, z_lib]
}
# Zeroconf services discovery
avahi_dep = dependency('avahi-client', version: '>= 0.6', required: get_option('avahi'))
if avahi_dep.found()
vlc_modules += {
'name' : 'avahi',
'sources' : files('avahi.c'),
'dependencies' : [avahi_dep]
}
endif
# MTP devices support
mtp_dep = dependency('libmtp', version: '>= 1.0.0', required: get_option('mtp'))
if mtp_dep.found()
vlc_modules += {
'name' : 'mtp',
'sources' : files('mtp.c'),
'dependencies' : [mtp_dep]
}
endif
# UPnP Plugin (Intel SDK)
upnp_dep = dependency('libupnp', required: get_option('upnp'))
if upnp_dep.found()
upnp_darwin_deps = []
if host_system == 'darwin'
systemconfiguration_dep = dependency('SystemConfiguration', required: true)
upnp_darwin_deps = [corefoundation_dep, systemconfiguration_dep]
endif
vlc_modules += {
'name' : 'upnp',
'sources' : files(
'upnp.cpp',
'upnp-wrapper.cpp',
'../stream_out/renderer_common.cpp',
'../stream_out/dlna/dlna.cpp',
),
'dependencies' : [upnp_dep, upnp_darwin_deps]
}
endif
# Pulse device list
if pulse_dep.found()
vlc_modules += {
'name' : 'pulselist',
'sources' : files('pulse.c'),
'link_with' : [libvlc_pulse],
'dependencies' : [pulse_dep],
}
endif
# Linux udev device discovery
libudev_dep = dependency('libudev', version: '>= 142', required: get_option('udev'))
if libudev_dep.found()
vlc_modules += {
'name' : 'udev',
'sources' : files('udev.c'),
'dependencies' : [libudev_dep]
}
endif
# XCB Apps discovery
if xcb_dep.found()
vlc_modules += {
'name' : 'xcb_apps',
'sources' : files('xcb_apps.c'),
'dependencies' : [xcb_dep]
}
endif
# Windows drive discovery
if host_system == 'windows'
vlc_modules += {
'name' : 'windrive',
'sources' : files('windrive.c')
}
endif
# mDNS using libmicrodns
microdns_dep = dependency('microdns', required: get_option('microdns'))
if microdns_dep.found()
vlc_modules += {
'name' : 'microdns',
'sources' : files('microdns.c'),
'dependencies' : [microdns_dep, socket_libs]
}
endif
# mDNS using Bonjour
if host_system == 'darwin'
vlc_modules += {
'name' : 'bonjour',
'sources' : files('bonjour.m'),
'objc_args' : ['-fobjc-arc'],
'dependencies' : [foundation_dep]
}
endif

51
modules/spu/meson.build Normal file
View File

@ -0,0 +1,51 @@
# subsdelay
vlc_modules += {
'name' : 'subsdelay',
'sources' : files('subsdelay.c')
}
# audiobargraph_v
vlc_modules += {
'name' : 'audiobargraph_v',
'sources' : files('audiobargraph_v.c'),
'dependencies' : [m_lib]
}
# logo
vlc_modules += {
'name' : 'logo',
'sources' : files('logo.c')
}
# marq
vlc_modules += {
'name' : 'marq',
'sources' : files('marq.c')
}
# mosaic
vlc_modules += {
'name' : 'mosaic',
'sources' : files('mosaic.c'),
'dependencies' : [m_lib]
}
# rss
vlc_modules += {
'name' : 'rss',
'sources' : files('rss.c')
}
if host_system != 'windows'
# dynamicoverlay
vlc_modules += {
'name' : 'dynamicoverlay',
'sources' : files(
'dynamicoverlay/dynamicoverlay_buffer.c',
'dynamicoverlay/dynamicoverlay_queue.c',
'dynamicoverlay/dynamicoverlay_list.c',
'dynamicoverlay/dynamicoverlay_commands.c',
'dynamicoverlay/dynamicoverlay.c'
)
}
endif

View File

@ -0,0 +1,51 @@
vlc_modules += {
'name' : 'cache_read',
'sources' : files('cache_read.c')
}
vlc_modules += {
'name' : 'cache_block',
'sources' : files('cache_block.c')
}
if host_system != 'windows' and not have_tvos
vlc_modules += {
'name' : 'decomp',
'sources' : files('decomp.c'),
'dependencies' : [threads_dep]
}
endif
if z_lib.found()
vlc_modules += {
'name' : 'inflate',
'sources' : files('inflate.c'),
'dependencies' : [z_lib]
}
endif
# TODO: Add !HAVE_WINSTORE check
vlc_modules += {
'name' : 'prefetch',
'sources' : files('prefetch.c')
}
vlc_modules += {
'name' : 'hds',
'sources' : files('hds/hds.c')
}
vlc_modules += {
'name' : 'record',
'sources' : files('record.c')
}
vlc_modules += {
'name' : 'adf',
'sources' : files('adf.c')
}
vlc_modules += {
'name' : 'skiptags',
'sources' : files('skiptags.c')
}

View File

@ -0,0 +1,144 @@
# Stream output modules
# dummy
vlc_modules += {
'name' : 'stream_out_dummy',
'sources' : files('dummy.c')
}
# cycle
vlc_modules += {
'name' : 'stream_out_cycle',
'sources' : files('cycle.c')
}
# delay
vlc_modules += {
'name' : 'stream_out_delay',
'sources' : files('delay.c')
}
# stats
vlc_modules += {
'name' : 'stream_out_stats',
'sources' : files('stats.c')
}
# standard
vlc_modules += {
'name' : 'stream_out_standard',
'sources' : files(
'standard.c',
'sdp_helper.c'
),
'dependencies' : [socket_libs]
}
# duplicate
vlc_modules += {
'name' : 'stream_out_duplicate',
'sources' : files('duplicate.c')
}
# es
vlc_modules += {
'name' : 'stream_out_es',
'sources' : files('es.c')
}
# display
vlc_modules += {
'name' : 'stream_out_display',
'sources' : files('display.c')
}
# gather
vlc_modules += {
'name' : 'stream_out_gather',
'sources' : files('gather.c')
}
# bridge
vlc_modules += {
'name' : 'stream_out_bridge',
'sources' : files('bridge.c')
}
# mosaic_bridge
vlc_modules += {
'name' : 'stream_out_mosaic_bridge',
'sources' : files('mosaic_bridge.c')
}
# autodel
vlc_modules += {
'name' : 'stream_out_autodel',
'sources' : files('autodel.c')
}
# record
vlc_modules += {
'name' : 'stream_out_record',
'sources' : files('record.c')
}
# smem
vlc_modules += {
'name' : 'stream_out_smem',
'sources' : files('smem.c')
}
# setid
vlc_modules += {
'name' : 'stream_out_setid',
'sources' : files('setid.c')
}
# transcode
vlc_modules += {
'name' : 'stream_out_transcode',
'sources' : files(
'transcode/transcode.c',
'transcode/encoder/encoder.c',
'transcode/encoder/audio.c',
'transcode/encoder/spu.c',
'transcode/encoder/video.c',
'transcode/pcr_sync.c',
'transcode/pcr_helper.c',
'transcode/spu.c',
'transcode/audio.c',
'transcode/video.c'
),
'dependencies' : [m_lib]
}
# UDP
vlc_modules += {
'name' : 'stream_out_udp',
'sources' : files('sdp_helper.c', 'udp.c'),
'dependencies' : [socket_libs]
}
# RTP
vlc_modules += {
'name' : 'stream_out_rtp',
'sources' : files(
'sdp_helper.c',
'rtp.c',
'rtpfmt.c',
'rtcp.c',
'rtsp.c',
),
'dependencies' : [socket_libs]
# TODO: Add optional GCrypt dependency
}
# Chromaprint module
libchromaprint_dep = dependency('libchromaprint', version: '>= 0.6.0', required: get_option('libchromaprint'))
if libchromaprint_dep.found()
vlc_modules += {
'name' : 'stream_out_chromaprint',
'sources' : files('chromaprint.c'),
'dependencies' : [libchromaprint_dep]
}
endif

View File

@ -0,0 +1,62 @@
# Text renderer modules
# Modules that are used to render subtitles and OSD text
# Dummy text renderer
vlc_modules += {
'name' : 'tdummy',
'sources' : files('tdummy.c')
}
# Freetype text renderer
freetype_deps = [freetype_dep, m_lib]
freetype_srcs = files(
'freetype/freetype.c',
'freetype/platform_fonts.c',
'freetype/text_layout.c',
'freetype/ftcache.c',
'freetype/lru.c',
)
if host_system == 'windows'
freetype_srcs += files('freetype/fonts/dwrite.cpp')
# TODO: Don't add this file for UWP builds
freetype_srcs += files('freetype/fonts/win32.c')
elif host_system == 'darwin'
freetype_srcs += files('freetype/fonts/darwin.c')
freetype_deps += [corefoundation_dep, coretext_dep]
endif
# TODO: Anroid-specific sources
# TODO: Fribidi support
# TODO: Harfbuzz support
if freetype_dep.found()
vlc_modules += {
'name' : 'freetype',
'sources' : freetype_srcs,
'dependencies' : freetype_deps,
}
endif
# SVG plugin
if rsvg_dep.found()
vlc_modules += {
'name' : 'svg',
'sources' : files('svg.c'),
'dependencies' : [rsvg_dep]
}
endif
# macOS text to speech
if host_system == 'darwin'
vlc_modules += {
'name' : 'nsspeechsynthesizer',
'sources' : files('nsspeechsynthesizer.m'),
'dependencies' : [cocoa_dep]
}
endif
# Windows SAPI text to speech
if host_system == 'windows'
vlc_modules += {
'name' : 'sapi',
'sources' : files('sapi.cpp')
}
endif

View File

@ -0,0 +1,149 @@
# chroma copy helper library
chroma_copy_lib_srcs = files('copy.c')
chroma_copy_lib = static_library(
'chroma_copy',
chroma_copy_lib_srcs,
include_directories: [vlc_include_dirs],
install: false,
pic: true
)
vlc_modules += {
'name' : 'chain',
'sources' : files('chain.c')
}
swscale_dep = dependency('libswscale', version : '>= 0.5.0', required : get_option('swscale'))
if swscale_dep.found()
vlc_modules += {
'name' : 'swscale',
'sources' : files(
'swscale.c',
'../codec/avcodec/chroma.c'
),
'dependencies' : [swscale_dep, m_lib]
}
endif
vlc_modules += {
'name' : 'grey_yuv',
'sources' : files('grey_yuv.c')
}
vlc_modules += {
'name' : 'i420_rgb',
'sources' : files(
'i420_rgb.c',
'i420_rgb8.c',
'i420_rgb16.c',
)
}
vlc_modules += {
'name' : 'i420_yuy2',
'sources' : files('i420_yuy2.c'),
'c_args' : ['-DPLUGIN_PLAIN']
}
vlc_modules += {
'name' : 'i420_nv12',
'sources' : files('i420_nv12.c'),
'link_with' : [chroma_copy_lib],
'c_args' : ['-DPLUGIN_PLAIN'],
}
vlc_modules += {
'name' : 'i422_i420',
'sources' : files('i422_i420.c')
}
vlc_modules += {
'name' : 'i422_yuy2',
'sources' : files('i422_yuy2.c'),
'c_args' : ['-DPLUGIN_PLAIN']
}
vlc_modules += {
'name' : 'rv32',
'sources' : files('rv32.c')
}
vlc_modules += {
'name' : 'yuy2_i420',
'sources' : files('yuy2_i420.c')
}
vlc_modules += {
'name' : 'yuy2_i422',
'sources' : files('yuy2_i422.c')
}
vlc_modules += {
'name' : 'yuvp',
'sources' : files('yuvp.c')
}
if have_sse2
vlc_modules += {
'name' : 'i420_rgb_sse2',
'sources' : files(
'i420_rgb.c',
'i420_rgb16_x86.c'
),
'c_args' : ['-DPLUGIN_SSE2']
}
vlc_modules += {
'name' : 'i420_yuy2_sse2',
'sources' : files('i420_yuy2.c'),
'c_args' : ['-DPLUGIN_SSE2']
}
vlc_modules += {
'name' : 'i422_yuy2_sse2',
'sources' : files('i422_yuy2.c'),
'c_args' : ['-DPLUGIN_SSE2']
}
endif
vlc_modules += {
'name' : 'orient',
'sources' : files('orient.c'),
}
# CVPX chroma converter
if host_system == 'darwin'
# TODO: Set minimum versions for tvOS and iOS
vlc_modules += {
'name' : 'cvpx',
'sources' : files(
'../codec/vt_utils.c',
'cvpx.c',
),
'link_with' : [chroma_copy_lib],
'dependencies' : [videotoolbox_dep, foundation_dep, coremedia_dep, corevideo_dep]
}
endif
## Tests
# Chroma copy SSE test
chroma_copy_sse_test = executable(
'chroma_copy_sse_test',
chroma_copy_lib_srcs,
c_args: ['-DCOPY_TEST'],
dependencies: [libvlccore_dep],
include_directories: [vlc_include_dirs]
)
test('chroma_copy_sse', chroma_copy_sse_test, suite: 'video_chroma')
# Chroma copy test
chroma_copy_test = executable(
'chroma_copy_test',
chroma_copy_lib_srcs,
c_args: ['-DCOPY_TEST', '-DCOPY_TEST_NOOPTIM'],
dependencies: [libvlccore_dep],
include_directories: [vlc_include_dirs]
)
test('chroma_copy', chroma_copy_test, suite: 'video_chroma')

View File

@ -0,0 +1,305 @@
# Video filters
# Edge-detection filter
vlc_modules += {
'name' : 'edgedetection',
'sources' : files('edgedetection.c'),
'dependencies' : [m_lib]
}
# Adjust (saturation/hue) filter
vlc_modules += {
'name' : 'adjust',
'sources' : files(
'adjust.c',
'adjust_sat_hue.c',
'adjust_sat_hue.h'
),
'dependencies' : [m_lib]
}
# Alpha-mask filter
vlc_modules += {
'name' : 'alphamask',
'sources' : files('alphamask.c')
}
# Anaglyph filter
vlc_modules += {
'name' : 'anaglyph',
'sources' : files('anaglyph.c')
}
# Anti-flicker filter
vlc_modules += {
'name' : 'antiflicker',
'sources' : files('antiflicker.c')
}
# Ball filter
vlc_modules += {
'name' : 'ball',
'sources' : files('ball.c'),
'dependencies' : [m_lib]
}
vlc_modules += {
'name' : 'blendbench',
'sources' : files('blendbench.c')
}
vlc_modules += {
'name' : 'bluescreen',
'sources' : files('bluescreen.c')
}
vlc_modules += {
'name' : 'canvas',
'sources' : files('canvas.c')
}
vlc_modules += {
'name' : 'colorthres',
'sources' : files('colorthres.c'),
'dependencies' : [m_lib]
}
# Crop filter
vlc_modules += {
'name' : 'croppadd',
'sources' : files('croppadd.c')
}
vlc_modules += {
'name' : 'erase',
'sources' : files('erase.c')
}
vlc_modules += {
'name' : 'extract',
'sources' : files('extract.c'),
'dependencies' : [m_lib]
}
vlc_modules += {
'name' : 'fps',
'sources' : files('fps.c')
}
vlc_modules += {
'name' : 'freeze',
'sources' : files('freeze.c')
}
# Gaussian blur filter
vlc_modules += {
'name' : 'gaussianblur',
'sources' : files('gaussianblur.c'),
'dependencies' : [m_lib]
}
vlc_modules += {
'name' : 'gradfun',
'sources' : files('gradfun.c', 'gradfun.h'),
'dependencies' : [m_lib]
}
vlc_modules += {
'name' : 'gradient',
'sources' : files('gradient.c'),
'dependencies' : [m_lib]
}
vlc_modules += {
'name' : 'grain',
'sources' : files('grain.c'),
'dependencies' : [m_lib]
}
vlc_modules += {
'name' : 'hqdn3d',
'sources' : files('hqdn3d.c', 'hqdn3d.h'),
'dependencies' : [m_lib]
}
vlc_modules += {
'name' : 'invert',
'sources' : files('invert.c')
}
vlc_modules += {
'name' : 'magnify',
'sources' : files('magnify.c')
}
vlc_modules += {
'name' : 'formatcrop',
'sources' : files('formatcrop.c')
}
vlc_modules += {
'name' : 'mirror',
'sources' : files('mirror.c')
}
# Motion blur filter
vlc_modules += {
'name' : 'motionblur',
'sources' : files('motionblur.c')
}
# Motion detection filter
vlc_modules += {
'name' : 'motiondetect',
'sources' : files('motiondetect.c')
}
# Old movie filter
vlc_modules += {
'name' : 'oldmovie',
'sources' : files('oldmovie.c'),
'dependencies' : [m_lib]
}
vlc_modules += {
'name' : 'posterize',
'sources' : files('posterize.c')
}
vlc_modules += {
'name' : 'psychedelic',
'sources' : files('psychedelic.c'),
'dependencies' : [m_lib]
}
# Puzzle filter
vlc_modules += {
'name' : 'puzzle',
'sources' : files(
'puzzle/puzzle.c',
'puzzle/puzzle.h',
'puzzle/puzzle_bezier.c',
'puzzle/puzzle_bezier.h',
'puzzle/puzzle_lib.c',
'puzzle/puzzle_lib.h',
'puzzle/puzzle_mgt.c',
'puzzle/puzzle_mgt.h',
'puzzle/puzzle_pce.c',
'puzzle/puzzle_pce.h',
),
'dependencies' : [m_lib]
}
vlc_modules += {
'name' : 'ripple',
'sources' : files('ripple.c'),
'dependencies' : [m_lib]
}
# Rotate filter
vlc_modules += {
'name' : 'rotate',
'sources' : files('rotate.c'),
'dependencies' : [m_lib],
'link_with' : [vlc_motion_lib]
}
vlc_modules += {
'name' : 'scale',
'sources' : files('scale.c')
}
vlc_modules += {
'name' : 'scene',
'sources' : files('scene.c'),
'dependencies' : [m_lib]
}
# Sepia filter
vlc_modules += {
'name' : 'sepia',
'sources' : files('sepia.c')
}
# Sharpen filter
vlc_modules += {
'name' : 'sharpen',
'sources' : files('sharpen.c')
}
vlc_modules += {
'name' : 'transform',
'sources' : files('transform.c')
}
# VHS-effect filter
vlc_modules += {
'name' : 'vhs',
'sources' : files('vhs.c')
}
vlc_modules += {
'name' : 'wave',
'sources' : files('wave.c'),
'dependencies' : [m_lib]
}
# macOS/iOS accelerated video filters (CoreImage)
if host_system == 'darwin'
vlc_modules += {
'name' : 'ci_filters',
'sources' : files('ci_filters.m', '../codec/vt_utils.c'),
'dependencies' : [
foundation_dep,
coregraphics_dep,
coreimage_dep,
corevideo_dep,
(have_osx) ? dependency('gl', required: true) : []
# Add OpenGLES dependency for iOS
],
'include_directories' : [include_directories('../codec')]
}
endif
# deinterlace common helper lib
deinterlacecommon_lib = static_library(
'deinterlace_common',
files('deinterlace/common.c'),
include_directories: [vlc_include_dirs],
pic: true,
install: false
)
# deinterlace filter
vlc_modules += {
'name' : 'deinterlace',
'sources' : files(
'deinterlace/deinterlace.c',
'deinterlace/merge.c',
'deinterlace/helpers.c',
'deinterlace/algo_basic.c',
'deinterlace/algo_x.c',
'deinterlace/algo_yadif.c',
'deinterlace/algo_phosphor.c',
'deinterlace/algo_ivtc.c',
),
# Inline ASM doesn't build with -O0
'c_args' : ['-O2'],
'link_with' : [deinterlacecommon_lib]
}
# Postproc filter
postproc_dep = dependency('libpostproc', required: get_option('postproc'))
if postproc_dep.found()
vlc_modules += {
'name' : 'postproc',
'sources' : files('postproc.c'),
'dependencies' : [m_lib, postproc_dep]
}
endif
vlc_modules += {
'name' : 'blend',
'sources' : files('blend.cpp')
}

View File

@ -0,0 +1,42 @@
# Libplacebo-based video outputs
vlc_modules += {
'name' : 'libplacebo',
'sources' : files('instance.c', 'display.c'),
'link_with' : [libplacebo_utils],
'dependencies' : [libplacebo_dep],
}
## Vulkan
vulkan_dep = dependency('vulkan',
version: '>= 1.0.26',
required: get_option('vulkan'))
if vulkan_dep.found()
vlc_modules += {
'name' : 'libplacebo_vk',
'sources' : files('../vulkan/platform.c', 'instance_vulkan.c'),
'link_with' : [libplacebo_utils],
'dependencies' : [libplacebo_dep],
}
endif
## OpenGL
if opengl_dep.found()
vlc_modules += {
'name' : 'libplacebo_gl',
'sources' : files('instance_opengl.c'),
'link_with' : [libplacebo_utils],
'dependencies' : [libplacebo_dep],
}
endif
if opengles2_dep.found()
vlc_modules += {
'name' : 'libplacebo_gles2',
'sources' : files('instance_opengl.c'),
'link_with' : [libplacebo_utils],
'c_args' : '-DUSE_OPENGL_ES2',
'dependencies' : [libplacebo_dep],
}
endif

View File

@ -0,0 +1,153 @@
#
# Video output modules
#
# Declared here, as its used by both the
# libplacebo and opengl subfolder build file.
libplacebo_dep = dependency('libplacebo',
version: '>= 2.72',
required: get_option('libplacebo'))
opengl_dep = dependency('gl', required: false)
opengles2_dep = dependency('glesv2', required: get_option('gles2'))
if libplacebo_dep.found()
libplacebo_utils = static_library('vlc_libplacebo_utils',
files('./libplacebo/utils.c'),
dependencies: [libplacebo_dep],
include_directories: [vlc_include_dirs])
subdir('opengl')
subdir('libplacebo')
endif
# Dummy video output
vlc_modules += {
'name' : 'vdummy',
'sources' : files('vdummy.c')
}
# Dummy window provider
vlc_modules += {
'name' : 'wdummy',
'sources' : files('wdummy.c')
}
# Video splitter
vlc_modules += {
'name' : 'video_splitter',
'sources' : files('splitter.c')
}
# YUV video output
vlc_modules += {
'name' : 'yuv',
'sources' : files('yuv.c')
}
# Flaschen video output
vlc_modules += {
'name' : 'flaschen',
'sources' : files('flaschen.c'),
'dependencies' : [socket_libs]
}
# vmem
vlc_modules += {
'name' : 'vmem',
'sources' : files('vmem.c')
}
# wextern
vlc_modules += {
'name' : 'wextern',
'sources' : files('wextern.c')
}
# vgl
vlc_modules += {
'name' : 'vgl',
'sources' : files('vgl.c')
}
# Kernel Mode Setting
drm_dep = dependency('libdrm', version : '>= 2.4.83', required : get_option('drm'))
if drm_dep.found()
vlc_modules += {
'name' : 'kms',
'sources' : files('kms.c'),
'dependencies' : [drm_dep]
}
endif
# Coloured ASCII art (Caca)
caca_dep = dependency('caca', version : '>= 0.99.beta14', required : get_option('caca'))
if caca_dep.found()
vlc_modules += {
'name' : 'caca',
'sources' : files('caca.c'),
'dependencies' : [caca_dep, x11_dep]
# TODO: Properly conditonalize X11 dependency
}
endif
#
# x11 video outputs
#
if xcb_dep.found()
vlc_xcb_events_lib = library('vlc_xcb_events',
files('xcb/events.c'),
include_directories: [vlc_include_dirs],
dependencies : [xcb_dep, libvlccore_dep])
if xcb_randr_dep.found() and xproto_dep.found()
vlc_modules += {
'name' : 'xcb_window',
'sources' : files('xcb/window.c'),
'dependencies' : [xcb_dep, xcb_randr_dep, xproto_dep]
}
endif
if xcb_render_dep.found() and xcb_shm_dep.found()
vlc_modules += {
'name' : 'xcb_render',
'sources' : files(
'xcb/pictures.c',
'xcb/render.c'
),
'dependencies' : [xcb_dep, xcb_render_dep, xcb_shm_dep, m_lib],
'link_with' : [vlc_xcb_events_lib]
}
endif
if xcb_shm_dep.found()
vlc_modules += {
'name' : 'xcb_x11',
'sources' : files(
'xcb/pictures.c',
'xcb/x11.c'
),
'dependencies' : [xcb_dep, xcb_shm_dep],
'link_with' : [vlc_xcb_events_lib]
}
endif
endif
egl_dep = dependency('egl', required : false)
if x11_dep.found() and egl_dep.found()
vlc_modules += {
'name' : 'egl_x11',
'sources' : files('opengl/egl.c'),
'c_args': ['-DUSE_PLATFORM_X11=1'],
'dependencies' : [egl_dep, x11_dep]
}
endif
if x11_dep.found() and opengl_dep.found()
vlc_modules += {
'name' : 'glx',
'sources' : files('glx.c'),
'dependencies': [x11_dep, opengl_dep]
}
endif

View File

@ -0,0 +1,46 @@
gl_common_dep = declare_dependency(
link_with: [libplacebo_utils],
sources: files(
'filter.c',
'filters.c',
'gl_api.c',
'gl_util.c',
'importer.c',
'interop.c',
'interop_sw.c',
'picture.c',
'sampler.c',
),
include_directories: [vlc_include_dirs],
dependencies: [contrib_dep],
)
opengl_vout_commonsources = files(
'renderer.c',
'sub_renderer.c',
'vout_helper.c',
)
if opengl_dep.found()
libvlc_opengl = static_library('vlc_opengl',
dependencies: [
gl_common_dep,
m_lib,
])
vlc_modules += {
'name' : 'libgl',
'sources' : [
files('display.c'),
opengl_vout_commonsources
],
'link_with' : [libvlc_opengl]
}
endif
if opengles2_dep.found()
libvlc_opengles = static_library('libvlc_opengles',
dependencies: [gl_common_dep, m_lib],
c_args: '-DUSE_OPENGL_ES2')
endif

View File

@ -0,0 +1,24 @@
# Clone video splitter
vlc_modules += {
'name' : 'clone',
'sources' : files('clone.c')
}
# Wall video splitter
vlc_modules += {
'name' : 'wall',
'sources' : files('wall.c')
}
if xcb_dep.found() and xcb_randr_dep.found()
vlc_modules += {
'name' : 'panoramix',
'sources' : files('panoramix.c'),
'dependencies' : [xcb_dep, xcb_randr_dep]
}
elif host_system == 'windows'
vlc_modules += {
'name' : 'panoramix',
'sources' : files('panoramix.c')
}
endif

View File

@ -0,0 +1,31 @@
# goom visualization plugin
goom2_dep = dependency('libgoom2', required : get_option('goom2'))
if goom2_dep.found()
vlc_modules += {
'name' : 'goom',
'sources' : files('goom.c'),
'dependencies' : [goom2_dep, m_lib]
}
endif
# projectM visualization plugin
projectm_dep = dependency('libprojectM', version : '>= 2.0.0', required : false)
projectm_args = []
if projectm_dep.found()
projectm_args += '-DHAVE_PROJECTM2'
else
projectm_dep = dependency('libprojectM', version : '< 2.0.0',
required : false)
endif
if projectm_dep.found()
if host_system != 'windows'
vlc_modules += {
'name' : 'projectm',
'sources' : files('projectm.cpp'),
'dependencies' : [projectm_dep],
'cpp_args' : [projectm_args]
}
endif
endif

347
src/meson.build Normal file
View File

@ -0,0 +1,347 @@
#
# VLC revision file generation
#
git_dir = vlc_src_root / '.git'
rev_target = vcs_tag(command : ['git',
'--git-dir', git_dir,
'describe', '--tags', '--long',
'--match', '?.*.*', '--always'],
input : 'revision.c.in',
output : 'revision.c')
#
# FourCC preprocessor
#
fourcc_gen = executable('fourcc_gen',
['misc/fourcc_gen.c'],
include_directories: vlc_include_dirs,
native: true
)
fourcc = custom_target('fourcc_tables.h',
output : ['fourcc_tables.h'],
depend_files : ['misc/fourcc_list.h', '../include/vlc_fourcc.h'],
capture : true,
command : [fourcc_gen])
#
# libvlccore dependencies
#
anl_lib = cc.find_library('anl', required: false)
libvlccore_deps = [
m_lib, dl_lib, threads_dep, intl_dep, socket_libs, iconv_dep, anl_lib, idn_dep
]
if host_system == 'darwin'
libvlccore_deps += foundation_dep
libvlccore_deps += corefoundation_dep
libvlccore_deps += dependency('CFNetwork', required: true)
elif host_system == 'windows'
libvlccore_deps += cc.find_library('bcrypt')
libvlccore_deps += cc.find_library('winmm')
endif
#
# libvlccore library
#
libvlccore_sources_base = files(
'libvlc.c',
'libvlc.h',
'libvlc-module.c',
'missing.c',
'version.c',
'config/configuration.h',
'config/core.c',
'config/chain.c',
'config/file.c',
'config/help.c',
'config/intf.c',
'config/cmdline.c',
'config/getopt.c',
'config/vlc_getopt.h',
'config/jaro_winkler.c',
'extras/libc.c',
'media_source/media_source.c',
'media_source/media_source.h',
'media_source/media_tree.c',
'modules/modules.h',
'modules/modules.c',
'modules/bank.c',
'modules/cache.c',
'modules/entry.c',
'modules/textdomain.c',
'interface/dialog.c',
'interface/interface.c',
'playlist/content.c',
'playlist/content.h',
'playlist/control.c',
'playlist/control.h',
'playlist/export.c',
'playlist/item.c',
'playlist/item.h',
'playlist/notify.c',
'playlist/notify.h',
'playlist/player.c',
'playlist/player.h',
'playlist/playlist.c',
'playlist/playlist.h',
'playlist/preparse.c',
'playlist/preparse.h',
'playlist/randomizer.c',
'playlist/randomizer.h',
'playlist/request.c',
'playlist/shuffle.c',
'playlist/sort.c',
'preparser/art.c',
'preparser/art.h',
'preparser/fetcher.c',
'preparser/fetcher.h',
'preparser/preparser.c',
'preparser/preparser.h',
'input/item.c',
'input/access.c',
'clock/clock_internal.c',
'clock/input_clock.c',
'clock/clock.c',
'input/decoder.c',
'input/decoder_device.c',
'input/decoder_helpers.c',
'input/demux.c',
'input/demux_chained.c',
'input/es_out.c',
'input/es_out_source.c',
'input/es_out_timeshift.c',
'input/input.c',
'input/info.h',
'input/meta.c',
'input/attachment.c',
'player/player.c',
'player/player.h',
'player/input.c',
'player/timer.c',
'player/track.c',
'player/title.c',
'player/aout.c',
'player/vout.c',
'player/osd.c',
'player/medialib.c',
'player/metadata.c',
'clock/input_clock.h',
'clock/clock.h',
'clock/clock_internal.h',
'input/decoder.h',
'input/demux.h',
'input/es_out.h',
'input/event.h',
'input/item.h',
'input/mrl_helpers.h',
'input/stream.h',
'input/input_internal.h',
'input/input_interface.h',
'input/vlm_internal.h',
'input/vlm_event.h',
'input/resource.h',
'input/resource.c',
'input/services_discovery.c',
'input/stats.c',
'input/stream.c',
'input/stream_fifo.c',
'input/stream_extractor.c',
'input/stream_filter.c',
'input/stream_memory.c',
'input/subtitles.c',
'input/thumbnailer.c',
'input/var.c',
'audio_output/aout_internal.h',
'audio_output/common.c',
'audio_output/dec.c',
'audio_output/filters.c',
'audio_output/meter.c',
'audio_output/output.c',
'audio_output/volume.c',
'video_output/chrono.h',
'video_output/control.c',
'video_output/control.h',
'video_output/display.c',
'video_output/display.h',
'video_output/inhibit.c',
'video_output/inhibit.h',
'video_output/interlacing.c',
'video_output/snapshot.c',
'video_output/snapshot.h',
'video_output/statistic.h',
'video_output/video_output.c',
'video_output/video_text.c',
'video_output/video_epg.c',
'video_output/video_widgets.c',
'video_output/vout_subpictures.c',
'video_output/vout_spuregion_helper.h',
'video_output/vout_wrapper.h',
'video_output/video_window.c',
'video_output/video_window.h',
'video_output/opengl.c',
'video_output/vout_intf.c',
'video_output/vout_internal.h',
'video_output/vout_private.h',
'video_output/vout_wrapper.c',
'video_output/window.c',
'network/getaddrinfo.c',
'network/http_auth.c',
'network/httpd.c',
'network/io.c',
'network/tcp.c',
'network/udp.c',
'network/rootbind.c',
'network/stream.c',
'network/tls.c',
'text/charset.c',
'text/memstream.c',
'text/strings.c',
'text/unicode.c',
'text/url.c',
'text/filesystem.c',
'text/iso_lang.c',
'text/iso-639_def.h',
'misc/actions.c',
'misc/ancillary.c',
'misc/executor.c',
'misc/md5.c',
'misc/probe.c',
'misc/rand.c',
'misc/mtime.c',
'misc/frame.c',
'misc/fifo.c',
'misc/fourcc.c',
'misc/fourcc_list.h',
'misc/es_format.c',
'misc/picture.c',
'misc/picture.h',
'misc/picture_fifo.c',
'misc/picture_pool.c',
'misc/interrupt.h',
'misc/interrupt.c',
'misc/keystore.c',
'misc/renderer_discovery.c',
'misc/threads.c',
'misc/cpu.c',
'misc/diffutil.c',
'misc/epg.c',
'misc/exit.c',
'misc/events.c',
'misc/image.c',
'misc/messages.c',
'misc/mime.c',
'misc/objects.c',
'misc/objres.c',
'misc/queue.c',
'misc/variables.h',
'misc/variables.c',
'misc/xml.c',
'misc/addons.c',
'misc/filter.c',
'misc/filter_chain.c',
'misc/httpcookies.c',
'misc/fingerprinter.c',
'misc/text_style.c',
'misc/sort.c',
'misc/subpicture.c',
'misc/subpicture.h',
'misc/medialibrary.c',
'misc/viewpoint.c',
'misc/rcu.c',
'misc/tracer.c',
)
libvlccore_sout_sources = [
'stream_output/sap.c',
'stream_output/stream_output.c',
'stream_output/stream_output.h'
]
libvlccore_vlm_sources = [
'input/vlm.c',
'input/vlm_event.c',
'input/vlmshell.c'
]
libvlccore_sources = [
libvlccore_sources_base,
libvlccore_sout_sources,
libvlccore_vlm_sources
]
libvlccore_link_args = []
if host_system == 'darwin'
libvlccore_sources += [
'darwin/dirs.m',
'darwin/error.c',
'darwin/netconf.m',
'darwin/specific.c',
'posix/filesystem.c',
'posix/plugin.c',
'posix/rand.c',
'posix/timer.c',
'posix/sort.c',
'posix/thread.c',
'posix/wait.c',
]
libvlccore_link_args += '-Wl,-U,_vlc_static_modules'
elif host_system == 'windows'
libvlccore_sources += [
'win32/dirs.c',
'win32/error.c',
'win32/filesystem.c',
'win32/netconf.c',
'win32/plugin.c',
'win32/rand.c',
'win32/specific.c',
'win32/thread.c',
'win32/timer.c' # TODO: this is non-winstore
]
elif host_system == 'linux'
libvlccore_sources += [
'posix/dirs.c',
'posix/error.c',
'posix/netconf.c',
'posix/spawn.c',
'posix/picture.c',
'posix/specific.c',
'posix/thread.c',
'posix/filesystem.c',
'posix/plugin.c',
'posix/rand.c',
'posix/timer.c',
'posix/sort.c',
'linux/cpu.c',
'linux/dirs.c',
'linux/filesystem.c',
'linux/thread.c',
]
if anl_lib.found()
libvlccore_sources += 'linux/getaddrinfo.c'
else
libvlccore_sources += 'posix/getaddrinfo.c'
endif
endif
libvlccore = library(
'vlccore',
libvlccore_sources, vlc_about, fourcc, rev_target,
include_directories: vlc_include_dirs,
version: '9.0.0',
c_args: ['-DMODULE_STRING="core"', '-DHAVE_DYNAMIC_PLUGINS' ],
link_args: libvlccore_link_args,
link_with: [vlc_libcompat],
dependencies: libvlccore_deps,
install: true
)
libvlccore_dep = declare_dependency(link_with: libvlccore, sources: vlc_about)

2
src/revision.c.in Normal file
View File

@ -0,0 +1,2 @@
const char psz_vlc_changeset[] = "@VCS_TAG@";