demux: adaptive: only use segments for bw estimation
[vlc.git] / configure.ac
1 dnl Autoconf settings for vlc
2
3 AC_COPYRIGHT([Copyright 1999-2020 VLC authors and VideoLAN])
4
5 AC_INIT([vlc], [4.0.0-dev])
6 VERSION_MAJOR=4
7 VERSION_MINOR=0
8 VERSION_REVISION=0
9 VERSION_EXTRA=0
10 VERSION_DEV=dev
11
12 PKGDIR="vlc"
13 AC_SUBST([PKGDIR])
14
15 CONFIGURE_LINE="`echo "$0 $ac_configure_args" | sed -e 's/\\\/\\\\\\\/g'`"
16 CODENAME="Otto Chriek"
17 COPYRIGHT_YEARS="1996-2020"
18
19 AC_CONFIG_SRCDIR([src/libvlc.c])
20 AC_CONFIG_AUX_DIR([autotools])
21 AC_CONFIG_MACRO_DIR([m4])
22 AC_CONFIG_LIBOBJ_DIR([compat])
23 AC_CANONICAL_BUILD
24 AC_CANONICAL_HOST
25 AC_PRESERVE_HELP_ORDER
26
27 AM_INIT_AUTOMAKE([tar-ustar color-tests foreign])
28 AC_CONFIG_HEADERS([config.h])
29
30 AM_SILENT_RULES([yes])
31 AM_MAINTAINER_MODE([enable])
32
33 dnl
34 dnl Check for tools
35 dnl
36 AC_PROG_CC
37 AC_USE_SYSTEM_EXTENSIONS
38 VLC_PROG_CC_C11
39 AH_VERBATIM([FORTIFY_SOURCE],
40   [/* Enable compile-time and run-time bounds-checking, and some warnings,
41    without upsetting glibc 2.15+ or toolchains predefining _FORTIFY_SOURCE */
42 #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
43 # define _FORTIFY_SOURCE 2
44 #endif])
45 AC_DEFINE([_FILE_OFFSET_BITS], 64, [Define to 64 for large files support.])
46 AC_DEFINE([__LIBVLC__],, [Define within the LibVLC source code tree.])
47 AC_DEFINE([WIN32_LEAN_AND_MEAN],, [Define to limit the scope of <windows.h>.])
48
49 AC_PROG_CXX
50 AC_PROG_CPP
51 AC_PROG_OBJC
52 AC_PROG_EGREP
53 AC_PROG_MAKE_SET
54 AC_PROG_INSTALL
55 AM_PROG_AS
56 AC_PROG_LEX
57 AC_PROG_YACC
58
59 AC_ARG_VAR([DESKTOP_FILE_VALIDATE], [Validator for desktop entry files])
60 AC_CHECK_PROGS([DESKTOP_FILE_VALIDATE], [${DESKTOP_FILE_VALIDATE} desktop-file-validate], :)
61 AC_ARG_VAR([BUILDCC], [Build system C11 or C99 compiler command])
62 AC_CHECK_PROGS([BUILDCC], [c11-gcc c11 c99-gcc c99], [false])
63 AS_IF([test "$BUILDCC" = "false"], [
64   AC_MSG_ERROR([Cannot find native C99 compiler: please define BUILDCC.])
65 ])
66
67 dnl Check for compiler properties
68 AC_C_CONST
69 AC_C_INLINE
70 AC_C_RESTRICT
71 AX_CXX_COMPILE_STDCXX_14([noext], [mandatory])
72
73 dnl Check the compiler supports atomics in C
74 AC_MSG_CHECKING([C atomics])
75 VLC_SAVE_FLAGS
76 ATOMIC_LIB=""
77 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdatomic.h>],[
78  atomic_uintmax_t test;
79  atomic_init(&test, 0);
80  atomic_fetch_add_explicit(&test, 2u, memory_order_relaxed);
81 ])], [AC_MSG_RESULT([built-in])], [
82   LDFLAGS="$LDFLAGS -latomic"
83   AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <stdatomic.h>],[
84 atomic_uintmax_t test;
85 atomic_init(&test, 0);
86 atomic_fetch_add_explicit(&test, 2u, memory_order_relaxed);
87 ])],[
88     AC_MSG_RESULT([using -latomic])
89     ATOMIC_LIB="-latomic"
90   ],[
91   AC_MSG_ERROR([VLC requires atomics support])
92   ])
93 ])
94 VLC_RESTORE_FLAGS
95 AC_SUBST([ATOMIC_LIB])
96
97 dnl Extend the --help string at the current spot.
98 AC_DEFUN([EXTEND_HELP_STRING], [m4_divert_once([HELP_ENABLE], [$1])])
99
100 dnl Allow binary package maintainer to pass a custom string to avoid
101 dnl cache problem
102 AC_ARG_WITH([binary-version],
103     AS_HELP_STRING([--with-binary-version=STRING],
104          [To avoid plugins cache problem between binary version]),[],[])
105 AS_IF([test -n "${with_binary_version}"],[
106     AC_DEFINE_UNQUOTED([DISTRO_VERSION],["${with_binary_version}"],
107          [Binary specific version])
108 ])
109
110 dnl Prevent clang from accepting unknown flags with a mere warning
111 AX_CHECK_COMPILE_FLAG([-Werror=invalid-command-line-argument], [
112   AX_APPEND_FLAG([-Werror=invalid-command-line-argument], [CFLAGS])
113   AX_APPEND_FLAG([-Werror=invalid-command-line-argument], [CXXFLAGS])
114   AX_APPEND_FLAG([-Werror=invalid-command-line-argument], [OBJCFLAGS])
115 ])
116 AX_CHECK_COMPILE_FLAG([-Werror=unknown-warning-option], [
117   AX_APPEND_FLAG([-Werror=unknown-warning-option], [CFLAGS])
118   AX_APPEND_FLAG([-Werror=unknown-warning-option], [CXXFLAGS])
119   AX_APPEND_FLAG([-Werror=unknown-warning-option], [OBJCFLAGS])
120 ])
121
122 dnl Some Qt version are generating tons of warning that cannot be
123 dnl avoided so mute them...
124 AX_CHECK_COMPILE_FLAG([-Wno-deprecated-copy], [
125   VLC_ADD_CXXFLAGS([qt],[-Wno-deprecated-copy])
126 ])
127
128
129 dnl
130 dnl  Check the operating system
131 dnl
132 HAVE_WIN64="0"
133 HAVE_IOS="0"
134 HAVE_OSX="0"
135 HAVE_TVOS="0"
136
137 dnl  Set x86 asm flags and defines
138 X86ASMFLAGS=""
139 case "${host_cpu}" in
140     i?86)
141     X86ASMFLAGS="-f elf32"
142     X86ASMDEFS="-DARCH_X86_32=1 -DARCH_X86_64=0"
143         ;;
144     x86_64)
145     X86ASMFLAGS="-f elf64"
146     X86ASMDEFS="-DARCH_X86_32=0 -DARCH_X86_64=1"
147         ;;
148 esac
149
150 case "${host_os}" in
151   "")
152     SYS=unknown
153     ;;
154   linux*)
155     SYS=linux
156     CFLAGS="${CFLAGS} -pthread"
157     ;;
158   bsdi*)
159     SYS=bsdi
160     CFLAGS="${CFLAGS} -pthread"
161     ;;
162   freebsd*)
163     SYS=freebsd
164     CFLAGS="${CFLAGS} -pthread"
165     CPPFLAGS="${CPPFLAGS} -I/usr/local/include"
166     LDFLAGS="${LDFLAGS} -L/usr/local/lib"
167     ac_cv_ld_z_defs=no
168     ;;
169   openbsd*)
170     SYS=openbsd
171     CPPFLAGS="${CPPFLAGS} -I/usr/local/include -I/usr/X11R6/include"
172     LDFLAGS="${LDFLAGS} -L/usr/local/lib -L/usr/X11R6/lib/"
173     ;;
174   netbsd*)
175     SYS=netbsd
176     ;;
177   dragonfly*)
178     SYS=dragonfly
179     ;;
180   darwin*)
181     SYS=darwin
182
183     dnl Work around an Xcode 11 bug, fixed in Xcode 11.3.1
184     AX_APPEND_FLAG([-fno-stack-check], [CFLAGS])
185     AX_APPEND_FLAG([-fno-stack-check], [CXXFLAGS])
186     AX_APPEND_FLAG([-fno-stack-check], [OBJCFLAGS])
187
188     case "${host_cpu}" in
189       i?86)
190         X86ASMFLAGS="-f macho32"
191         AX_APPEND_FLAG([-DPREFIX], [X86ASMDEFS])
192       ;;
193       x86_64)
194         X86ASMFLAGS="-f macho64"
195         AX_APPEND_FLAG([-DPREFIX], [X86ASMDEFS])
196       ;;
197       arm*)
198         ac_cv_c_bigendian="no"
199         ac_cv_c_attribute_packed="no"
200       ;;
201     esac
202
203     AX_APPEND_FLAG([-D_INTL_REDIRECT_MACROS], [CPPFLAGS])
204     AX_APPEND_FLAG([-stdlib=libc++], [CXXFLAGS])
205     AX_APPEND_FLAG([-Werror=partial-availability], [OBJCFLAGS])
206     AX_APPEND_FLAG([-Wl,-headerpad_max_install_names], [LDFLAGS])
207
208     VLC_ADD_LIBS([libvlc vlc],[-Wl,-undefined,dynamic_lookup,-framework,AppKit])
209     VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreFoundation])
210
211     AC_EGREP_CPP(yes,
212             [#import <TargetConditionals.h>
213              #if TARGET_OS_IPHONE
214              yes
215              #endif],
216              [HAVE_IOS="1"],
217              [HAVE_OSX="1"])
218
219     AC_EGREP_CPP(yes,
220             [#import <TargetConditionals.h>
221              #if TARGET_OS_TV
222              yes
223              #endif],
224              [HAVE_TVOS="1"
225              HAVE_IOS="0"
226              HAVE_OSX="0"
227              ac_cv_func_fork=no
228              ],)
229
230     AS_IF([test "${HAVE_OSX}" = "1"],[VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreServices])])
231
232     dnl
233     dnl  Handle Mac OS X SDK flags
234     dnl
235     AC_ARG_WITH(macosx-sdk,
236       AS_HELP_STRING([--with-macosx-sdk=DIR],
237         [compile using the SDK in DIR]))
238     if test "${with_macosx_sdk}" != "" ; then
239         test ! -d "${with_macosx_sdk}" && AC_MSG_ERROR([SDK "${with_macosx_sdk}" not found])
240         CPP="${CPP} -isysroot ${with_macosx_sdk}"
241         CC="${CC} -isysroot ${with_macosx_sdk}"
242         CXX="${CXX} -isysroot ${with_macosx_sdk}"
243         OBJC="${OBJC} -isysroot ${with_macosx_sdk}"
244         LD="${LD} -syslibroot ${with_macosx_sdk}"
245     fi
246     AC_ARG_WITH(macosx-version-min,
247       AS_HELP_STRING([--with-macosx-version-min=VERSION],
248         [compile for Mac OS X VERSION and above]))
249     if test "${with_macosx_version_min}" != "" ; then
250         CPP="${CPP} -mmacosx-version-min=${with_macosx_version_min}"
251         CC="${CC} -mmacosx-version-min=${with_macosx_version_min}"
252         CXX="${CXX} -mmacosx-version-min=${with_macosx_version_min}"
253         OBJC="${OBJC} -mmacosx-version-min=${with_macosx_version_min}"
254         LD="${LD} -mmacosx_version_min=${with_macosx_version_min}"
255     fi
256     ;;
257   *mingw32* | *cygwin* | *wince* | *mingwce*)
258     dnl Force libtool to not link to (shared) libgcc_s when detecting C++ dependencies
259     dnl When doing this test with -static-libgcc it will link on (static) libgcc_eh
260     CXXFLAGS="${CXXFLAGS} -static-libgcc"
261     AC_CHECK_TOOL(WINDRES, windres, :)
262     AC_CHECK_TOOL(OBJCOPY, objcopy, :)
263     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
264       [[#ifdef _WIN32_WINNT
265        # error _WIN32_WINNT already defined
266        #else
267        # include <windows.h>
268        # if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0601
269        #  error _WIN32_WINNT toolchain default high enough
270        # endif
271        #endif
272       ]],[[;]])
273     ],[
274       AC_DEFINE([_WIN32_WINNT], [0x0601], [Define to '0x0601' for Windows 7 APIs.])
275     ])
276     AC_MSG_CHECKING([if libsynchronization is needed])
277     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
278       [[#if _WIN32_WINNT >= 0x0602
279        # error building for Win8+ and above
280        #endif
281       ]],[[;]])
282     ],[
283       AC_MSG_RESULT([no])
284     ],[
285       AC_MSG_RESULT([yes])
286       VLC_ADD_LIBS([libvlccore], [-lsynchronization])
287     ])
288     AC_DEFINE([_WIN32_IE], [0x0600], [Define to '0x0600' for IE 6.0 (and shell) APIs.])
289     AC_DEFINE([UNICODE], [1], [Define to 1 for Unicode (Wide Chars) APIs.])
290     AC_DEFINE([_ISOC99_SOURCE], [1], [Extensions to ISO C89 from ISO C99.])
291     AC_DEFINE([_ISOC11_SOURCE], [1], [Extensions to ISO C99 from ISO C11.])
292     AC_DEFINE([_POSIX_SOURCE], [1], [IEEE Std 1003.1.])
293     AC_DEFINE([_POSIX_C_SOURCE], [200809L], [IEEE Std 1003.1.])
294     AC_DEFINE([_XOPEN_SOURCE], [700], [POSIX and XPG 7th edition])
295     AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [XPG things and X/Open Unix extensions.])
296     AC_DEFINE([_BSD_SOURCE], [1], [ISO C, POSIX, and 4.3BSD things.])
297     AC_DEFINE([_SVID_SOURCE], [1], [ISO C, POSIX, and SVID things.])
298
299     case "${host_os}" in
300       *mingw32*)
301         SYS=mingw32
302         ;;
303       *cygwin*)
304         dnl Check if we are using the mno-cygwin mode in which case we are
305         dnl actually dealing with a mingw32 compiler.
306         AC_EGREP_CPP(yes,
307             [#ifdef _WIN32
308              yes
309              #endif],
310             SYS=mingw32, AC_MSG_ERROR([VLC requires -mno-cygwin]))
311         ;;
312     esac
313
314     if test "${SYS}" = "mingw32"; then
315         # DEP, ASLR, NO SEH
316         LDFLAGS="${LDFLAGS} -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase"
317
318         AC_CHECK_PROGS(U2D, [unix2dos todos], unix2dos)
319         ac_default_prefix="`pwd`/_win32"
320         DESTDIR="`pwd`/_win32/"
321
322         dnl
323         dnl NSIS/MSI Installer prefix and WIN64
324         dnl
325         case "${host_cpu}" in
326             aarch64)
327                 HAVE_WIN64="1"
328                 WINDOWS_ARCH="arm64"
329                 PROGRAMFILES="PROGRAMFILES64"
330                 LDFLAGS="${LDFLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x140000000"
331             ;;
332             amd64|x86_64)
333                 HAVE_WIN64="1"
334                 WINDOWS_ARCH="x64"
335                 PROGRAMFILES="PROGRAMFILES64"
336                 LDFLAGS="${LDFLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x140000000"
337                 X86ASMFLAGS="-f win64"
338             ;;
339             armv7)
340                 WINDOWS_ARCH="arm"
341                 PROGRAMFILES="PROGRAMFILES"
342             ;;
343             *)
344                 WINDOWS_ARCH="x86"
345                 PROGRAMFILES="PROGRAMFILES"
346                 X86ASMFLAGS="-f win32"
347                 X86ASMDEFS="${X86ASMDEFS} -DPREFIX"
348             ;;
349         esac
350         AC_SUBST([WINDOWS_ARCH])
351         AC_SUBST([PROGRAMFILES])
352
353     fi
354     ;;
355   *nto*)
356     SYS=nto
357     ;;
358   solaris*)
359     SYS=solaris
360     ;;
361   hpux*)
362     SYS=hpux
363     ;;
364   *os2*)
365     SYS=os2
366     LDFLAGS="${LDFLAGS} -Zomf -Zbin-files -Zargs-wild -Zhigh-mem"
367     AC_LIBOBJ([freeaddrinfo])
368     AC_LIBOBJ([gai_strerror])
369     AC_CHECK_FUNCS([if_nametoindex])
370     X86ASMFLAGS="-f aout"
371     X86ASMDEFS="-DARCH_X86_32=1 -DARCH_X86_64=0 -DPREFIX"
372     ;;
373   *nacl*)
374     SYS=nacl
375     AC_DEFINE([_XOPEN_SOURCE], [700], [POSIX and XPG 7th edition])
376     AC_LIBOBJ([sigwait])
377     AC_LIBOBJ([recvmsg])
378     AC_LIBOBJ([sendmsg])
379     ;;
380   *)
381     SYS="${host_os}"
382     ;;
383 esac
384
385 dnl WinRT
386 AC_ARG_ENABLE([winstore_app],
387      AS_HELP_STRING([--enable-winstore-app],
388                     [Build targetted for Windows Store apps (default disabled)]))
389
390 vlc_winstore_app=0
391 AS_IF([test "${SYS}" = "mingw32"],[
392   LIBCOM="-lole32"
393   AS_IF([test "${enable_winstore_app}" = "yes"], [
394     vlc_winstore_app=1
395     LIBCOM=""
396     AX_APPEND_FLAG([-DWINSTORECOMPAT],[CFLAGS])
397     AX_APPEND_FLAG([-DWINSTORECOMPAT],[CPPFLAGS])
398     AX_APPEND_FLAG([-DWINSTORECOMPAT],[CXXFLAGS])
399     LDFLAGS="${LDFLAGS} -lwindowsappcompat"
400     VLC_ADD_LIBS([libvlccore], [-lruntimeobject])
401     AC_LIBOBJ([gai_strerror])
402   ],[])
403   AC_SUBST([LIBCOM])
404   ])
405 AC_DEFINE_UNQUOTED(VLC_WINSTORE_APP, ${vlc_winstore_app}, [Define to 1 if you want to build for Windows Store apps])
406
407 vlc_build_pdb=0
408 AC_ARG_ENABLE([pdb],
409      AS_HELP_STRING([--enable-pdb],
410                     [Build PDB files for windows targets (default off)]))
411 AS_IF([test "${SYS}" = "mingw32"],[
412   AS_IF([test "${enable_pdb}" = "yes"], [
413     vlc_build_pdb=1
414     AX_APPEND_FLAG([-g -gcodeview],[CFLAGS])
415     AX_APPEND_FLAG([-g -gcodeview],[CXXFLAGS])
416     LDFLAGS="${LDFLAGS} -Wl,-pdb="
417   ],[])
418 ])
419
420 AM_CONDITIONAL([HAVE_FREEBSD], [test "${SYS}" = "freebsd"])
421 AM_CONDITIONAL([HAVE_LINUX],   [test "${SYS}" = "linux"])
422 AM_CONDITIONAL([HAVE_OS2],     [test "${SYS}" = "os2"])
423
424 AM_CONDITIONAL([HAVE_DARWIN],  [test "${SYS}" = "darwin"])
425 AM_CONDITIONAL([HAVE_IOS],     [test "${HAVE_IOS}" = "1"])
426 AM_CONDITIONAL([HAVE_OSX],     [test "${HAVE_OSX}" = "1"])
427 AM_CONDITIONAL([HAVE_TVOS],    [test "${HAVE_TVOS}" = "1"])
428
429 AM_CONDITIONAL([HAVE_NACL],    [test "${SYS}" = "nacl"])
430 AM_CONDITIONAL([HAVE_LIBANL],  [test "${HAVE_LIBANL}" = "1"])
431
432 AM_CONDITIONAL([HAVE_WIN32],   [test "${SYS}" = "mingw32"])
433 AM_CONDITIONAL([HAVE_WIN64],   [test "${HAVE_WIN64}" = "1"]) dnl Only used for the packaging
434 AM_CONDITIONAL([HAVE_WINSTORE], [test "$vlc_winstore_app" = "1"])
435 AM_CONDITIONAL([HAVE_WIN32_DESKTOP], [test "${SYS}" = "mingw32" -a "$vlc_winstore_app" = "0"])
436 AM_CONDITIONAL([ENABLE_PDB],   [test "$vlc_build_pdb" = "1"])
437
438 dnl Use nasm/yasm only on x86
439 AC_CHECK_PROGS(X86ASM, [nasm yasm])
440 AM_CONDITIONAL([HAVE_X86ASM], [test -n "${X86ASM}" && test -n "${X86ASMFLAGS}"])
441 AM_COND_IF([HAVE_X86ASM], [
442   AC_DEFINE([HAVE_X86ASM], [1], [Use external asm on x86.])
443 ])
444
445 dnl  Because DOLT is not able to handle --with-pic
446 dnl  correctly, manually add -DPIC to the options for
447 dnl  nasm / yasm here.
448 AS_IF([test x$with_pic = xyes], [X86ASMDEFS="${X86ASMDEFS} -DPIC"])
449
450 AC_SUBST([X86ASMFLAGS])
451 AC_SUBST([X86ASMDEFS])
452
453 dnl
454 dnl Sadly autoconf does not think about testing foo.exe when ask to test
455 dnl for program foo on win32
456 case "${build_os}" in
457     cygwin|msys|mingw32)
458         ac_executable_extensions=".exe"
459         BUILDEXEEXT=".exe"
460     ;;
461     os2*)
462         BUILDEXEEXT=".exe"
463     ;;
464     *)
465     ;;
466 esac
467 AC_SUBST([BUILDEXEEXT])
468
469 dnl Android is linux, but a bit different
470 AS_IF([test "$SYS" = linux],[
471     AC_MSG_CHECKING([for an Android system])
472     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
473         [[#ifndef __ANDROID__
474          # error Not Android
475          #endif
476         ]],[[;]])
477     ],[
478       HAVE_ANDROID="1"
479       AC_MSG_RESULT([yes])
480     ],[
481       AC_MSG_RESULT([no])
482     ])
483 ])
484 AM_CONDITIONAL([HAVE_ANDROID], [test "${HAVE_ANDROID}" = "1"])
485
486 dnl
487 dnl  Check for the contrib directory
488 dnl
489 AC_ARG_WITH(contrib,
490   AS_HELP_STRING([--with-contrib[=DIR]],
491     [search for 3rd party libraries in DIR/include and DIR/lib])
492 )
493 AC_MSG_CHECKING([for 3rd party libraries path])
494 AS_IF([test -z "${with_contrib}" || test "${with_contrib}" = "yes"], [
495   CONTRIB_DIR="${srcdir}/contrib/${host}"
496   AS_IF([test ! -d "${CONTRIB_DIR}"], [
497     echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
498     CONTRIB_DIR="${srcdir}/contrib/`$CC -dumpmachine`"
499     AS_IF([test ! -d "${CONTRIB_DIR}"], [
500       echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
501       CONTRIB_DIR=""
502       AC_MSG_RESULT([not found])
503     ])
504   ])
505 ], [
506   AS_IF([test "${with_contrib}" != "no"], [
507     CONTRIB_DIR="${with_contrib}"
508   ], [
509     CONTRIB_DIR=""
510     AC_MSG_RESULT([disabled])
511   ])
512 ])
513 AS_IF([test -n "${CONTRIB_DIR}"], [
514   AS_IF([test -d "${CONTRIB_DIR}/lib"],[
515     CONTRIB_DIR=`cd "${CONTRIB_DIR}" && pwd`
516   ], [
517     echo "${CONTRIB_DIR}/lib not found" >&AS_MESSAGE_LOG_FD
518     CONTRIB_DIR=""
519     AC_MSG_RESULT([not usable])
520   ])
521
522 ])
523 AS_IF([test -n "${CONTRIB_DIR}"], [
524   AC_MSG_RESULT([${CONTRIB_DIR}])
525   CPPFLAGS="${CPPFLAGS} -I${CONTRIB_DIR}/include"
526   CFLAGS="${CFLAGS} -I${CONTRIB_DIR}/include"
527   CXXFLAGS="${CXXFLAGS} -I${CONTRIB_DIR}/include"
528   OBJCFLAGS="${OBJCFLAGS} -I${CONTRIB_DIR}/include -F${CONTRIB_DIR} -F${CONTRIB_DIR}/Frameworks"
529   PKG_CONFIG_PATH="${CONTRIB_DIR}/lib/pkgconfig:${CONTRIB_DIR}/share/pkgconfig:${PKG_CONFIG_PATH}"
530   case "${build_os}" in
531       mingw32)
532           export PKG_CONFIG_PATH=`cygpath -mp ${PKG_CONFIG_PATH}`
533       ;;
534       *)
535           export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}"
536       ;;
537   esac
538   LDFLAGS="${LDFLAGS} -L${CONTRIB_DIR}/lib"
539
540   AS_IF([test -z "$LUAC"], [
541     dnl Old contribs mixed cross-tools and cross-compiled executables
542     AS_IF([test -x "${CONTRIB_DIR}/bin/luac${BUILDEXEEXT}"], [
543       LUAC="${CONTRIB_DIR}/bin/luac${BUILDEXEEXT}"
544     ])
545
546     dnl Newer contribs follow usual name space rules
547     AS_IF([test -x "${CONTRIB_DIR}/../bin/${host_alias}-luac${BUILDEXEEXT}"], [
548       LUAC="${CONTRIB_DIR}/../bin/${host_alias}-luac${BUILDEXEEXT}"
549     ])
550   ])
551
552   AS_IF([test "${SYS}" = "darwin"], [
553     export LD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$LD_LIBRARY_PATH"
554     export DYLD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$DYLD_LIBRARY_PATH"
555   ])
556 ], [
557   AS_IF([test -n "${with_contrib}" && test "${with_contrib}" != "no"], [
558     AC_MSG_ERROR([Third party libraries not found!])
559   ])
560 ])
561 AC_SUBST([CONTRIB_DIR])
562
563 dnl Add extras/tools to the PATH
564 TOOLS_DIR="${srcdir}/extras/tools/build/bin"
565 AS_IF([test -d "${TOOLS_DIR}"], [
566     TOOLS_DIR=`cd "${TOOLS_DIR}" && pwd`
567     export PATH="${TOOLS_DIR}":$PATH
568 ])
569
570 dnl
571 dnl  Libtool
572 dnl  It's very bad, but our former custom system was worst
573 dnl  -- Courmisch
574 dnl
575
576 dnl override platform specific check for dependent libraries
577 dnl otherwise libtool linking of shared libraries will
578 dnl fail on anything other than pass_all.
579 AC_CACHE_VAL(lt_cv_deplibs_check_method,
580     [lt_cv_deplibs_check_method=pass_all])
581
582 LT_INIT([dlopen win32-dll shared disable-static])
583 LT_LANG([C++])
584 LT_LANG([Windows Resource])
585
586 DOLT
587
588 lt_cv_deplibs_check_method=pass_all
589
590 AS_IF([test "${enable_shared}" = "no" -a "${enable_vlc}" != "no"], [
591   AC_MSG_ERROR([VLC is based on plugins. Shared libraries cannot be disabled.])
592 ])
593
594 dnl
595 dnl Gettext stuff
596 dnl
597 AM_GNU_GETTEXT_VERSION([0.19.8])
598 AM_GNU_GETTEXT([external], [need-formatstring-macros])
599
600 dnl
601 dnl Iconv stuff
602 dnl
603 AM_ICONV
604
605 dnl
606 dnl checks for mingw
607 AS_IF([test "${SYS}" = "mingw32"], [
608
609 AC_PREPROC_IFELSE([AC_LANG_SOURCE([
610 #if !defined(__MINGW32__)
611 # error Not compiling with mingw
612 #endif
613     ])], [
614
615 dnl Check for broken versions of mingw-runtime compatability library
616     AC_MSG_CHECKING(for broken mingw-runtime)
617     AC_PREPROC_IFELSE([AC_LANG_SOURCE([
618 #include <_mingw.h>
619 #if defined(__MINGW64_VERSION_MAJOR)
620 # if __MINGW64_VERSION_MAJOR < 5
621 #  error Update your mingw-w64! This one is too old.
622 # endif
623 #else
624 # error You cannot compile with Mingw. Use Mingw-w64!
625 #endif
626     ])], [
627         AC_MSG_RESULT([ok])
628     ], [
629         AC_MSG_RESULT([present])
630         AC_MSG_ERROR([LibVLC requires Mingw-w64 version 5.0 or higher!])
631     ])
632
633     dnl force use of mingw provided c99 *printf over msvcrt
634     CPPFLAGS="${CPPFLAGS} -D__USE_MINGW_ANSI_STDIO=1"
635
636     dnl Check for the need to include the mingwex lib for mingw32
637     VLC_SAVE_FLAGS
638     AC_CHECK_LIB([mingwex], [opendir],
639         AC_CHECK_LIB([mingw32], [opendir],,
640             [VLC_ADD_LIBS([libvlccore],[-lmingwex])])
641     )
642     VLC_RESTORE_FLAGS
643     ], [
644         AC_MSG_RESULT([Not compiling with mingw])
645     ])
646
647     dnl Check for fnative-struct or mms-bitfields support for mingw32
648     AX_CHECK_COMPILE_FLAG([-mms-bitfields], [
649         AX_APPEND_FLAG([-mms-bitfields], [CFLAGS])
650         AX_APPEND_FLAG([-mms-bitfields], [CXXFLAGS])
651         # Check for the warning flag without "-Wno-", GCC accepts
652         # -Wno-<anything> for unsupported warnings, which can trigger
653         # other warnings instead.
654         AX_CHECK_COMPILE_FLAG([-Wincompatible-ms-struct], [
655             AX_APPEND_FLAG([-Wno-incompatible-ms-struct], [CFLAGS])
656             AX_APPEND_FLAG([-Wno-incompatible-ms-struct], [CXXFLAGS])
657         ])
658     ], [
659         AX_CHECK_COMPILE_FLAG([-fnative-struct], [
660             AX_APPEND_FLAG([-fnative-struct], [CFLAGS])
661             AX_APPEND_FLAG([-fnative-struct], [CXXFLAGS])
662         ])
663     ])
664 ])
665
666
667 dnl
668 dnl Buggy glibc prevention. Purposedly not cached.
669 dnl See sourceware.org bugs 5058 and 5443.
670 dnl Ubuntu alone has 20 bug numbers for this...
671 dnl
672 AC_MSG_CHECKING(for buggy GNU/libc versions)
673 AC_PREPROC_IFELSE([AC_LANG_SOURCE([
674 #include <limits.h>
675 #if defined (__GLIBC__) && (__GLIBC__ == 2) \
676   && (__GLIBC_MINOR__ >= 5) && (__GLIBC_MINOR__ <= 7)
677 # error GNU/libc with dcgettext killer bug!
678 #endif
679 ])], [
680   AC_MSG_RESULT([not present])
681 ], [
682   AC_MSG_RESULT([found])
683   AS_IF([test "x${enable_nls}" != "xno"], [
684     AC_MSG_ERROR([Buggy GNU/libc (version 2.5 - 2.7) present. VLC would crash; there is no viable
685 work-around for this. Check with your distribution vendor on how to update the
686 glibc run-time. Alternatively, build with --disable-nls.])
687   ])
688 ])
689
690 dnl Plugin compilation stuff
691
692 VLC_LIBRARY_SUFFIX
693
694 dnl Check for system libs needed
695 need_libc=false
696
697 dnl Check for usual libc functions
698 AC_CHECK_FUNCS([accept4 fcntl flock fstatat fstatvfs fork getmntent_r getenv getpwuid_r isatty memalign mkostemp mmap open_memstream newlocale pipe2 pread posix_fadvise posix_madvise setlocale stricmp strnicmp strptime uselocale wordexp])
699 AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir flockfile fsync getdelim getpid lfind lldiv memrchr nrand48 poll posix_memalign recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy tfind timegm timespec_get strverscmp pathconf])
700 AC_REPLACE_FUNCS([gettimeofday])
701 AC_CHECK_FUNC(fdatasync,,
702   [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
703 ])
704
705 VLC_REPLACE_DECL([realpath], [#include <stdlib.h>])
706
707 dnl mingw64 implements those as static inline, not functions with C linkage
708 VLC_REPLACE_DECL([asprintf], [#include <stdio.h>])
709 VLC_REPLACE_DECL([vasprintf], [#include <stdio.h>])
710 VLC_REPLACE_DECL([gmtime_r], [#include <time.h>])
711 VLC_REPLACE_DECL([localtime_r], [#include <time.h>])
712
713 dnl C11 static_assert()
714 AC_MSG_CHECKING([for static_assert in assert.h])
715 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <assert.h>], [
716 static_assert(1, "The impossible happened.");
717 ])], [
718   AC_MSG_RESULT([yes])
719   AC_DEFINE([HAVE_STATIC_ASSERT], [1], [Define to 1 if <assert.h> defines static_assert.])
720 ], [
721   AC_MSG_RESULT([no])
722 ])
723
724 # Windows CE does not have strcoll()
725 AC_FUNC_STRCOLL
726
727 dnl Check for non-standard system calls
728 case "$SYS" in
729   "linux")
730     AC_CHECK_FUNCS([eventfd vmsplice sched_getaffinity recvmmsg memfd_create])
731     ;;
732   "mingw32")
733     AC_CHECK_FUNCS([_lock_file])
734     ;;
735 esac
736
737 AH_BOTTOM([#include <vlc_fixups.h>])
738
739 dnl Check for struct timespec
740 AC_CHECK_TYPES([struct timespec],,,
741 [#include <time.h>])
742
743 dnl Check for max_align_t
744 AC_CHECK_TYPES([max_align_t],,,
745 [#include <stddef.h>])
746
747 dnl Checks for socket stuff
748 VLC_SAVE_FLAGS
749 SOCKET_LIBS=""
750 AC_SEARCH_LIBS(connect, [socket], [
751   AS_IF([test "$ac_cv_search_connect" != "none required"], [
752     SOCKET_LIBS="$ac_cv_search_connect"
753   ])
754 ], [
755   AS_IF([test "${SYS}" = "mingw32"], [
756     SOCKET_LIBS="-lws2_32 -liphlpapi"
757   ])
758 ])
759
760 AC_SEARCH_LIBS([inet_pton], [nsl], [
761  AS_IF([test "$ac_cv_search_inet_pton" != "none required"], [
762     SOCKET_LIBS="$ac_cv_search_inet_pton $SOCKET_LIBS"
763   ])
764 ],, [${SOCKET_LIBS}])
765
766 LIBS="${LIBS} ${SOCKET_LIBS}"
767 AC_LINK_IFELSE([
768     AC_LANG_PROGRAM([#ifdef _WIN32
769         #include <ws2tcpip.h>
770         #include <windows.h>
771         # if _WIN32_WINNT < 0x600
772         #  error Needs vista+
773         # endif
774         #else
775         #include <sys/socket.h>
776         #include <arpa/inet.h>
777         #endif], [
778         char dst[[sizeof(struct in_addr)]];
779         inet_pton(AF_INET, "127.0.0.1", dst);
780     ])],[AC_DEFINE([HAVE_INET_PTON],[1],[Define to 1 if you have inet_pton function])],[AC_LIBOBJ([inet_pton])])
781 AC_CHECK_TYPES([struct if_nameindex],,,[#include <net/if.h>])
782 AC_CHECK_FUNCS([if_nameindex])
783 VLC_RESTORE_FLAGS
784 AC_SUBST([SOCKET_LIBS])
785
786 dnl Check for socklen_t
787 AH_TEMPLATE(socklen_t, [Define to `int' if <sys/socket.h> does not define.])
788 AC_CACHE_CHECK([for socklen_t in sys/socket.h], dnl ` (fix VIM syntax highlight
789 ac_cv_type_socklen_t,
790 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
791 [#include <sys/types.h>
792 #ifdef _WIN32
793 # include <winsock2.h>
794 # include <ws2tcpip.h>
795 #else
796 # include <sys/socket.h>
797 #endif]], [[socklen_t len; len = 0;]])],
798 ac_cv_type_socklen_t=yes,
799 ac_cv_type_socklen_t=no)])
800 AS_IF([test "$ac_cv_type_socklen_t" = no], [
801   AC_COMPILE_IFELSE([
802     AC_LANG_PROGRAM([[
803 #include <sys/types.h>
804 #ifdef _WIN32
805 # include <winsock2.h>
806 # include <ws2tcpip.h>
807 #else
808 # include <sys/socket.h>
809 #endif
810     ]], [[
811 _Generic(getpeername, int (*)(int, struct sockaddr *, int *): 0);
812     ]])
813   ], AC_DEFINE(socklen_t, int), AC_DEFINE(socklen_t, unsigned int))
814 ])
815
816 dnl Check for struct sockaddr_storage
817 AH_TEMPLATE(sockaddr_storage, [Define to `sockaddr' if <sys/socket.h> does not define.]) dnl ` (fix VIM syntax highlight
818 AH_TEMPLATE(ss_family, [Define to `sa_family' if <sys/socket.h> does not define.]) dnl ` (fix VIM syntax highlight
819 AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_struct_sockaddr_storage,
820   [AC_TRY_COMPILE(
821     [#include <sys/types.h>
822      #if defined( _WIN32 )
823      # include <winsock2.h>
824      #else
825      # include <sys/socket.h>
826      #endif], [struct sockaddr_storage addr;],
827      ac_cv_struct_sockaddr_storage=yes,
828      ac_cv_struct_sockaddr_storage=no)])
829 AS_IF([test "${ac_cv_struct_sockaddr_storage}" = no], [
830   AC_DEFINE(sockaddr_storage, sockaddr)
831   AC_DEFINE(ss_family, sa_family)
832 ])
833
834 dnl FreeBSD has a gnugetopt library for this:
835 GNUGETOPT_LIBS=""
836 AC_CHECK_FUNC(getopt_long,, [
837   AC_CHECK_LIB([gnugetopt],[getopt_long], [
838     GNUGETOPT_LIBS="-lgnugetopt"
839   ])
840 ])
841 AC_SUBST([GNUGETOPT_LIBS])
842
843 AC_CHECK_LIB([m], [cos], [
844   LIBM="-lm"
845 ], [
846   LIBM=""
847 ])
848 AC_SUBST([LIBM])
849
850 AC_CHECK_LIB([m], [lrintf], [
851   AC_DEFINE(HAVE_LRINTF, 1, [Define to 1 if you have the lrintf function])
852   VLC_ADD_LIBS([skins2],[-lm])
853 ])
854 AC_CHECK_LIB([m], [nanf],
855   AC_DEFINE(HAVE_NANF, 1, [Define to 1 if you have the NANF function])
856 )
857 AC_CHECK_LIB([m], [sincos], [
858   AC_DEFINE(HAVE_SINCOS, 1, [Define to 1 if you have the sincos function.])
859 ], [
860   AC_LIBOBJ([sincos])
861 ])
862
863 AC_MSG_CHECKING([broken qsort_r prototype])
864 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdlib.h>
865
866 _Static_assert(_Generic((qsort_r),
867     void (*)(void *, size_t, size_t, void *,
868              int (*)(void *, const void *, const void *)) : 1, default: 0),
869     "Bad prototype not matched");
870 ])], [
871   AC_MSG_RESULT([broken])
872   AC_DEFINE([HAVE_BROKEN_QSORT_R], 1, [Defined to 1 if the qsort_r() prototype contradicts the upcoming POSIX standard.])
873 ], [
874   AC_MSG_RESULT([no])
875 ])
876
877 AC_MSG_CHECKING([_Thread_local support])
878 AC_COMPILE_IFELSE([AC_LANG_SOURCE([_Thread_local int foo = 0;
879                    int main() {}])], [
880     AC_MSG_RESULT([ok])
881     AC_DEFINE(HAVE_THREAD_LOCAL, 1, [Defined to 1 if C11 _Thread_local storage qualifier is supported])
882 ],[ AC_MSG_RESULT([no])])
883
884 dnl __STDC_NO_THREADS__ can't be trusted on some platforms.
885 dnl check for its availability explicitely
886 AC_CHECK_HEADERS([threads.h])
887
888 AC_CHECK_LIB([anl],[getaddrinfo_a],[
889   AC_DEFINE(HAVE_LIBANL, 1, [Define to 1 if you have the anl library])
890 ])
891
892 dnl Check for dynamic plugins
893 LIBDL=""
894 have_dynamic_objects="no"
895 VLC_SAVE_FLAGS
896 AC_SEARCH_LIBS(dlsym, [dl svld], [
897   AS_IF([test "$ac_cv_search_dlsym" != "none required"], [
898     LIBDL="$ac_cv_search_dlsym"
899   ])
900   have_dynamic_objects="yes"
901 ])
902 VLC_RESTORE_FLAGS
903
904 # Windows
905 AS_IF([test "${SYS}" = "mingw32"], [
906   LIBDL=""
907   have_dynamic_objects="yes" #assume we can use shared objects
908 ])
909
910 AC_ARG_WITH([libfuzzer],
911     AS_HELP_STRING([--with-libfuzzer=DIR],
912         [use libFuzzer library from DIR and triggers sanitize coverage (default disabled)]),
913      [],
914      [with_libfuzzer=no])
915 AS_VAR_IF(with_libfuzzer, no, [], [
916     enable_shared=no
917     enable_static=yes
918     enable_vlc=no
919 ])
920 AM_CONDITIONAL([HAVE_LIBFUZZER], [test "${with_libfuzzer}" != "no"])
921
922 AS_IF([test "${enable_shared}" = "no"], [
923   have_dynamic_objects=no
924 ])
925 AM_CONDITIONAL([HAVE_DYNAMIC_PLUGINS], [test "${have_dynamic_objects}" != "no"])
926
927 AC_SUBST([LIBDL])
928
929 AS_IF([test "${SYS}" != "mingw32"], [
930   AC_SEARCH_LIBS([clock_nanosleep], [rt pthread], [
931     AS_IF([test "$ac_cv_search_clock_nanosleep" != "none required"], [
932       LIBRT="$ac_cv_search_clock_nanosleep"
933     ])
934   ], [
935     AC_SEARCH_LIBS([nanosleep], [rt pthread posix4], [
936       AS_IF([test "$ac_cv_search_nanosleep" != "none required"], [
937         LIBRT="$ac_cv_search_nanosleep"
938       ])
939     ])
940   ])
941 ])
942 AC_SUBST([LIBRT])
943
944 dnl  Check for clock_* functions, needs to be done here,
945 dnl  after the -lrt check
946 AC_REPLACE_FUNCS([clock_gettime clock_nanosleep clock_getres])
947
948 dnl
949 dnl Check for headers
950 dnl
951
952 dnl  POSIX
953 AC_CHECK_HEADERS([arpa/inet.h poll.h pthread.h search.h sys/shm.h sys/socket.h sys/uio.h wordexp.h])
954 AC_CHECK_HEADERS([net/if.h], [], [],
955 [
956 #include <sys/types.h>
957 #include <sys/socket.h>
958 ])
959 AC_CHECK_HEADER([syslog.h], [have_syslog="yes"], [have_syslog="no"])
960 AM_CONDITIONAL([HAVE_SYSLOG], [test "$have_syslog" = "yes"])
961
962 dnl  BSD
963 AC_CHECK_HEADERS([netinet/tcp.h netinet/udplite.h sys/param.h sys/mount.h])
964
965 dnl  GNU/Linux
966 AC_CHECK_HEADERS([features.h getopt.h linux/dccp.h linux/magic.h sys/eventfd.h])
967
968 dnl  MacOS
969 AC_CHECK_HEADERS([xlocale.h])
970
971 dnl Check for struct pollfd
972 AC_CHECK_TYPES([struct pollfd],,,
973 [#include <sys/types.h>
974 #if HAVE_POLL_H
975 # include <poll.h>
976 #elif defined (_WIN32)
977 # include <winsock2.h>
978 #endif
979 ])
980
981 dnl Check if C++ headers define locale_t
982 AC_LANG_PUSH(C++)
983 AC_CACHE_CHECK([if C++ headers define locale_t],
984   [ac_cv_cxx_locale_t],
985   [ac_cv_cxx_locale_t=no
986    AC_TRY_COMPILE([#include <locale>], [locale_t loc;],
987                     [ac_cv_cxx_locale_t=yes])])
988 if test "${ac_cv_cxx_locale_t}" != "no"; then
989   AC_DEFINE(HAVE_CXX_LOCALE_T, 1, Define to 1 if C++ headers define locale_t)
990 fi
991 AC_LANG_POP(C++)
992
993 dnl LP64 and LLP64 architectures had better define ssize_t by themselves...
994 AH_TEMPLATE(ssize_t, [Define to `int' if <stddef.h> does not define.]) dnl ` (fix VIM syntax highlight
995 AC_CHECK_TYPE(ssize_t,, [
996   AC_DEFINE(ssize_t, int)
997 ])
998
999 dnl It seems that autoconf detects pkg-config only during the first
1000 dnl PKG_CHECK_MODULES from configure.ac - which makes sense. But in our case,
1001 dnl it is nested within a conditional block, so it was not working right.
1002 PKG_PROG_PKG_CONFIG()
1003
1004 dnl On some OS we need static linking
1005 AS_IF([test -n "${PKG_CONFIG}" ],[
1006     AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "darwin" -o "${SYS}" = "os2" ],[
1007         PKG_CONFIG="${PKG_CONFIG} --static"
1008     ])
1009 ])
1010
1011
1012 dnl
1013 dnl Check for zlib.h and -lz if available
1014 dnl
1015 AC_CHECK_HEADERS([zlib.h], [ have_zlib=yes ], [ have_zlib=no ])
1016 AM_CONDITIONAL([HAVE_ZLIB], [ test "${have_zlib}" = "yes" ])
1017 if test "${have_zlib}" = "yes"
1018 then
1019   VLC_ADD_LIBS([sap],[-lz])
1020 fi
1021
1022
1023 dnl
1024 dnl Domain name i18n support via GNU libidn
1025 dnl
1026 PKG_CHECK_MODULES([IDN], [libidn], [
1027   have_libidn="yes"
1028   AC_DEFINE([HAVE_IDN], 1, [Define to 1 if you have GNU libidn.])
1029 ], [
1030   have_libidn="no"
1031 ])
1032
1033
1034 dnl Check for dbus
1035 AC_ARG_ENABLE([dbus],
1036   AS_HELP_STRING([--enable-dbus],
1037     [compile D-Bus message bus support (default enabled)]))
1038 have_dbus="no"
1039 AS_IF([test "${enable_dbus}" != "no"], [
1040   PKG_CHECK_MODULES(DBUS, [dbus-1 >= 1.6.0], [
1041     have_dbus="yes"
1042   ], [
1043     AS_IF([test -n "${enable_dbus}"], [
1044       AC_MSG_ERROR([${DBUS_PKG_ERRORS}.])
1045     ], [
1046       AC_MSG_WARN([${DBUS_PKG_ERRORS}.])
1047     ])
1048   ])
1049 ])
1050 AM_CONDITIONAL([HAVE_DBUS], [test "${have_dbus}" = "yes"])
1051
1052
1053 dnl Check for systemd
1054 PKG_CHECK_MODULES([SYSTEMD], [libsystemd], [
1055   have_systemd="yes"
1056 ], [
1057   AC_MSG_WARN([${SYSTEMD_PKG_ERRORS}.])
1058 ])
1059 AM_CONDITIONAL([HAVE_SYSTEMD], [test "${have_systemd}" = "yes"])
1060
1061
1062 EXTEND_HELP_STRING([Optimization options:])
1063 dnl
1064 dnl  Compiler warnings
1065 dnl
1066
1067 AX_APPEND_COMPILE_FLAGS([-Wall -Wextra -Wsign-compare -Wundef -Wpointer-arith -Wvolatile-register-var -Wformat -Wformat-security -Wduplicated-branches -Wduplicated-cond], [CFLAGS])
1068 AX_APPEND_COMPILE_FLAGS([-Wall -Wextra -Wsign-compare -Wundef -Wpointer-arith -Wvolatile-register-var -Wformat -Wformat-security -Wduplicated-branches -Wduplicated-cond], [CXXFLAGS])
1069
1070 dnl -Werror-implicit-function-declaration is used for the if_nametoindex detection with winstore
1071 AX_APPEND_COMPILE_FLAGS([-Wbad-function-cast -Wwrite-strings -Wmissing-prototypes -Werror-implicit-function-declaration -Winit-self -Wlogical-op -Wshadow=local -Wmultistatement-macros], [CFLAGS])
1072 AX_APPEND_COMPILE_FLAGS([-pipe], [CFLAGS])
1073
1074 dnl UWP forbidden checks
1075 AS_IF([test "${SYS}" = "mingw32"], [
1076   AC_MSG_CHECKING(for if_nametoindex availability)
1077   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
1078       [[#include <windows.h>
1079         #if defined(__MINGW64_VERSION_MAJOR) && __MINGW64_VERSION_MAJOR < 6
1080         # include <wincrypt.h>
1081         #endif
1082         #include <iphlpapi.h>
1083         static void test (void) {
1084           if_nametoindex("");
1085         }
1086       ]],[[;]])
1087     ],[
1088       AC_MSG_RESULT([present])
1089       AC_DEFINE([HAVE_IF_NAMETOINDEX], [1], [Define to 1 if you have if_nametoindex function])
1090     ],[
1091       AC_MSG_RESULT([not present])
1092     ])
1093 ])
1094
1095 dnl
1096 dnl  Debugging mode
1097 dnl
1098 AC_ARG_ENABLE([debug],
1099   AS_HELP_STRING([--disable-debug],
1100     [disable run-time assertions (default enabled)]),,
1101   [enable_debug="yes"])
1102 AH_TEMPLATE(NDEBUG,
1103             [Define to 1 if debug code should NOT be compiled])
1104 AS_IF([test "${enable_debug}" != "no"], [
1105   AC_CHECK_HEADERS([valgrind/valgrind.h])
1106 ], [
1107   AC_DEFINE(NDEBUG)
1108 ])
1109
1110 dnl
1111 dnl  Profiling
1112 dnl
1113 AC_ARG_ENABLE([gprof],
1114   AS_HELP_STRING([--enable-gprof],[profile with gprof (default disabled)]),,
1115   [enable_gprof="no"])
1116 AS_IF([test "${enable_gprof}" != "no"], [
1117   CFLAGS="${CFLAGS} -pg"
1118   CXXFLAGS="${CXXFLAGS} -pg"
1119   OBJCFLAGS="${OBJCFLAGS} -pg"
1120   LDFLAGS="${LDFLAGS} -pg"
1121 ])
1122
1123 AC_ARG_ENABLE([cprof],
1124   AS_HELP_STRING([--enable-cprof],[profile with cprof (default disabled)]),,
1125   [enable_cprof="no"])
1126 AS_IF([test "${enable_gprof}" != "no"], [
1127   CFLAGS="${CFLAGS} -finstrument-functions"
1128   CXXFLAGS="${CXXFLAGS} -finstrument-functions"
1129   OBJCFLAGS="${OBJCFLAGS} -finstrument-functions"
1130   LDFLAGS="${LDFLAGS} -finstrument-functions"
1131 ])
1132
1133 dnl
1134 dnl  Test coverage
1135 dnl
1136 AC_ARG_ENABLE([coverage],
1137   AS_HELP_STRING([--enable-coverage],
1138     [build for test coverage (default disabled)]),,
1139   [enable_coverage="no"])
1140 AS_IF([test "${enable_coverage}" != "no"], [
1141   CFLAGS="-fprofile-arcs -ftest-coverage ${CFLAGS}"
1142   CXXFLAGS="-fprofile-arcs -ftest-coverage ${CXXFLAGS}"
1143   LDFLAGS="-lgcov ${LDFLAGS}"
1144 ])
1145
1146 AS_IF([test "${SYS}" != "mingw32" -a "${SYS}" != "os2"], [
1147   VLC_SAVE_FLAGS
1148   CFLAGS="${CFLAGS} -fvisibility=hidden"
1149   CXXFLAGS="${CXXFLAGS} -fvisibility=hidden"
1150   OBJCFLAGS="${OBJCFLAGS} -fvisibility=hidden"
1151   AC_CACHE_CHECK([if $CC accepts -fvisibility=hidden],
1152                  [ac_cv_c_visibility_hidden], [
1153     AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
1154       ac_cv_c_visibility_hidden=yes
1155     ], [
1156       ac_cv_c_visibility_hidden=no
1157     ])
1158   ])
1159   AS_IF([test "${ac_cv_c_visibility_hidden}" = "no"], [VLC_RESTORE_FLAGS])
1160 ])
1161
1162 dnl
1163 dnl Sanitizer flags
1164 dnl
1165 AC_ARG_WITH([sanitizer],
1166     AS_HELP_STRING([--with-sanitizer=(address/memory/undefined/thread)],
1167         [build with sanitizer flags (default disabled)]),
1168      [],
1169      [with_sanitizer=no])
1170
1171 AS_VAR_IF(with_sanitizer, no, [], [
1172     AX_CHECK_COMPILE_FLAG([-fsanitize=${with_sanitizer}], [
1173         AX_APPEND_FLAG([-fsanitize=${with_sanitizer}])
1174         AX_APPEND_FLAG([-fsanitize=${with_sanitizer}], [CXXFLAGS])
1175         AX_APPEND_FLAG([-fsanitize=${with_sanitizer}], [LDFLAGS])
1176     ], [
1177         AC_MSG_ERROR(["-fsanitize=${with_sanitizer} not supported!"])
1178     ])
1179     AX_APPEND_FLAG([-g])
1180     AX_APPEND_FLAG([-g], [CXXFLAGS])
1181
1182     AS_IF([test -z "${with_sanitizer##*address*}" ], [
1183        AX_APPEND_COMPILE_FLAGS([-fsanitize-address-use-after-scope -fno-omit-frame-pointer -fsanitize=pointer-compare -fsanitize=pointer-subtract])
1184        AX_APPEND_COMPILE_FLAGS([-fsanitize-address-use-after-scope -fno-omit-frame-pointer -fsanitize=pointer-compare -fsanitize=pointer-subtract], [CXXFLAGS])
1185     ])
1186     AS_IF([test -z "${with_sanitizer##*memory*}" ], [
1187         AX_APPEND_COMPILE_FLAGS([-fPIE -pie])
1188         AX_APPEND_COMPILE_FLAGS([-fPIE -pie], [CXXFLAGS])
1189     ])
1190     AS_IF([test -z "${with_sanitizer##*thread*}" ], [
1191         AX_APPEND_COMPILE_FLAGS([-fPIE -pie])
1192         AX_APPEND_COMPILE_FLAGS([-fPIE -pie], [CXXFLAGS])
1193     ])
1194 ])
1195
1196 dnl
1197 dnl  Enable/disable optimizations
1198 dnl
1199 AC_ARG_ENABLE([optimizations],
1200   AS_HELP_STRING([--disable-optimizations],
1201     [disable compiler optimizations (default enabled)]),,
1202   [enable_optimizations="yes"])
1203
1204 dnl Check for various optimization flags
1205 AS_IF([test "${enable_optimizations}" != "no"], [
1206
1207   dnl -O3 only in production builds
1208   AS_IF([test "${enable_debug}" = "no"], [
1209     VLC_SAVE_FLAGS
1210     CFLAGS="${CFLAGS} -O3"
1211     CXXFLAGS="${CXXFLAGS} -O3"
1212     OBJCFLAGS="${OBJCFLAGS} -O3"
1213     AC_CACHE_CHECK([if $CC accepts -O3],  [ac_cv_c_o3], [
1214       AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
1215         ac_cv_c_o3=yes
1216       ], [
1217         ac_cv_c_o3=no
1218       ])
1219     ])
1220     AS_IF([test "${ac_cv_c_o3}" = "no"], [VLC_RESTORE_FLAGS])
1221   ])
1222
1223   dnl Check for fast maths
1224   AX_APPEND_COMPILE_FLAGS([-fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-signaling-nans -fcx-limited-range], [CFLAGS])
1225   AX_APPEND_COMPILE_FLAGS([-fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-signaling-nans -fcx-limited-range], [CXXFLAGS])
1226
1227 AH_BOTTOM([
1228 #if defined(_MSC_VER) && !defined(__clang__)
1229 # pragma fenv_access(off)
1230 # pragma fp_contract(on)
1231 #elif defined(__GNUC__)
1232 /* Not supported so far */
1233 #else
1234 # pragma STDC FENV_ACCESS OFF
1235 # pragma STDC FP_CONTRACT ON
1236 #endif
1237 ])
1238
1239   dnl Check for -funroll-loops
1240   VLC_SAVE_FLAGS
1241   CFLAGS="${CFLAGS} -funroll-loops"
1242   CXXFLAGS="${CXXFLAGS} -funroll-loops"
1243   OBJCFLAGS="${OBJCFLAGS} -funroll-loops"
1244   AC_CACHE_CHECK([if $CC accepts -funroll-loops], [ac_cv_c_unroll_loops], [
1245     AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
1246       ac_cv_c_unroll_loops=yes
1247     ], [
1248       ac_cv_c_unroll_loops=no
1249     ])
1250   ])
1251   AS_IF([test "${ac_cv_c_unroll_loops}" = "no"], [VLC_RESTORE_FLAGS])
1252
1253   AS_IF([test "$enable_debug" = "no"], [
1254     dnl Check for -fomit-frame-pointer
1255     VLC_SAVE_FLAGS
1256     CFLAGS="${CFLAGS} -fomit-frame-pointer"
1257     CXXFLAGS="${CXXFLAGS} -fomit-frame-pointer"
1258     OBJCFLAGS="${OBJCFLAGS} -fomit-frame-pointer"
1259     AC_CACHE_CHECK([if $CC accepts -fomit-frame-pointer],
1260       [ac_cv_c_omit_frame_pointer], [
1261       AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
1262         ac_cv_c_omit_frame_pointer=yes
1263       ], [
1264         ac_cv_c_omit_frame_pointer=no
1265       ])
1266     ])
1267     AS_IF([test "${ac_cv_c_omit_frame_pointer}" = "no"], [VLC_RESTORE_FLAGS])
1268   ])
1269
1270 ])
1271
1272 AC_ARG_ENABLE([ssp],
1273   AS_HELP_STRING([--disable-ssp],
1274   [disable stack smashing protection (default enabled for optimized builds)]), [],
1275   [enable_ssp="yes"])
1276
1277 AS_IF([test "${enable_ssp}" != "no" -a "${enable_optimizations}" != "no"], [
1278   VLC_SAVE_FLAGS
1279   AX_APPEND_COMPILE_FLAGS([-fstack-protector-strong])
1280   AX_APPEND_COMPILE_FLAGS([-fstack-protector-strong], [CXXFLAGS])
1281   dnl Win32 requires linking to ssp for stack-protection
1282   AS_IF([test "${SYS}" = "mingw32"], [
1283       LDFLAGS="${LDFLAGS} -lssp"
1284       AC_CACHE_CHECK([if linker supports stack protectors], [ac_cv_ld_ssp], [
1285         AC_TRY_LINK([#include <stdio.h>],[char buf[100]; fgets(buf, sizeof(buf), stdin);], [
1286           ac_cv_ld_ssp="yes"
1287         ], [
1288           ac_cv_ld_ssp="no"
1289         ])
1290       ])
1291       AS_IF([test "${ac_cv_ld_ssp}" = "no"], [VLC_RESTORE_FLAGS])
1292   ])
1293 ])
1294
1295 AS_IF([test "${SYS}" = "mingw32"], [
1296     dnl library for BCrypt APIs
1297     AS_IF([test "${vlc_winstore_app}" = 1],
1298           VLC_ADD_LIBS([libvlccore], [-lbcrypt]))
1299 ])
1300
1301 VLC_SAVE_FLAGS
1302 LDFLAGS="${LDFLAGS} -Wl,-Bsymbolic"
1303 AC_CACHE_CHECK([if linker supports -Bsymbolic], [ac_cv_ld_bsymbolic], [
1304   AC_TRY_LINK([],, [
1305     ac_cv_ld_bsymbolic="-Wl,-Bsymbolic"
1306   ], [
1307     ac_cv_ld_bsymbolic=""
1308   ])
1309 ])
1310 VLC_RESTORE_FLAGS
1311 SYMBOLIC_LDFLAGS="${ac_cv_ld_bsymbolic}"
1312 AC_SUBST([SYMBOLIC_LDFLAGS])
1313
1314 VLC_SAVE_FLAGS
1315 LDFLAGS="${LDFLAGS} -Wl,-z,defs"
1316 AC_CACHE_CHECK([if linker supports -z,defs], [ac_cv_ld_z_defs], [
1317   AC_TRY_LINK([],, [
1318     ac_cv_ld_z_defs="yes"
1319   ], [
1320     ac_cv_ld_z_defs="no"
1321   ])
1322 ])
1323 AS_IF([test "${ac_cv_ld_z_defs}" = "no"], [VLC_RESTORE_FLAGS])
1324
1325 dnl Check for __attribute__((packed))
1326 AC_CACHE_CHECK([for __attribute__((packed))],
1327   [ac_cv_c_attribute_packed],
1328   [ac_cv_c_attribute_packed=no
1329    AC_TRY_COMPILE(, [struct __attribute__((__packed__)) foo { int a; } b; (void)b;],
1330                     [ac_cv_c_attribute_packed=yes])])
1331 if test "${ac_cv_c_attribute_packed}" != "no"; then
1332   AC_DEFINE(HAVE_ATTRIBUTE_PACKED, 1, Support for __attribute__((packed)) for structs)
1333 fi
1334
1335 dnl
1336 dnl  Check the CPU
1337 dnl
1338 case "${host_cpu}" in
1339   "")
1340     ARCH=unknown
1341     ;;
1342   armv*)
1343     ARCH="arm"
1344     host_cpu="arm"
1345     ;;
1346   *)
1347     ARCH="${host_cpu}"
1348     ;;
1349 esac
1350
1351 dnl Check for backtrace() support
1352 AC_CHECK_HEADERS([execinfo.h])
1353 AC_CHECK_FUNCS([backtrace])
1354
1355 dnl
1356 dnl  default modules
1357 dnl
1358 ALIASES="${ALIASES} cvlc rvlc"
1359
1360 dnl
1361 dnl  Accelerated modules
1362 dnl
1363
1364 dnl  Check for fully working MMX intrinsics
1365 dnl  We need support for -mmmx, we need <mmintrin.h>, and we also need a
1366 dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1367 AC_ARG_ENABLE([mmx],
1368   AS_HELP_STRING([--disable-mmx],
1369     [disable MMX optimizations (default auto)]),,[
1370   case "${host_cpu}" in
1371     i?86|x86_64)
1372       enable_mmx="yes"
1373       ;;
1374     *)
1375       enable_mmx="no"
1376       ;;
1377   esac
1378 ])
1379 have_mmx="no"
1380 have_mmxext="no"
1381 AS_IF([test "${enable_mmx}" != "no"], [
1382   ARCH="${ARCH} mmx"
1383   VLC_SAVE_FLAGS
1384   CFLAGS="${CFLAGS} -mmmx"
1385   AC_CACHE_CHECK([if $CC groks MMX intrinsics], [ac_cv_c_mmx_intrinsics], [
1386     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1387 [#include <mmintrin.h>
1388 #include <stdint.h>
1389 uint64_t frobzor;]], [
1390 [__m64 a, b, c;
1391 a = b = c = (__m64)frobzor;
1392 a = _mm_slli_pi16(a, 3);
1393 a = _mm_adds_pi16(a, b);
1394 c = _mm_srli_pi16(c, 8);
1395 c = _mm_slli_pi16(c, 3);
1396 b = _mm_adds_pi16(b, c);
1397 a = _mm_unpacklo_pi8(a, b);
1398 frobzor = (uint64_t)a;]])], [
1399       ac_cv_c_mmx_intrinsics=yes
1400     ], [
1401       ac_cv_c_mmx_intrinsics=no
1402     ])
1403   ])
1404   VLC_RESTORE_FLAGS
1405   AS_IF([test "${ac_cv_c_mmx_intrinsics}" != "no"], [
1406     AC_DEFINE(HAVE_MMX_INTRINSICS, 1, [Define to 1 if MMX intrinsics are available.])
1407   ])
1408
1409   VLC_SAVE_FLAGS
1410   CFLAGS="${CFLAGS} -mmmx"
1411   AC_CACHE_CHECK([if $CC groks MMX inline assembly], [ac_cv_mmx_inline], [
1412     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1413 void *p;
1414 asm volatile("packuswb %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
1415 ]])
1416     ], [
1417       ac_cv_mmx_inline=yes
1418     ], [
1419       ac_cv_mmx_inline=no
1420     ])
1421   ])
1422   AS_IF([test "${ac_cv_mmx_inline}" != "no"], [
1423     AC_DEFINE(CAN_COMPILE_MMX, 1, [Define to 1 inline MMX assembly is available.])
1424     have_mmx="yes"
1425   ])
1426
1427   AC_CACHE_CHECK([if $CC groks MMX EXT inline assembly],
1428                  [ac_cv_mmxext_inline], [
1429     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1430 void *p;
1431 asm volatile("maskmovq %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
1432 ]])
1433     ], [
1434       ac_cv_mmxext_inline=yes
1435     ], [
1436       ac_cv_mmxext_inline=no
1437     ])
1438   ])
1439   VLC_RESTORE_FLAGS
1440   AS_IF([test "${ac_cv_mmxext_inline}" != "no"], [
1441     AC_DEFINE(CAN_COMPILE_MMXEXT, 1, [Define to 1 if MMX EXT inline assembly is available.])
1442     have_mmxext="yes"
1443   ])
1444 ])
1445 AM_CONDITIONAL([HAVE_MMX], [test "${have_mmx}" = "yes"])
1446 AM_CONDITIONAL([HAVE_MMXEXT], [test "${have_mmxext}" = "yes"])
1447
1448 dnl  Check for fully workin SSE2 intrinsics
1449 dnl  We need support for -msse[2], we need <emmintrin.h>, and we also need a
1450 dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1451 AC_ARG_ENABLE([sse],
1452   AS_HELP_STRING([--disable-sse],
1453     [disable SSE (1-4) optimizations (default auto)]),, [
1454   case "${host_cpu}" in
1455     i?86|x86_64)
1456       enable_sse=yes
1457       ;;
1458     *)
1459       enable_sse=no
1460       ;;
1461   esac
1462 ])
1463 have_sse2="no"
1464 AS_IF([test "${enable_sse}" != "no"], [
1465   ARCH="${ARCH} sse sse2"
1466
1467   VLC_SAVE_FLAGS
1468   CFLAGS="${CFLAGS} -msse2"
1469   AC_CACHE_CHECK([if $CC groks SSE2 intrinsics], [ac_cv_c_sse2_intrinsics], [
1470     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1471 [#include <emmintrin.h>
1472 #include <stdint.h>
1473 uint64_t frobzor;]], [
1474 [__m128i a, b, c;
1475 a = b = c = _mm_set1_epi64((__m64)frobzor);
1476 a = _mm_slli_epi16(a, 3);
1477 a = _mm_adds_epi16(a, b);
1478 c = _mm_srli_epi16(c, 8);
1479 c = _mm_slli_epi16(c, 3);
1480 b = _mm_adds_epi16(b, c);
1481 a = _mm_unpacklo_epi8(a, b);
1482 frobzor = (uint64_t)_mm_movepi64_pi64(a);]])], [
1483       ac_cv_c_sse2_intrinsics=yes
1484     ], [
1485       ac_cv_c_sse2_intrinsics=no
1486     ])
1487   ])
1488   VLC_RESTORE_FLAGS
1489   AS_IF([test "${ac_cv_c_sse2_intrinsics}" != "no"], [
1490     AC_DEFINE(HAVE_SSE2_INTRINSICS, 1, [Define to 1 if SSE2 intrinsics are available.])
1491   ])
1492
1493   VLC_SAVE_FLAGS
1494   CFLAGS="${CFLAGS} -msse"
1495   AC_CACHE_CHECK([if $CC groks SSE inline assembly], [ac_cv_sse_inline], [
1496     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1497 void *p;
1498 asm volatile("xorps %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
1499 ]])
1500     ], [
1501       ac_cv_sse_inline=yes
1502     ], [
1503       ac_cv_sse_inline=no
1504     ])
1505   ])
1506
1507   AS_IF([test "${ac_cv_sse_inline}" != "no" -a "${SYS}" != "solaris"], [
1508     AC_DEFINE(CAN_COMPILE_SSE, 1, [Define to 1 if SSE inline assembly is available.])
1509   ])
1510
1511   AC_CACHE_CHECK([if $CC groks SSE2 inline assembly], [ac_cv_sse2_inline], [
1512     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1513 void *p;
1514 asm volatile("punpckhqdq %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
1515 ]])
1516     ], [
1517       ac_cv_sse2_inline=yes
1518     ], [
1519       ac_cv_sse2_inline=no
1520     ])
1521   ])
1522   AS_IF([test "${ac_cv_sse2_inline}" != "no" -a "${SYS}" != "solaris"], [
1523     AC_DEFINE(CAN_COMPILE_SSE2, 1, [Define to 1 if SSE2 inline assembly is available.])
1524     have_sse2="yes"
1525   ])
1526
1527   # SSE3
1528   AC_CACHE_CHECK([if $CC groks SSE3 inline assembly], [ac_cv_sse3_inline], [
1529     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1530 void *p;
1531 asm volatile("movsldup %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1532 ]])
1533     ], [
1534       ac_cv_sse3_inline=yes
1535     ], [
1536       ac_cv_sse3_inline=no
1537     ])
1538   ])
1539
1540   AS_IF([test "${ac_cv_sse3_inline}" != "no"], [
1541     AC_DEFINE(CAN_COMPILE_SSE3, 1, [Define to 1 if SSE3 inline assembly is available.]) ])
1542
1543   # SSSE3
1544   AC_CACHE_CHECK([if $CC groks SSSE3 inline assembly], [ac_cv_ssse3_inline], [
1545     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1546 void *p;
1547 asm volatile("pabsw %%xmm0,%%xmm0"::"r"(p):"xmm0");
1548 ]])
1549     ], [
1550       ac_cv_ssse3_inline=yes
1551     ], [
1552       ac_cv_ssse3_inline=no
1553     ])
1554   ])
1555
1556   AS_IF([test "${ac_cv_ssse3_inline}" != "no"], [
1557     AC_DEFINE(CAN_COMPILE_SSSE3, 1, [Define to 1 if SSSE3 inline assembly is available.]) ])
1558
1559   # SSE4.1
1560   AC_CACHE_CHECK([if $CC groks SSE4.1 inline assembly],
1561                  [ac_cv_sse4_1_inline], [
1562     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1563 void *p;
1564 asm volatile("pmaxsb %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1565 ]])
1566     ], [
1567       ac_cv_sse4_1_inline=yes
1568     ], [
1569       ac_cv_sse4_1_inline=no
1570     ])
1571   ])
1572
1573   AS_IF([test "${ac_cv_sse4_1_inline}" != "no"], [
1574     AC_DEFINE(CAN_COMPILE_SSE4_1, 1, [Define to 1 if SSE4_1 inline assembly is available.]) ])
1575
1576   # SSE4.2
1577   AC_CACHE_CHECK([if $CC groks SSE4.2 inline assembly],
1578                  [ac_cv_sse4_2_inline], [
1579     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1580 void *p;
1581 asm volatile("pcmpgtq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1582 ]])
1583     ], [
1584       ac_cv_sse4_2_inline=yes
1585     ], [
1586       ac_cv_sse4_2_inline=no
1587     ])
1588   ])
1589
1590   AS_IF([test "${ac_cv_sse4_2_inline}" != "no"], [
1591     AC_DEFINE(CAN_COMPILE_SSE4_2, 1, [Define to 1 if SSE4_2 inline assembly is available.]) ])
1592
1593   # SSE4A
1594   AC_CACHE_CHECK([if $CC groks SSE4A inline assembly], [ac_cv_sse4a_inline], [
1595     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1596 void *p;
1597 asm volatile("insertq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1598 ]])
1599     ], [
1600       ac_cv_sse4a_inline=yes
1601     ], [
1602       ac_cv_sse4a_inline=no
1603     ])
1604   ])
1605   VLC_RESTORE_FLAGS
1606   AS_IF([test "${ac_cv_sse4a_inline}" != "no"], [
1607     AC_DEFINE([CAN_COMPILE_SSE4A], [1], [Define to 1 if SSE4A inline assembly is available.]) ])
1608 ])
1609 AM_CONDITIONAL([HAVE_SSE2], [test "$have_sse2" = "yes"])
1610
1611 dnl  Check for fully workin AVX2 intrinsics
1612 dnl  We need support for -mavx[2], we need <immintrin.h>, and we also need a
1613 dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1614 AC_ARG_ENABLE([avx],
1615   AS_HELP_STRING([--disable-avx],
1616     [disable AVX (1-2) optimizations (default auto)]),, [
1617   case "${host_cpu}" in
1618     i?86|x86_64)
1619       enable_avx=yes
1620       ;;
1621     *)
1622       enable_avx=no
1623       ;;
1624   esac
1625 ])
1626 have_avx2="no"
1627 AS_IF([test "${enable_avx}" != "no"], [
1628   ARCH="${ARCH} avx avx2"
1629
1630   VLC_SAVE_FLAGS
1631   CFLAGS="${CFLAGS} -mavx2"
1632   AC_CACHE_CHECK([if $CC groks AVX2 intrinsics], [ac_cv_c_avx2_intrinsics], [
1633     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1634 [#include <immintrin.h>
1635 #include <stdint.h>
1636 uint64_t frobzor;]], [
1637 [__m256i a, b, c;
1638 a = b = c = _mm256_set1_epi64x((int64_t)frobzor);
1639 a = _mm256_slli_epi16(a, 3);
1640 a = _mm256_adds_epi16(a, b);
1641 c = _mm256_srli_epi16(c, 8);
1642 c = _mm256_slli_epi16(c, 3);
1643 b = _mm256_adds_epi16(b, c);
1644 a = _mm256_unpacklo_epi8(a, b);
1645 frobzor = (uint64_t)_mm256_extract_epi64(a, 0);]])], [
1646       ac_cv_c_avx2_intrinsics=yes
1647     ], [
1648       ac_cv_c_avx2_intrinsics=no
1649     ])
1650   ])
1651   VLC_RESTORE_FLAGS
1652   AS_IF([test "${ac_cv_c_avx2_intrinsics}" != "no"], [
1653     AC_DEFINE(HAVE_AVX2_INTRINSICS, 1, [Define to 1 if AVX2 intrinsics are available.])
1654   ])
1655
1656   VLC_SAVE_FLAGS
1657   CFLAGS="${CFLAGS} -mavx"
1658   AC_CACHE_CHECK([if $CC groks AVX inline assembly], [ac_cv_avx_inline], [
1659     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1660 void *p;
1661 asm volatile("xorps256 %%ymm1,%%ymm2"::"r"(p):"ymm1", "ymm2");
1662 ]])
1663     ], [
1664       ac_cv_avx_inline=yes
1665     ], [
1666       ac_cv_avx_inline=no
1667     ])
1668   ])
1669
1670   AS_IF([test "${ac_cv_avx_inline}" != "no" -a "${SYS}" != "solaris"], [
1671     AC_DEFINE(CAN_COMPILE_AVX, 1, [Define to 1 if AVX inline assembly is available.])
1672   ])
1673
1674   AC_CACHE_CHECK([if $CC groks AVX2 inline assembly], [ac_cv_avx2_inline], [
1675     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1676 void *p;
1677 asm volatile("punpckhqdq256 %%ymm1,%%ymm2"::"r"(p):"ymm1", "ymm2");
1678 ]])
1679     ], [
1680       ac_cv_avx2_inline=yes
1681     ], [
1682       ac_cv_avx2_inline=no
1683     ])
1684   ])
1685   VLC_RESTORE_FLAGS
1686   AS_IF([test "${ac_cv_avx2_inline}" != "no" -a "${SYS}" != "solaris"], [
1687     AC_DEFINE(CAN_COMPILE_AVX2, 1, [Define to 1 if AVX2 inline assembly is available.])
1688     have_avx2="yes"
1689   ])
1690 ])
1691 AM_CONDITIONAL([HAVE_AVX2], [test "$have_avx2" = "yes"])
1692
1693 VLC_SAVE_FLAGS
1694 CFLAGS="${CFLAGS} -mmmx"
1695 have_3dnow="no"
1696 AC_CACHE_CHECK([if $CC groks 3D Now! inline assembly], [ac_cv_3dnow_inline], [
1697   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1698 void *p;
1699 asm volatile("pfadd %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
1700 ]])
1701   ], [
1702     ac_cv_3dnow_inline=yes
1703   ], [
1704     ac_cv_3dnow_inline=no
1705   ])
1706 ])
1707 VLC_RESTORE_FLAGS
1708 AS_IF([test "${ac_cv_3dnow_inline}" != "no"], [
1709   AC_DEFINE([CAN_COMPILE_3DNOW], 1,
1710             [Define to 1 if 3D Now! inline assembly is available.])
1711   have_3dnow="yes"
1712 ])
1713 AM_CONDITIONAL([HAVE_3DNOW], [test "$have_3dnow" = "yes"])
1714
1715
1716 AC_ARG_ENABLE([neon],
1717   AS_HELP_STRING([--disable-neon],
1718     [disable ARM NEON optimizations (default auto)]),, [
1719   case "${host_cpu}" in
1720     "arm")
1721       enable_neon="32"
1722       ;;
1723     "aarch64")
1724       enable_neon="64"
1725       ;;
1726     *)
1727       enable_neon="no"
1728       ;;
1729   esac
1730 ])
1731 AS_IF([test "${enable_neon}" != "no"], [
1732   VLC_SAVE_FLAGS
1733   AC_CACHE_CHECK([if $CCAS groks ARM NEON assembly], [ac_cv_arm_neon], [
1734     AS_IF([test "${enable_neon}" != "64"], [
1735       CFLAGS="${CFLAGS} -mfpu=neon -mhard-float"
1736       AC_COMPILE_IFELSE([
1737         AC_LANG_PROGRAM(,[[
1738 asm volatile("vqmovun.s64 d0, q1":::"d0");
1739 ]])
1740       ], [
1741         ac_cv_arm_neon="32"
1742       ], [
1743         ac_cv_arm_neon="no"
1744       ])
1745     ], [
1746       CFLAGS="${CFLAGS} -march=armv8-a+simd"
1747       AC_COMPILE_IFELSE([
1748         AC_LANG_PROGRAM(,[[
1749 asm volatile("uhadd v0.8b, v0.8b, v1.8b":::"v0");
1750 ]])
1751       ], [
1752         ac_cv_arm_neon="64"
1753       ], [
1754         ac_cv_arm_neon="no"
1755       ])
1756     ])
1757   ])
1758   VLC_RESTORE_FLAGS
1759 ])
1760 AM_CONDITIONAL([HAVE_NEON], [test "${ac_cv_arm_neon}" = "32"])
1761 AM_CONDITIONAL([HAVE_ARM64], [test "${ac_cv_arm_neon}" = "64"])
1762
1763 AC_ARG_ENABLE([sve],
1764   AS_HELP_STRING([--disable-sve],
1765     [disable ARM SVE optimizations (default auto)]),, [
1766   AS_IF([test "${host_cpu}" = "aarch64"], [enable_sve="yes"] ,[enable_sve="no"])
1767 ])
1768 AS_IF([test "${enable_sve}" != "no"], [
1769   VLC_SAVE_FLAGS
1770   CFLAGS="${CFLAGS} -march=armv8-a+sve"
1771   AC_CACHE_CHECK([if $CCAS groks ARM SVE assembly], [ac_cv_arm_sve], [
1772     AC_COMPILE_IFELSE([
1773       AC_LANG_PROGRAM(,[[
1774 asm volatile("ptrue p0.s" ::: "p0");
1775 ]])
1776     ], [
1777       ac_cv_arm_sve="yes"
1778     ], [
1779       ac_cv_arm_sve="no"
1780     ])
1781   ])
1782   VLC_RESTORE_FLAGS
1783 ])
1784 AM_CONDITIONAL([HAVE_SVE], [test "${ac_cv_arm_sve}" = "yes"])
1785
1786 AC_ARG_ENABLE([branch-protection],
1787   AS_HELP_STRING([--disable-branch-protection],
1788     [disable AArch64 branch protection (default auto)]),, [
1789   AS_IF([test "${host_cpu}" = "aarch64"],
1790     [enable_branch_protection="yes"], [enable_branch_protection="no"])
1791 ])
1792 AS_IF([test "${enable_branch_protection}" != "no"], [
1793   AX_CHECK_COMPILE_FLAG([-mbranch-protection=standard], [
1794     AX_APPEND_FLAG([-mbranch-protection=standard], [CFLAGS])
1795     AX_APPEND_FLAG([-mbranch-protection=standard], [CXXFLAGS])
1796   ])
1797 ])
1798
1799
1800 AC_ARG_ENABLE([altivec],
1801   AS_HELP_STRING([--disable-altivec],
1802     [disable AltiVec optimizations (default auto)]),, [
1803   AS_CASE("${host_cpu}", [powerpc*],
1804         [enable_altivec=yes], [enable_altivec=no])
1805 ])
1806 have_altivec="no"
1807 ALTIVEC_CFLAGS=""
1808 AS_IF([test "${enable_altivec}" = "yes"], [
1809   ARCH="${ARCH} altivec";
1810   VLC_SAVE_FLAGS
1811   AC_CACHE_CHECK([if $CC groks AltiVec inline assembly],
1812     [ac_cv_altivec_inline],
1813     [AC_TRY_COMPILE(,[asm volatile("vperm 0,1,2,3");],
1814          ac_cv_altivec_inline="yes",
1815          [CFLAGS="${CFLAGS} -Wa,-maltivec"
1816           AC_TRY_COMPILE(,[asm volatile("vperm 0,1,2,3");],
1817             [ac_cv_altivec_inline="-Wa,-maltivec"],
1818             ac_cv_altivec_inline=no)
1819          ])])
1820   VLC_RESTORE_FLAGS
1821   AS_IF([test "${ac_cv_altivec_inline}" != "no"], [
1822     AC_DEFINE(CAN_COMPILE_ALTIVEC, 1,
1823               [Define to 1 if AltiVec inline assembly is available.])
1824     AS_IF([test "${ac_cv_altivec_inline}" != "yes"], [
1825       ALTIVEC_CFLAGS="${ac_cv_altivec_inline}"
1826       VLC_ADD_CFLAGS([libvlccore],[${ac_cv_altivec_inline}])
1827     ])
1828     have_altivec="yes"
1829   ])
1830
1831   VLC_SAVE_FLAGS
1832   AC_CACHE_CHECK([if \$CC groks AltiVec C extensions],
1833   [ac_cv_c_altivec], [
1834     CFLAGS="${CFLAGS} -maltivec"
1835     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1836 [#include <altivec.h>]], [
1837 [vec_ld(0, (unsigned char *)0);]])], [
1838       ac_cv_c_altivec="-maltivec"
1839     ], [
1840       ac_cv_c_altivec="no"
1841     ])
1842   ])
1843   VLC_RESTORE_FLAGS
1844   AS_IF([test "${ac_cv_c_altivec}" != "no"], [
1845     CPPFLAGS="${CPPFLAGS} ${ac_cv_c_altivec}"
1846     AC_DEFINE(CAN_COMPILE_C_ALTIVEC, 1, [Define to 1 if C AltiVec extensions are available.])
1847     VLC_ADD_CFLAGS([libvlccore],[${ac_cv_c_altivec}])
1848     ALTIVEC_CFLAGS="$ALTIVEC_CFLAGS ${ac_cv_c_altivec}"
1849     VLC_ADD_CFLAGS([deinterlace],[${ac_cv_c_altivec}])
1850     have_altivec="yes"
1851   ])
1852   AC_CHECK_HEADERS([altivec.h])
1853
1854   VLC_SAVE_FLAGS
1855   LDFLAGS="${LDFLAGS} -Wl,-framework,vecLib"
1856   AC_CACHE_CHECK([if linker needs -framework vecLib],
1857     [ac_cv_ld_altivec],
1858     [AC_TRY_LINK([],,ac_cv_ld_altivec=yes,ac_cv_ld_altivec=no)])
1859   VLC_RESTORE_FLAGS
1860   AS_IF([test "${ac_cv_ld_altivec}" != "no"], [
1861     VLC_ADD_LIBS([libvlccore],[-Wl,-framework,vecLib])
1862   ])
1863 ])
1864 AC_SUBST([ALTIVEC_CFLAGS])
1865 AM_CONDITIONAL([HAVE_ALTIVEC], [test "$have_altivec" = "yes"])
1866
1867 dnl
1868 dnl  Memory usage
1869 dnl
1870 AC_ARG_ENABLE([optimize-memory],
1871   AS_HELP_STRING([--enable-optimize-memory],
1872     [optimize memory usage over performance]))
1873 if test "${enable_optimize_memory}" = "yes"; then
1874   AC_DEFINE(OPTIMIZE_MEMORY, 1, Define if you want to optimize memory usage over performance)
1875 fi
1876
1877 dnl
1878 dnl Allow running as root (useful for people running on embedded platforms)
1879 dnl
1880 AC_ARG_ENABLE([run-as-root],
1881   AS_HELP_STRING([--enable-run-as-root],
1882     [allow running VLC as root (default disabled)]))
1883 AS_IF([test "${enable_run_as_root}" = "yes"],[
1884     AC_DEFINE(ALLOW_RUN_AS_ROOT, 1,
1885               [Define to 1 to allow running VLC as root (uid 0).])
1886 ])
1887
1888 dnl
1889 dnl Stream output
1890 dnl
1891 AC_ARG_ENABLE([sout],
1892   AS_HELP_STRING([--disable-sout],
1893     [disable streaming output (default enabled)]))
1894 AS_IF([test "${enable_sout}" != "no"], [
1895   AC_DEFINE(ENABLE_SOUT, 1, [Define to 1 for stream output support.])
1896 ])
1897 AM_CONDITIONAL([ENABLE_SOUT], [test "${enable_sout}" != "no"])
1898
1899 dnl Lua modules
1900 AC_ARG_ENABLE([lua],
1901   AS_HELP_STRING([--disable-lua],
1902     [disable LUA scripting support (default enabled)]))
1903 if test "${enable_lua}" != "no"
1904 then
1905   PKG_CHECK_MODULES(LUA, lua5.2,
1906     [ have_lua=yes ],
1907     [
1908     AC_MSG_WARN([${LUA_PKG_ERRORS}, trying lua 5.1 instead])
1909
1910     PKG_CHECK_MODULES(LUA, lua5.1,
1911       [ have_lua=yes ],
1912       [
1913       AC_MSG_WARN([${LUA_PKG_ERRORS}, trying lua >= 5.1 instead])
1914       PKG_CHECK_MODULES(LUA, lua >= 5.1,
1915         [ have_lua=yes ],
1916         [
1917           AC_MSG_WARN([${LUA_PKG_ERRORS}, trying manual detection instead])
1918           have_lua=yes
1919           AC_CHECK_HEADERS([lua.h lauxlib.h lualib.h],
1920             [],
1921             [ have_lua=no ] )
1922           AC_CHECK_LIB(  lua5.2 , luaL_newstate,
1923             [LUA_LIBS="-llua5.2"],
1924           AC_CHECK_LIB( lua5.1 , luaL_newstate,
1925             [LUA_LIBS="-llua5.1"],
1926             AC_CHECK_LIB( lua51 , luaL_newstate,
1927               [LUA_LIBS="-llua51"],
1928               AC_CHECK_LIB( lua , luaL_newstate,
1929                 [LUA_LIBS="-llua"],
1930                 [ have_lua=no
1931                 ], [-lm])
1932             )))
1933         ])
1934       ])
1935     ])
1936   if test "x${have_lua}" != "xyes" ;  then
1937       AC_MSG_ERROR([Could not find lua. Lua is needed for some interfaces (rc, telnet, http) as well as many other custom scripts. Use --disable-lua to ignore this error.])
1938   fi
1939   AC_ARG_VAR([LUAC], [LUA byte compiler])
1940   AS_IF([test -z "$LUAC"], [
1941      AC_CHECK_TOOL(LUAC, [luac], [false])
1942   ])
1943   AS_IF([test "${LUAC}" = "false"], [
1944     AC_MSG_ERROR([Could not find the LUA byte compiler.])
1945   ])
1946   AS_IF([test -d "${CONTRIB_DIR}" -a -f "${CONTRIB_DIR}/lib/liblua.a" -a `echo|${LUAC} -o - -|od -j 8 -N 2 -t x2|head -n 1|tr -s ' '|cut -d' ' -f2` != 0404], [
1947     AC_MSG_ERROR([You need 32-bits luac when using lua from contrib.])
1948   ])
1949 fi
1950 AM_CONDITIONAL([BUILD_LUA], [test "${have_lua}" = "yes"])
1951
1952
1953 dnl
1954 dnl VideoLAN manager
1955 dnl
1956 AC_ARG_ENABLE([vlm],
1957   AS_HELP_STRING([--disable-vlm],
1958     [disable the stream manager (default enabled)]),,
1959   [enable_vlm="${enable_sout}"])
1960 AS_IF([test "${enable_vlm}" != "no"], [
1961   AS_IF([test "${enable_sout}" = "no"], [
1962     AC_MSG_ERROR([VLM requires the stream output. Do not use --disable-sout.])
1963   ])
1964   AC_DEFINE(ENABLE_VLM, 1, [Define if you want the VideoLAN manager support])
1965 ])
1966 AM_CONDITIONAL([ENABLE_VLM], [test "${enable_vlm}" != "no"])
1967
1968
1969 dnl
1970 dnl Addons manager storage and repositories modules
1971 dnl
1972 AC_ARG_ENABLE([addonmanagermodules],
1973   AS_HELP_STRING([--disable-addonmanagermodules],
1974     [disable the addons manager modules (default enabled)]))
1975 if test "${enable_addonmanagermodules}" != "no"
1976 then
1977   AC_DEFINE(ENABLE_ADDONMANAGERMODULES, 1, [Define if you want the addons manager modules])
1978 fi
1979 AM_CONDITIONAL([ENABLE_ADDONMANAGERMODULES], [test "${enable_addonmanagermodules}" != "no"])
1980
1981
1982 dnl
1983 dnl  Input plugins
1984 dnl
1985
1986 EXTEND_HELP_STRING([Input plugins:])
1987
1988 dnl
1989 dnl  libarchive access module
1990 dnl
1991 PKG_ENABLE_MODULES_VLC([ARCHIVE], [archive], [libarchive >= 3.1.0], (libarchive support), [auto])
1992
1993 dnl
1994 dnl  live555 input
1995 dnl
1996 AC_ARG_ENABLE([live555],
1997   AS_HELP_STRING([--enable-live555],
1998     [enable RTSP input through live555 (default enabled)]))
1999
2000 AS_IF([test "${enable_live555}" != "no" -a -n "${CXX}"], [
2001   PKG_CHECK_MODULES(LIVE555, live555, [
2002     VLC_ADD_PLUGIN([live555])
2003     VLC_ADD_CXXFLAGS([live555], [$LIVE555_CFLAGS])
2004     VLC_ADD_LIBS([live555],[$LIVE555_LIBS])
2005   ], [
2006     AC_MSG_WARN([${LIVE555_PKG_ERRORS}.])
2007
2008     AC_LANG_PUSH(C++)
2009     VLC_SAVE_FLAGS
2010
2011     dnl detect include paths
2012     AS_IF([test -f "${CONTRIB_DIR}/include/UsageEnvironment/UsageEnvironment.hh"], [
2013       CPPFLAGS_live555="-I${CONTRIB_DIR}/include/liveMedia -I${CONTRIB_DIR}/include/groupsock -I${CONTRIB_DIR}/include/BasicUsageEnvironment -I${CONTRIB_DIR}/include/UsageEnvironment"
2014     ], [
2015       AS_IF([test "${SYS}" != "os2"], [
2016         LIVE555_PREFIX=${LIVE555_PREFIX-"/usr"}
2017         CPPFLAGS_live555="-I${LIVE555_PREFIX}/include/liveMedia -I${LIVE555_PREFIX}/include/groupsock -I${LIVE555_PREFIX}/include/BasicUsageEnvironment -I${LIVE555_PREFIX}/include/UsageEnvironment"
2018       ], [
2019         LIVE555_PREFIX=${LIVE555_PREFIX-"/usr/lib/live"}
2020         CPPFLAGS_live555="-I${LIVE555_PREFIX}/liveMedia/include -I${LIVE555_PREFIX}/groupsock/include -I${LIVE555_PREFIX}/BasicUsageEnvironment/include -I${LIVE555_PREFIX}/UsageEnvironment/include"
2021         LDFLAGS_live555="-L${LIVE555_PREFIX}/liveMedia -L${LIVE555_PREFIX}/groupsock -L${LIVE555_PREFIX}/BasicUsageEnvironment -L${LIVE555_PREFIX}/UsageEnvironment"
2022       ])
2023     ])
2024
2025     dnl CPP Flags
2026     AS_IF([test "${SYS}" = "solaris"], [
2027       CPPFLAGS_live555="${CPPFLAGS_live555} -DSOLARIS"
2028     ])
2029     CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_live555}"
2030     LDFLAGS="${LDFLAGS} ${LDFLAGS_live555}"
2031
2032     dnl version check
2033     AC_CACHE_CHECK([for live555 version 1324598400 or later], [ac_cv_live555], [
2034       AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
2035 [#include <liveMedia_version.hh>
2036 #if !defined (LIVEMEDIA_LIBRARY_VERSION_INT) || (LIVEMEDIA_LIBRARY_VERSION_INT < 1324598400)
2037 # error BOOM
2038 #endif]])
2039       ], [
2040         ac_cv_live555="yes"
2041       ], [
2042         ac_cv_live555="no"
2043       ])
2044     ])
2045
2046     AS_IF([test "$ac_cv_live555" = "no"], [
2047       AC_MSG_WARN([live555 is missing or its installed version is too old:
2048 Version 2011.12.23 or later is required to proceed.
2049 You can get an updated one from http://www.live555.com/liveMedia .])
2050       AS_IF([test -n "${enable_live555}"], [
2051         AC_MSG_ERROR([Update live555 or pass --disable-live555 to disable RTSP input support.])
2052       ])
2053     ], [
2054       other_libs="-lgroupsock -lBasicUsageEnvironment -lUsageEnvironment"
2055       other_libs_pic="-lgroupsock_pic -lBasicUsageEnvironment_pic -lUsageEnvironment_pic"
2056       AS_IF([test "${SYS}" = "mingw32"], [
2057         # add ws2_32 for closesocket, select, recv
2058         other_libs="$other_libs -lws2_32"
2059       ])
2060
2061       dnl We need to check for pic because live555 don't provide shared libs
2062       dnl and we want to build a plugins so we need -fPIC on some arch.
2063       VLC_ADD_CXXFLAGS([live555], [${CPPFLAGS_live555}])
2064       VLC_ADD_LDFLAGS([live555], [${LDFLAGS_live555}])
2065       AC_CHECK_LIB([liveMedia_pic], [main], [
2066         VLC_ADD_PLUGIN([live555])
2067         VLC_ADD_LIBS([live555], [-lliveMedia_pic ${other_libs_pic}])
2068       ],[
2069         AC_CHECK_LIB([liveMedia], [main], [
2070           VLC_ADD_PLUGIN([live555])
2071           VLC_ADD_LIBS([live555], [-lliveMedia ${other_libs}])
2072         ],[],[${other_libs}])
2073       ],[${other_libs_pic}])
2074     ])
2075     VLC_RESTORE_FLAGS
2076     AC_LANG_POP(C++)
2077   ])
2078 ])
2079
2080 dnl
2081 dnl IIDC and DV FireWire input modules
2082 dnl
2083 PKG_ENABLE_MODULES_VLC([DC1394], [], [libdc1394-2 >= 2.1.0], [IIDC FireWire input module], [auto])
2084 PKG_ENABLE_MODULES_VLC([DV1394], [], [libraw1394 >= 2.0.1 libavc1394 >= 0.5.3], [DV FireWire input module], [auto])
2085
2086 dnl
2087 dnl - linsys modules: access module check for libzvbi
2088 dnl
2089 AC_ARG_ENABLE([linsys],
2090   AS_HELP_STRING([--enable-linsys],
2091     [Linux Linear Systems Ltd. SDI and HD-SDI input cards (default enabled)]))
2092 AS_IF([test "$SYS" = "linux" -a "${enable_linsys}" != "no"], [
2093   VLC_ADD_PLUGIN([linsys_hdsdi])
2094   PKG_CHECK_MODULES(LINSYS_SDI, [zvbi-0.2 >= 0.2.28], [
2095     VLC_ADD_PLUGIN([linsys_sdi])
2096   ], [
2097     AC_MSG_WARN([${LINSYS_SDI_PKG_ERRORS}.])
2098   ])
2099 ])
2100
2101 dnl
2102 dnl dvdread module: check for libdvdread
2103 dnl
2104 PKG_ENABLE_MODULES_VLC([DVDREAD], [], [dvdread > 6.0.0], [dvdread input module], [auto])
2105
2106 dnl
2107 dnl libdvdnav plugin
2108 dnl
2109 PKG_ENABLE_MODULES_VLC([DVDNAV], [], [dvdnav >= 6.0.0], [DVD with navigation input module (dvdnav)], [auto])
2110
2111 dnl
2112 dnl  Blu-ray Disc Support with libbluray
2113 dnl
2114 PKG_ENABLE_MODULES_VLC([BLURAY], [libbluray], [libbluray >= 0.6.2], (libbluray for Blu-ray disc support ) )
2115
2116 dnl
2117 dnl  OpenCV wrapper and example filters
2118 dnl
2119 PKG_ENABLE_MODULES_VLC([OPENCV], [opencv_example opencv_wrapper], [opencv > 2.0], (OpenCV (computer vision) filter), [auto])
2120
2121
2122 dnl
2123 dnl  libsmbclient plugin
2124 dnl
2125 PKG_ENABLE_MODULES_VLC([SMBCLIENT], [smbc], [smbclient], (SMB/CIFS support), [auto])
2126
2127 dnl
2128 dnl  liBDSM access module
2129 dnl
2130 AM_CONDITIONAL([HAVE_DSM], [test "$AS_TR_SH(with_dsm)" = "yes"])
2131 PKG_WITH_MODULES([DSM], [libdsm >= 0.2.0], [
2132        VLC_ADD_PLUGIN([dsm])
2133        VLC_ADD_CFLAGS([dsm], [$DSM_CFLAGS])
2134        VLC_ADD_LIBS([dsm], [$DSM_LIBS])
2135        have_dsm="yes"
2136    ],,[libdsm SMB/CIFS access/sd module], [auto])
2137 AM_CONDITIONAL([HAVE_DSM], [test "${have_dsm}" = "yes"])
2138
2139 dnl
2140 dnl sftp access support
2141 dnl
2142 PKG_ENABLE_MODULES_VLC([SFTP], [sftp], [libssh2], (support SFTP file transfer via libssh2), [auto])
2143
2144 dnl
2145 dnl nfs access support
2146 dnl
2147 PKG_ENABLE_MODULES_VLC([NFS], [nfs], [libnfs >= 1.10.0], (support nfs protocol via libnfs), [auto])
2148
2149 dnl
2150 dnl smb2 access support
2151 dnl
2152 PKG_ENABLE_MODULES_VLC([SMB2], [smb2], [libsmb2 >= 3.0.0], (support smb2 protocol via libsmb2), [auto])
2153
2154 dnl
2155 dnl  Video4Linux 2
2156 dnl
2157 AC_ARG_ENABLE([v4l2], AS_HELP_STRING([--disable-v4l2],
2158   [disable Video4Linux version 2 (default auto)]))
2159 have_v4l2="no"
2160 AS_IF([test "$enable_v4l2" != "no"], [
2161   AC_CHECK_HEADERS([linux/videodev2.h], [
2162     have_v4l2="yes"
2163   ])
2164 ])
2165 AM_CONDITIONAL([HAVE_V4L2], [test "${have_v4l2}" != "no"])
2166
2167 dnl
2168 dnl  NVDEC decoder/encoder
2169 dnl
2170 AC_ARG_ENABLE([nvdec], AS_HELP_STRING([--disable-nvdec],
2171   [disable NVDEC decoder (default auto)]))
2172 have_nvdec="no"
2173 AS_IF([test "$enable_nvdec" != "no"], [
2174   AC_CHECK_HEADERS([ffnvcodec/dynlink_loader.h], [
2175     have_nvdec="yes"
2176   ])
2177 ])
2178 AM_CONDITIONAL([HAVE_NVDEC], [test "${have_nvdec}" != "no"])
2179
2180 dnl
2181 dnl special access module for Blackmagic SDI cards
2182 dnl
2183 AC_ARG_ENABLE([decklink],
2184   AS_HELP_STRING([--disable-decklink],
2185     [disable Blackmagic DeckLink SDI input (default auto)]))
2186 AC_ARG_WITH([decklink_sdk],
2187   AS_HELP_STRING([--with-decklink-sdk=DIR],
2188     [location of Blackmagic DeckLink SDI SDK]))
2189 have_decklink=no
2190 if test "${enable_decklink}" != "no"
2191 then
2192   if test "${with_decklink_sdk}" != "no" -a -n "${with_decklink_sdk}"
2193   then
2194     VLC_ADD_CPPFLAGS([decklink decklinkoutput stream_out_sdi],[-I${with_decklink_sdk}/include])
2195   fi
2196   VLC_SAVE_FLAGS
2197   CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_decklink}"
2198   AC_LANG_PUSH([C++])
2199   AC_CHECK_HEADERS([DeckLinkAPIDispatch.cpp], [
2200       have_decklink=yes
2201       AS_IF([test "${SYS}" = "darwin"], [
2202         VLC_ADD_LIBS([decklink decklinkoutput],[-Wl,-framework,CoreFoundation])
2203       ])
2204   ], [
2205       AS_IF([test "${enable_decklink}" = "yes"], [
2206         AC_MSG_ERROR([Blackmagic DeckLink SDI include files not found!])
2207       ], [
2208         AC_MSG_WARN([Blackmagic DeckLink SDI include files not found, decklink disabled])
2209       ])
2210   ])
2211   AC_LANG_POP([C++])
2212   VLC_RESTORE_FLAGS
2213 fi
2214 AM_CONDITIONAL([HAVE_DECKLINK], [ test "${have_decklink}" != "no" ])
2215
2216
2217 dnl
2218 dnl  Built-in CD-DA and VCD module
2219 dnl
2220 AC_ARG_ENABLE([vcd],
2221   AS_HELP_STRING([--disable-vcd],
2222     [disable built-in VCD and CD-DA support (default enabled)]))
2223
2224 AC_ARG_ENABLE([libcddb],
2225   AS_HELP_STRING([--disable-libcddb],
2226     [disable CDDB for Audio CD (default enabled)]))
2227
2228 if test "${enable_vcd}" != "no" -a "${enable_winstore_app}" != "yes"
2229 then
2230   AC_MSG_CHECKING(for cdrom_msf0 in linux/cdrom.h)
2231   AC_EGREP_HEADER(cdrom_msf0,linux/cdrom.h,[
2232     AC_MSG_RESULT(yes)
2233     VLC_ADD_PLUGIN([vcd cdda])
2234   ],[
2235     AC_MSG_RESULT(no)
2236   ])
2237
2238   AC_MSG_CHECKING(for scsireq in sys/scsiio.h)
2239   AC_EGREP_HEADER(scsireq,sys/scsiio.h,[
2240     AC_MSG_RESULT(yes)
2241     VLC_ADD_PLUGIN([vcd cdda])
2242     AC_DEFINE(HAVE_SCSIREQ_IN_SYS_SCSIIO_H, 1, For NetBSD VCD support)
2243   ],[
2244     AC_MSG_RESULT(no)
2245   ])
2246
2247   AC_MSG_CHECKING(for ioc_toc_header in sys/cdio.h)
2248   AC_EGREP_HEADER(ioc_toc_header ,sys/cdio.h,[
2249     AC_MSG_RESULT(yes)
2250     VLC_ADD_PLUGIN([vcd cdda])
2251     AC_DEFINE(HAVE_IOC_TOC_HEADER_IN_SYS_CDIO_H, 1, For FreeBSD VCD support)
2252   ],[
2253     AC_MSG_RESULT(no)
2254   ])
2255
2256   if test "${SYS}" = "bsdi" -o "${SYS}" = "mingw32" -o "${SYS}" = "os2" -o "${SYS}" = "darwin"
2257   then
2258     VLC_ADD_PLUGIN([vcd cdda])
2259   fi
2260
2261   if test "$enable_libcddb" != "no"; then
2262     PKG_CHECK_MODULES(LIBCDDB, [libcddb >= 0.9.5], [
2263       HAVE_LIBCDDB=yes
2264       AC_DEFINE(HAVE_LIBCDDB, 1, [Define this if you have libcddb installed])
2265       VLC_ADD_LIBS([cdda],[$LIBCDDB_LIBS])
2266       VLC_ADD_CFLAGS([cdda],[$LIBCDDB_CFLAGS])
2267       ],:
2268       [AC_MSG_WARN([${LIBCDDB_PKG_ERRORS}: CDDB access disabled.])
2269       HAVE_LIBCDDB=no])
2270   fi
2271 fi
2272
2273 dnl
2274 dnl Linux DVB
2275 dnl
2276 AC_CACHE_CHECK([for Linux DVB version 5.1], [ac_cv_linux_dvb_5_1], [
2277   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
2278 [#include <linux/dvb/version.h>
2279 #if (DVB_API_VERSION < 5)
2280 # error Linux DVB API v3.2 and older are not supported.
2281 #endif
2282 #if (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR < 1)
2283 # error Linux DVB API v5.0 is unsupported. Please update.
2284 #endif
2285 ]])], [
2286   ac_cv_linux_dvb_5_1=yes
2287 ], [
2288   ac_cv_linux_dvb_5_1=no
2289 ])])
2290 AM_CONDITIONAL([HAVE_LINUX_DVB], [test "$ac_cv_linux_dvb_5_1" = "yes"])
2291
2292 dnl
2293 dnl  Screen capture module
2294 dnl
2295 AC_ARG_ENABLE([screen],
2296   AS_HELP_STRING([--enable-screen],
2297     [disable screen capture (default enabled)]))
2298 if test "${enable_screen}" != "no"; then
2299   if test "${SYS}" = "darwin"; then
2300     AC_CHECK_HEADERS([ApplicationServices/ApplicationServices.h], [
2301       VLC_ADD_PLUGIN([screen])
2302     ])
2303   fi
2304 fi
2305 AM_CONDITIONAL([HAVE_MAC_SCREEN], [test "${SYS}" = "darwin" -a "x${enable_screen}" != "xno"])
2306
2307 dnl
2308 dnl  VNC/RFB access module
2309 dnl
2310 PKG_ENABLE_MODULES_VLC([VNC], [vnc], [libvncclient >= 0.9.9], (VNC/rfb client support), [auto])
2311
2312 dnl  RDP/Remote Desktop access module
2313 dnl
2314 PKG_ENABLE_MODULES_VLC([FREERDP], [rdp], [freerdp >= 1.0.1], (RDP/Remote Desktop client support) )
2315
2316 dnl
2317 dnl AVFoundation
2318 AC_SUBST([have_avfoundation], ["no"])
2319 AC_ARG_ENABLE([macosx-avfoundation],
2320   AS_HELP_STRING([--enable-macosx-avfoundation], [Mac OS X avcapture (video) module (default enabled on Mac OS X)]))
2321 if test "x${enable_macosx_avfoundation}" != "xno" &&
2322   (test "${SYS}" = "darwin" || test "${enable_macosx_avfoundation}" = "yes")
2323 then
2324   SAVED_LIBS="${LIBS}"
2325   LIBS="-framework AVFoundation"
2326   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [])],[have_avfoundation=yes],[have_avfoundation=no])
2327   LIBS="${SAVED_LIBS}"
2328   if test "${have_avfoundation}" != "no"
2329   then
2330     VLC_ADD_PLUGIN([avcapture])
2331   fi
2332 fi
2333 AM_CONDITIONAL([HAVE_AVFOUNDATION], [test "${have_avfoundation}" != "no"])
2334
2335 dnl
2336 dnl  DCP plugin (using asdcplib)
2337 dnl
2338 PKG_WITH_MODULES([ASDCP], [asdcplib], [have_asdcp="yes"])
2339 AM_CONDITIONAL([HAVE_ASDCP], [test "${have_asdcp}" = "yes"])
2340
2341 dnl
2342 dnl  Demux plugins
2343 dnl
2344
2345 EXTEND_HELP_STRING([Mux/Demux plugins:])
2346
2347 dnl
2348 dnl  libdvbpsi check for ts mux/demux
2349 dnl
2350 have_dvbpsi="no"
2351 PKG_WITH_MODULES([DVBPSI], [libdvbpsi >= 1.2.0], [have_dvbpsi="yes"])
2352 AM_CONDITIONAL([HAVE_DVBPSI], [test "${have_dvbpsi}" = "yes"])
2353
2354
2355 dnl
2356 dnl  GME demux plugin
2357 dnl
2358 AC_ARG_ENABLE([gme],
2359   AS_HELP_STRING([--enable-gme],
2360     [use Game Music Emu (default auto)]))
2361 AS_IF([test "${enable_gme}" != "no"], [
2362   AC_CHECK_HEADER([gme/gme.h], [
2363     AC_CHECK_LIB([gme], [gme_identify_header], [
2364       VLC_ADD_PLUGIN([gme])
2365     ], [
2366       AC_CHECK_LIB([gme], [gme_identify_extension], [
2367          VLC_ADD_LIBS([gme], [-lstdc++ $LIBM])
2368          VLC_ADD_PLUGIN([gme])
2369       ],, [-lstdc++ $LIBM])
2370     ])
2371     VLC_ADD_LIBS([gme], [-lgme])
2372   ], [
2373     AS_IF([test "x${enable_gme}" != "x"], [
2374       AC_MSG_ERROR([GME cannot be found. Please install the development files.])
2375     ])
2376   ])
2377 ])
2378
2379
2380 dnl
2381 dnl  SIDPlay plugin
2382 dnl
2383 AC_ARG_ENABLE([sid],
2384     AS_HELP_STRING([--enable-sid],[C64 sid demux support (default auto)]))
2385 AS_IF([test "${enable_sid}" != "no"], [
2386     PKG_CHECK_MODULES(SID, [libsidplay2], [
2387         AC_LANG_PUSH(C++)
2388         oldCPPFLAGS="$CPPFLAGS"
2389         CPPFLAGS="$CPPFLAGS $SID_CFLAGS"
2390         AC_CHECK_HEADER([sidplay/builders/resid.h], [
2391             VLC_ADD_PLUGIN([sid])
2392             VLC_ADD_CFLAGS([sid], [$SID_CFLAGS])
2393             VLC_ADD_LIBS([sid], [$SID_LIBS] [-lresid-builder])
2394         ], [
2395             AS_IF([test -n "${enable_sid}"],
2396                 [AC_MSG_ERROR([${SID_PKG_ERRORS} (required for sid).])],
2397                 [AC_MSG_WARN([${SID_PKG_ERRORS} (required for sid).])]
2398                 )
2399         ])
2400         CPPFLAGS="$oldCPPFLAGS"
2401         AC_LANG_POP(C++)
2402     ], [
2403         AS_IF([test "x${enable_sid}" = "xyes"],
2404             [AC_MSG_ERROR([${SID_PKG_ERRORS} (required for sid).])],
2405             [AC_MSG_WARN([${SID_PKG_ERRORS} (required for sid).])]
2406             )
2407     ])
2408 ])
2409
2410
2411 dnl
2412 dnl  ogg demux plugin
2413 dnl
2414 PKG_ENABLE_MODULES_VLC([OGG], [mux_ogg], [ogg >= 1.0], [Ogg demux support], [auto])
2415 PKG_CHECK_MODULES(LIBVORBIS, [vorbis >= 1.1], [
2416     AC_DEFINE(HAVE_LIBVORBIS, 1, [Define to 1 if you have the libvorbis])
2417 ],[true])
2418 PKG_ENABLE_MODULES_VLC([OGG], [], [ogg >= 1.0], [Ogg demux support], [auto], [${LIBVORBIS_CFLAGS}], [${LIBVORBIS_LIBS}])
2419 if test "${enable_sout}" != "no"; then
2420 dnl Check for libshout
2421     PKG_ENABLE_MODULES_VLC([SHOUT], [access_output_shout], [shout >= 2.1], [libshout output plugin], [auto])
2422 fi
2423
2424 dnl
2425 dnl  matroska demux plugin
2426 dnl
2427 PKG_WITH_MODULES([MATROSKA], [libebml >= 1.3.6 libmatroska], [
2428        VLC_ADD_PLUGIN([mkv])
2429        VLC_ADD_CFLAGS([mkv], [$MATROSKA_CFLAGS])
2430        VLC_ADD_LIBS([mkv], [$MATROSKA_LIBS])
2431        have_matroska="yes"
2432    ],,[MKV format support], [auto])
2433 AM_CONDITIONAL([HAVE_MATROSKA], [test "${have_matroska}" = "yes"])
2434
2435 dnl
2436 dnl  modplug demux plugin
2437 dnl
2438 AC_ARG_ENABLE([mod],
2439   AS_HELP_STRING([--disable-mod],
2440     [do not use libmodplug (default auto)]))
2441 if test "${enable_mod}" != "no" ; then
2442     PKG_CHECK_MODULES(LIBMODPLUG, [libmodplug >= 0.8.9.0], [
2443           VLC_ADD_PLUGIN([mod])
2444           VLC_ADD_CXXFLAGS([mod],[$LIBMODPLUG_CFLAGS])
2445           VLC_ADD_CFLAGS([mod],[$LIBMODPLUG_CFLAGS]) #modules/demux/mod.c needs CFLAGS_mod, not CXXFLAGS_mod
2446           VLC_ADD_LIBS([mod],[$LIBMODPLUG_LIBS])
2447     ],[
2448        AS_IF([test -n "${enable_mod}"],
2449          [AC_MSG_ERROR([${LIBMODPLUG_PKG_ERRORS}.])],
2450          [AC_MSG_WARN([${LIBMODPLUG_PKG_ERRORS}.])])
2451     ])
2452 fi
2453
2454 dnl
2455 dnl  mpc demux plugin
2456 dnl
2457 AC_ARG_ENABLE([mpc],
2458   AS_HELP_STRING([--disable-mpc], [do not use libmpcdec (default auto)]))
2459 if test "${enable_mpc}" != "no"
2460 then
2461     AC_CHECK_HEADERS([mpcdec/mpcdec.h], [
2462     VLC_ADD_PLUGIN([mpc])
2463     VLC_ADD_LIBS([mpc],[-lmpcdec])])
2464 fi
2465
2466 dnl
2467 dnl  Codec plugins
2468 dnl
2469
2470 EXTEND_HELP_STRING([Codec plugins:])
2471
2472 dnl
2473 dnl shine encoder plugin
2474 dnl
2475 PKG_ENABLE_MODULES_VLC([SHINE], [], [shine >= 3.0.0], [MPEG Audio Layer 3 encoder], [auto], [], [], [])
2476
2477
2478 dnl
2479 dnl openmax il codec plugin
2480 dnl
2481 AC_ARG_ENABLE([omxil],
2482   AS_HELP_STRING([--enable-omxil], [openmax il codec module (default disabled)]))
2483 if test "${enable_omxil}" = "yes"
2484 then
2485   VLC_ADD_PLUGIN([omxil])
2486 fi
2487
2488 dnl
2489 dnl raspberry pi openmax il configuration
2490 dnl
2491 AC_ARG_ENABLE([rpi-omxil],
2492   AS_HELP_STRING([--enable-rpi-omxil], [openmax il configured for raspberry pi (default disabled)]))
2493 if test "${enable_rpi_omxil}" = "yes"
2494 then
2495   VLC_ADD_PLUGIN([omxil])
2496   VLC_ADD_CFLAGS([omxil],[-DRPI_OMX])
2497 fi
2498
2499 dnl
2500 dnl  mad plugin
2501 dnl
2502 have_mad="no"
2503 MAD_CFLAGS=""
2504 MAD_LIBS=""
2505
2506 AC_ARG_WITH(mad, AS_HELP_STRING([--with-mad=PATH], [path to libmad]), [
2507   enable_mad="yes"
2508 ], [
2509   with_mad="no"
2510 ])
2511 AS_IF([test "${with_mad}" != "no"], [
2512   MAD_CFLAGS="-I${with_mad}/include"
2513   MAD_LIBS="-L${with_mad}/lib"
2514 ])
2515
2516 AC_ARG_ENABLE([mad],
2517   AS_HELP_STRING([--enable-mad], [libmad module (default enabled)]))
2518 AS_IF([test "${enable_mad}" != "no"], [
2519   VLC_SAVE_FLAGS
2520   CPPFLAGS="${CPPFLAGS} ${MAD_CFLAGS}"
2521   LDFLAGS="${LDFLAGS} ${MAD_LIBS}"
2522   AC_CHECK_HEADERS([mad.h], [
2523     AC_CHECK_LIB([mad], [mad_bit_init], [
2524       have_mad="yes"
2525       MAD_LIBS="${MAD_LIBS} -lmad"
2526     ])
2527   ])
2528   VLC_RESTORE_FLAGS
2529   AS_IF([test -n "$enable_mad" -a "${have_mad}" = "no"], [
2530     AC_MSG_ERROR([Could not find libmad. Install it or pass --disable-mad to disable it.])
2531   ])
2532 ])
2533 AC_SUBST([MAD_CFLAGS])
2534 AC_SUBST([MAD_LIBS])
2535 AM_CONDITIONAL([HAVE_MAD], [test "${have_mad}" = "yes"])
2536
2537 dnl  mpg123 plugin
2538 dnl
2539 dnl
2540 PKG_ENABLE_MODULES_VLC([MPG123], [mpg123], [libmpg123], [libmpg123 decoder support], [auto])
2541
2542 dnl
2543 dnl gstreamer stuff
2544 dnl
2545 AC_ARG_ENABLE([gst-decode],
2546   AS_HELP_STRING([--enable-gst-decode], [GStreamer based decoding support (currently supports only video decoding) (default auto)]))
2547
2548 have_gst_decode="no"
2549 AS_IF([test "${enable_gst_decode}" != "no"], [
2550   PKG_CHECK_MODULES([GST_APP], [gstreamer-app-1.0], [
2551     PKG_CHECK_MODULES([GST_VIDEO], [gstreamer-video-1.0], [
2552       have_gst_decode="yes"
2553     ], [
2554       AC_MSG_WARN([${GST_VIDEO_PKG_ERRORS}. GStreamer decoder module will not be built.])
2555     ])
2556   ], [
2557     AC_MSG_WARN([${GST_APP_PKG_ERRORS}. GStreamer modules will not be built.])
2558   ])
2559 ])
2560 AM_CONDITIONAL([HAVE_GST_DECODE], [test "${have_gst_decode}" = "yes"])
2561
2562 dnl
2563 dnl  avcodec decoder/encoder plugin
2564 dnl
2565 AC_ARG_ENABLE([merge-ffmpeg],
2566 AS_HELP_STRING([--enable-merge-ffmpeg], [merge FFmpeg-based plugins (default disabled)]),, [
2567   enable_merge_ffmpeg="no"
2568 ])
2569 AM_CONDITIONAL([MERGE_FFMPEG], [test "$enable_merge_ffmpeg" != "no"])
2570
2571 AC_MSG_CHECKING([for libavutil variant])
2572 PKG_CHECK_EXISTS([libavutil], [
2573   libavutil_version="$(${PKG_CONFIG} --modversion libavutil)"
2574   libavutil_micro="${libavutil_version##*.}"
2575   AS_IF([test ${libavutil_micro} -le 99], [
2576     avfork="libav"
2577   ], [
2578     avfork="ffmpeg"
2579   ])
2580 ], [
2581   avfork="none"
2582 ])
2583 AC_MSG_RESULT([${avfork}])
2584
2585 AC_ARG_ENABLE([avcodec],
2586 AS_HELP_STRING([--enable-avcodec], [libavcodec codec (default enabled)]))
2587 AS_IF([test "${enable_avcodec}" != "no"], [
2588   dnl We need >=57.16.0 from libav or >=57.37.100 from ffmpeg
2589   case "${avfork}" in
2590     libav) av_codec_ver="57.16.0" ;;
2591     dnl 05f66706d182eb0c36af54d72614bf4c33e957a9  includes libavutil 55.9.0
2592     ffmpeg) av_codec_ver="57.37.100" ;;
2593     dnl 7fc329e2dd6226dfecaa4a1d7adf353bf2773726  include libavutil 55.22.101
2594     *) AC_MSG_ERROR([Missing libav or FFmpeg. Pass --disable-avcodec to ignore this error.])
2595   esac
2596   PKG_CHECK_MODULES(AVCODEC,[libavcodec >= ${av_codec_ver} libavutil >= 55.9.0], [
2597     VLC_SAVE_FLAGS
2598     CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
2599     CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
2600     AC_CHECK_HEADERS([libavcodec/avcodec.h])
2601     AC_CHECK_HEADERS([libavutil/avutil.h])
2602     VLC_RESTORE_FLAGS
2603     have_avcodec="yes"
2604   ],[
2605     AC_MSG_ERROR([${AVCODEC_PKG_ERRORS}. Pass --disable-avcodec to ignore this error.])
2606   ])
2607 ], [
2608   have_avcodec="no"
2609 ])
2610 AM_CONDITIONAL([HAVE_AVCODEC], [test "${have_avcodec}" != "no"])
2611
2612 dnl
2613 dnl libva needs avcodec
2614 dnl
2615 AC_ARG_ENABLE([libva],
2616   AS_HELP_STRING([--enable-libva], [VAAPI GPU decoding support (libVA) (default auto)]))
2617
2618 AS_IF([test "${enable_libva}" = "yes" -a "${have_avcodec}" != "yes" ], [
2619   AC_MSG_ERROR([--enable-libva and --disable-avcodec options are mutually exclusive. Use --enable-avcodec.])
2620 ])
2621
2622 have_vaapi="no"
2623 have_vaapi_drm="no"
2624 have_vaapi_x11="no"
2625 have_vaapi_wl="no"
2626 AS_IF([test "${enable_libva}" != "no"], [
2627   PKG_CHECK_MODULES([LIBVA], [libva >= 1.0], [
2628     have_vaapi="yes"
2629   ], [
2630     AS_IF([test -n "${enable_libva}"], [
2631       AC_MSG_ERROR([${LIBVA_PKG_ERRORS}.])
2632     ], [
2633       AC_MSG_WARN([${LIBVA_PKG_ERRORS}.])
2634     ])
2635   ])
2636   PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm], [
2637     have_vaapi_drm="yes"
2638   ], [
2639     AC_MSG_WARN([${LIBVA_DRM_PKG_ERRORS}.])
2640   ])
2641   PKG_CHECK_MODULES(LIBVA_X11, [libva-x11], [
2642     have_vaapi_x11="yes"
2643   ], [
2644     AC_MSG_WARN([${LIBVA_X11_PKG_ERRORS}.])
2645   ])
2646   PKG_CHECK_MODULES(LIBVA_WL, [libva-wayland], [
2647     have_vaapi_wl="yes"
2648   ], [
2649     AC_MSG_WARN([${LIBVA_WL_PKG_ERRORS}.])
2650   ])
2651 ])
2652 AM_CONDITIONAL([HAVE_VAAPI], [test "${have_vaapi}" = "yes"])
2653 AM_CONDITIONAL([HAVE_VAAPI_DRM], [test "${have_vaapi_drm}" = "yes"])
2654 AM_CONDITIONAL([HAVE_VAAPI_X11], [test "${have_vaapi_x11}" = "yes"])
2655 AM_CONDITIONAL([HAVE_VAAPI_WL], [test "${have_vaapi_wl}" = "yes"])
2656
2657 have_avcodec_vaapi="no"
2658 AS_IF([test "${have_vaapi}" = "yes" -a "${have_avcodec}" = "yes"], [
2659   VLC_SAVE_FLAGS
2660   CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
2661   CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
2662   AC_CHECK_HEADERS([libavcodec/vaapi.h], [
2663     AC_MSG_NOTICE([VA API acceleration activated])
2664     have_avcodec_vaapi="yes"
2665   ],[
2666     AS_IF([test -n "${enable_libva}"], [
2667       AC_MSG_ERROR([libva is present but libavcodec/vaapi.h is missing])
2668     ], [
2669       AC_MSG_WARN([libva is present but libavcodec/vaapi.h is missing ])
2670     ])
2671   ])
2672   VLC_RESTORE_FLAGS
2673 ])
2674 AM_CONDITIONAL([HAVE_AVCODEC_VAAPI], [test "${have_avcodec_vaapi}" = "yes"])
2675
2676 dnl
2677 dnl dxva2 needs avcodec
2678 dnl
2679 AC_ARG_ENABLE([dxva2],
2680   AS_HELP_STRING([--enable-dxva2], [DxVA2 GPU decoding support (default auto)]))
2681
2682 have_avcodec_dxva2="no"
2683 AS_IF([test "${enable_dxva2}" != "no"], [
2684   if test "${SYS}" = "mingw32"; then
2685   AS_IF([test "x${have_avcodec}" = "xyes"], [
2686     AC_CHECK_HEADERS([dxva2api.h],
2687       [
2688         AC_CHECK_HEADERS([libavcodec/dxva2.h], [
2689            AC_MSG_NOTICE([DxVA2 acceleration activated])
2690            have_avcodec_dxva2="yes"
2691         ],[
2692     AS_IF([test "${enable_dxva2}" = "yes"],
2693           [AC_MSG_ERROR([dxva2 is present but libavcodec/dxva2.h is missing])],
2694               [AC_MSG_WARN([dxva2 is present but libavcodec/dxva2.h is missing ])])
2695         ], [#undef _WIN32_WINNT
2696             /* DXVA2 is only available in Vista and above */
2697             #define _WIN32_WINNT 0x600])
2698       ],[
2699     AS_IF([test "${enable_dxva2}" = "yes"],
2700               [AC_MSG_ERROR([Could not find required dxva2api.h])],
2701               [AC_MSG_WARN([dxva2api.h not found])])
2702       ],[#include <d3d9.h>])
2703   ],[
2704     AS_IF([test "x${enable_dxva2}" != "x"], [
2705       AC_MSG_ERROR([--enable-dxva2 and --disable-avcodec options are mutually exclusive.])
2706     ])
2707   ])
2708   fi
2709 ])
2710 AM_CONDITIONAL([HAVE_AVCODEC_DXVA2], [test "${have_avcodec_dxva2}" = "yes"])
2711
2712 dnl
2713 dnl d3d11va needs avcodec
2714 dnl
2715 AC_ARG_ENABLE([d3d11va],
2716   AS_HELP_STRING([--enable-d3d11va], [D3D11 GPU decoding support (default auto)]))
2717
2718 have_avcodec_d3d11va="no"
2719 AS_IF([test "${enable_d3d11va}" != "no"], [
2720   if test "${SYS}" = "mingw32"; then
2721   AS_IF([test "x${have_avcodec}" = "xyes"], [
2722         AC_CHECK_TYPES([ID3D11VideoDecoder],
2723           [
2724             AC_CHECK_HEADERS([dxva2api.h],
2725               [
2726                 AC_CHECK_HEADERS([libavcodec/d3d11va.h], [
2727                    AC_MSG_NOTICE([D3D11 acceleration activated])
2728                    AC_DEFINE([HAVE_AVCODEC_D3D11VA], [1], [Define if the d3d11va module is built])
2729                    have_avcodec_d3d11va="yes"
2730                 ],[
2731                   AS_IF([test "${enable_d3d11va}" = "yes"],
2732                     [AC_MSG_ERROR([d3d11va is present but libavcodec/d3d11va.h is missing])],
2733                         [AC_MSG_WARN([d3d11va is present but libavcodec/d3d11va.h is missing ])])
2734                   ], [#undef _WIN32_WINNT
2735                       /* D3D11 is only available in Vista and above */
2736                       #define _WIN32_WINNT 0x600])
2737                   ],[
2738                     AS_IF([test "${enable_d3d11va}" = "yes"],
2739                           [AC_MSG_ERROR([Could not find required dxva2api.h])],
2740                           [AC_MSG_WARN([dxva2api.h not found])])
2741                   ],[#include <d3d9.h>])
2742           ],[
2743             AS_IF([test "${enable_d3d11va}" = "yes"],
2744                   [AC_MSG_ERROR([Could not find required ID3D11VideoDecoder in d3d11.h])],
2745                   [AC_MSG_WARN([ID3D11VideoDecoder not found])])
2746           ], [#include <d3d11.h>])
2747   ],[
2748     AS_IF([test "x${enable_d3d11va}" != "x"], [
2749       AC_MSG_ERROR([--enable-d3d11va and --disable-avcodec options are mutually exclusive.])
2750     ])
2751   ])
2752   fi
2753 ])
2754 AM_CONDITIONAL([HAVE_AVCODEC_D3D11VA], [test "${have_avcodec_d3d11va}" = "yes"])
2755
2756 dnl
2757 dnl DXGI debug
2758 dnl
2759 AC_CHECK_HEADERS([dxgidebug.h dxgi1_6.h])
2760
2761 dnl
2762 dnl IApplicationData2
2763 dnl
2764 have_iapplication_data2="no"
2765 AC_CHECK_TYPES([IApplicationData2],[],[],[#include <windows.storage.h>])
2766
2767 dnl
2768 dnl DirectComposition
2769 dnl
2770 AC_LANG_PUSH([C++])
2771 AC_CHECK_HEADERS([dcomp.h], [
2772     have_dcomp="yes"
2773 ], [], [
2774   #include <windows.h>
2775 ])
2776 AC_LANG_POP([C++])
2777 AM_CONDITIONAL([HAVE_DCOMP], [test "${have_dcomp}" = "yes"])
2778
2779
2780 dnl
2781 dnl  avformat demuxer/muxer plugin
2782 dnl
2783
2784 AC_ARG_ENABLE([avformat],
2785 AS_HELP_STRING([--enable-avformat], [libavformat containers (default enabled)]),, [
2786   enable_avformat="${have_avcodec}"
2787 ])
2788 have_avformat="no"
2789 AS_IF([test "${enable_avformat}" != "no"], [
2790   PKG_CHECK_MODULES(AVFORMAT,[libavformat >= 53.21.0 libavcodec libavutil], [
2791       have_avformat="yes"
2792       VLC_SAVE_FLAGS
2793       CPPFLAGS="${CPPFLAGS} ${AVFORMAT_CFLAGS}"
2794       CFLAGS="${CFLAGS} ${AVFORMAT_CFLAGS}"
2795       AC_CHECK_HEADERS([libavformat/avformat.h libavformat/avio.h])
2796       AC_CHECK_HEADERS([libavcodec/avcodec.h])
2797       AC_CHECK_HEADERS([libavutil/avutil.h])
2798       AS_IF([test "$enable_merge_ffmpeg" = "no"], [
2799         have_avformat="no"
2800       ])
2801       VLC_RESTORE_FLAGS
2802     ],[
2803       AC_MSG_ERROR([${AVFORMAT_PKG_ERRORS}. Pass --disable-avformat to ignore this error.])
2804   ])
2805 ])
2806 AM_CONDITIONAL([HAVE_AVFORMAT], [test "${enable_avformat}" != "no"])
2807
2808 dnl
2809 dnl  swscale image scaling and conversion plugin
2810 dnl
2811
2812 AC_ARG_ENABLE([swscale],
2813   AS_HELP_STRING([--enable-swscale],[libswscale image scaling and conversion
2814           (default enabled)]))
2815 if test "${enable_swscale}" != "no"
2816 then
2817   PKG_CHECK_MODULES(SWSCALE,[libswscale >= 0.5.0],
2818     [
2819       VLC_SAVE_FLAGS
2820       CPPFLAGS="${CPPFLAGS} ${SWSCALE_CFLAGS}"
2821       CFLAGS="${CFLAGS} ${SWSCALE_CFLAGS}"
2822       AC_CHECK_HEADERS([libswscale/swscale.h])
2823       AC_CHECK_HEADERS([libavutil/avutil.h])
2824       VLC_ADD_PLUGIN([swscale])
2825       VLC_ADD_LIBS([swscale],[$SWSCALE_LIBS])
2826       VLC_ADD_CFLAGS([swscale],[$SWSCALE_CFLAGS])
2827       AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
2828         VLC_ADD_LIBS([swscale],[${ac_cv_ld_bsymbolic}])
2829       ])
2830       VLC_RESTORE_FLAGS
2831     ],[
2832       AC_MSG_ERROR([${SWSCALE_PKG_ERRORS}. Pass --disable-swscale to ignore this error. Proper software scaling and some video chroma conversion will be missing.])
2833   ])
2834 fi
2835
2836 dnl
2837 dnl  postproc plugin
2838 dnl
2839
2840 AC_ARG_ENABLE([postproc],
2841 AS_HELP_STRING([--enable-postproc], [libpostproc image post-processing (default auto)]))
2842 if test "${enable_postproc}" != "no"
2843 then
2844   PKG_CHECK_MODULES(POSTPROC,[libpostproc libavutil],
2845     [
2846       VLC_SAVE_FLAGS
2847       CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
2848       CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
2849       AC_CHECK_HEADERS([postproc/postprocess.h])
2850       VLC_ADD_PLUGIN([postproc])
2851       VLC_RESTORE_FLAGS
2852     ],[
2853       AC_MSG_WARN([${POSTPROC_PKG_ERRORS}.])
2854   ])
2855 fi
2856
2857 dnl
2858 dnl  faad decoder plugin
2859 dnl
2860 PKG_WITH_MODULES([FAAD],[faad2],
2861   VLC_ADD_PLUGIN(faad)
2862   VLC_ADD_CFLAGS(faad, [$FAAD_CFLAGS])
2863   VLC_ADD_LIBS(faad,[$FAAD_LIBS]),
2864   AS_IF([test "x${enable_faad}" != "xno"],[
2865     AC_CHECK_HEADERS([neaacdec.h], [
2866       AC_CHECK_LIB([faad], [NeAACDecOpen],[
2867                       VLC_ADD_PLUGIN([faad])
2868                       VLC_ADD_LIBS([faad],[-lfaad])
2869                       found_faad="yes"
2870                    ],[], [$LIBM])
2871     ])
2872     AS_IF([test "x${found_faad}" != "xyes"],
2873         AS_IF([test "x${enable_faad}" == "xyes"],
2874             AC_MSG_ERROR([${FAAD_PKG_ERRORS}.]),
2875             AC_MSG_WARN([${FAAD_PKG_ERRORS}.]))
2876     )
2877   ]),
2878 [faad AAC audio decoder])
2879
2880 dnl
2881 dnl  AOM encoder/decoder plugin
2882 dnl
2883 PKG_ENABLE_MODULES_VLC([AOM], [], [aom], [libaom AV1 encoder and decoder (default auto)])
2884
2885 dnl
2886 dnl  Rav1e encoder plugin
2887 dnl
2888 PKG_ENABLE_MODULES_VLC([RAV1E], [], [rav1e], [rav1e encoder module codec (default auto)])
2889
2890 dnl
2891 dnl  Dav1d decoder plugin
2892 dnl
2893 PKG_ENABLE_MODULES_VLC([DAV1D], [], [dav1d >= 0.5.0], [AV1 decoder (default auto)])
2894
2895 dnl
2896 dnl libvpx decoder plugin
2897 dnl
2898 AC_ARG_ENABLE([vpx],
2899     AS_HELP_STRING([--enable-vpx],[libvpx VP8/VP9 encoder and decoder (default auto)]))
2900 AS_IF([test "${enable_vpx}" != "no"],[
2901     PKG_CHECK_MODULES([VPX], [vpx >= 1.5.0], [
2902         VLC_ADD_PLUGIN([vpx])
2903         VLC_ADD_CPPFLAGS([vpx], [${VPX_CFLAGS}])
2904         VLC_ADD_LIBS([vpx], [${VPX_LIBS}])
2905         AC_CHECK_LIB([vpx],[vpx_codec_vp8_dx], [
2906             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP8_DECODER])
2907         ], [], [${VPX_LIBS}])
2908         AC_CHECK_LIB([vpx],[vpx_codec_vp9_dx], [
2909             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP9_DECODER])
2910         ], [], [${VPX_LIBS}])
2911         AC_CHECK_LIB([vpx],[vpx_codec_vp8_cx], [
2912             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP8_ENCODER])
2913         ], [], [${VPX_LIBS}])
2914         AC_CHECK_LIB([vpx],[vpx_codec_vp9_cx], [
2915             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP9_ENCODER])
2916         ], [], [${VPX_LIBS}])
2917     ], [
2918     AS_IF([test "${enable_vpx}" = "yes"],[
2919         AC_MSG_ERROR([libvpx 1.5.0 or higher was not found])
2920     ])])
2921 ])
2922
2923 dnl
2924 dnl twolame encoder plugin
2925 dnl
2926 PKG_ENABLE_MODULES_VLC([TWOLAME], [], [twolame], [MPEG Audio Layer 2 encoder], [auto], [], [], [ -DLIBTWOLAME_STATIC])
2927
2928 dnl
2929 dnl fdk-aac encoder plugin
2930 dnl
2931 PKG_ENABLE_MODULES_VLC([FDKAAC], [], [fdk-aac], [FDK-AAC encoder], [disabled])
2932
2933
2934 dnl
2935 dnl A52/AC3 decoder plugin
2936 dnl
2937 AC_ARG_ENABLE([a52],
2938   AS_HELP_STRING([--enable-a52], [A/52 support with liba52 (default enabled)]))
2939 if test "${enable_a52}" != "no"
2940 then
2941   AC_ARG_WITH([a52],
2942     AS_HELP_STRING([--with-a52=PATH], [a52 headers and libraries]))
2943     if test -z "${with_a52}"
2944     then
2945       LDFLAGS_test=""
2946       CPPFLAGS_test=""
2947     else
2948       LDFLAGS_test="-L${with_a52}/lib"
2949       CPPFLAGS_test="-I${with_a52}/include"
2950     fi
2951     VLC_SAVE_FLAGS
2952     CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_test} ${CPPFLAGS_a52}"
2953     LDFLAGS="${LDFLAGS} ${LDFLAGS_test} ${LIBS_a52}"
2954     AC_CHECK_HEADERS([a52dec/a52.h], [
2955       AC_CHECK_LIB([a52], [a52_free], [
2956         VLC_ADD_PLUGIN([a52])
2957         VLC_ADD_LIBS([a52],[${LDFLAGS_test} -la52 $LIBM])
2958         VLC_ADD_CPPFLAGS([a52],[${CPPFLAGS_test}])
2959       ],[
2960         AC_MSG_ERROR([Could not find liba52 on your system: you may get it from http://liba52.sf.net/. Alternatively you can use --disable-a52 to disable the a52 plugin.])
2961         ], [$LIBM])
2962     ],[
2963       AC_MSG_ERROR([Could not find liba52 on your system: you may get it from http://liba52.sf.net/. Alternatively you can use --disable-a52 to disable the a52 plugin.])
2964     ])
2965     VLC_RESTORE_FLAGS
2966 fi
2967
2968 dnl
2969 dnl DTS Coherent Acoustics decoder plugin
2970 dnl
2971 PKG_ENABLE_MODULES_VLC([DCA], [dca], [libdca >= 0.0.5], [DTS Coherent Acoustics support with libdca], [auto])
2972
2973 dnl
2974 dnl  Flac plugin
2975 dnl
2976 PKG_ENABLE_MODULES_VLC([FLAC], [], [flac], [libflac decoder/encoder support], [auto])
2977
2978 dnl
2979 dnl  Libmpeg2 plugin
2980 dnl
2981 PKG_ENABLE_MODULES_VLC([LIBMPEG2], [], [libmpeg2 > 0.3.2], [libmpeg2 decoder support], [auto])
2982
2983 dnl
2984 dnl  Vorbis plugin
2985 dnl
2986 PKG_ENABLE_MODULES_VLC([VORBIS], [], [ogg vorbis >= 1.1 vorbisenc >= 1.1], [Vorbis decoder and encoder], [auto])
2987
2988 dnl
2989 dnl  Tremor plugin
2990 dnl
2991 AC_ARG_ENABLE([tremor],
2992   AS_HELP_STRING([--enable-tremor], [Tremor decoder support (default disabled)]))
2993 if test "${enable_tremor}" = "yes"
2994 then
2995   AC_CHECK_HEADERS([tremor/ivorbiscodec.h], [
2996     VLC_ADD_PLUGIN([tremor])
2997    ],[])
2998 fi
2999
3000 dnl
3001 dnl  Speex plugins
3002 dnl
3003 PKG_ENABLE_MODULES_VLC([SPEEX], [], [ogg speex >= 1.0.5], [Speex support], [auto])
3004 have_speexdsp="no"
3005 AS_IF([test "${enable_speex}" != "no"], [
3006   PKG_CHECK_MODULES([SPEEXDSP], [speexdsp], [
3007     have_speexdsp="yes"
3008   ], [
3009     AC_MSG_WARN([${SPEEXDSP_PKG_ERRORS}.])
3010   ])
3011 ])
3012 AM_CONDITIONAL([HAVE_SPEEXDSP], [test "$have_speexdsp" = "yes"])
3013
3014 dnl
3015 dnl  RNNoise plugin - Recurrent neural network for audio noise reduction
3016 dnl
3017 PKG_ENABLE_MODULES_VLC([RNNOISE], [], [rnnoise], [Rnnoise denoiser], [auto])
3018
3019 dnl
3020 dnl  Opus plugin
3021 dnl
3022 PKG_ENABLE_MODULES_VLC([OPUS], [], [ogg opus >= 1.0.3], [Opus support], [auto])
3023
3024 dnl
3025 dnl  Ambisonic channel mixer and binauralizer plugin
3026 dnl
3027 PKG_ENABLE_MODULES_VLC([SPATIALAUDIO], [], [spatialaudio], [Ambisonic channel mixer and binauralizer], [auto])
3028
3029 dnl
3030 dnl  theora decoder plugin
3031 dnl
3032 PKG_ENABLE_MODULES_VLC([THEORA], [], [ogg theoradec >= 1.0 theoraenc], [experimental theora codec], [auto])
3033
3034 dnl
3035 dnl  OggSpots decoder plugin
3036 dnl
3037 PKG_ENABLE_MODULES_VLC([OGGSPOTS], [], [ogg], [experimental OggSpots codec], [auto])
3038
3039 dnl
3040 dnl  Daala decoder plugin
3041 dnl
3042 PKG_ENABLE_MODULES_VLC([DAALA], [], [daaladec daalaenc], [experimental daala codec], [disabled])
3043
3044 dnl
3045 dnl  schroedinger decoder plugin (for dirac format video)
3046 dnl
3047 PKG_ENABLE_MODULES_VLC([SCHROEDINGER], [], [schroedinger-1.0 >= 1.0.10], [dirac decoder and encoder using schroedinger], [auto])
3048
3049 dnl
3050 dnl  PNG decoder module
3051 dnl
3052 AC_ARG_ENABLE([png],
3053   AS_HELP_STRING([--enable-png], [PNG support (default enabled)]))
3054 AS_IF([test "${enable_png}" != "no"], [
3055 AC_CHECK_HEADERS([png.h], [
3056   VLC_SAVE_FLAGS
3057   LDFLAGS="${LDFLAGS} -lz $LIBM"
3058   AC_CHECK_LIB([png], [png_set_alpha_mode], [
3059     VLC_ADD_PLUGIN([png])
3060   ], [], [-lz $LIBM])
3061   VLC_RESTORE_FLAGS
3062   ])
3063 ])
3064
3065 dnl
3066 dnl  JPEG decoder module
3067 dnl
3068 AC_ARG_ENABLE([jpeg],
3069   AS_HELP_STRING([--enable-jpeg], [JPEG support (default enabled)]))
3070 AS_IF([test "${enable_jpeg}" != "no"], [
3071 AC_CHECK_HEADERS([jpeglib.h], [
3072   VLC_ADD_PLUGIN([jpeg])
3073   ])
3074 ])
3075
3076 dnl
3077 dnl  BPG decoder module
3078 dnl
3079 AC_ARG_ENABLE([bpg],
3080   AS_HELP_STRING([--enable-bpg], [BPG support (default disabled)]))
3081 AS_IF([test "${enable_bpg}" != "no"], [
3082 AC_CHECK_HEADERS([libbpg.h], [
3083   VLC_ADD_PLUGIN([bpg])
3084   ])
3085 ])
3086
3087 dnl
3088 dnl H262 encoder plugin (lib262)
3089 dnl
3090 AC_ARG_ENABLE([x262],
3091   AS_HELP_STRING([--enable-x262], [H262 encoding support with static libx262 (default disabled)]))
3092 if test "${enable_x262}" != "no"; then
3093     PKG_CHECK_MODULES(X262, x262, [
3094         VLC_ADD_PLUGIN([x262])
3095         VLC_ADD_LDFLAGS([x262],[${X262_LIBS}])
3096         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3097           VLC_ADD_LIBS([x262],[${av_cv_ld_bsymbolic}])
3098         ])
3099         VLC_ADD_CFLAGS([x262],[${X262_CFLAGS}])
3100         if echo ${X262_LIBS} |grep -q 'pthreadGC2'; then
3101           VLC_ADD_CFLAGS([x262], [-DPTW32_STATIC_LIB])
3102         fi
3103     ], [
3104        if test "${enable_x262}" = "yes"; then
3105         AC_MSG_ERROR([x262 module doesn't work without staticly compiled libx262.a])
3106        fi
3107     ])
3108 fi
3109
3110 dnl x265 encoder
3111 PKG_ENABLE_MODULES_VLC([X265],, [x265], [HEVC/H.265 encoder], [auto])
3112
3113 dnl
3114 dnl H264 encoder plugin (using libx264)
3115 dnl
3116 AC_ARG_ENABLE([x264],
3117   AS_HELP_STRING([--enable-x264], [H264 encoding support with libx264 (default enabled)]))
3118 if test "${enable_x264}" != "no"; then
3119       PKG_CHECK_MODULES(X264,x264 >= 0.148, [
3120         VLC_ADD_PLUGIN([x264])
3121         VLC_ADD_LIBS([x264],[${X264_LIBS}])
3122
3123         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3124           VLC_ADD_LDFLAGS([x264],[${ac_cv_ld_bsymbolic}])
3125         ])
3126
3127         VLC_ADD_CFLAGS([x264],[${X264_CFLAGS}])
3128         if echo ${X264_LIBS} |grep -q 'pthreadGC2'; then
3129           VLC_ADD_CFLAGS([x264], [-DPTW32_STATIC_LIB])
3130         fi
3131       ],[
3132         if test "${enable_x264}" = "yes"; then
3133             AC_MSG_ERROR([${X264_PKG_ERRORS}: you may get it from http://www.videolan.org/x264.html])
3134           fi
3135       ])
3136 fi
3137
3138 dnl
3139 dnl H264 encoder plugin (libx264 > 153)
3140 dnl
3141 AC_ARG_ENABLE([x26410b],
3142   AS_HELP_STRING([--enable-x26410b], [H264 10-bit encoding support with libx264 (default enabled)]))
3143 if test "${enable_x26410b}" != "no"; then
3144       PKG_CHECK_MODULES(X26410b,x264 >= 0.153, [
3145         VLC_ADD_PLUGIN([x26410b])
3146         VLC_ADD_LIBS([x26410b],[${X264_LIBS}])
3147
3148         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3149           VLC_ADD_LDFLAGS([x26410b],[${ac_cv_ld_bsymbolic}])
3150         ])
3151
3152         VLC_ADD_CFLAGS([x26410b],[${X264_CFLAGS}])
3153         if echo ${X264_LIBS} |grep -q 'pthreadGC2'; then
3154           VLC_ADD_CFLAGS([x26410b], [-DPTW32_STATIC_LIB])
3155         fi
3156       ],[
3157         if test "${enable_x26410b}" = "yes"; then
3158             AC_MSG_ERROR([${X264_PKG_ERRORS}: you may get it from http://www.videolan.org/x264.html])
3159           fi
3160       ])
3161 fi
3162
3163
3164 dnl
3165 dnl Intel QuickSync (aka MediaSDK) H264/H262 encoder
3166 dnl
3167 PKG_ENABLE_MODULES_VLC([MFX], [qsv], [libmfx], [Intel QuickSync MPEG4-Part10/MPEG2 (aka H.264/H.262) encoder], [auto])
3168
3169 dnl
3170 dnl libfluidsynth (MIDI synthetizer) plugin
3171 dnl
3172 PKG_ENABLE_MODULES_VLC([FLUIDSYNTH], [], [fluidsynth >= 1.1.2], [MIDI synthetiser with libfluidsynth], [auto])
3173 PKG_ENABLE_MODULES_VLC([FLUIDLITE], [fluidsynth], [fluidlite], [MIDI synthetiser with libfluidsynth], [auto])
3174 AC_CHECK_HEADERS([fluidlite.h], [AC_SUBST([FLUIDSYNTH_LIBS], ${FLUIDLITE_LIBS})])
3175
3176 dnl
3177 dnl Teletext Modules
3178 dnl vbi decoder plugin (using libzbvi)
3179 dnl telx module
3180 dnl uncompatible
3181 dnl
3182 AC_ARG_ENABLE([zvbi],
3183   AS_HELP_STRING([--enable-zvbi],[VBI (inc. Teletext) decoding support with
3184                   libzvbi (default enabled)]))
3185 AC_ARG_ENABLE([telx],
3186   AS_HELP_STRING([--enable-telx],[Teletext decoding module (conflicting with
3187                   zvbi) (default enabled if zvbi is absent)]))
3188
3189 AS_IF( [test "${enable_zvbi}" != "no"],[
3190     PKG_CHECK_MODULES(ZVBI, [zvbi-0.2 >= 0.2.28],
3191         [
3192           VLC_ADD_PLUGIN([zvbi])
3193           AC_DEFINE(ZVBI_COMPILED, 1, [Define if the zvbi module is built])
3194           have_zvbi="yes"
3195           AS_IF( [test "${enable_telx}" = "yes"],[
3196                   AC_MSG_WARN([The zvbi and telx modules are incompatible. Using zvbi.])
3197                   ])
3198         ],[
3199           AC_MSG_WARN([${ZVBI_PKG_ERRORS}. Enabling the telx module instead.])
3200         ])
3201     ])
3202 AM_CONDITIONAL([HAVE_ZVBI], [test "x${have_zvbi}" = x"yes"])
3203
3204 AS_IF( [test "${enable_telx}" != "no" ],[
3205   VLC_ADD_PLUGIN([telx])
3206   have_telx="yes"
3207   AC_DEFINE(TELX_COMPILED, 1, [Define if the telx module is built])
3208   ])
3209 AM_CONDITIONAL([HAVE_TELX], [test "x${have_telx}" = x"yes"])
3210
3211 dnl
3212 dnl ARIB subtitles rendering module
3213 dnl
3214 AC_ARG_ENABLE([aribsub],
3215   AS_HELP_STRING([--enable-aribsub],[ARIB Subtitles support (default enabled)]))
3216 AS_IF( [test "${enable_aribsub}" != "no" ],[
3217   PKG_CHECK_MODULES(ARIBB24, [aribb24 >= 1.0.1], [
3218       have_aribb24="yes"
3219       VLC_ADD_PLUGIN([aribsub])
3220       VLC_ADD_LIBS([aribsub],[-laribb24])
3221       AC_DEFINE(HAVE_ARIBB24, 1, [Define if libaribb24 is available.])
3222     ],[
3223       AC_MSG_WARN(Library [aribb24] needed for [aribsub] was not found)
3224       have_aribb24="no"
3225   ])
3226 ])
3227 AM_CONDITIONAL([HAVE_ARIBB24], [test x"${have_aribb24}" = x"yes"])
3228
3229 dnl
3230 dnl ARIB B25
3231 dnl
3232 PKG_ENABLE_MODULES_VLC([ARIBB25], [aribcam], [aribb25 >= 0.2.6], [ARIB STD-B25], [auto])
3233
3234 dnl
3235 dnl  kate decoder plugin
3236 dnl
3237 PKG_ENABLE_MODULES_VLC([KATE], [], [kate >= 0.3.0], [kate codec], [auto])
3238
3239 dnl
3240 dnl  tiger rendering for kate decoder plugin
3241 dnl
3242 AC_ARG_ENABLE([tiger],
3243 AS_HELP_STRING([--enable-tiger], [Tiger rendering library for Kate streams (default auto)]))
3244 AS_IF([test "${enable_tiger}" != "no"], [
3245   PKG_CHECK_MODULES(TIGER,[tiger >= 0.3.1], [
3246       AC_DEFINE(HAVE_TIGER, 1, [Define if libtiger is available.])],[
3247         AS_IF([test -n "${enable_tiger}"], [
3248           AC_MSG_ERROR([${TIGER_PKG_ERRORS}.])
3249         ])
3250   ])
3251 ])
3252
3253 dnl
3254 dnl  check if we can build the css selector engine
3255 dnl
3256 AC_ARG_ENABLE([css],
3257 AS_HELP_STRING([--enable-css], [CSS selector engine (default auto)]))
3258 AS_IF([test "${enable_css}" != "no"], [
3259   with_css="yes"
3260   AC_DEFINE(HAVE_CSS, 1, [Define if CSS engine is built])
3261 ])
3262 AM_CONDITIONAL([ENABLE_CSS], [test "${with_css}" = "yes"])
3263
3264
3265 dnl
3266 dnl  Video plugins
3267 dnl
3268
3269 EXTEND_HELP_STRING([Video plugins:])
3270
3271 dnl
3272 dnl  libplacebo support
3273 dnl
3274 AC_ARG_ENABLE([libplacebo],
3275   AS_HELP_STRING([--disable-libplacebo],
3276       [disable libplacebo support (default auto)]))
3277
3278 AS_IF([test "$enable_libplacebo" != "no"], [
3279   PKG_CHECK_MODULES([LIBPLACEBO], [libplacebo >= 0.5], [
3280     AC_DEFINE([HAVE_LIBPLACEBO], [1], [Define to 1 if libplacebo is enabled.])
3281     PKG_CHECK_MODULES([LIBPLACEBO], [libplacebo >= 1.7],
3282       [have_libplacebo_vk="yes"], [have_libplacebo_vk="no"])
3283   ], [
3284     AS_IF([test -n "${enable_libplacebo}"], [
3285       AC_MSG_ERROR([${LIBPLACEBO_PKG_ERRORS}.])
3286     ])
3287     enable_libplacebo="no"
3288   ])
3289 ])
3290 AM_CONDITIONAL([HAVE_LIBPLACEBO], [test "$enable_libplacebo" != "no"])
3291
3292 dnl
3293 dnl  OpenGL
3294 dnl
3295 PKG_CHECK_MODULES([EGL], [egl], [
3296   have_egl="yes"
3297 ], [
3298   have_egl="no"
3299 ])
3300 AM_CONDITIONAL([HAVE_EGL], [test "${have_egl}" = "yes"])
3301
3302 have_gl="no"
3303 PKG_CHECK_MODULES([GL], [gl], [
3304   have_gl="yes"
3305 ], [
3306   AC_MSG_CHECKING([for OpenGL])
3307   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3308 #ifdef _WIN32
3309 # include <GL/glew.h>
3310 #endif
3311 #include <GL/gl.h>
3312 ]], [
3313     [int t0 = GL_TEXTURE0;]])
3314   ], [
3315     GL_CFLAGS=""
3316     have_gl="yes"
3317     AS_IF([test "${SYS}" != "mingw32"], [
3318       GL_LIBS="-lGL"
3319     ], [
3320       GL_LIBS="-lopengl32"
3321     ])
3322   ])
3323   AC_MSG_RESULT([${have_gl}])
3324 ])
3325 AM_CONDITIONAL([HAVE_GL], [test "${have_gl}" = "yes"])
3326 AS_IF([test "${have_gl}" = "yes"], [
3327   AC_DEFINE([HAVE_GL], 1, [Defined if having OpenGL])
3328 ])
3329
3330 dnl OpenGL ES 2: depends on EGL 1.1
3331 have_gles2="no"
3332 AC_ARG_ENABLE(gles2,
3333   [AS_HELP_STRING([--enable-gles2],
3334       [enable GLES2 support (default disabled)])])
3335 AS_IF([test "$enable_gles2" = "yes"], [
3336   PKG_CHECK_MODULES([GLES2], [glesv2], [have_gles2="yes"], [])
3337   ])
3338 AM_CONDITIONAL([HAVE_GLES2], [test "${have_gles2}" = "yes"])
3339
3340 dnl
3341 dnl Vulkan
3342 dnl
3343 AC_ARG_ENABLE(vulkan,
3344   [AS_HELP_STRING([--disable-vulkan],
3345       [disable Vulkan support (default auto)])])
3346
3347 AS_IF([test "$enable_vulkan" != "no"], [
3348   AS_IF([test "$have_libplacebo_vk" = "yes"], [
3349     PKG_CHECK_MODULES([VULKAN], [vulkan >= 1.0.26], [
3350       AC_DEFINE([HAVE_VULKAN], [1], [Define to 1 if vulkan is enabled.])
3351     ], [
3352       AS_IF([test -n "${enable_vulkan}"], [
3353         AC_MSG_ERROR([${VULKAN_PKG_ERRORS}.])
3354       ])
3355       enable_vulkan="no"
3356     ])
3357   ], [
3358     AS_IF([test -n "${enable_vulkan}"], [
3359       AC_MSG_ERROR([Vulkan support requires libplacebo 1.7 as well. Do not use --disable-libplacebo.])
3360     ])
3361     enable_vulkan="no"
3362   ])
3363 ])
3364 AM_CONDITIONAL(HAVE_VULKAN, [test "$enable_vulkan" != "no"])
3365
3366 dnl
3367 dnl  Xlib
3368 dnl
3369
3370 AC_PATH_XTRA()
3371 AC_CHECK_HEADERS([X11/Xlib.h])
3372
3373 dnl
3374 dnl  X C Bindings modules
3375 dnl
3376 AC_ARG_ENABLE([xcb],
3377   AS_HELP_STRING([--enable-xcb], [X11 support with XCB (default enabled)]),, [
3378   AS_IF([test "${SYS}" != "mingw32" -a "${SYS}" != "darwin"], [
3379     enable_xcb="yes"
3380   ], [
3381     enable_xcb="no"
3382   ])
3383 ])
3384
3385 have_xcb="no"
3386 have_xkbcommon_x11="no"
3387 have_xcb_keysyms="no"
3388 AS_IF([test "${enable_xcb}" != "no"], [
3389   xcb_err=""
3390
3391   dnl libxcb
3392   PKG_CHECK_MODULES([XCB], [xcb >= 1.6],, [
3393     xcb_err="$xcb_err ${XCB_PKG_ERRORS}."])
3394   PKG_CHECK_MODULES([XCB_COMPOSITE], [xcb-composite],, [
3395     xcb_err="$xcb_err ${XCB_COMPOSITE_PKG_ERRORS}."])
3396   PKG_CHECK_MODULES([XCB_RANDR], [xcb-randr >= 1.3],, [
3397     xcb_err="$xcb_err ${XCB_RANDR_PKG_ERRORS}."])
3398   PKG_CHECK_MODULES([XCB_RENDER], [xcb-render],, [
3399     xcb_err="$xcb_err ${XCB_RENDER_PKG_ERRORS}."])
3400   PKG_CHECK_MODULES([XCB_SHM], [xcb-shm >= 1.9.2],, [
3401     xcb_err="$xcb_err ${XCB_SHM_PKG_ERRORS}."])
3402   PKG_CHECK_MODULES([XCB_XKB], [xcb-xkb],, [
3403     xcb_err="$xcb_err ${XCB_XKB_PKG_ERRORS}."])
3404
3405   dnl xproto
3406   PKG_CHECK_MODULES(XPROTO, [xproto],, [
3407     xcb_err="$xcb_err ${XPROTO_PKG_ERRORS}."])
3408
3409   AS_IF([test -n "$xcb_err"], [
3410     AC_MSG_ERROR([$xcb_err Pass --disable-xcb to skip X11 support.])
3411   ])
3412
3413   dnl xkbcommon
3414   PKG_CHECK_MODULES([XKBCOMMON_X11], [xkbcommon-x11], [
3415     have_xkbcommon_x11="yes"
3416   ], [
3417     AC_MSG_WARN([${XKBCOMMON_X11_PKG_ERRORS}. Hotkeys are disabled.])
3418   ])
3419
3420   dnl xcb-utils
3421   PKG_CHECK_MODULES([XCB_KEYSYMS], [xcb-keysyms >= 0.3.4], [
3422     have_xcb_keysyms="yes"
3423   ], [
3424     AC_MSG_WARN([${XCB_KEYSYMS_PKG_ERRORS}. Global hotkeys are disabled.])
3425   ])
3426
3427   have_xcb="yes"
3428 ])
3429 AM_CONDITIONAL([HAVE_XCB], [test "${have_xcb}" = "yes"])
3430 AM_CONDITIONAL([HAVE_XKBCOMMON_X11], [test "${have_xkbcommon_x11}" = "yes"])
3431 AM_CONDITIONAL([HAVE_XCB_KEYSYMS], [test "${have_xcb_keysyms}" = "yes"])
3432
3433
3434 dnl
3435 dnl VDPAU needs X11
3436 dnl
3437 AC_ARG_ENABLE([vdpau],
3438   [AS_HELP_STRING([--enable-vdpau], [VDPAU hardware support (default auto)])])
3439 have_vdpau="no"
3440 AS_IF([test "${enable_vdpau}" != "no"], [
3441   PKG_CHECK_MODULES([VDPAU], [vdpau >= 0.6], [
3442     have_vdpau="yes"
3443     AS_IF([test "${no_x}" = "yes"], [
3444       AC_MSG_ERROR([VDPAU requires Xlib (X11).])
3445     ])
3446   ], [
3447     AS_IF([test -n "${enable_vdpau}"], [
3448       AC_MSG_ERROR([${VDPAU_PKG_ERRORS}.])
3449     ])
3450   ])
3451 ])
3452 AM_CONDITIONAL([HAVE_VDPAU], [test "${have_vdpau}" = "yes"])
3453
3454 have_avcodec_vdpau="no"
3455 AS_IF([test "${have_vdpau}" = "yes" -a "${have_avcodec}" = "yes"], [
3456   case "${avfork}" in
3457     libav) av_vdpau_ver="56.10.0" ;;
3458     ffmpeg) av_vdpau_ver="56.19.100" ;;
3459   esac
3460   PKG_CHECK_EXISTS([libavcodec >= ${av_vdpau_ver}], [
3461     have_avcodec_vdpau="yes"
3462     AC_MSG_NOTICE([VDPAU decoding acceleration activated])
3463   ], [
3464     AS_IF([test -n "${enable_vdpau}"], [
3465       AC_MSG_ERROR([libavcodec >= 56.10.0 is required for VDPAU decoding.])
3466     ], [
3467       AC_MSG_WARN([libavcodec >= 56.10.0 are required for VDPAU decoding.])
3468     ])
3469   ])
3470 ])
3471 AM_CONDITIONAL([HAVE_AVCODEC_VDPAU], [test "${have_avcodec_vdpau}" = "yes"])
3472
3473
3474 dnl
3475 dnl  Wayland
3476 dnl
3477 AC_ARG_ENABLE([wayland],
3478   AS_HELP_STRING([--enable-wayland], [Wayland support (default auto)]))
3479
3480 have_wayland="no"
3481 AS_IF([test "${enable_wayland}" != "no"], [
3482   wl_err=""
3483
3484   dnl wayland
3485   PKG_CHECK_MODULES([WAYLAND_CLIENT], [wayland-client >= 1.5.91],, [
3486     wl_err="$wl_err ${WAYLAND_CLIENT_PKG_ERRORS}."
3487   ])
3488   PKG_CHECK_MODULES([WAYLAND_CURSOR], [wayland-cursor],, [
3489     wl_err="$wl_err ${WAYLAND_CURSOR_PKG_ERRORS}."
3490   ])
3491   PKG_CHECK_MODULES([WAYLAND_EGL], [wayland-egl],, [
3492     wl_err="$wl_err ${WAYLAND_EGL_PKG_ERRORS}."
3493   ])
3494   PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland-scanner >= 1.15], [
3495     WAYLAND_SCANNER="$(${PKG_CONFIG} wayland-scanner --variable wayland_scanner)"
3496   ], [
3497     wl_err="$wl_err ${WAYLAND_SCANNER_PKG_ERRORS}."
3498   ])
3499
3500   dnl wayland-protocols
3501   PKG_CHECK_MODULES([WAYLAND_PROTOCOLS], [wayland-protocols >= 1.15], [
3502     WAYLAND_PROTOCOLS="$(${PKG_CONFIG} wayland-protocols --variable pkgdatadir)"
3503   ], [
3504     wl_err="$wl_err ${WAYLAND_PROTOCOLS_PKG_ERRORS}."
3505   ])
3506
3507   AS_IF([test -n "$wl_err"], [
3508     AS_IF([test -n "$enable_wayland"], [
3509       AC_MSG_ERROR([$wl_err])
3510     ], [
3511       AC_MSG_WARN([$wl_err])
3512     ])
3513   ], [
3514     have_wayland="yes"
3515   ])
3516
3517   dnl xkbcommon
3518   PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon], [
3519     have_xkbcommon="yes"
3520   ], [
3521     AC_MSG_WARN([${XKBCOMMON_PKG_ERRORS}. Hotkeys are disabled.])
3522   ])
3523 ])
3524 AM_CONDITIONAL([HAVE_WAYLAND], [test "${have_wayland}" = "yes"])
3525 AC_SUBST([WAYLAND_PROTOCOLS])
3526 AC_SUBST([WAYLAND_SCANNER])
3527 AM_CONDITIONAL([HAVE_XKBCOMMON], [test "${have_xkbcommon}" = "yes"])
3528
3529
3530 dnl
3531 dnl  freetype module
3532 dnl
3533 AC_ARG_ENABLE([freetype],
3534   AS_HELP_STRING([--enable-freetype],   [freetype support   (default auto)]))
3535 AC_ARG_ENABLE([fribidi],
3536   AS_HELP_STRING([--enable-fribidi],    [fribidi support    (default auto)]))
3537 AC_ARG_ENABLE([harfbuzz],
3538   AS_HELP_STRING([--enable-harfbuzz],   [harfbuzz support   (default auto)]))
3539 AC_ARG_ENABLE([fontconfig],
3540   AS_HELP_STRING([--enable-fontconfig], [fontconfig support (default auto)]))
3541
3542 AC_ARG_WITH([default-font],
3543     AS_HELP_STRING([--with-default-font=PATH],
3544         [Path to the default font]),
3545         [AC_DEFINE_UNQUOTED([DEFAULT_FONT_FILE],
3546             "$withval", [Default font])])
3547 AC_ARG_WITH([default-monospace-font],
3548     AS_HELP_STRING([--with-default-monospace-font=PATH],
3549         [Path to the default font]),
3550         [AC_DEFINE_UNQUOTED([DEFAULT_MONOSPACE_FONT_FILE],
3551             "$withval", [Default monospace font])])
3552
3553 AC_ARG_WITH([default-font-family],
3554     AS_HELP_STRING([--with-default-font-family=NAME],
3555         [Name of the default font family]),
3556         [AC_DEFINE_UNQUOTED([DEFAULT_FAMILY],
3557             "$withval", [Default font family])])
3558 AC_ARG_WITH([default-monospace-font-family],
3559     AS_HELP_STRING([--with-default-monospace-font-family=NAME],
3560         [Name of the default font family]),
3561         [AC_DEFINE_UNQUOTED([DEFAULT_MONOSPACE_FAMILY],
3562             "$withval", [Default monospace font family])])
3563
3564 have_freetype="no"
3565 have_fontconfig="no"
3566 have_fribidi="no"
3567 have_harfbuzz="no"
3568
3569 if test "${enable_freetype}" != "no"; then
3570    PKG_CHECK_MODULES(FREETYPE, freetype2, [
3571       have_freetype="yes"
3572       VLC_ADD_CPPFLAGS([skins2],[${FREETYPE_CFLAGS}])
3573       VLC_ADD_LIBS([skins2],[${FREETYPE_LIBS}])
3574
3575     dnl fontconfig support
3576     AS_IF([test "${enable_fontconfig}" != "no" -a "${SYS}" != "mingw32" -a "${SYS}" != "darwin"], [
3577       PKG_CHECK_MODULES(FONTCONFIG, [fontconfig >= 2.11], [
3578         have_fontconfig="yes"
3579       ], [
3580         AC_MSG_WARN([${FONTCONFIG_PKG_ERRORS}. Styles will be disabled in FreeType.])
3581       ])
3582     ])
3583
3584       dnl fribidi support
3585       if test "${enable_fribidi}" != "no"; then
3586         PKG_CHECK_MODULES(FRIBIDI, fribidi, [
3587           have_fribidi="yes"
3588           VLC_ADD_CPPFLAGS([skins2], [${FRIBIDI_CFLAGS} -DHAVE_FRIBIDI])
3589           VLC_ADD_LIBS([skins2], [${FRIBIDI_LIBS}])
3590         ],[AC_MSG_WARN([${FRIBIDI_PKG_ERRORS}. Bidirectional text and complex scripts (Arabic, Farsi, Thai...) will be disabled in FreeType.])])
3591       fi
3592
3593       dnl harfbuzz support
3594       if test "${have_fribidi}" != "no"; then
3595         if test "${enable_harfbuzz}" != "no"; then
3596           PKG_CHECK_MODULES(HARFBUZZ, harfbuzz, [
3597             have_harfbuzz="yes"
3598             VLC_ADD_CPPFLAGS([skins2], [${HARFBUZZ_CFLAGS} -DHAVE_HARFBUZZ])
3599             VLC_ADD_LIBS([skins2], [${HARFBUZZ_LIBS}])
3600           ],[AC_MSG_WARN([${HARFBUZZ_PKG_ERRORS}. Support for complex scripts (Arabic, Farsi, Thai...) will be disabled in FreeType.])])
3601         fi
3602       fi
3603   ],[
3604   AS_IF([test -n "${enable_freetype}"],[
3605     AC_MSG_ERROR([${FREETYPE_PKG_ERRORS}. Install FreeType2 development or configure with --disable-freetype.])
3606     ])
3607   ])
3608 fi
3609
3610 AM_CONDITIONAL([HAVE_FREETYPE], [test "${have_freetype}" = "yes"])
3611 AM_CONDITIONAL([HAVE_FONTCONFIG], [test "${have_fontconfig}" = "yes"])
3612 AM_CONDITIONAL([HAVE_FRIBIDI], [test "${have_fribidi}" = "yes"])
3613 AM_CONDITIONAL([HAVE_HARFBUZZ], [test "${have_harfbuzz}" = "yes"])
3614
3615 dnl
3616 dnl libass subtitle rendering module
3617 dnl
3618 AC_ARG_ENABLE([libass],
3619   AS_HELP_STRING([--enable-libass], [Subtitle support using libass (default enabled)]))
3620 AS_IF( [test "${enable_libass}" != "no"], [
3621   PKG_CHECK_MODULES(LIBASS, [libass >= 0.9.8],
3622       [
3623         VLC_ADD_PLUGIN([libass])
3624
3625         if test "${have_fontconfig}" != "no"; then
3626             VLC_ADD_CPPFLAGS([libass],[-DHAVE_FONTCONFIG])
3627             VLC_ADD_LIBS([libass],[${FONTCONFIG_LIBS}])
3628         fi
3629       ],[
3630         AC_MSG_WARN([${LIBASS_PKG_ERRORS}.])
3631       ])
3632   ])
3633
3634 dnl
3635 dnl SAPI (text to Speech renderer for Windows)
3636 dnl
3637 AC_LANG_PUSH([C++])
3638 AC_CHECK_TYPES([ISpObjectToken],[
3639               have_sapi="yes"
3640             ],[AC_MSG_WARN([sapi.h not found. Text to Speech renderer for Windows disabled])],
3641               [#include <windows.h>
3642                #include <sapi.h>
3643                #include <sphelper.h>])
3644 AM_CONDITIONAL([HAVE_SAPI], [test "${have_sapi}" = "yes"])
3645 AC_LANG_POP([C++])
3646
3647 dnl
3648 dnl  SVG module (text rendering and image decoding)
3649 dnl
3650 PKG_ENABLE_MODULES_VLC([SVG], [], [librsvg-2.0 >= 2.9.0], [SVG rendering library],[auto])
3651 PKG_ENABLE_MODULES_VLC([SVGDEC], [], [librsvg-2.0 >= 2.9.0 cairo >= 1.13.1], [SVG image decoder library],[auto])
3652
3653 dnl
3654 dnl  Windows DirectX module
3655 dnl
3656
3657 AC_ARG_ENABLE([directx],
3658   AS_HELP_STRING([--enable-directx],
3659     [Microsoft DirectX support (default enabled on Windows)]),, [
3660   AS_IF([test "${SYS}" = "mingw32"], [
3661     enable_directx="yes"
3662   ], [
3663     enable_directx="no"
3664   ])
3665 ])
3666 AS_IF([test "${enable_directx}" != "no"], [
3667   dnl OpenGL
3668   AC_CHECK_HEADERS([GL/glew.h], [
3669     AC_CHECK_HEADERS([GL/wglew.h], [
3670         VLC_ADD_PLUGIN([glwin32 wgl])
3671       ],, [
3672         #include <windows.h>
3673         #include <GL/glew.h>
3674       ])],, [
3675       #include <windows.h>
3676    ])
3677
3678   dnl Direct3D11
3679   AC_CHECK_HEADERS([d3d11.h], [
3680     VLC_ADD_PLUGIN([direct3d11 direct3d11_filters])
3681   ])
3682
3683   dnl Direct3D9
3684   AC_CHECK_HEADERS([d3d9.h], [
3685     VLC_ADD_PLUGIN([direct3d9])
3686     AC_CHECK_HEADERS([d3dx9effect.h])
3687
3688     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
3689         [[#define COBJMACROS
3690           #include <d3d9.h>
3691           #include <dxva2api.h>
3692           #ifndef IDirectXVideoProcessorService_GetVideoProcessorDeviceGuids
3693           # error dxva2 too old
3694           #endif
3695         ]],[[;]])
3696       ],[
3697         VLC_ADD_PLUGIN([direct3d9_filters])
3698       ],
3699       [AC_MSG_WARN([Could not find required IDirectXVideoDecoder in dxva2api.h])])
3700
3701   ])
3702 ])
3703
3704 dnl
3705 dnl  Linux framebuffer module
3706 dnl
3707 AC_CHECK_HEADER([linux/fb.h], [
3708   VLC_ADD_PLUGIN([fb])
3709 ])
3710
3711 dnl
3712 dnl  Linux kernel mode setting module
3713 dnl
3714 PKG_ENABLE_MODULES_VLC([KMS], [], [libdrm >= 2.4.83], [Linux kernel mode setting output], [auto])
3715
3716 dnl
3717 dnl  libcaca plugin
3718 dnl
3719 PKG_ENABLE_MODULES_VLC([CACA], [], [caca >= 0.99.beta14], [libcaca output],[auto])
3720
3721 dnl
3722 dnl  OS/2 KVA plugin
3723 dnl
3724 AC_ARG_ENABLE([kva],
3725   AS_HELP_STRING([--enable-kva],
3726     [support the K Video Accelerator KVA (default enabled on OS/2)]),, [
3727   AS_IF([test "$SYS" = "os2"], [
3728     enable_kva="yes"
3729   ])
3730 ])
3731 have_kva="no"
3732 KVA_LIBS=""
3733 AS_IF([test "$enable_kva" != "no"], [
3734   AC_CHECK_HEADERS([kva.h], [
3735     have_kva="yes"
3736     AC_CHECK_LIB([kva], [main], [
3737       KVA_LIBS="-lkva"
3738     ])
3739   ])
3740 ])
3741 AC_SUBST([KVA_LIBS])
3742 AM_CONDITIONAL([HAVE_KVA], [test "${have_kva}" = "yes"])
3743
3744 dnl
3745 dnl MMAL plugin
3746 dnl
3747 AC_ARG_ENABLE([mmal],
3748   AS_HELP_STRING([--enable-mmal],
3749     [Multi-Media Abstraction Layer (MMAL) hardware plugin (default enable)]))
3750 if test "${enable_mmal}" != "no"; then
3751   VLC_SAVE_FLAGS
3752   LDFLAGS="${LDFLAGS} -L/opt/vc/lib -lvchostif"
3753   CPPFLAGS="${CPPFLAGS} -isystem /opt/vc/include -isystem /opt/vc/include/interface/vcos/pthreads -isystem /opt/vc/include/interface/vmcs_host/linux"
3754   AC_CHECK_HEADERS([interface/mmal/mmal.h],
3755     [ AC_CHECK_LIB([bcm_host], [vc_tv_unregister_callback_full], [
3756         have_mmal="yes"
3757         VLC_ADD_PLUGIN([mmal])
3758         VLC_ADD_LDFLAGS([mmal],[ -L/opt/vc/lib ])
3759         VLC_ADD_CFLAGS([mmal],[ -isystem /opt/vc/include -isystem /opt/vc/include/interface/vcos/pthreads -isystem /opt/vc/include/interface/vmcs_host/linux ])
3760         VLC_ADD_LIBS([mmal],[ -lbcm_host -lmmal -lmmal_core -lmmal_components -lmmal_util -lvchostif -lvcsm -lvchiq_arm ]) ], [
3761           AS_IF([test "${enable_mmal}" = "yes"],
3762             [ AC_MSG_ERROR([Cannot find bcm library...]) ],
3763             [ AC_MSG_WARN([Cannot find bcm library...]) ])
3764           ],
3765         [])
3766     ] , [ AS_IF([test "${enable_mmal}" = "yes"],
3767       [ AC_MSG_ERROR([Cannot find development headers for mmal...]) ],
3768       [ AC_MSG_WARN([Cannot find development headers for mmal...]) ]) ])
3769   VLC_RESTORE_FLAGS
3770 fi
3771 AM_CONDITIONAL([HAVE_MMAL], [test "${have_mmal}" = "yes"])
3772
3773 dnl
3774 dnl  Audio plugins
3775 dnl
3776
3777 EXTEND_HELP_STRING([Audio plugins:])
3778
3779 dnl
3780 dnl  Pulseaudio module
3781 dnl
3782 AC_ARG_ENABLE([pulse],
3783   AS_HELP_STRING([--enable-pulse],
3784     [use the PulseAudio client library (default auto)]))
3785 have_pulse="no"
3786 AS_IF([test "${enable_pulse}" != "no"], [
3787   PKG_CHECK_MODULES([PULSE], [libpulse >= 1.0], [
3788     have_pulse="yes"
3789   ], [
3790     AS_IF([test "x${enable_pulse}" != "x"], [
3791       AC_MSG_ERROR([$PULSE_PKG_ERRORS. PulseAudio 1.0 or later required.])
3792     ])
3793   ])
3794 ])
3795 AM_CONDITIONAL([HAVE_PULSE], [test "${have_pulse}" = "yes"])
3796
3797 dnl
3798 dnl  ALSA module
3799 dnl
3800 AC_ARG_ENABLE([alsa],
3801   AS_HELP_STRING([--enable-alsa],
3802     [support the Advanced Linux Sound Architecture (default auto)]),, [
3803   AS_IF([test "$SYS" = "linux" -a "${have_pulse}" = "no"], [
3804     enable_alsa="yes"
3805   ])
3806 ])
3807 have_alsa="no"
3808 AS_IF([test "${enable_alsa}" != "no"], [
3809   PKG_CHECK_MODULES([ALSA], [alsa >= 1.0.24], [
3810     have_alsa="yes"
3811   ], [
3812     AS_IF([test "x${enable_alsa}" != "x"], [
3813       AC_MSG_ERROR([$ALSA_PKG_ERRORS. alsa-lib 1.0.24 or later required. Pass --disable-alsa to ignore this error.])
3814     ])
3815   ])
3816 ])
3817 AM_CONDITIONAL([HAVE_ALSA], [test "${have_alsa}" = "yes"])
3818
3819 dnl
3820 dnl  Open Sound System module
3821 dnl
3822 AC_ARG_ENABLE([oss],
3823   AS_HELP_STRING([--enable-oss],
3824     [support the Open Sound System OSS (default enabled on FreeBSD/NetBSD/DragonFlyBSD)]),, [
3825   AS_IF([test "$SYS" = "mingw32" -o "$SYS" = "linux" -o "$SYS" = "openbsd"], [
3826     enable_oss="no"
3827   ])
3828 ])
3829 have_oss="no"
3830 OSS_LIBS=""
3831 AS_IF([test "$enable_oss" != "no"], [
3832   AC_CHECK_HEADERS([soundcard.h sys/soundcard.h], [
3833     have_oss="yes"
3834     AC_CHECK_LIB([ossaudio], [main], [
3835       OSS_LIBS="-lossaudio"
3836     ])
3837   ])
3838 ])
3839 AC_SUBST([OSS_LIBS])
3840 AM_CONDITIONAL([HAVE_OSS], [test "${have_oss}" = "yes"])
3841
3842 dnl
3843 dnl  OpenBSD sndio module
3844 dnl
3845 AC_ARG_ENABLE([sndio],
3846   AS_HELP_STRING([--disable-sndio],
3847     [support the OpenBSD sndio (default auto)]),, [
3848   AS_IF([test "$SYS" = "openbsd"], [
3849     enable_sndio="yes"
3850   ])
3851 ])
3852 have_sndio="no"
3853 AS_IF([test "$enable_sndio" != "no"], [
3854   AC_CHECK_HEADER([sndio.h], [
3855     have_sndio="yes"
3856   ])
3857 ])
3858 AM_CONDITIONAL([HAVE_SNDIO], [test "${have_sndio}" = "yes"])
3859
3860 dnl
3861 dnl  Windows Audio Session plugin
3862 dnl
3863 AC_ARG_ENABLE([wasapi],
3864   AS_HELP_STRING([--enable-wasapi],
3865     [use the Windows Audio Session API (default auto)])
3866 )
3867 have_wasapi="no"
3868 AS_IF([test "$enable_wasapi" != "no"], [
3869   AC_CHECK_HEADER([audioclient.h], [
3870     have_wasapi="yes"
3871   ], [
3872     AS_IF([test "x${enable_wasapi}" != "x"], [
3873       AC_MSG_ERROR([Windows Audio Session API not found.])
3874     ])
3875   ])
3876 ])
3877 AM_CONDITIONAL([HAVE_WASAPI], [test "${have_wasapi}" = "yes"])
3878
3879 dnl
3880 dnl  JACK modules
3881 dnl
3882 AC_ARG_ENABLE([jack],
3883   AS_HELP_STRING([--disable-jack],
3884     [do not use jack (default auto)]))
3885 have_jack="no"
3886 AS_IF([test "${enable_jack}" != "no"], [
3887     PKG_CHECK_MODULES(JACK, jack >= 1.9.7,
3888       [ have_jack=yes ],
3889       [
3890       AC_MSG_WARN([${JACK_PKG_ERRORS}, trying jack1 instead])
3891
3892       PKG_CHECK_MODULES(JACK, jack >= 0.120.1 jack < 1.0,
3893       [ have_jack=yes ],
3894       [
3895       AS_IF([test -n "${enable_jack}"],
3896          [AC_MSG_ERROR([${JACK_PKG_ERRORS}.])],
3897          [AC_MSG_WARN([${JACK_PKG_ERRORS}.])])
3898       ])
3899     ])
3900 ])
3901 AM_CONDITIONAL([HAVE_JACK], [test "${have_jack}" != "no"])
3902
3903 dnl
3904 dnl  OpenSLES Android
3905 dnl
3906 AC_ARG_ENABLE([opensles],
3907   AS_HELP_STRING([--enable-opensles], [Android OpenSL ES audio module (default disabled)]))
3908 if test "${HAVE_ANDROID}" = "1"; then
3909   if test "${enable_opensles}" = "yes"; then
3910       AC_CHECK_HEADERS([SLES/OpenSLES.h],
3911         [ VLC_ADD_PLUGIN([opensles_android]) ],
3912         [ AC_MSG_ERROR([cannot find OpenSLES headers])] )
3913   fi
3914 fi
3915
3916 dnl
3917 dnl libsamplerate plugin
3918 dnl
3919 PKG_ENABLE_MODULES_VLC([SAMPLERATE], [], [samplerate], [Resampler with libsamplerate], [auto])
3920
3921 dnl
3922 dnl  soxr module
3923 dnl
3924 PKG_ENABLE_MODULES_VLC([SOXR], [], [soxr >= 0.1.2], [SoX Resampler library], [auto])
3925
3926 dnl
3927 dnl  libebur128 module
3928 dnl
3929 PKG_ENABLE_MODULES_VLC([EBUR128], [], [libebur128 >= 1.2.4], [EBU R 128 standard for loudness normalisation], [auto])
3930
3931 dnl
3932 dnl  OS/2 KAI plugin
3933 dnl
3934 AC_ARG_ENABLE([kai],
3935   AS_HELP_STRING([--enable-kai],
3936     [support the K Audio Interface KAI (default enabled on OS/2)]),, [
3937   AS_IF([test "$SYS" = "os2"], [
3938     enable_kai="yes"
3939   ])
3940 ])
3941 have_kai="no"
3942 KAI_LIBS=""
3943 AS_IF([test "$enable_kai" != "no"], [
3944   AC_CHECK_HEADERS([kai.h], [
3945     have_kai="yes"
3946     AC_CHECK_LIB([kai], [main], [
3947       KAI_LIBS="-lkai"
3948     ])
3949   ])
3950 ])
3951 AC_SUBST([KAI_LIBS])
3952 AM_CONDITIONAL([HAVE_KAI], [test "${have_kai}" = "yes"])
3953
3954 dnl
3955 dnl  chromaprint audio track fingerprinter
3956 dnl
3957 PKG_ENABLE_MODULES_VLC([CHROMAPRINT], [stream_out_chromaprint], [libchromaprint >= 0.6.0], [Chromaprint audio fingeprinter], [auto])
3958
3959 dnl
3960 dnl  Chromecast streaming support
3961 dnl
3962 m4_pushdef([protobuf_lite_version], 2.5.0)
3963 AC_ARG_VAR(PROTOC, [protobuf compiler])
3964 AC_CHECK_PROGS(PROTOC, protoc, no)
3965 PKG_WITH_MODULES([CHROMECAST],[protobuf-lite >= protobuf_lite_version], [
3966     AS_IF([test "x${PROTOC}" != "xno"], [
3967         build_chromecast="yes"
3968     ], [
3969     AC_MSG_ERROR(protoc compiler needed for [chromecast] was not found)
3970     ])
3971 ], [
3972     AS_IF([test "${enable_chromecast}" = "yes"],
3973         AC_MSG_ERROR(Library [protobuf-lite >= protobuf_lite_version] needed for [chromecast] was not found),
3974         AC_MSG_WARN(Library [protobuf-lite >= protobuf_lite_version] needed for [chromecast] was not found)
3975     )
3976     enable_chromecast="no"
3977 ], [(Chromecast streaming support)], [auto])
3978 AM_CONDITIONAL([BUILD_CHROMECAST], [test "${build_chromecast}" = "yes"])
3979 m4_popdef([protobuf_lite_version])
3980
3981 dnl
3982 dnl  Interface plugins
3983 dnl
3984
3985 EXTEND_HELP_STRING([Interface plugins:])
3986
3987 dnl
3988 dnl QT
3989 dnl
3990 AC_ARG_ENABLE([qt],
3991   AS_HELP_STRING([--disable-qt], [Qt UI support (default enabled)]),, [
3992   AS_IF([test "${enable_vlc}" != "no"], [enable_qt="yes"])
3993   AS_IF([test "${SYS}" = "darwin"], [
3994     enable_qt="no"
3995   ])
3996 ])
3997 have_qt5_x11="no"
3998 AS_IF([test "${enable_qt}" != "no"], [
3999   PKG_CHECK_MODULES([QT], [Qt5Core >= 5.11.0 Qt5Widgets Qt5Gui Qt5Quick Qt5QuickWidgets Qt5QuickControls2 Qt5Svg], [
4000       PKG_CHECK_MODULES([QT5_X11], [Qt5X11Extras], [
4001           have_qt5_x11="yes"
4002       ],[
4003           AC_MSG_WARN([Not building Qt Interface with X11 helpers.])
4004       ])
4005       QT_PATH="$(eval $PKG_CONFIG --variable=exec_prefix Qt5Core)"
4006       QT_HOST_PATH="$(eval $PKG_CONFIG --variable=host_bins Qt5Core)"
4007       QT_VERSION="$(eval $PKG_CONFIG --modversion Qt5Gui)"
4008       AC_PATH_PROGS(MOC, [moc-qt5 moc], moc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
4009       AC_PATH_PROGS(RCC, [rcc-qt5 rcc], rcc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
4010       AC_PATH_PROGS(UIC, [uic-qt5 uic], uic, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
4011       AC_PATH_PROGS(QMLCACHE, [qmlcachegen-qt5 qmlcachegen], no, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
4012       AS_IF([test "x${QMLCACHE}" = "xno"], [
4013           AC_MSG_WARN([qmlcachegen not found])
4014       ])
4015     ], [
4016       AS_IF([test -n "${enable_qt}"],[
4017         AC_MSG_ERROR([${QT_PKG_ERRORS}. If you want to build VLC without GUI, pass --disable-qt.])
4018       ],[
4019         AC_MSG_WARN([${QT_PKG_ERRORS}.])
4020       ])
4021       enable_qt="no"
4022     ])
4023 ])
4024
4025 AC_ARG_ENABLE([qt-qml-cache],
4026   AS_HELP_STRING([--enable-qt-qml-cache],
4027     [enable qml cache generation]))
4028 AM_CONDITIONAL([HAVE_QMLCACHE], [test "${enable_qt_qml_cache}" = "yes" && test "x$QMLCACHE" != "xno"])
4029
4030 AC_ARG_ENABLE([qt-qml-debug],
4031   AS_HELP_STRING([--enable-qt-qml-debug], [enable qml debuger]))
4032 AM_CONDITIONAL(QT_QML_DEBUG, [test "${enable_qt_qml_debug}" = "yes"])
4033
4034 AS_IF([test "${enable_qt}" != "no"], [
4035   ALIASES="${ALIASES} qvlc"
4036 ])
4037 AC_SUBST([QT_VERSION])
4038 AM_CONDITIONAL([ENABLE_QT], [test "$enable_qt" != "no"])
4039 AM_CONDITIONAL([HAVE_QT5_X11], [test "${have_qt5_x11}" = "yes"])
4040
4041 dnl
4042 dnl detect kde4-config patch (used for kde solids).
4043 dnl
4044 AC_ARG_VAR([KDE4_CONFIG], [kde4-config utility])
4045 AS_IF([test "x$KDE4_CONFIG" = "x"], [
4046   KDE4_CONFIG="kde4-config"
4047 ])
4048
4049 dnl
4050 dnl Simple test for skins2 dependency
4051 dnl
4052 AS_IF([test "$enable_qt" = "no"], [
4053   AS_IF([test "${enable_skins2}" = "yes"], [
4054     AC_MSG_ERROR([The skins2 module depends on the Qt interface. Without it you will not be able to open any dialog box from the interface, which makes the skins2 interface rather useless. Install the Qt development package or alternatively you can also configure with: --disable-qt --disable-skins2.])
4055   ], [
4056     enable_skins2="no"
4057     AC_MSG_WARN([The skins2 module depends on the Qt interface, Qt is not built so skins2 is disabled.])
4058   ])
4059 ])
4060
4061 dnl
4062 dnl Skins2 module
4063 dnl
4064 AC_ARG_ENABLE([skins2],
4065   AS_HELP_STRING([--enable-skins2], [skins interface module (default auto)]))
4066 AS_IF([test "${enable_skins2}" != "no"], [
4067   have_skins_deps="yes"
4068
4069   dnl Win32
4070   AS_IF([test "${SYS}" = "mingw32"], [
4071     VLC_ADD_CPPFLAGS([skins2],[-U_OFF_T_ -U_off_t -DWIN32_SKINS])
4072     VLC_ADD_LIBS([skins2],[-lgdi32 -lole32 -luuid -lmsimg32])
4073   dnl OS/2
4074   ], [test "${SYS}" = "os2"], [
4075     VLC_ADD_CPPFLAGS([skins2],[ -DOS2_SKINS])
4076   dnl Linux/Unix
4077   ], [
4078     PKG_CHECK_MODULES([XPM], [xpm],, [have_skins_deps="no"])
4079     PKG_CHECK_MODULES([XINERAMA], [xinerama],, [have_skins_deps="no"])
4080     PKG_CHECK_MODULES([XCURSOR], [xcursor],, [have_skins_deps="no"])
4081     PKG_CHECK_MODULES([XEXT], [xext],, [have_skins_deps="no"])
4082     VLC_ADD_CPPFLAGS([skins2],[${X_CFLAGS} ${XEXT_CFLAGS} ${XPM_CFLAGS} -DX11_SKINS])
4083     VLC_ADD_LIBS([skins2],[${X_LIBS} ${X_PRE_LIBS} ${XEXT_LIBS} ${XPM_LIBS} ${XINERAMA_LIBS} ${XCURSOR_LIBS} -lX11])
4084   ])
4085
4086   dnl we need freetype
4087   AS_IF([test "${have_freetype}" != "yes"], [
4088     have_skins_deps="no"
4089   ])
4090
4091   AS_IF([test "${have_skins_deps}" = "no"], [
4092     AS_IF([test "x${enable_skins2}" = "x"], [
4093       AC_MSG_WARN([Skins2 interface disabled due to missing dependencies.])
4094     ], [
4095       AC_MSG_ERROR([Skins2 interface requires FreeType, libxcursor, libxpm, libxext and libxinerama])
4096     ])
4097     enable_skins2="no"
4098   ], [
4099     ALIASES="${ALIASES} svlc"
4100     enable_skins2="yes"
4101   ])
4102 ])
4103 AM_CONDITIONAL([BUILD_SKINS], [test "${enable_skins2}" = "yes"])
4104
4105 AC_ARG_ENABLE([libtar],
4106   AS_HELP_STRING([--enable-libtar], [libtar support for skins2 (default auto)]))
4107 AS_IF([test "${enable_skins2}" = "yes" && test "${enable_libtar}" != "no"], [
4108   AC_CHECK_HEADERS([libtar.h], [
4109     VLC_ADD_LIBS([skins2],[-ltar])
4110   ])
4111 ])
4112
4113 dnl
4114 dnl  MacOS X gui module
4115 dnl
4116 AC_ARG_ENABLE([macosx],
4117   AS_HELP_STRING([--enable-macosx], [Mac OS X gui support (default enabled on Mac OS X)]))
4118 if test "x${enable_macosx}" != "xno" -a "${SYS}" = "darwin"
4119 then
4120
4121   dnl
4122   dnl If possible, use xcrun to find the right ibtool
4123   dnl
4124
4125   AC_PATH_PROG([XCRUN], [xcrun], [no])
4126   AS_IF([test ! "x${XCRUN}" = "xno"], [
4127     AC_MSG_CHECKING([for ibtool (using xcrun)])
4128     XIB="$(eval $XCRUN -f ibtool 2>/dev/null || echo no)"
4129     AC_MSG_RESULT([${XIB}])
4130   ], [
4131     AC_MSG_WARN([Looking for tools without using xcrun])
4132   ])
4133
4134   AS_IF([test "x${XIB}" = "xno"], [
4135     AC_PATH_PROG(XIB, [ibtool], [no])
4136     AS_IF([test "x${XIB}" = "xno"], [
4137       AC_MSG_ERROR([ibtool was not found, but is required for --enable-macosx])
4138     ])
4139   ])
4140 fi
4141 AM_CONDITIONAL([ENABLE_MACOSX_UI], [test "$enable_macosx" != "no" -a "${SYS}" = "darwin"])
4142
4143 dnl
4144 dnl  MacOS X sparkle update support
4145 dnl
4146 AC_ARG_ENABLE([sparkle],
4147   AS_HELP_STRING([--enable-sparkle], [Sparkle update support for OS X (default enabled on Mac OS X)]))
4148 if test "x${enable_sparkle}" != "xno" -a "${HAVE_OSX}" = "1"
4149 then
4150   if test ! -d ${CONTRIB_DIR}/Sparkle.framework -a ! -d ${CONTRIB_DIR}/Frameworks/Sparkle.framework
4151   then
4152     AC_MSG_ERROR([Sparkle framework is required and was not found in ${CONTRIB_DIR}])
4153   fi
4154
4155   AC_DEFINE([HAVE_SPARKLE], [1], [Define to 1 if sparkle is enabled.])
4156 fi
4157 AM_CONDITIONAL([HAVE_SPARKLE], [test "$enable_sparkle" != "no"])
4158
4159 dnl
4160 dnl  MacOS X breakpad creash reporter support
4161 dnl
4162 AC_ARG_WITH([breakpad],
4163   AS_HELP_STRING([--with-breakpad=URL], [Enable Breakpad reporter using given URL]), [], [with_breakpad=no])
4164
4165 AS_IF([test "$with_breakpad" != "no"], [
4166
4167   AS_IF([test "$with_breakpad" = "yes"], [
4168     AC_MSG_ERROR([You need to supply the CrashDragon Server URL as value for --with-breakpad])
4169   ])
4170
4171   AS_IF([test "$HAVE_OSX" = "1"], [
4172     AC_MSG_CHECKING([for Breakpad framework])
4173     AS_IF([test ! -d ${CONTRIB_DIR}/Breakpad.framework -a \
4174                 ! -d ${CONTRIB_DIR}/Frameworks/Breakpad.framework], [
4175       AC_MSG_RESULT([no])
4176       with_breakpad="no"
4177       AC_MSG_ERROR([Breakpad framework is required and was not found in ${CONTRIB_DIR}])
4178     ], [
4179       AC_MSG_RESULT([yes])
4180     ])
4181   ],[
4182     PKG_CHECK_MODULES([BREAKPAD], [breakpad-client], [
4183       LDFLAGS="${LDFLAGS} -Wl,--build-id"
4184     ], [
4185       AC_MSG_ERROR(["breakpad not found"])
4186     ])
4187   ])
4188 ])
4189
4190 AM_CONDITIONAL([HAVE_BREAKPAD], [test "$with_breakpad" != "no"])
4191 AS_IF([test "$with_breakpad" != "no"], [
4192   AC_SUBST([BREAKPAD_URL], ["${with_breakpad}"])
4193 ])
4194
4195 dnl
4196 dnl  Minimal Mac OS X module
4197 dnl
4198 AC_ARG_ENABLE([minimal-macosx],
4199   AS_HELP_STRING([--enable-minimal-macosx], [Minimal Mac OS X support (default disabled)]))
4200 if test "${enable_minimal_macosx}" = "yes" -a "${SYS}" = "darwin"
4201 then
4202   VLC_ADD_PLUGIN([minimal_macosx])
4203 fi
4204
4205 dnl
4206 dnl Mac OS X fancy dmg build tool
4207 dnl
4208 if test "${HAVE_OSX}" = "1"
4209 then
4210   AC_PATH_PROG(DMGBUILD, dmgbuild, no)
4211   AS_IF([test "x${DMGBUILD}" = "xno"], [
4212     AC_MSG_WARN([dmgbuild not found -- unable to build fancy DMGs])
4213   ])
4214 fi
4215 AM_CONDITIONAL([HAVE_DMGBUILD], [test "x$DMGBUILD" != "xno" -a "${HAVE_OSX}" = "1"])
4216
4217 dnl
4218 dnl  VideoToolbox plugins
4219 AC_CHECK_HEADERS([VideoToolbox/VideoToolbox.h], [
4220     VLC_ADD_PLUGIN([videotoolbox])
4221     VLC_ADD_PLUGIN([cvpx])
4222   ])
4223
4224 dnl
4225 dnl  AudioToolbox MIDI plugin
4226 AC_CHECK_HEADERS([AudioToolbox/AudioToolbox.h], [
4227   VLC_ADD_PLUGIN([audiotoolboxmidi])
4228 ])
4229
4230 dnl
4231 dnl  ncurses module
4232 dnl
4233 AC_ARG_ENABLE([ncurses],
4234 AS_HELP_STRING([--disable-ncurses],[ncurses text-based interface (default auto)]))
4235 have_ncurses="no"
4236 AS_IF([test "${enable_ncurses}" != "no"] ,[
4237   PKG_CHECK_MODULES([NCURSES], [ncursesw], [
4238     have_ncurses="yes"
4239     ALIASES="${ALIASES} nvlc"
4240   ], [
4241     AS_IF([test -n "${enable_ncurses}"], [
4242       AC_MSG_ERROR([${NCURSES_PKG_ERRORS}.])
4243     ])
4244   ])
4245 ])
4246 AM_CONDITIONAL([HAVE_NCURSES], [test "${have_ncurses}" = "yes"])
4247
4248 dnl
4249 dnl  Lirc plugin
4250 dnl
4251 AC_ARG_ENABLE([lirc],
4252   AS_HELP_STRING([--enable-lirc], [lirc support (default disabled)]))
4253 have_lirc="no"
4254 AS_IF([test "${enable_lirc}" = "yes"], [
4255   AC_CHECK_HEADER(lirc/lirc_client.h, [
4256     AC_CHECK_LIB([lirc_client], [lirc_init], [
4257       have_lirc="yes"
4258     ])
4259   ])
4260 ])
4261 AM_CONDITIONAL([HAVE_LIRC], [test "${have_lirc}" = "yes"])
4262
4263 dnl
4264 dnl  Bitstream
4265 dnl
4266 PKG_CHECK_MODULES([BITSTREAM], [bitstream > 1.4],[have_bitstream="yes"], [have_bitstream="no"])
4267 AM_CONDITIONAL([HAVE_BITSTREAM], [test "${have_bitstream}" = "yes"])
4268
4269 dnl
4270 dnl  SRT plugin
4271 dnl
4272 PKG_ENABLE_MODULES_VLC([SRT], [access_srt access_output_srt], [srt >= 1.3.0], [SRT input/output plugin], [auto], [], [], [-DENABLE_SRT])
4273
4274 EXTEND_HELP_STRING([Visualisations and Video filter plugins:])
4275 dnl
4276 dnl  goom visualization plugin
4277 dnl
4278 PKG_ENABLE_MODULES_VLC([GOOM], [], [libgoom2], [goom visualization plugin], [auto])
4279
4280 dnl
4281 dnl libprojectM visualization plugin
4282 dnl
4283 AC_ARG_ENABLE([projectm],
4284   AS_HELP_STRING([--enable-projectm], [projectM visualization plugin (default enabled)]))
4285 AS_IF([test "${enable_projectm}" != "no"],
4286   [
4287     PKG_CHECK_MODULES(PROJECTM, libprojectM,
4288     [
4289       VLC_ADD_PLUGIN([projectm])
4290       PKG_CHECK_EXISTS([libprojectM >= 2.0.0],
4291         [ AC_DEFINE([HAVE_PROJECTM2], 1, [Define to 1 if using libprojectM 2.x]) ],
4292         [ AC_MSG_WARN( [Using libprojectM version 1] )
4293       ])
4294     ],[
4295       AC_MSG_WARN([${PROJECTM_PKG_ERRORS}.])
4296     ])
4297   ])
4298
4299 dnl
4300 dnl Vovoid VSXu visualization plugin
4301 dnl
4302 AC_ARG_ENABLE([vsxu],
4303   AS_HELP_STRING([--enable-vsxu], [Vovoid VSXu visualization plugin (default auto)]))
4304 AS_IF([test "${enable_vsxu}" != "no"],
4305   [
4306     PKG_CHECK_MODULES(VSXU, libvsxu,
4307     [
4308       VLC_ADD_PLUGIN([vsxu])
4309     ],[
4310       AC_MSG_WARN([${VSXU_PKG_ERRORS}.])
4311     ])
4312   ])
4313
4314 EXTEND_HELP_STRING([Service Discovery plugins:])
4315 dnl
4316 dnl  Avahi-Zeroconf services discovery
4317 PKG_ENABLE_MODULES_VLC([AVAHI], [], [avahi-client >= 0.6], [Zeroconf services discovery], [auto])
4318
4319 dnl
4320 dnl  libudev services discovery
4321 PKG_ENABLE_MODULES_VLC([UDEV], [], [libudev >= 142], [Linux udev services discovery], [auto])
4322
4323 dnl
4324 dnl MTP devices services discovery
4325 PKG_ENABLE_MODULES_VLC([MTP], [mtp access_mtp], [libmtp >= 1.0.0], [MTP devices support], [auto])
4326
4327 dnl
4328 dnl UPnP Plugin (Intel SDK)
4329 dnl
4330 PKG_ENABLE_MODULES_VLC([UPNP], [upnp], [libupnp], [Intel UPNP SDK],[auto])
4331
4332 dnl
4333 dnl mDNS using libmicrodns
4334 dnl
4335 PKG_ENABLE_MODULES_VLC([MICRODNS], [], [microdns >= 0.1.2], [mDNS services discovery], [auto])
4336
4337
4338 EXTEND_HELP_STRING([Misc options:])
4339
4340 dnl
4341 dnl  libxml2 module
4342 dnl
4343 PKG_ENABLE_MODULES_VLC([LIBXML2], [xml], [libxml-2.0 >= 2.5], [libxml2 support],[auto])
4344
4345
4346 dnl
4347 dnl libgcrypt
4348 dnl
4349 AC_ARG_ENABLE([libgcrypt],
4350   AS_HELP_STRING([--disable-libgcrypt], [gcrypt support (default enabled)]))
4351 AC_ARG_VAR([GCRYPT_CFLAGS], [C compiler flags for gcrypt])
4352 AC_ARG_VAR([GCRYPT_LIBS], [linker flags flags for gcrypt])
4353
4354 # require libgcrypt >= 1.6.0
4355 AS_IF([test "${enable_libgcrypt}" != "no"], [
4356   AC_CACHE_CHECK([for gcrypt 1.6.0 or later], [ac_cv_lib_gcrypt], [
4357     VLC_SAVE_FLAGS
4358     CFLAGS="${CFLAGS} ${GCRYPT_CFLAGS}"
4359     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
4360 [#include <gcrypt.h>
4361 #if GCRYPT_VERSION_NUMBER < 0x010600
4362 #error
4363 #endif]])], [
4364       ac_cv_lib_gcrypt=yes
4365     ], [
4366       ac_cv_lib_gcrypt=no
4367     ])
4368     VLC_RESTORE_FLAGS
4369   ])
4370
4371   AS_IF([test "${ac_cv_lib_gcrypt}" = "yes"], [
4372     AC_DEFINE([HAVE_GCRYPT], 1, [Defined if having gcrypt])
4373   ], [
4374     AS_IF([test "${enable_libgcrypt}" = "yes"], [
4375       AC_MSG_ERROR([libgcrypt version 1.6.0 or higher not found. Install libgcrypt or pass --disable-libgcrypt.])
4376     ])
4377   ])
4378 ])
4379
4380 AS_IF([test -z "$GCRYPT_LIBS"], [
4381   GCRYPT_LIBS="-lgcrypt -lgpg-error"
4382 ])
4383
4384 AC_SUBST([GCRYPT_CFLAGS])
4385 AC_SUBST([GCRYPT_LIBS])
4386 AM_CONDITIONAL([HAVE_GCRYPT], [test "${ac_cv_lib_gcrypt}" = "yes"])
4387
4388 dnl
4389 dnl TLS/SSL
4390 dnl
4391 AC_ARG_ENABLE([gnutls],
4392   AS_HELP_STRING([--enable-gnutls], [GNU TLS TLS/SSL support (default enabled)]))
4393 AS_IF([test "${enable_gnutls}" != "no"], [
4394   PKG_CHECK_MODULES(GNUTLS, [gnutls >= 3.5.0], [
4395     VLC_ADD_PLUGIN([gnutls])
4396   ], [
4397     AS_IF([test -n "${enable_gnutls}"], [
4398       AC_MSG_ERROR([${GNUTLS_PKG_ERRORS}.)])
4399     ])
4400   ])
4401 ])
4402
4403
4404 dnl
4405 dnl Taglib plugin
4406 dnl
4407 AC_ARG_ENABLE([taglib],
4408   AS_HELP_STRING([--disable-taglib],
4409     [do not use TagLib (default enabled)]))
4410 AS_IF([test "${enable_taglib}" != "no"], [
4411   PKG_CHECK_MODULES(TAGLIB, taglib >= 1.11, [
4412     VLC_ADD_PLUGIN([taglib])
4413   ], [
4414     AC_MSG_WARN([${TAGLIB_PKG_ERRORS}.])])
4415 ])
4416
4417 dnl
4418 dnl  libsecret
4419 dnl
4420 PKG_ENABLE_MODULES_VLC([SECRET], [], [libsecret-1 >= 0.18], [use libsecret for keystore], [auto])
4421
4422 dnl
4423 dnl  kwallet
4424 dnl
4425 AC_ARG_ENABLE([kwallet],
4426   AS_HELP_STRING([--enable-kwallet],
4427     [use kwallet (via D-Bus) for keystore (default enabled)]))
4428 AS_IF([test "${enable_kwallet}" != "no" -a "${have_dbus}" = "yes"], [
4429   VLC_ADD_PLUGIN([kwallet])
4430 ])
4431
4432 dnl
4433 dnl update checking system
4434 dnl
4435 AC_ARG_ENABLE([update-check],
4436   AS_HELP_STRING([--enable-update-check], [update checking system (default disabled)]))
4437 if test "${enable_update_check}" = "yes"
4438 then
4439  AS_IF([test "${ac_cv_lib_gcrypt}" != "yes"],[
4440     AC_MSG_ERROR([libgcrypt is required for update checking system]) ])
4441 fi
4442 AM_CONDITIONAL([UPDATE_CHECK], [test "${enable_update_check}" = "yes"])
4443
4444 dnl
4445 dnl OS X notification plugin
4446 dnl
4447 AC_ARG_ENABLE([osx_notifications],
4448   AS_HELP_STRING([--enable-osx-notifications],
4449     [macOS notification plugin (default disabled)]),,
4450   [enable_osx_notifications=no])
4451 AS_IF([test "${enable_osx_notifications}" != "no"], [
4452   VLC_ADD_PLUGIN([osx_notifications])
4453 ])
4454
4455 dnl
4456 dnl Libnotify notification plugin
4457 dnl
4458 PKG_ENABLE_MODULES_VLC([NOTIFY], [], [libnotify], [libnotify notification], [auto])
4459
4460 PKG_ENABLE_MODULES_VLC([MEDIALIBRARY], [medialibrary], [medialibrary >= 0.9.0], (medialibrary support), [auto])
4461
4462 dnl
4463 dnl  Endianness check
4464 dnl
4465 AC_C_BIGENDIAN
4466 AS_IF([test "${ac_cv_c_bigendian}" = "yes"], [
4467   DEFS_BIGENDIAN="-DWORDS_BIGENDIAN=1"
4468 ], [
4469   DEFS_BIGENDIAN=""
4470 ])
4471 AC_SUBST([DEFS_BIGENDIAN])
4472
4473 dnl
4474 dnl Where to install KDE solid .desktop
4475 dnl
4476 AC_ARG_WITH(kde-solid,
4477   AS_HELP_STRING([--with-kde-solid=PATH],
4478                  [KDE Solid actions directory (auto)]),, [
4479
4480 if test "${SYS}" != "mingw32" -a "${SYS}" != "darwin" -a "${HAVE_ANDROID}" != "1" ; then
4481   with_kde_solid="yes"
4482 fi
4483 ])
4484 soliddatadir=""
4485 AS_IF([test "${with_kde_solid}" != "no"], [
4486   AS_IF([test "${with_kde_solid}" = "yes"], [
4487     kde4datadir="`${KDE4_CONFIG} --install data`"
4488     AS_IF([test "x$kde4datadir" = "x"], [kde4datadir='${datadir}/kde4/apps'])
4489     soliddatadir="${kde4datadir}/solid/actions"
4490   ], [
4491     soliddatadir="${with_kde_solid}"
4492   ])
4493 ])
4494 AC_SUBST([soliddatadir])
4495 AM_CONDITIONAL([KDE_SOLID], [test "x${soliddatadir}" != "x"])
4496
4497 dnl
4498 dnl  Find tools for win32 packaging
4499 dnl
4500 AS_IF([test "${SYS}" = "mingw32"], [