mirror of https://code.videolan.org/videolan/vlc
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:
parent
87baf64853
commit
d5f07af209
|
@ -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]
|
||||
)
|
|
@ -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)
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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')
|
|
@ -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
|
||||
)
|
|
@ -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!
|
||||
''')
|
|
@ -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
|
|
@ -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]
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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]
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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')
|
||||
}
|
|
@ -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')
|
|
@ -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
|
|
@ -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
|
|
@ -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')
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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')
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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')
|
|
@ -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')
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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)
|
|
@ -0,0 +1,2 @@
|
|||
const char psz_vlc_changeset[] = "@VCS_TAG@";
|
||||
|
Loading…
Reference in New Issue