qt: playlist: use item title if available
[vlc.git] / configure.ac
1 dnl Autoconf settings for vlc
2
3 AC_COPYRIGHT([Copyright 1999-2021 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-2021"
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([noyywrap])
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              ac_cv_func_wordexp=no],
218              [HAVE_OSX="1"])
219
220     AC_EGREP_CPP(yes,
221             [#import <TargetConditionals.h>
222              #if TARGET_OS_TV
223              yes
224              #endif],
225              [HAVE_TVOS="1"
226              HAVE_IOS="0"
227              HAVE_OSX="0"
228              ac_cv_func_fork=no
229              ],)
230
231     AS_IF([test "${HAVE_OSX}" = "1"],[VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreServices])])
232
233     dnl
234     dnl  Handle Mac OS X SDK flags
235     dnl
236     AC_ARG_WITH(macosx-sdk,
237       AS_HELP_STRING([--with-macosx-sdk=DIR],
238         [compile using the SDK in DIR]))
239     if test "${with_macosx_sdk}" != "" ; then
240         test ! -d "${with_macosx_sdk}" && AC_MSG_ERROR([SDK "${with_macosx_sdk}" not found])
241         CPP="${CPP} -isysroot ${with_macosx_sdk}"
242         CC="${CC} -isysroot ${with_macosx_sdk}"
243         CXX="${CXX} -isysroot ${with_macosx_sdk}"
244         OBJC="${OBJC} -isysroot ${with_macosx_sdk}"
245         LD="${LD} -syslibroot ${with_macosx_sdk}"
246     fi
247     AC_ARG_WITH(macosx-version-min,
248       AS_HELP_STRING([--with-macosx-version-min=VERSION],
249         [compile for Mac OS X VERSION and above]))
250     if test "${with_macosx_version_min}" != "" ; then
251         CPP="${CPP} -mmacosx-version-min=${with_macosx_version_min}"
252         CC="${CC} -mmacosx-version-min=${with_macosx_version_min}"
253         CXX="${CXX} -mmacosx-version-min=${with_macosx_version_min}"
254         OBJC="${OBJC} -mmacosx-version-min=${with_macosx_version_min}"
255         LD="${LD} -mmacosx_version_min=${with_macosx_version_min}"
256     fi
257     ;;
258   *mingw32* | *cygwin* | *wince* | *mingwce*)
259     dnl Force libtool to not link to (shared) libgcc_s when detecting C++ dependencies
260     dnl When doing this test with -static-libgcc it will link on (static) libgcc_eh
261     CXXFLAGS="${CXXFLAGS} -static-libgcc"
262     AC_CHECK_TOOL(WINDRES, windres, :)
263     AC_CHECK_TOOL(OBJCOPY, objcopy, :)
264     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
265       [[#ifdef _WIN32_WINNT
266        # error _WIN32_WINNT already defined
267        #else
268        # include <windows.h>
269        # if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0601
270        #  error _WIN32_WINNT toolchain default high enough
271        # endif
272        #endif
273       ]],[[;]])
274     ],[
275       AC_DEFINE([_WIN32_WINNT], [0x0601], [Define to '0x0601' for Windows 7 APIs.])
276     ])
277     AC_MSG_CHECKING([if libsynchronization is needed])
278     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
279       [[#if _WIN32_WINNT >= 0x0602
280        # error building for Win8+ and above
281        #endif
282       ]],[[;]])
283     ],[
284       AC_MSG_RESULT([no])
285     ],[
286       AC_MSG_RESULT([yes])
287       VLC_ADD_LIBS([libvlccore], [-lsynchronization])
288     ])
289     AC_DEFINE([_WIN32_IE], [0x0600], [Define to '0x0600' for IE 6.0 (and shell) APIs.])
290     AC_DEFINE([UNICODE], [1], [Define to 1 for Unicode (Wide Chars) APIs.])
291     AC_DEFINE([_ISOC99_SOURCE], [1], [Extensions to ISO C89 from ISO C99.])
292     AC_DEFINE([_ISOC11_SOURCE], [1], [Extensions to ISO C99 from ISO C11.])
293     AC_DEFINE([_POSIX_SOURCE], [1], [IEEE Std 1003.1.])
294     AC_DEFINE([_POSIX_C_SOURCE], [200809L], [IEEE Std 1003.1.])
295     AC_DEFINE([_XOPEN_SOURCE], [700], [POSIX and XPG 7th edition])
296     AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [XPG things and X/Open Unix extensions.])
297     AC_DEFINE([_BSD_SOURCE], [1], [ISO C, POSIX, and 4.3BSD things.])
298     AC_DEFINE([_SVID_SOURCE], [1], [ISO C, POSIX, and SVID things.])
299
300     case "${host_os}" in
301       *mingw32*)
302         SYS=mingw32
303         ;;
304       *cygwin*)
305         dnl Check if we are using the mno-cygwin mode in which case we are
306         dnl actually dealing with a mingw32 compiler.
307         AC_EGREP_CPP(yes,
308             [#ifdef _WIN32
309              yes
310              #endif],
311             SYS=mingw32, AC_MSG_ERROR([VLC requires -mno-cygwin]))
312         ;;
313     esac
314
315     if test "${SYS}" = "mingw32"; then
316         # DEP, ASLR, NO SEH
317         LDFLAGS="${LDFLAGS} -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase"
318
319         AC_CHECK_PROGS(U2D, [unix2dos todos], unix2dos)
320         ac_default_prefix="`pwd`/_win32"
321         DESTDIR="`pwd`/_win32/"
322
323         dnl
324         dnl NSIS/MSI Installer prefix and WIN64
325         dnl
326         case "${host_cpu}" in
327             aarch64)
328                 HAVE_WIN64="1"
329                 WINDOWS_ARCH="arm64"
330                 PROGRAMFILES="PROGRAMFILES64"
331                 LDFLAGS="${LDFLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x140000000"
332             ;;
333             amd64|x86_64)
334                 HAVE_WIN64="1"
335                 WINDOWS_ARCH="x64"
336                 PROGRAMFILES="PROGRAMFILES64"
337                 LDFLAGS="${LDFLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x140000000"
338                 X86ASMFLAGS="-f win64"
339             ;;
340             armv7)
341                 WINDOWS_ARCH="arm"
342                 PROGRAMFILES="PROGRAMFILES"
343             ;;
344             *)
345                 WINDOWS_ARCH="x86"
346                 PROGRAMFILES="PROGRAMFILES"
347                 X86ASMFLAGS="-f win32"
348                 X86ASMDEFS="${X86ASMDEFS} -DPREFIX"
349             ;;
350         esac
351         AC_SUBST([WINDOWS_ARCH])
352         AC_SUBST([PROGRAMFILES])
353
354     fi
355     ;;
356   *nto*)
357     SYS=nto
358     ;;
359   solaris*)
360     SYS=solaris
361     ;;
362   hpux*)
363     SYS=hpux
364     ;;
365   *os2*)
366     SYS=os2
367     LDFLAGS="${LDFLAGS} -Zomf -Zbin-files -Zargs-wild -Zhigh-mem"
368     AC_LIBOBJ([freeaddrinfo])
369     AC_LIBOBJ([gai_strerror])
370     AC_CHECK_FUNCS([if_nametoindex])
371     X86ASMFLAGS="-f aout"
372     X86ASMDEFS="-DARCH_X86_32=1 -DARCH_X86_64=0 -DPREFIX"
373     ;;
374   *nacl*)
375     SYS=nacl
376     AC_DEFINE([_XOPEN_SOURCE], [700], [POSIX and XPG 7th edition])
377     AC_LIBOBJ([sigwait])
378     AC_LIBOBJ([recvmsg])
379     AC_LIBOBJ([sendmsg])
380     ;;
381   *)
382     SYS="${host_os}"
383     ;;
384 esac
385
386 dnl WinRT
387 AC_ARG_ENABLE([winstore_app],
388      AS_HELP_STRING([--enable-winstore-app],
389                     [Build targetted for Windows Store apps (default disabled)]))
390
391 vlc_winstore_app=0
392 AS_IF([test "${SYS}" = "mingw32"],[
393   LIBCOM="-lole32"
394   AS_IF([test "${enable_winstore_app}" = "yes"], [
395     vlc_winstore_app=1
396     LIBCOM=""
397     AX_APPEND_FLAG([-DWINSTORECOMPAT],[CFLAGS])
398     AX_APPEND_FLAG([-DWINSTORECOMPAT],[CPPFLAGS])
399     AX_APPEND_FLAG([-DWINSTORECOMPAT],[CXXFLAGS])
400     LDFLAGS="${LDFLAGS} -lwindowsappcompat"
401     VLC_ADD_LIBS([libvlccore], [-lruntimeobject])
402     AC_LIBOBJ([gai_strerror])
403   ],[])
404   AC_SUBST([LIBCOM])
405   ])
406 AC_DEFINE_UNQUOTED(VLC_WINSTORE_APP, ${vlc_winstore_app}, [Define to 1 if you want to build for Windows Store apps])
407
408 vlc_build_pdb=0
409 AC_ARG_ENABLE([pdb],
410      AS_HELP_STRING([--enable-pdb],
411                     [Build PDB files for windows targets (default off)]))
412 AS_IF([test "${SYS}" = "mingw32"],[
413   AS_IF([test "${enable_pdb}" = "yes"], [
414     vlc_build_pdb=1
415     AX_APPEND_FLAG([-g -gcodeview],[CFLAGS])
416     AX_APPEND_FLAG([-g -gcodeview],[CXXFLAGS])
417     LDFLAGS="${LDFLAGS} -Wl,-pdb="
418   ],[])
419 ])
420
421 AM_CONDITIONAL([HAVE_FREEBSD], [test "${SYS}" = "freebsd"])
422 AM_CONDITIONAL([HAVE_LINUX],   [test "${SYS}" = "linux"])
423 AM_CONDITIONAL([HAVE_OS2],     [test "${SYS}" = "os2"])
424
425 AM_CONDITIONAL([HAVE_DARWIN],  [test "${SYS}" = "darwin"])
426 AM_CONDITIONAL([HAVE_IOS],     [test "${HAVE_IOS}" = "1"])
427 AM_CONDITIONAL([HAVE_OSX],     [test "${HAVE_OSX}" = "1"])
428 AM_CONDITIONAL([HAVE_TVOS],    [test "${HAVE_TVOS}" = "1"])
429
430 AM_CONDITIONAL([HAVE_NACL],    [test "${SYS}" = "nacl"])
431 AM_CONDITIONAL([HAVE_LIBANL],  [test "${HAVE_LIBANL}" = "1"])
432
433 AM_CONDITIONAL([HAVE_WIN32],   [test "${SYS}" = "mingw32"])
434 AM_CONDITIONAL([HAVE_WIN64],   [test "${HAVE_WIN64}" = "1"]) dnl Only used for the packaging
435 AM_CONDITIONAL([HAVE_WINSTORE], [test "$vlc_winstore_app" = "1"])
436 AM_CONDITIONAL([HAVE_WIN32_DESKTOP], [test "${SYS}" = "mingw32" -a "$vlc_winstore_app" = "0"])
437 AM_CONDITIONAL([ENABLE_PDB],   [test "$vlc_build_pdb" = "1"])
438
439 dnl Use nasm/yasm only on x86
440 AC_CHECK_PROGS(X86ASM, [nasm yasm])
441 AM_CONDITIONAL([HAVE_X86ASM], [test -n "${X86ASM}" && test -n "${X86ASMFLAGS}"])
442 AM_COND_IF([HAVE_X86ASM], [
443   AC_DEFINE([HAVE_X86ASM], [1], [Use external asm on x86.])
444 ])
445
446 dnl  Because DOLT is not able to handle --with-pic
447 dnl  correctly, manually add -DPIC to the options for
448 dnl  nasm / yasm here.
449 AS_IF([test x$with_pic = xyes], [X86ASMDEFS="${X86ASMDEFS} -DPIC"])
450
451 AC_SUBST([X86ASMFLAGS])
452 AC_SUBST([X86ASMDEFS])
453
454 dnl
455 dnl Sadly autoconf does not think about testing foo.exe when ask to test
456 dnl for program foo on win32
457 case "${build_os}" in
458     cygwin|msys|mingw32)
459         ac_executable_extensions=".exe"
460         BUILDEXEEXT=".exe"
461     ;;
462     os2*)
463         BUILDEXEEXT=".exe"
464     ;;
465     *)
466     ;;
467 esac
468 AC_SUBST([BUILDEXEEXT])
469
470 dnl Android is linux, but a bit different
471 AS_IF([test "$SYS" = linux],[
472     AC_MSG_CHECKING([for an Android system])
473     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
474         [[#ifndef __ANDROID__
475          # error Not Android
476          #endif
477         ]],[[;]])
478     ],[
479       HAVE_ANDROID="1"
480       AC_MSG_RESULT([yes])
481     ],[
482       AC_MSG_RESULT([no])
483     ])
484 ])
485 AM_CONDITIONAL([HAVE_ANDROID], [test "${HAVE_ANDROID}" = "1"])
486
487 dnl
488 dnl  Check for the contrib directory
489 dnl
490 AC_ARG_WITH(contrib,
491   AS_HELP_STRING([--with-contrib[=DIR]],
492     [search for 3rd party libraries in DIR/include and DIR/lib])
493 )
494 AC_MSG_CHECKING([for 3rd party libraries path])
495 AS_IF([test -z "${with_contrib}" || test "${with_contrib}" = "yes"], [
496   CONTRIB_DIR="${srcdir}/contrib/${host}"
497   AS_IF([test ! -d "${CONTRIB_DIR}"], [
498     echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
499     CONTRIB_DIR="${srcdir}/contrib/`$CC -dumpmachine`"
500     AS_IF([test ! -d "${CONTRIB_DIR}"], [
501       echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
502       CONTRIB_DIR=""
503       AC_MSG_RESULT([not found])
504     ])
505   ])
506 ], [
507   AS_IF([test "${with_contrib}" != "no"], [
508     CONTRIB_DIR="${with_contrib}"
509   ], [
510     CONTRIB_DIR=""
511     AC_MSG_RESULT([disabled])
512   ])
513 ])
514 AS_IF([test -n "${CONTRIB_DIR}"], [
515   AS_IF([test -d "${CONTRIB_DIR}/lib"],[
516     CONTRIB_DIR=`cd "${CONTRIB_DIR}" && pwd`
517   ], [
518     echo "${CONTRIB_DIR}/lib not found" >&AS_MESSAGE_LOG_FD
519     CONTRIB_DIR=""
520     AC_MSG_RESULT([not usable])
521   ])
522
523 ])
524 AS_IF([test -n "${CONTRIB_DIR}"], [
525   AC_MSG_RESULT([${CONTRIB_DIR}])
526   CPPFLAGS="${CPPFLAGS} -I${CONTRIB_DIR}/include"
527   CFLAGS="${CFLAGS} -I${CONTRIB_DIR}/include"
528   CXXFLAGS="${CXXFLAGS} -I${CONTRIB_DIR}/include"
529   OBJCFLAGS="${OBJCFLAGS} -I${CONTRIB_DIR}/include -F${CONTRIB_DIR} -F${CONTRIB_DIR}/Frameworks"
530   PKG_CONFIG_PATH="${CONTRIB_DIR}/lib/pkgconfig:${CONTRIB_DIR}/share/pkgconfig:${PKG_CONFIG_PATH}"
531   case "${build_os}" in
532       mingw32)
533           export PKG_CONFIG_PATH=`cygpath -mp ${PKG_CONFIG_PATH}`
534       ;;
535       *)
536           export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}"
537       ;;
538   esac
539   LDFLAGS="${LDFLAGS} -L${CONTRIB_DIR}/lib"
540
541   AS_IF([test -z "$LUAC"], [
542     dnl Old contribs mixed cross-tools and cross-compiled executables
543     AS_IF([test -x "${CONTRIB_DIR}/bin/luac${BUILDEXEEXT}"], [
544       LUAC="${CONTRIB_DIR}/bin/luac${BUILDEXEEXT}"
545     ])
546
547     dnl Newer contribs follow usual name space rules
548     AS_IF([test -x "${CONTRIB_DIR}/../bin/${host_alias}-luac${BUILDEXEEXT}"], [
549       LUAC="${CONTRIB_DIR}/../bin/${host_alias}-luac${BUILDEXEEXT}"
550     ])
551   ])
552
553   AS_IF([test "${SYS}" = "darwin"], [
554     export LD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$LD_LIBRARY_PATH"
555     export DYLD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$DYLD_LIBRARY_PATH"
556   ])
557 ], [
558   AS_IF([test -n "${with_contrib}" && test "${with_contrib}" != "no"], [
559     AC_MSG_ERROR([Third party libraries not found!])
560   ])
561 ])
562 AC_SUBST([CONTRIB_DIR])
563
564 dnl Add extras/tools to the PATH
565 TOOLS_DIR="${srcdir}/extras/tools/build/bin"
566 AS_IF([test -d "${TOOLS_DIR}"], [
567     TOOLS_DIR=`cd "${TOOLS_DIR}" && pwd`
568     export PATH="${TOOLS_DIR}":$PATH
569 ])
570
571 dnl
572 dnl  Libtool
573 dnl  It's very bad, but our former custom system was worst
574 dnl  -- Courmisch
575 dnl
576
577 dnl override platform specific check for dependent libraries
578 dnl otherwise libtool linking of shared libraries will
579 dnl fail on anything other than pass_all.
580 AC_CACHE_VAL(lt_cv_deplibs_check_method,
581     [lt_cv_deplibs_check_method=pass_all])
582
583 LT_INIT([dlopen win32-dll shared disable-static])
584 LT_LANG([C++])
585 LT_LANG([Windows Resource])
586
587 DOLT
588
589 lt_cv_deplibs_check_method=pass_all
590
591 AS_IF([test "${enable_shared}" = "no" -a "${enable_vlc}" != "no"], [
592   AC_MSG_ERROR([VLC is based on plugins. Shared libraries cannot be disabled.])
593 ])
594
595 dnl
596 dnl Gettext stuff
597 dnl
598 AM_GNU_GETTEXT_VERSION([0.19.8])
599 AM_GNU_GETTEXT([external], [need-formatstring-macros])
600
601 dnl
602 dnl Iconv stuff
603 dnl
604 AM_ICONV
605
606 dnl
607 dnl checks for mingw
608 AS_IF([test "${SYS}" = "mingw32"], [
609
610 AC_PREPROC_IFELSE([AC_LANG_SOURCE([
611 #if !defined(__MINGW32__)
612 # error Not compiling with mingw
613 #endif
614     ])], [
615
616 dnl Check for broken versions of mingw-runtime compatability library
617     AC_MSG_CHECKING(for broken mingw-runtime)
618     AC_PREPROC_IFELSE([AC_LANG_SOURCE([
619 #include <_mingw.h>
620 #if defined(__MINGW64_VERSION_MAJOR)
621 # if __MINGW64_VERSION_MAJOR < 5
622 #  error Update your mingw-w64! This one is too old.
623 # endif
624 #else
625 # error You cannot compile with Mingw. Use Mingw-w64!
626 #endif
627     ])], [
628         AC_MSG_RESULT([ok])
629     ], [
630         AC_MSG_RESULT([present])
631         AC_MSG_ERROR([LibVLC requires Mingw-w64 version 5.0 or higher!])
632     ])
633
634     dnl force use of mingw provided c99 *printf over msvcrt
635     CPPFLAGS="${CPPFLAGS} -D__USE_MINGW_ANSI_STDIO=1"
636
637     dnl Check for the need to include the mingwex lib for mingw32
638     VLC_SAVE_FLAGS
639     AC_CHECK_LIB([mingwex], [opendir],
640         AC_CHECK_LIB([mingw32], [opendir],,
641             [VLC_ADD_LIBS([libvlccore],[-lmingwex])])
642     )
643     VLC_RESTORE_FLAGS
644     ], [
645         AC_MSG_RESULT([Not compiling with mingw])
646     ])
647
648     dnl Check for fnative-struct or mms-bitfields support for mingw32
649     AX_CHECK_COMPILE_FLAG([-mms-bitfields], [
650         AX_APPEND_FLAG([-mms-bitfields], [CFLAGS])
651         AX_APPEND_FLAG([-mms-bitfields], [CXXFLAGS])
652         # Check for the warning flag without "-Wno-", GCC accepts
653         # -Wno-<anything> for unsupported warnings, which can trigger
654         # other warnings instead.
655         AX_CHECK_COMPILE_FLAG([-Wincompatible-ms-struct], [
656             AX_APPEND_FLAG([-Wno-incompatible-ms-struct], [CFLAGS])
657             AX_APPEND_FLAG([-Wno-incompatible-ms-struct], [CXXFLAGS])
658         ])
659     ], [
660         AX_CHECK_COMPILE_FLAG([-fnative-struct], [
661             AX_APPEND_FLAG([-fnative-struct], [CFLAGS])
662             AX_APPEND_FLAG([-fnative-struct], [CXXFLAGS])
663         ])
664     ])
665 ])
666
667
668 dnl
669 dnl Buggy glibc prevention. Purposedly not cached.
670 dnl See sourceware.org bugs 5058 and 5443.
671 dnl Ubuntu alone has 20 bug numbers for this...
672 dnl
673 AC_MSG_CHECKING(for buggy GNU/libc versions)
674 AC_PREPROC_IFELSE([AC_LANG_SOURCE([
675 #include <limits.h>
676 #if defined (__GLIBC__) && (__GLIBC__ == 2) \
677   && (__GLIBC_MINOR__ >= 5) && (__GLIBC_MINOR__ <= 7)
678 # error GNU/libc with dcgettext killer bug!
679 #endif
680 ])], [
681   AC_MSG_RESULT([not present])
682 ], [
683   AC_MSG_RESULT([found])
684   AS_IF([test "x${enable_nls}" != "xno"], [
685     AC_MSG_ERROR([Buggy GNU/libc (version 2.5 - 2.7) present. VLC would crash; there is no viable
686 work-around for this. Check with your distribution vendor on how to update the
687 glibc run-time. Alternatively, build with --disable-nls.])
688   ])
689 ])
690
691 dnl Plugin compilation stuff
692
693 VLC_LIBRARY_SUFFIX
694
695 dnl Check for system libs needed
696 need_libc=false
697
698 dnl Check for usual libc functions
699 AC_CHECK_FUNCS([accept4 dup3 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])
700 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])
701 AC_REPLACE_FUNCS([gettimeofday])
702 AC_CHECK_FUNC(fdatasync,,
703   [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
704 ])
705
706 VLC_REPLACE_DECL([realpath], [#include <stdlib.h>])
707
708 dnl mingw64 implements those as static inline, not functions with C linkage
709 VLC_REPLACE_DECL([asprintf], [#include <stdio.h>])
710 VLC_REPLACE_DECL([vasprintf], [#include <stdio.h>])
711 VLC_REPLACE_DECL([gmtime_r], [#include <time.h>])
712 VLC_REPLACE_DECL([localtime_r], [#include <time.h>])
713
714 dnl C11 static_assert()
715 AC_MSG_CHECKING([for static_assert in assert.h])
716 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <assert.h>], [
717 static_assert(1, "The impossible happened.");
718 ])], [
719   AC_MSG_RESULT([yes])
720   AC_DEFINE([HAVE_STATIC_ASSERT], [1], [Define to 1 if <assert.h> defines static_assert.])
721 ], [
722   AC_MSG_RESULT([no])
723 ])
724
725 # Windows CE does not have strcoll()
726 AC_FUNC_STRCOLL
727
728 dnl Check for non-standard system calls
729 case "$SYS" in
730   "linux")
731     AC_CHECK_FUNCS([eventfd vmsplice sched_getaffinity recvmmsg memfd_create])
732     ;;
733   "mingw32")
734     AC_CHECK_FUNCS([_lock_file])
735     ;;
736 esac
737
738 AH_BOTTOM([#include <vlc_fixups.h>])
739
740 dnl Check for struct timespec
741 AC_CHECK_TYPES([struct timespec],,,
742 [#include <time.h>])
743
744 dnl Check for max_align_t
745 AC_CHECK_TYPES([max_align_t],,,
746 [#include <stddef.h>])
747
748 dnl Checks for socket stuff
749 VLC_SAVE_FLAGS
750 SOCKET_LIBS=""
751 AC_SEARCH_LIBS(connect, [socket], [
752   AS_IF([test "$ac_cv_search_connect" != "none required"], [
753     SOCKET_LIBS="$ac_cv_search_connect"
754   ])
755 ], [
756   AS_IF([test "${SYS}" = "mingw32"], [
757     SOCKET_LIBS="-lws2_32 -liphlpapi"
758   ])
759 ])
760
761 AC_SEARCH_LIBS([inet_pton], [nsl], [
762  AS_IF([test "$ac_cv_search_inet_pton" != "none required"], [
763     SOCKET_LIBS="$ac_cv_search_inet_pton $SOCKET_LIBS"
764   ])
765 ],, [${SOCKET_LIBS}])
766
767 LIBS="${LIBS} ${SOCKET_LIBS}"
768 AC_LINK_IFELSE([
769     AC_LANG_PROGRAM([#ifdef _WIN32
770         #include <ws2tcpip.h>
771         #include <windows.h>
772         # if _WIN32_WINNT < 0x600
773         #  error Needs vista+
774         # endif
775         #else
776         #include <sys/socket.h>
777         #include <arpa/inet.h>
778         #endif], [
779         char dst[[sizeof(struct in_addr)]];
780         inet_pton(AF_INET, "127.0.0.1", dst);
781     ])],[AC_DEFINE([HAVE_INET_PTON],[1],[Define to 1 if you have inet_pton function])],[AC_LIBOBJ([inet_pton])])
782 AC_CHECK_TYPES([struct if_nameindex],,,[#include <net/if.h>])
783 AC_CHECK_FUNCS([if_nameindex])
784 VLC_RESTORE_FLAGS
785 AC_SUBST([SOCKET_LIBS])
786
787 dnl Check for socklen_t
788 AH_TEMPLATE(socklen_t, [Define to `int' if <sys/socket.h> does not define.])
789 AC_CACHE_CHECK([for socklen_t in sys/socket.h], dnl ` (fix VIM syntax highlight
790 ac_cv_type_socklen_t,
791 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
792 [#include <sys/types.h>
793 #ifdef _WIN32
794 # include <winsock2.h>
795 # include <ws2tcpip.h>
796 #else
797 # include <sys/socket.h>
798 #endif]], [[socklen_t len; len = 0;]])],
799 ac_cv_type_socklen_t=yes,
800 ac_cv_type_socklen_t=no)])
801 AS_IF([test "$ac_cv_type_socklen_t" = no], [
802   AC_COMPILE_IFELSE([
803     AC_LANG_PROGRAM([[
804 #include <sys/types.h>
805 #ifdef _WIN32
806 # include <winsock2.h>
807 # include <ws2tcpip.h>
808 #else
809 # include <sys/socket.h>
810 #endif
811     ]], [[
812 _Generic(getpeername, int (*)(int, struct sockaddr *, int *): 0);
813     ]])
814   ], AC_DEFINE(socklen_t, int), AC_DEFINE(socklen_t, unsigned int))
815 ])
816
817 dnl Check for struct sockaddr_storage
818 AH_TEMPLATE(sockaddr_storage, [Define to `sockaddr' if <sys/socket.h> does not define.]) dnl ` (fix VIM syntax highlight
819 AH_TEMPLATE(ss_family, [Define to `sa_family' if <sys/socket.h> does not define.]) dnl ` (fix VIM syntax highlight
820 AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_struct_sockaddr_storage,
821   [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#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_COMPILE_IFELSE([AC_LANG_PROGRAM([[#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_LINK_IFELSE([AC_LANG_PROGRAM([[#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_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[
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_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[
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_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
1330                         [[struct __attribute__((__packed__)) foo { int a; } b; (void)b;]])],
1331                      [ac_cv_c_attribute_packed=yes],[])])
1332 if test "${ac_cv_c_attribute_packed}" != "no"; then
1333   AC_DEFINE(HAVE_ATTRIBUTE_PACKED, 1, Support for __attribute__((packed)) for structs)
1334 fi
1335
1336 dnl
1337 dnl  Check the CPU
1338 dnl
1339 case "${host_cpu}" in
1340   "")
1341     ARCH=unknown
1342     ;;
1343   armv*)
1344     ARCH="arm"
1345     host_cpu="arm"
1346     ;;
1347   *)
1348     ARCH="${host_cpu}"
1349     ;;
1350 esac
1351
1352 dnl Check for backtrace() support
1353 AC_CHECK_HEADERS([execinfo.h])
1354 AC_CHECK_FUNCS([backtrace])
1355
1356 dnl
1357 dnl  default modules
1358 dnl
1359 ALIASES="${ALIASES} cvlc rvlc"
1360
1361 dnl
1362 dnl  Accelerated modules
1363 dnl
1364
1365 dnl  Check for fully working MMX intrinsics
1366 dnl  We need support for -mmmx, we need <mmintrin.h>, and we also need a
1367 dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1368 AC_ARG_ENABLE([mmx],
1369   AS_HELP_STRING([--disable-mmx],
1370     [disable MMX optimizations (default auto)]),,[
1371   case "${host_cpu}" in
1372     i?86|x86_64)
1373       enable_mmx="yes"
1374       ;;
1375     *)
1376       enable_mmx="no"
1377       ;;
1378   esac
1379 ])
1380 have_mmx="no"
1381 have_mmxext="no"
1382 AS_IF([test "${enable_mmx}" != "no"], [
1383   ARCH="${ARCH} mmx"
1384   VLC_SAVE_FLAGS
1385   CFLAGS="${CFLAGS} -mmmx"
1386   AC_CACHE_CHECK([if $CC groks MMX intrinsics], [ac_cv_c_mmx_intrinsics], [
1387     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1388 [#include <mmintrin.h>
1389 #include <stdint.h>
1390 uint64_t frobzor;]], [
1391 [__m64 a, b, c;
1392 a = b = c = (__m64)frobzor;
1393 a = _mm_slli_pi16(a, 3);
1394 a = _mm_adds_pi16(a, b);
1395 c = _mm_srli_pi16(c, 8);
1396 c = _mm_slli_pi16(c, 3);
1397 b = _mm_adds_pi16(b, c);
1398 a = _mm_unpacklo_pi8(a, b);
1399 frobzor = (uint64_t)a;]])], [
1400       ac_cv_c_mmx_intrinsics=yes
1401     ], [
1402       ac_cv_c_mmx_intrinsics=no
1403     ])
1404   ])
1405   VLC_RESTORE_FLAGS
1406   AS_IF([test "${ac_cv_c_mmx_intrinsics}" != "no"], [
1407     AC_DEFINE(HAVE_MMX_INTRINSICS, 1, [Define to 1 if MMX intrinsics are available.])
1408   ])
1409
1410   VLC_SAVE_FLAGS
1411   CFLAGS="${CFLAGS} -mmmx"
1412   AC_CACHE_CHECK([if $CC groks MMX inline assembly], [ac_cv_mmx_inline], [
1413     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1414 void *p;
1415 asm volatile("packuswb %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
1416 ]])
1417     ], [
1418       ac_cv_mmx_inline=yes
1419     ], [
1420       ac_cv_mmx_inline=no
1421     ])
1422   ])
1423   AS_IF([test "${ac_cv_mmx_inline}" != "no"], [
1424     AC_DEFINE(CAN_COMPILE_MMX, 1, [Define to 1 inline MMX assembly is available.])
1425     have_mmx="yes"
1426   ])
1427
1428   AC_CACHE_CHECK([if $CC groks MMX EXT inline assembly],
1429                  [ac_cv_mmxext_inline], [
1430     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1431 void *p;
1432 asm volatile("maskmovq %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
1433 ]])
1434     ], [
1435       ac_cv_mmxext_inline=yes
1436     ], [
1437       ac_cv_mmxext_inline=no
1438     ])
1439   ])
1440   VLC_RESTORE_FLAGS
1441   AS_IF([test "${ac_cv_mmxext_inline}" != "no"], [
1442     AC_DEFINE(CAN_COMPILE_MMXEXT, 1, [Define to 1 if MMX EXT inline assembly is available.])
1443     have_mmxext="yes"
1444   ])
1445 ])
1446 AM_CONDITIONAL([HAVE_MMX], [test "${have_mmx}" = "yes"])
1447 AM_CONDITIONAL([HAVE_MMXEXT], [test "${have_mmxext}" = "yes"])
1448
1449 dnl  Check for fully workin SSE2 intrinsics
1450 dnl  We need support for -msse[2], we need <emmintrin.h>, and we also need a
1451 dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1452 AC_ARG_ENABLE([sse],
1453   AS_HELP_STRING([--disable-sse],
1454     [disable SSE (1-4) optimizations (default auto)]),, [
1455   case "${host_cpu}" in
1456     i?86|x86_64)
1457       enable_sse=yes
1458       ;;
1459     *)
1460       enable_sse=no
1461       ;;
1462   esac
1463 ])
1464 have_sse2="no"
1465 AS_IF([test "${enable_sse}" != "no"], [
1466   ARCH="${ARCH} sse sse2"
1467
1468   VLC_SAVE_FLAGS
1469   CFLAGS="${CFLAGS} -msse2"
1470   AC_CACHE_CHECK([if $CC groks SSE2 intrinsics], [ac_cv_c_sse2_intrinsics], [
1471     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1472 [#include <emmintrin.h>
1473 #include <stdint.h>
1474 uint64_t frobzor;]], [
1475 [__m128i a, b, c;
1476 a = b = c = _mm_set1_epi64((__m64)frobzor);
1477 a = _mm_slli_epi16(a, 3);
1478 a = _mm_adds_epi16(a, b);
1479 c = _mm_srli_epi16(c, 8);
1480 c = _mm_slli_epi16(c, 3);
1481 b = _mm_adds_epi16(b, c);
1482 a = _mm_unpacklo_epi8(a, b);
1483 frobzor = (uint64_t)_mm_movepi64_pi64(a);]])], [
1484       ac_cv_c_sse2_intrinsics=yes
1485     ], [
1486       ac_cv_c_sse2_intrinsics=no
1487     ])
1488   ])
1489   VLC_RESTORE_FLAGS
1490   AS_IF([test "${ac_cv_c_sse2_intrinsics}" != "no"], [
1491     AC_DEFINE(HAVE_SSE2_INTRINSICS, 1, [Define to 1 if SSE2 intrinsics are available.])
1492   ])
1493
1494   VLC_SAVE_FLAGS
1495   CFLAGS="${CFLAGS} -msse"
1496   AC_CACHE_CHECK([if $CC groks SSE inline assembly], [ac_cv_sse_inline], [
1497     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1498 void *p;
1499 asm volatile("xorps %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
1500 ]])
1501     ], [
1502       ac_cv_sse_inline=yes
1503     ], [
1504       ac_cv_sse_inline=no
1505     ])
1506   ])
1507
1508   AS_IF([test "${ac_cv_sse_inline}" != "no" -a "${SYS}" != "solaris"], [
1509     AC_DEFINE(CAN_COMPILE_SSE, 1, [Define to 1 if SSE inline assembly is available.])
1510   ])
1511
1512   AC_CACHE_CHECK([if $CC groks SSE2 inline assembly], [ac_cv_sse2_inline], [
1513     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1514 void *p;
1515 asm volatile("punpckhqdq %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
1516 ]])
1517     ], [
1518       ac_cv_sse2_inline=yes
1519     ], [
1520       ac_cv_sse2_inline=no
1521     ])
1522   ])
1523   AS_IF([test "${ac_cv_sse2_inline}" != "no" -a "${SYS}" != "solaris"], [
1524     AC_DEFINE(CAN_COMPILE_SSE2, 1, [Define to 1 if SSE2 inline assembly is available.])
1525     have_sse2="yes"
1526   ])
1527
1528   # SSE3
1529   AC_CACHE_CHECK([if $CC groks SSE3 inline assembly], [ac_cv_sse3_inline], [
1530     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1531 void *p;
1532 asm volatile("movsldup %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1533 ]])
1534     ], [
1535       ac_cv_sse3_inline=yes
1536     ], [
1537       ac_cv_sse3_inline=no
1538     ])
1539   ])
1540
1541   AS_IF([test "${ac_cv_sse3_inline}" != "no"], [
1542     AC_DEFINE(CAN_COMPILE_SSE3, 1, [Define to 1 if SSE3 inline assembly is available.]) ])
1543
1544   # SSSE3
1545   AC_CACHE_CHECK([if $CC groks SSSE3 inline assembly], [ac_cv_ssse3_inline], [
1546     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1547 void *p;
1548 asm volatile("pabsw %%xmm0,%%xmm0"::"r"(p):"xmm0");
1549 ]])
1550     ], [
1551       ac_cv_ssse3_inline=yes
1552     ], [
1553       ac_cv_ssse3_inline=no
1554     ])
1555   ])
1556
1557   AS_IF([test "${ac_cv_ssse3_inline}" != "no"], [
1558     AC_DEFINE(CAN_COMPILE_SSSE3, 1, [Define to 1 if SSSE3 inline assembly is available.]) ])
1559
1560   # SSE4.1
1561   AC_CACHE_CHECK([if $CC groks SSE4.1 inline assembly],
1562                  [ac_cv_sse4_1_inline], [
1563     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1564 void *p;
1565 asm volatile("pmaxsb %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1566 ]])
1567     ], [
1568       ac_cv_sse4_1_inline=yes
1569     ], [
1570       ac_cv_sse4_1_inline=no
1571     ])
1572   ])
1573
1574   AS_IF([test "${ac_cv_sse4_1_inline}" != "no"], [
1575     AC_DEFINE(CAN_COMPILE_SSE4_1, 1, [Define to 1 if SSE4_1 inline assembly is available.]) ])
1576
1577   # SSE4.2
1578   AC_CACHE_CHECK([if $CC groks SSE4.2 inline assembly],
1579                  [ac_cv_sse4_2_inline], [
1580     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1581 void *p;
1582 asm volatile("pcmpgtq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1583 ]])
1584     ], [
1585       ac_cv_sse4_2_inline=yes
1586     ], [
1587       ac_cv_sse4_2_inline=no
1588     ])
1589   ])
1590
1591   AS_IF([test "${ac_cv_sse4_2_inline}" != "no"], [
1592     AC_DEFINE(CAN_COMPILE_SSE4_2, 1, [Define to 1 if SSE4_2 inline assembly is available.]) ])
1593
1594   # SSE4A
1595   AC_CACHE_CHECK([if $CC groks SSE4A inline assembly], [ac_cv_sse4a_inline], [
1596     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1597 void *p;
1598 asm volatile("insertq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1599 ]])
1600     ], [
1601       ac_cv_sse4a_inline=yes
1602     ], [
1603       ac_cv_sse4a_inline=no
1604     ])
1605   ])
1606   VLC_RESTORE_FLAGS
1607   AS_IF([test "${ac_cv_sse4a_inline}" != "no"], [
1608     AC_DEFINE([CAN_COMPILE_SSE4A], [1], [Define to 1 if SSE4A inline assembly is available.]) ])
1609 ])
1610 AM_CONDITIONAL([HAVE_SSE2], [test "$have_sse2" = "yes"])
1611
1612 dnl  Check for fully workin AVX2 intrinsics
1613 dnl  We need support for -mavx[2], we need <immintrin.h>, and we also need a
1614 dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1615 AC_ARG_ENABLE([avx],
1616   AS_HELP_STRING([--disable-avx],
1617     [disable AVX (1-2) optimizations (default auto)]),, [
1618   case "${host_cpu}" in
1619     i?86|x86_64)
1620       enable_avx=yes
1621       ;;
1622     *)
1623       enable_avx=no
1624       ;;
1625   esac
1626 ])
1627 have_avx2="no"
1628 AS_IF([test "${enable_avx}" != "no"], [
1629   ARCH="${ARCH} avx avx2"
1630
1631   VLC_SAVE_FLAGS
1632   CFLAGS="${CFLAGS} -mavx2"
1633   AC_CACHE_CHECK([if $CC groks AVX2 intrinsics], [ac_cv_c_avx2_intrinsics], [
1634     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1635 [#include <immintrin.h>
1636 #include <stdint.h>
1637 uint64_t frobzor;]], [
1638 [__m256i a, b, c;
1639 a = b = c = _mm256_set1_epi64x((int64_t)frobzor);
1640 a = _mm256_slli_epi16(a, 3);
1641 a = _mm256_adds_epi16(a, b);
1642 c = _mm256_srli_epi16(c, 8);
1643 c = _mm256_slli_epi16(c, 3);
1644 b = _mm256_adds_epi16(b, c);
1645 a = _mm256_unpacklo_epi8(a, b);
1646 frobzor = (uint64_t)_mm256_extract_epi64(a, 0);]])], [
1647       ac_cv_c_avx2_intrinsics=yes
1648     ], [
1649       ac_cv_c_avx2_intrinsics=no
1650     ])
1651   ])
1652   VLC_RESTORE_FLAGS
1653   AS_IF([test "${ac_cv_c_avx2_intrinsics}" != "no"], [
1654     AC_DEFINE(HAVE_AVX2_INTRINSICS, 1, [Define to 1 if AVX2 intrinsics are available.])
1655   ])
1656
1657   VLC_SAVE_FLAGS
1658   CFLAGS="${CFLAGS} -mavx"
1659   AC_CACHE_CHECK([if $CC groks AVX inline assembly], [ac_cv_avx_inline], [
1660     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1661 void *p;
1662 asm volatile("xorps256 %%ymm1,%%ymm2"::"r"(p):"ymm1", "ymm2");
1663 ]])
1664     ], [
1665       ac_cv_avx_inline=yes
1666     ], [
1667       ac_cv_avx_inline=no
1668     ])
1669   ])
1670
1671   AS_IF([test "${ac_cv_avx_inline}" != "no" -a "${SYS}" != "solaris"], [
1672     AC_DEFINE(CAN_COMPILE_AVX, 1, [Define to 1 if AVX inline assembly is available.])
1673   ])
1674
1675   AC_CACHE_CHECK([if $CC groks AVX2 inline assembly], [ac_cv_avx2_inline], [
1676     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1677 void *p;
1678 asm volatile("punpckhqdq256 %%ymm1,%%ymm2"::"r"(p):"ymm1", "ymm2");
1679 ]])
1680     ], [
1681       ac_cv_avx2_inline=yes
1682     ], [
1683       ac_cv_avx2_inline=no
1684     ])
1685   ])
1686   VLC_RESTORE_FLAGS
1687   AS_IF([test "${ac_cv_avx2_inline}" != "no" -a "${SYS}" != "solaris"], [
1688     AC_DEFINE(CAN_COMPILE_AVX2, 1, [Define to 1 if AVX2 inline assembly is available.])
1689     have_avx2="yes"
1690   ])
1691 ])
1692 AM_CONDITIONAL([HAVE_AVX2], [test "$have_avx2" = "yes"])
1693
1694 VLC_SAVE_FLAGS
1695 CFLAGS="${CFLAGS} -mmmx"
1696 have_3dnow="no"
1697 AC_CACHE_CHECK([if $CC groks 3D Now! inline assembly], [ac_cv_3dnow_inline], [
1698   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1699 void *p;
1700 asm volatile("pfadd %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
1701 ]])
1702   ], [
1703     ac_cv_3dnow_inline=yes
1704   ], [
1705     ac_cv_3dnow_inline=no
1706   ])
1707 ])
1708 VLC_RESTORE_FLAGS
1709 AS_IF([test "${ac_cv_3dnow_inline}" != "no"], [
1710   AC_DEFINE([CAN_COMPILE_3DNOW], 1,
1711             [Define to 1 if 3D Now! inline assembly is available.])
1712   have_3dnow="yes"
1713 ])
1714 AM_CONDITIONAL([HAVE_3DNOW], [test "$have_3dnow" = "yes"])
1715
1716
1717 AC_ARG_ENABLE([neon],
1718   AS_HELP_STRING([--disable-neon],
1719     [disable ARM NEON optimizations (default auto)]),, [
1720   case "${host_cpu}" in
1721     "arm")
1722       enable_neon="32"
1723       ;;
1724     "aarch64")
1725       enable_neon="64"
1726       ;;
1727     *)
1728       enable_neon="no"
1729       ;;
1730   esac
1731 ])
1732 AS_IF([test "${enable_neon}" != "no"], [
1733   VLC_SAVE_FLAGS
1734   AC_CACHE_CHECK([if $CCAS groks ARM NEON assembly], [ac_cv_arm_neon], [
1735     AS_IF([test "${enable_neon}" != "64"], [
1736       CFLAGS="${CFLAGS} -mfpu=neon -mhard-float"
1737       AC_COMPILE_IFELSE([
1738         AC_LANG_PROGRAM(,[[
1739 asm volatile("vqmovun.s64 d0, q1":::"d0");
1740 ]])
1741       ], [
1742         ac_cv_arm_neon="32"
1743       ], [
1744         ac_cv_arm_neon="no"
1745       ])
1746     ], [
1747       CFLAGS="${CFLAGS} -march=armv8-a+simd"
1748       AC_COMPILE_IFELSE([
1749         AC_LANG_PROGRAM(,[[
1750 asm volatile("uhadd v0.8b, v0.8b, v1.8b":::"v0");
1751 ]])
1752       ], [
1753         ac_cv_arm_neon="64"
1754       ], [
1755         ac_cv_arm_neon="no"
1756       ])
1757     ])
1758   ])
1759   VLC_RESTORE_FLAGS
1760 ])
1761 AM_CONDITIONAL([HAVE_NEON], [test "${ac_cv_arm_neon}" = "32"])
1762 AM_CONDITIONAL([HAVE_ARM64], [test "${ac_cv_arm_neon}" = "64"])
1763
1764 AC_ARG_ENABLE([sve],
1765   AS_HELP_STRING([--disable-sve],
1766     [disable ARM SVE optimizations (default auto)]),, [
1767   AS_IF([test "${host_cpu}" = "aarch64"], [enable_sve="yes"] ,[enable_sve="no"])
1768 ])
1769 AS_IF([test "${enable_sve}" != "no"], [
1770   VLC_SAVE_FLAGS
1771   CFLAGS="${CFLAGS} -march=armv8-a+sve"
1772   AC_CACHE_CHECK([if $CCAS groks ARM SVE assembly], [ac_cv_arm_sve], [
1773     AC_COMPILE_IFELSE([
1774       AC_LANG_PROGRAM(,[[
1775 asm volatile("ptrue p0.s" ::: "p0");
1776 ]])
1777     ], [
1778       ac_cv_arm_sve="yes"
1779     ], [
1780       ac_cv_arm_sve="no"
1781     ])
1782   ])
1783   VLC_RESTORE_FLAGS
1784 ])
1785 AM_CONDITIONAL([HAVE_SVE], [test "${ac_cv_arm_sve}" = "yes"])
1786
1787 AC_ARG_ENABLE([branch-protection],
1788   AS_HELP_STRING([--disable-branch-protection],
1789     [disable AArch64 branch protection (default auto)]),, [
1790   AS_IF([test "${host_cpu}" = "aarch64"],
1791     [enable_branch_protection="yes"], [enable_branch_protection="no"])
1792 ])
1793 AS_IF([test "${enable_branch_protection}" != "no"], [
1794   AX_CHECK_COMPILE_FLAG([-mbranch-protection=standard], [
1795     AX_APPEND_FLAG([-mbranch-protection=standard], [CFLAGS])
1796     AX_APPEND_FLAG([-mbranch-protection=standard], [CXXFLAGS])
1797   ])
1798 ])
1799
1800
1801 AC_ARG_ENABLE([altivec],
1802   AS_HELP_STRING([--disable-altivec],
1803     [disable AltiVec optimizations (default auto)]),, [
1804   AS_CASE("${host_cpu}", [powerpc*],
1805         [enable_altivec=yes], [enable_altivec=no])
1806 ])
1807 have_altivec="no"
1808 ALTIVEC_CFLAGS=""
1809 AS_IF([test "${enable_altivec}" = "yes"], [
1810   ARCH="${ARCH} altivec";
1811   VLC_SAVE_FLAGS
1812   AC_CACHE_CHECK([if $CC groks AltiVec inline assembly],
1813     [ac_cv_altivec_inline],
1814     [AC_COMPILE_IFELSE([
1815         AC_LANG_PROGRAM([[]],
1816             [[asm volatile("vperm 0,1,2,3");]])],
1817      [ac_cv_altivec_inline="yes"],
1818      [CFLAGS="${CFLAGS} -Wa,-maltivec"
1819       AC_COMPILE_IFELSE([
1820          AC_LANG_PROGRAM([[]],
1821             [[asm volatile("vperm 0,1,2,3");]])],
1822             [ac_cv_altivec_inline="-Wa,-maltivec"],
1823             ac_cv_altivec_inline=no)
1824          ])])
1825   VLC_RESTORE_FLAGS
1826   AS_IF([test "${ac_cv_altivec_inline}" != "no"], [
1827     AC_DEFINE(CAN_COMPILE_ALTIVEC, 1,
1828               [Define to 1 if AltiVec inline assembly is available.])
1829     AS_IF([test "${ac_cv_altivec_inline}" != "yes"], [
1830       ALTIVEC_CFLAGS="${ac_cv_altivec_inline}"
1831       VLC_ADD_CFLAGS([libvlccore],[${ac_cv_altivec_inline}])
1832     ])
1833     have_altivec="yes"
1834   ])
1835
1836   VLC_SAVE_FLAGS
1837   AC_CACHE_CHECK([if \$CC groks AltiVec C extensions],
1838   [ac_cv_c_altivec], [
1839     CFLAGS="${CFLAGS} -maltivec"
1840     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1841 [#include <altivec.h>]], [
1842 [vec_ld(0, (unsigned char *)0);]])], [
1843       ac_cv_c_altivec="-maltivec"
1844     ], [
1845       ac_cv_c_altivec="no"
1846     ])
1847   ])
1848   VLC_RESTORE_FLAGS
1849   AS_IF([test "${ac_cv_c_altivec}" != "no"], [
1850     CPPFLAGS="${CPPFLAGS} ${ac_cv_c_altivec}"
1851     AC_DEFINE(CAN_COMPILE_C_ALTIVEC, 1, [Define to 1 if C AltiVec extensions are available.])
1852     VLC_ADD_CFLAGS([libvlccore],[${ac_cv_c_altivec}])
1853     ALTIVEC_CFLAGS="$ALTIVEC_CFLAGS ${ac_cv_c_altivec}"
1854     VLC_ADD_CFLAGS([deinterlace],[${ac_cv_c_altivec}])
1855     have_altivec="yes"
1856   ])
1857   AC_CHECK_HEADERS([altivec.h])
1858
1859   VLC_SAVE_FLAGS
1860   LDFLAGS="${LDFLAGS} -Wl,-framework,vecLib"
1861   AC_CACHE_CHECK([if linker needs -framework vecLib],
1862     [ac_cv_ld_altivec],
1863     [AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[ac_cv_ld_altivec=yes],[ac_cv_ld_altivec=no])])
1864   VLC_RESTORE_FLAGS
1865   AS_IF([test "${ac_cv_ld_altivec}" != "no"], [
1866     VLC_ADD_LIBS([libvlccore],[-Wl,-framework,vecLib])
1867   ])
1868 ])
1869 AC_SUBST([ALTIVEC_CFLAGS])
1870 AM_CONDITIONAL([HAVE_ALTIVEC], [test "$have_altivec" = "yes"])
1871
1872 dnl
1873 dnl  Memory usage
1874 dnl
1875 AC_ARG_ENABLE([optimize-memory],
1876   AS_HELP_STRING([--enable-optimize-memory],
1877     [optimize memory usage over performance]))
1878 if test "${enable_optimize_memory}" = "yes"; then
1879   AC_DEFINE(OPTIMIZE_MEMORY, 1, Define if you want to optimize memory usage over performance)
1880 fi
1881
1882 dnl
1883 dnl Allow running as root (useful for people running on embedded platforms)
1884 dnl
1885 AC_ARG_ENABLE([run-as-root],
1886   AS_HELP_STRING([--enable-run-as-root],
1887     [allow running VLC as root (default disabled)]))
1888 AS_IF([test "${enable_run_as_root}" = "yes"],[
1889     AC_DEFINE(ALLOW_RUN_AS_ROOT, 1,
1890               [Define to 1 to allow running VLC as root (uid 0).])
1891 ])
1892
1893 dnl
1894 dnl Stream output
1895 dnl
1896 AC_ARG_ENABLE([sout],
1897   AS_HELP_STRING([--disable-sout],
1898     [disable streaming output (default enabled)]))
1899 AS_IF([test "${enable_sout}" != "no"], [
1900   AC_DEFINE(ENABLE_SOUT, 1, [Define to 1 for stream output support.])
1901 ])
1902 AM_CONDITIONAL([ENABLE_SOUT], [test "${enable_sout}" != "no"])
1903
1904 dnl Lua modules
1905 AC_ARG_ENABLE([lua],
1906   AS_HELP_STRING([--disable-lua],
1907     [disable LUA scripting support (default enabled)]))
1908 if test "${enable_lua}" != "no"
1909 then
1910   PKG_CHECK_MODULES(LUA, lua5.2, [ have_lua=yes ], [:])
1911
1912   AS_IF([test "${have_lua}" != "yes"], [
1913     AC_MSG_WARN([${LUA_PKG_ERRORS}, trying lua 5.1 instead])
1914     PKG_CHECK_MODULES(LUA, lua5.1, [ have_lua=yes ], [:]) ])
1915
1916   AS_IF([test "${have_lua}" != "yes"], [
1917     AC_MSG_WARN([${LUA_PKG_ERRORS}, trying lua >= 5.1 instead])
1918     PKG_CHECK_MODULES(LUA, lua >= 5.1, [ have_lua=yes ], [:]) ])
1919
1920   AS_IF([test "${have_lua}" != "yes"], [
1921      AC_MSG_WARN([${LUA_PKG_ERRORS}, trying manual detection instead])
1922      have_lua_lib=no
1923      AC_CHECK_LIB( lua5.2 , luaL_newstate, [
1924        LUA_LIBS="-llua5.2"
1925        have_lua_lib=yes], [])
1926
1927      AS_IF([test "${have_lua_lib}" != "yes"], [
1928        AC_CHECK_LIB( lua5.1 , luaL_newstate, [
1929          LUA_LIBS="-llua5.1"
1930          have_lua_lib=yes], [] ) ])
1931
1932      AS_IF([test "${have_lua_lib}" != "yes"], [
1933        AC_CHECK_LIB( lua51 , luaL_newstate, [
1934          LUA_LIBS="-llua51"
1935          have_lua_lib=yes], [] ) ])
1936
1937      AS_IF([test "${have_lua_lib}" != "yes"], [
1938        AC_CHECK_LIB( lua , luaL_newstate,
1939          [LUA_LIBS="-llua"
1940           have_lua_lib=yes],
1941          [ have_lua=no ], [-lm] ) ])
1942
1943      dnl If we found any lib, check that we have the headers too
1944      AS_IF([test "${have_lua_lib}" = "yes"], [
1945        AC_CHECK_HEADERS([lua.h lauxlib.h lualib.h], [ have_lua=yes ], []) ])
1946   ])
1947
1948   if test "x${have_lua}" != "xyes" ;  then
1949       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.])
1950   fi
1951   AC_ARG_VAR([LUAC], [LUA byte compiler])
1952   AS_IF([test -z "$LUAC"], [
1953      AC_CHECK_TOOL(LUAC, [luac], [false])
1954   ])
1955   AS_IF([test "${LUAC}" = "false"], [
1956     AC_MSG_ERROR([Could not find the LUA byte compiler.])
1957   ])
1958   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], [
1959     AC_MSG_ERROR([You need 32-bits luac when using lua from contrib.])
1960   ])
1961 fi
1962 AM_CONDITIONAL([BUILD_LUA], [test "${have_lua}" = "yes"])
1963
1964
1965 dnl
1966 dnl VideoLAN manager
1967 dnl
1968 AC_ARG_ENABLE([vlm],
1969   AS_HELP_STRING([--disable-vlm],
1970     [disable the stream manager (default enabled)]),,
1971   [enable_vlm="${enable_sout}"])
1972 AS_IF([test "${enable_vlm}" != "no"], [
1973   AS_IF([test "${enable_sout}" = "no"], [
1974     AC_MSG_ERROR([VLM requires the stream output. Do not use --disable-sout.])
1975   ])
1976   AC_DEFINE(ENABLE_VLM, 1, [Define if you want the VideoLAN manager support])
1977 ])
1978 AM_CONDITIONAL([ENABLE_VLM], [test "${enable_vlm}" != "no"])
1979
1980
1981 dnl
1982 dnl Addons manager storage and repositories modules
1983 dnl
1984 AC_ARG_ENABLE([addonmanagermodules],
1985   AS_HELP_STRING([--disable-addonmanagermodules],
1986     [disable the addons manager modules (default enabled)]))
1987 if test "${enable_addonmanagermodules}" != "no"
1988 then
1989   AC_DEFINE(ENABLE_ADDONMANAGERMODULES, 1, [Define if you want the addons manager modules])
1990 fi
1991 AM_CONDITIONAL([ENABLE_ADDONMANAGERMODULES], [test "${enable_addonmanagermodules}" != "no"])
1992
1993
1994 dnl
1995 dnl  Input plugins
1996 dnl
1997
1998 EXTEND_HELP_STRING([Input plugins:])
1999
2000 dnl
2001 dnl  libarchive access module
2002 dnl
2003 PKG_ENABLE_MODULES_VLC([ARCHIVE], [archive], [libarchive >= 3.1.0], (libarchive support), [auto])
2004
2005 dnl
2006 dnl  live555 input
2007 dnl
2008 AC_ARG_ENABLE([live555],
2009   AS_HELP_STRING([--enable-live555],
2010     [enable RTSP input through live555 (default enabled)]))
2011
2012 AS_IF([test "${enable_live555}" != "no" -a -n "${CXX}"], [
2013   PKG_CHECK_MODULES(LIVE555, live555, [
2014     VLC_ADD_PLUGIN([live555])
2015     VLC_ADD_CXXFLAGS([live555], [$LIVE555_CFLAGS])
2016     VLC_ADD_LIBS([live555],[$LIVE555_LIBS])
2017   ], [
2018     AC_MSG_WARN([${LIVE555_PKG_ERRORS}.])
2019
2020     AC_LANG_PUSH(C++)
2021     VLC_SAVE_FLAGS
2022
2023     dnl detect include paths
2024     AS_IF([test -f "${CONTRIB_DIR}/include/UsageEnvironment/UsageEnvironment.hh"], [
2025       CPPFLAGS_live555="-I${CONTRIB_DIR}/include/liveMedia -I${CONTRIB_DIR}/include/groupsock -I${CONTRIB_DIR}/include/BasicUsageEnvironment -I${CONTRIB_DIR}/include/UsageEnvironment"
2026     ], [
2027       AS_IF([test "${SYS}" != "os2"], [
2028         LIVE555_PREFIX=${LIVE555_PREFIX-"/usr"}
2029         CPPFLAGS_live555="-I${LIVE555_PREFIX}/include/liveMedia -I${LIVE555_PREFIX}/include/groupsock -I${LIVE555_PREFIX}/include/BasicUsageEnvironment -I${LIVE555_PREFIX}/include/UsageEnvironment"
2030       ], [
2031         LIVE555_PREFIX=${LIVE555_PREFIX-"/usr/lib/live"}
2032         CPPFLAGS_live555="-I${LIVE555_PREFIX}/liveMedia/include -I${LIVE555_PREFIX}/groupsock/include -I${LIVE555_PREFIX}/BasicUsageEnvironment/include -I${LIVE555_PREFIX}/UsageEnvironment/include"
2033         LDFLAGS_live555="-L${LIVE555_PREFIX}/liveMedia -L${LIVE555_PREFIX}/groupsock -L${LIVE555_PREFIX}/BasicUsageEnvironment -L${LIVE555_PREFIX}/UsageEnvironment"
2034       ])
2035     ])
2036
2037     dnl CPP Flags
2038     AS_IF([test "${SYS}" = "solaris"], [
2039       CPPFLAGS_live555="${CPPFLAGS_live555} -DSOLARIS"
2040     ])
2041     CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_live555}"
2042     LDFLAGS="${LDFLAGS} ${LDFLAGS_live555}"
2043
2044     dnl version check
2045     AC_CACHE_CHECK([for live555 version 1324598400 or later], [ac_cv_live555], [
2046       AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
2047 [#include <liveMedia_version.hh>
2048 #if !defined (LIVEMEDIA_LIBRARY_VERSION_INT) || (LIVEMEDIA_LIBRARY_VERSION_INT < 1324598400)
2049 # error BOOM
2050 #endif]])
2051       ], [
2052         ac_cv_live555="yes"
2053       ], [
2054         ac_cv_live555="no"
2055       ])
2056     ])
2057
2058     AS_IF([test "$ac_cv_live555" = "no"], [
2059       AC_MSG_WARN([live555 is missing or its installed version is too old:
2060 Version 2011.12.23 or later is required to proceed.
2061 You can get an updated one from http://www.live555.com/liveMedia .])
2062       AS_IF([test -n "${enable_live555}"], [
2063         AC_MSG_ERROR([Update live555 or pass --disable-live555 to disable RTSP input support.])
2064       ])
2065     ], [
2066       other_libs="-lgroupsock -lBasicUsageEnvironment -lUsageEnvironment"
2067       other_libs_pic="-lgroupsock_pic -lBasicUsageEnvironment_pic -lUsageEnvironment_pic"
2068       AS_IF([test "${SYS}" = "mingw32"], [
2069         # add ws2_32 for closesocket, select, recv
2070         other_libs="$other_libs -lws2_32"
2071       ])
2072
2073       dnl We need to check for pic because live555 don't provide shared libs
2074       dnl and we want to build a plugins so we need -fPIC on some arch.
2075       VLC_ADD_CXXFLAGS([live555], [${CPPFLAGS_live555}])
2076       VLC_ADD_LDFLAGS([live555], [${LDFLAGS_live555}])
2077       AC_CHECK_LIB([liveMedia_pic], [main], [
2078         VLC_ADD_PLUGIN([live555])
2079         VLC_ADD_LIBS([live555], [-lliveMedia_pic ${other_libs_pic}])
2080       ],[
2081         AC_CHECK_LIB([liveMedia], [main], [
2082           VLC_ADD_PLUGIN([live555])
2083           VLC_ADD_LIBS([live555], [-lliveMedia ${other_libs}])
2084         ],[],[${other_libs}])
2085       ],[${other_libs_pic}])
2086     ])
2087     VLC_RESTORE_FLAGS
2088     AC_LANG_POP(C++)
2089   ])
2090 ])
2091
2092 dnl
2093 dnl IIDC and DV FireWire input modules
2094 dnl
2095 PKG_ENABLE_MODULES_VLC([DC1394], [], [libdc1394-2 >= 2.1.0], [IIDC FireWire input module], [auto])
2096 PKG_ENABLE_MODULES_VLC([DV1394], [], [libraw1394 >= 2.0.1 libavc1394 >= 0.5.3], [DV FireWire input module], [auto])
2097
2098 dnl
2099 dnl - linsys modules: access module check for libzvbi
2100 dnl
2101 AC_ARG_ENABLE([linsys],
2102   AS_HELP_STRING([--enable-linsys],
2103     [Linux Linear Systems Ltd. SDI and HD-SDI input cards (default enabled)]))
2104 AS_IF([test "$SYS" = "linux" -a "${enable_linsys}" != "no"], [
2105   VLC_ADD_PLUGIN([linsys_hdsdi])
2106   PKG_CHECK_MODULES(LINSYS_SDI, [zvbi-0.2 >= 0.2.28], [
2107     VLC_ADD_PLUGIN([linsys_sdi])
2108   ], [
2109     AC_MSG_WARN([${LINSYS_SDI_PKG_ERRORS}.])
2110   ])
2111 ])
2112
2113 dnl
2114 dnl dvdread module: check for libdvdread
2115 dnl
2116 PKG_ENABLE_MODULES_VLC([DVDREAD], [], [dvdread > 6.0.0], [dvdread input module], [auto])
2117
2118 dnl
2119 dnl libdvdnav plugin
2120 dnl
2121 PKG_ENABLE_MODULES_VLC([DVDNAV], [], [dvdnav >= 6.0.0], [DVD with navigation input module (dvdnav)], [auto])
2122
2123 dnl
2124 dnl  Blu-ray Disc Support with libbluray
2125 dnl
2126 PKG_ENABLE_MODULES_VLC([BLURAY], [libbluray], [libbluray >= 0.6.2], (libbluray for Blu-ray disc support ) )
2127
2128 dnl
2129 dnl  OpenCV wrapper and example filters
2130 dnl
2131 PKG_ENABLE_MODULES_VLC([OPENCV], [opencv_example opencv_wrapper], [opencv > 2.0], (OpenCV (computer vision) filter), [auto])
2132
2133
2134 dnl
2135 dnl  libsmbclient plugin
2136 dnl
2137 PKG_ENABLE_MODULES_VLC([SMBCLIENT], [smbc], [smbclient], (SMB/CIFS support), [auto])
2138
2139 dnl
2140 dnl  liBDSM access module
2141 dnl
2142 AM_CONDITIONAL([HAVE_DSM], [test "$AS_TR_SH(with_dsm)" = "yes"])
2143 PKG_WITH_MODULES([DSM], [libdsm >= 0.2.0], [
2144        VLC_ADD_PLUGIN([dsm])
2145        VLC_ADD_CFLAGS([dsm], [$DSM_CFLAGS])
2146        VLC_ADD_LIBS([dsm], [$DSM_LIBS])
2147        have_dsm="yes"
2148    ],,[libdsm SMB/CIFS access/sd module], [auto])
2149 AM_CONDITIONAL([HAVE_DSM], [test "${have_dsm}" = "yes"])
2150
2151 dnl
2152 dnl sftp access support
2153 dnl
2154 PKG_ENABLE_MODULES_VLC([SFTP], [sftp], [libssh2], (support SFTP file transfer via libssh2), [auto])
2155
2156 dnl
2157 dnl nfs access support
2158 dnl
2159 PKG_ENABLE_MODULES_VLC([NFS], [nfs], [libnfs >= 1.10.0], (support nfs protocol via libnfs), [auto])
2160
2161 dnl
2162 dnl smb2 access support
2163 dnl
2164 PKG_ENABLE_MODULES_VLC([SMB2], [smb2], [libsmb2 >= 3.0.0], (support smb2 protocol via libsmb2), [auto])
2165
2166 dnl
2167 dnl  Video4Linux 2
2168 dnl
2169 AC_ARG_ENABLE([v4l2], AS_HELP_STRING([--disable-v4l2],
2170   [disable Video4Linux version 2 (default auto)]))
2171 have_v4l2="no"
2172 AS_IF([test "$enable_v4l2" != "no"], [
2173   AC_CHECK_HEADERS([linux/videodev2.h], [
2174     have_v4l2="yes"
2175   ])
2176 ])
2177 AM_CONDITIONAL([HAVE_V4L2], [test "${have_v4l2}" != "no"])
2178
2179 dnl
2180 dnl  NVDEC decoder/encoder
2181 dnl
2182 AC_ARG_ENABLE([nvdec], AS_HELP_STRING([--disable-nvdec],
2183   [disable NVDEC decoder (default auto)]))
2184 have_nvdec="no"
2185 AS_IF([test "$enable_nvdec" != "no"], [
2186   AC_CHECK_HEADERS([ffnvcodec/dynlink_loader.h], [
2187     have_nvdec="yes"
2188   ])
2189 ])
2190 AM_CONDITIONAL([HAVE_NVDEC], [test "${have_nvdec}" != "no"])
2191
2192 dnl
2193 dnl special access module for Blackmagic SDI cards
2194 dnl
2195 AC_ARG_ENABLE([decklink],
2196   AS_HELP_STRING([--disable-decklink],
2197     [disable Blackmagic DeckLink SDI input (default auto)]))
2198 AC_ARG_WITH([decklink_sdk],
2199   AS_HELP_STRING([--with-decklink-sdk=DIR],
2200     [location of Blackmagic DeckLink SDI SDK]))
2201 have_decklink=no
2202 if test "${enable_decklink}" != "no"
2203 then
2204   if test "${with_decklink_sdk}" != "no" -a -n "${with_decklink_sdk}"
2205   then
2206     VLC_ADD_CPPFLAGS([decklink decklinkoutput stream_out_sdi],[-I${with_decklink_sdk}/include])
2207   fi
2208   VLC_SAVE_FLAGS
2209   CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_decklink}"
2210   AC_LANG_PUSH([C++])
2211   AC_CHECK_HEADERS([DeckLinkAPIDispatch.cpp], [
2212       have_decklink=yes
2213       AS_IF([test "${SYS}" = "darwin"], [
2214         VLC_ADD_LIBS([decklink decklinkoutput],[-Wl,-framework,CoreFoundation])
2215       ])
2216   ], [
2217       AS_IF([test "${enable_decklink}" = "yes"], [
2218         AC_MSG_ERROR([Blackmagic DeckLink SDI include files not found!])
2219       ], [
2220         AC_MSG_WARN([Blackmagic DeckLink SDI include files not found, decklink disabled])
2221       ])
2222   ])
2223   AC_LANG_POP([C++])
2224   VLC_RESTORE_FLAGS
2225 fi
2226 AM_CONDITIONAL([HAVE_DECKLINK], [ test "${have_decklink}" != "no" ])
2227
2228
2229 dnl
2230 dnl  Built-in CD-DA and VCD module
2231 dnl
2232 AC_ARG_ENABLE([vcd],
2233   AS_HELP_STRING([--disable-vcd],
2234     [disable built-in VCD and CD-DA support (default enabled)]))
2235
2236 AC_ARG_ENABLE([libcddb],
2237   AS_HELP_STRING([--disable-libcddb],
2238     [disable CDDB for Audio CD (default enabled)]))
2239
2240 if test "${enable_vcd}" != "no" -a "${enable_winstore_app}" != "yes"
2241 then
2242   AC_MSG_CHECKING(for cdrom_msf0 in linux/cdrom.h)
2243   AC_EGREP_HEADER(cdrom_msf0,linux/cdrom.h,[
2244     AC_MSG_RESULT(yes)
2245     VLC_ADD_PLUGIN([vcd cdda])
2246   ],[
2247     AC_MSG_RESULT(no)
2248   ])
2249
2250   AC_MSG_CHECKING(for scsireq in sys/scsiio.h)
2251   AC_EGREP_HEADER(scsireq,sys/scsiio.h,[
2252     AC_MSG_RESULT(yes)
2253     VLC_ADD_PLUGIN([vcd cdda])
2254     AC_DEFINE(HAVE_SCSIREQ_IN_SYS_SCSIIO_H, 1, For NetBSD VCD support)
2255   ],[
2256     AC_MSG_RESULT(no)
2257   ])
2258
2259   AC_MSG_CHECKING(for ioc_toc_header in sys/cdio.h)
2260   AC_EGREP_HEADER(ioc_toc_header ,sys/cdio.h,[
2261     AC_MSG_RESULT(yes)
2262     VLC_ADD_PLUGIN([vcd cdda])
2263     AC_DEFINE(HAVE_IOC_TOC_HEADER_IN_SYS_CDIO_H, 1, For FreeBSD VCD support)
2264   ],[
2265     AC_MSG_RESULT(no)
2266   ])
2267
2268   if test "${SYS}" = "bsdi" -o "${SYS}" = "mingw32" -o "${SYS}" = "os2" -o "${SYS}" = "darwin"
2269   then
2270     VLC_ADD_PLUGIN([vcd cdda])
2271   fi
2272
2273   if test "$enable_libcddb" != "no"; then
2274     PKG_CHECK_MODULES(LIBCDDB, [libcddb >= 0.9.5], [
2275       HAVE_LIBCDDB=yes
2276       AC_DEFINE(HAVE_LIBCDDB, 1, [Define this if you have libcddb installed])
2277       VLC_ADD_LIBS([cdda],[$LIBCDDB_LIBS])
2278       VLC_ADD_CFLAGS([cdda],[$LIBCDDB_CFLAGS])
2279       ],:
2280       [AC_MSG_WARN([${LIBCDDB_PKG_ERRORS}: CDDB access disabled.])
2281       HAVE_LIBCDDB=no])
2282   fi
2283 fi
2284
2285 dnl
2286 dnl Linux DVB
2287 dnl
2288 AC_CACHE_CHECK([for Linux DVB version 5.1], [ac_cv_linux_dvb_5_1], [
2289   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
2290 [#include <linux/dvb/version.h>
2291 #if (DVB_API_VERSION < 5)
2292 # error Linux DVB API v3.2 and older are not supported.
2293 #endif
2294 #if (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR < 1)
2295 # error Linux DVB API v5.0 is unsupported. Please update.
2296 #endif
2297 ]])], [
2298   ac_cv_linux_dvb_5_1=yes
2299 ], [
2300   ac_cv_linux_dvb_5_1=no
2301 ])])
2302 AM_CONDITIONAL([HAVE_LINUX_DVB], [test "$ac_cv_linux_dvb_5_1" = "yes"])
2303
2304 dnl
2305 dnl  Screen capture module
2306 dnl
2307 AC_ARG_ENABLE([screen],
2308   AS_HELP_STRING([--enable-screen],
2309     [disable screen capture (default enabled)]))
2310 if test "${enable_screen}" != "no"; then
2311   if test "${SYS}" = "darwin"; then
2312     AC_CHECK_HEADERS([ApplicationServices/ApplicationServices.h], [
2313       VLC_ADD_PLUGIN([screen])
2314     ])
2315   fi
2316 fi
2317 AM_CONDITIONAL([HAVE_MAC_SCREEN], [test "${SYS}" = "darwin" -a "x${enable_screen}" != "xno"])
2318
2319 dnl
2320 dnl  VNC/RFB access module
2321 dnl
2322 PKG_ENABLE_MODULES_VLC([VNC], [vnc], [libvncclient >= 0.9.9], (VNC/rfb client support), [auto])
2323
2324 dnl  RDP/Remote Desktop access module
2325 dnl
2326 PKG_ENABLE_MODULES_VLC([FREERDP], [rdp], [freerdp >= 1.0.1], (RDP/Remote Desktop client support) )
2327
2328 dnl
2329 dnl AVFoundation
2330 AC_SUBST([have_avfoundation], ["no"])
2331 AC_ARG_ENABLE([macosx-avfoundation],
2332   AS_HELP_STRING([--enable-macosx-avfoundation], [Mac OS X avcapture (video) module (default enabled on Mac OS X)]))
2333 if test "x${enable_macosx_avfoundation}" != "xno" &&
2334   (test "${SYS}" = "darwin" || test "${enable_macosx_avfoundation}" = "yes")
2335 then
2336   SAVED_LIBS="${LIBS}"
2337   LIBS="-framework AVFoundation"
2338   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [])],[have_avfoundation=yes],[have_avfoundation=no])
2339   LIBS="${SAVED_LIBS}"
2340   if test "${have_avfoundation}" != "no"
2341   then
2342     VLC_ADD_PLUGIN([avcapture])
2343   fi
2344 fi
2345 AM_CONDITIONAL([HAVE_AVFOUNDATION], [test "${have_avfoundation}" != "no"])
2346
2347 dnl
2348 dnl  DCP plugin (using asdcplib)
2349 dnl
2350 PKG_WITH_MODULES([ASDCP], [asdcplib], [have_asdcp="yes"])
2351 AM_CONDITIONAL([HAVE_ASDCP], [test "${have_asdcp}" = "yes"])
2352
2353 dnl
2354 dnl  Demux plugins
2355 dnl
2356
2357 EXTEND_HELP_STRING([Mux/Demux plugins:])
2358
2359 dnl
2360 dnl  libdvbpsi check for ts mux/demux
2361 dnl
2362 have_dvbpsi="no"
2363 PKG_WITH_MODULES([DVBPSI], [libdvbpsi >= 1.2.0], [have_dvbpsi="yes"])
2364 AM_CONDITIONAL([HAVE_DVBPSI], [test "${have_dvbpsi}" = "yes"])
2365
2366
2367 dnl
2368 dnl  GME demux plugin
2369 dnl
2370 AC_ARG_ENABLE([gme],
2371   AS_HELP_STRING([--enable-gme],
2372     [use Game Music Emu (default auto)]))
2373 AS_IF([test "${enable_gme}" != "no"], [
2374   AC_CHECK_HEADER([gme/gme.h], [
2375     AC_CHECK_LIB([gme], [gme_identify_header], [
2376       VLC_ADD_PLUGIN([gme])
2377     ], [
2378       AC_CHECK_LIB([gme], [gme_identify_extension], [
2379          VLC_ADD_LIBS([gme], [-lstdc++ $LIBM])
2380          VLC_ADD_PLUGIN([gme])
2381       ],, [-lstdc++ $LIBM])
2382     ])
2383     VLC_ADD_LIBS([gme], [-lgme])
2384   ], [
2385     AS_IF([test "x${enable_gme}" != "x"], [
2386       AC_MSG_ERROR([GME cannot be found. Please install the development files.])
2387     ])
2388   ])
2389 ])
2390
2391
2392 dnl
2393 dnl  SIDPlay plugin
2394 dnl
2395 AC_ARG_ENABLE([sid],
2396     AS_HELP_STRING([--enable-sid],[C64 sid demux support (default auto)]))
2397 AS_IF([test "${enable_sid}" != "no"], [
2398     PKG_CHECK_MODULES(SID, [libsidplay2], [
2399         AC_LANG_PUSH(C++)
2400         oldCPPFLAGS="$CPPFLAGS"
2401         CPPFLAGS="$CPPFLAGS $SID_CFLAGS"
2402         AC_CHECK_HEADER([sidplay/builders/resid.h], [
2403             VLC_ADD_PLUGIN([sid])
2404             VLC_ADD_CFLAGS([sid], [$SID_CFLAGS])
2405             VLC_ADD_LIBS([sid], [$SID_LIBS] [-lresid-builder])
2406         ], [
2407             AS_IF([test -n "${enable_sid}"],
2408                 [AC_MSG_ERROR([${SID_PKG_ERRORS} (required for sid).])],
2409                 [AC_MSG_WARN([${SID_PKG_ERRORS} (required for sid).])]
2410                 )
2411         ])
2412         CPPFLAGS="$oldCPPFLAGS"
2413         AC_LANG_POP(C++)
2414     ], [
2415         AS_IF([test "x${enable_sid}" = "xyes"],
2416             [AC_MSG_ERROR([${SID_PKG_ERRORS} (required for sid).])],
2417             [AC_MSG_WARN([${SID_PKG_ERRORS} (required for sid).])]
2418             )
2419     ])
2420 ])
2421
2422
2423 dnl
2424 dnl  ogg demux plugin
2425 dnl
2426 PKG_ENABLE_MODULES_VLC([OGG], [mux_ogg], [ogg >= 1.0], [Ogg demux support], [auto])
2427 PKG_CHECK_MODULES(LIBVORBIS, [vorbis >= 1.1], [
2428     AC_DEFINE(HAVE_LIBVORBIS, 1, [Define to 1 if you have the libvorbis])
2429 ],[true])
2430 PKG_ENABLE_MODULES_VLC([OGG], [], [ogg >= 1.0], [Ogg demux support], [auto], [${LIBVORBIS_CFLAGS}], [${LIBVORBIS_LIBS}])
2431 if test "${enable_sout}" != "no"; then
2432 dnl Check for libshout
2433     PKG_ENABLE_MODULES_VLC([SHOUT], [access_output_shout], [shout >= 2.1], [libshout output plugin], [auto])
2434 fi
2435
2436 dnl
2437 dnl  matroska demux plugin
2438 dnl
2439 PKG_WITH_MODULES([MATROSKA], [libebml >= 1.3.6 libmatroska], [
2440        VLC_ADD_PLUGIN([mkv])
2441        VLC_ADD_CFLAGS([mkv], [$MATROSKA_CFLAGS])
2442        VLC_ADD_LIBS([mkv], [$MATROSKA_LIBS])
2443        have_matroska="yes"
2444    ],,[MKV format support], [auto])
2445 AM_CONDITIONAL([HAVE_MATROSKA], [test "${have_matroska}" = "yes"])
2446
2447 dnl
2448 dnl  modplug demux plugin
2449 dnl
2450 AC_ARG_ENABLE([mod],
2451   AS_HELP_STRING([--disable-mod],
2452     [do not use libmodplug (default auto)]))
2453 if test "${enable_mod}" != "no" ; then
2454     PKG_CHECK_MODULES(LIBMODPLUG, [libmodplug >= 0.8.9.0], [
2455           VLC_ADD_PLUGIN([mod])
2456           VLC_ADD_CXXFLAGS([mod],[$LIBMODPLUG_CFLAGS])
2457           VLC_ADD_CFLAGS([mod],[$LIBMODPLUG_CFLAGS]) #modules/demux/mod.c needs CFLAGS_mod, not CXXFLAGS_mod
2458           VLC_ADD_LIBS([mod],[$LIBMODPLUG_LIBS])
2459     ],[
2460        AS_IF([test -n "${enable_mod}"],
2461          [AC_MSG_ERROR([${LIBMODPLUG_PKG_ERRORS}.])],
2462          [AC_MSG_WARN([${LIBMODPLUG_PKG_ERRORS}.])])
2463     ])
2464 fi
2465
2466 dnl
2467 dnl  mpc demux plugin
2468 dnl
2469 AC_ARG_ENABLE([mpc],
2470   AS_HELP_STRING([--disable-mpc], [do not use libmpcdec (default auto)]))
2471 if test "${enable_mpc}" != "no"
2472 then
2473     AC_CHECK_HEADERS([mpcdec/mpcdec.h], [
2474     VLC_ADD_PLUGIN([mpc])
2475     VLC_ADD_LIBS([mpc],[-lmpcdec])])
2476 fi
2477
2478 dnl
2479 dnl  Codec plugins
2480 dnl
2481
2482 EXTEND_HELP_STRING([Codec plugins:])
2483
2484 dnl
2485 dnl shine encoder plugin
2486 dnl
2487 PKG_ENABLE_MODULES_VLC([SHINE], [], [shine >= 3.0.0], [MPEG Audio Layer 3 encoder], [auto], [], [], [])
2488
2489
2490 dnl
2491 dnl openmax il codec plugin
2492 dnl
2493 AC_ARG_ENABLE([omxil],
2494   AS_HELP_STRING([--enable-omxil], [openmax il codec module (default disabled)]))
2495 if test "${enable_omxil}" = "yes"
2496 then
2497   VLC_ADD_PLUGIN([omxil])
2498 fi
2499
2500 dnl
2501 dnl raspberry pi openmax il configuration
2502 dnl
2503 AC_ARG_ENABLE([rpi-omxil],
2504   AS_HELP_STRING([--enable-rpi-omxil], [openmax il configured for raspberry pi (default disabled)]))
2505 if test "${enable_rpi_omxil}" = "yes"
2506 then
2507   VLC_ADD_PLUGIN([omxil])
2508   VLC_ADD_CFLAGS([omxil],[-DRPI_OMX])
2509 fi
2510
2511 dnl
2512 dnl  mad plugin
2513 dnl
2514 have_mad="no"
2515 MAD_CFLAGS=""
2516 MAD_LIBS=""
2517
2518 AC_ARG_WITH(mad, AS_HELP_STRING([--with-mad=PATH], [path to libmad]), [
2519   enable_mad="yes"
2520 ], [
2521   with_mad="no"
2522 ])
2523 AS_IF([test "${with_mad}" != "no"], [
2524   MAD_CFLAGS="-I${with_mad}/include"
2525   MAD_LIBS="-L${with_mad}/lib"
2526 ])
2527
2528 AC_ARG_ENABLE([mad],
2529   AS_HELP_STRING([--enable-mad], [libmad module (default enabled)]))
2530 AS_IF([test "${enable_mad}" != "no"], [
2531   VLC_SAVE_FLAGS
2532   CPPFLAGS="${CPPFLAGS} ${MAD_CFLAGS}"
2533   LDFLAGS="${LDFLAGS} ${MAD_LIBS}"
2534   AC_CHECK_HEADERS([mad.h], [
2535     AC_CHECK_LIB([mad], [mad_bit_init], [
2536       have_mad="yes"
2537       MAD_LIBS="${MAD_LIBS} -lmad"
2538     ])
2539   ])
2540   VLC_RESTORE_FLAGS
2541   AS_IF([test -n "$enable_mad" -a "${have_mad}" = "no"], [
2542     AC_MSG_ERROR([Could not find libmad. Install it or pass --disable-mad to disable it.])
2543   ])
2544 ])
2545 AC_SUBST([MAD_CFLAGS])
2546 AC_SUBST([MAD_LIBS])
2547 AM_CONDITIONAL([HAVE_MAD], [test "${have_mad}" = "yes"])
2548
2549 dnl  mpg123 plugin
2550 dnl
2551 dnl
2552 PKG_ENABLE_MODULES_VLC([MPG123], [mpg123], [libmpg123], [libmpg123 decoder support], [auto])
2553
2554 dnl
2555 dnl gstreamer stuff
2556 dnl
2557 AC_ARG_ENABLE([gst-decode],
2558   AS_HELP_STRING([--enable-gst-decode], [GStreamer based decoding support (currently supports only video decoding) (default auto)]))
2559
2560 have_gst_decode="no"
2561 AS_IF([test "${enable_gst_decode}" != "no"], [
2562   PKG_CHECK_MODULES([GST_APP], [gstreamer-app-1.0], [
2563     PKG_CHECK_MODULES([GST_VIDEO], [gstreamer-video-1.0], [
2564       have_gst_decode="yes"
2565     ], [
2566       AC_MSG_WARN([${GST_VIDEO_PKG_ERRORS}. GStreamer decoder module will not be built.])
2567     ])
2568   ], [
2569     AC_MSG_WARN([${GST_APP_PKG_ERRORS}. GStreamer modules will not be built.])
2570   ])
2571 ])
2572 AM_CONDITIONAL([HAVE_GST_DECODE], [test "${have_gst_decode}" = "yes"])
2573
2574 dnl
2575 dnl  avcodec decoder/encoder plugin
2576 dnl
2577 AC_ARG_ENABLE([merge-ffmpeg],
2578 AS_HELP_STRING([--enable-merge-ffmpeg], [merge FFmpeg-based plugins (default disabled)]),, [
2579   enable_merge_ffmpeg="no"
2580 ])
2581 AM_CONDITIONAL([MERGE_FFMPEG], [test "$enable_merge_ffmpeg" != "no"])
2582
2583 AC_MSG_CHECKING([for libavutil variant])
2584 PKG_CHECK_EXISTS([libavutil], [
2585   libavutil_version="$(${PKG_CONFIG} --modversion libavutil)"
2586   libavutil_micro="${libavutil_version##*.}"
2587   AS_IF([test ${libavutil_micro} -le 99], [
2588     avfork="libav"
2589   ], [
2590     avfork="ffmpeg"
2591   ])
2592 ], [
2593   avfork="none"
2594 ])
2595 AC_MSG_RESULT([${avfork}])
2596
2597 AC_ARG_ENABLE([avcodec],
2598 AS_HELP_STRING([--enable-avcodec], [libavcodec codec (default enabled)]))
2599 AS_IF([test "${enable_avcodec}" != "no"], [
2600   dnl We need >=57.16.0 from libav or >=57.37.100 from ffmpeg
2601   case "${avfork}" in
2602     libav) av_codec_ver="57.16.0" ;;
2603     dnl 05f66706d182eb0c36af54d72614bf4c33e957a9  includes libavutil 55.9.0
2604     ffmpeg) av_codec_ver="57.37.100" ;;
2605     dnl 7fc329e2dd6226dfecaa4a1d7adf353bf2773726  include libavutil 55.22.101
2606     *) AC_MSG_ERROR([Missing libav or FFmpeg. Pass --disable-avcodec to ignore this error.])
2607   esac
2608   PKG_CHECK_MODULES(AVCODEC,[libavcodec >= ${av_codec_ver} libavutil >= 55.9.0], [
2609     VLC_SAVE_FLAGS
2610     CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
2611     CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
2612     AC_CHECK_HEADERS([libavcodec/avcodec.h])
2613     AC_CHECK_HEADERS([libavutil/avutil.h])
2614     VLC_RESTORE_FLAGS
2615     have_avcodec="yes"
2616   ],[
2617     AC_MSG_ERROR([${AVCODEC_PKG_ERRORS}. Pass --disable-avcodec to ignore this error.])
2618   ])
2619 ], [
2620   have_avcodec="no"
2621 ])
2622 AM_CONDITIONAL([HAVE_AVCODEC], [test "${have_avcodec}" != "no"])
2623
2624 dnl
2625 dnl libva needs avcodec
2626 dnl
2627 AC_ARG_ENABLE([libva],
2628   AS_HELP_STRING([--enable-libva], [VAAPI GPU decoding support (libVA) (default auto)]))
2629
2630 AS_IF([test "${enable_libva}" = "yes" -a "${have_avcodec}" != "yes" ], [
2631   AC_MSG_ERROR([--enable-libva and --disable-avcodec options are mutually exclusive. Use --enable-avcodec.])
2632 ])
2633
2634 have_vaapi="no"
2635 have_vaapi_drm="no"
2636 have_vaapi_x11="no"
2637 have_vaapi_wl="no"
2638 AS_IF([test "${enable_libva}" != "no"], [
2639   PKG_CHECK_MODULES([LIBVA], [libva >= 1.0], [
2640     have_vaapi="yes"
2641   ], [
2642     AS_IF([test -n "${enable_libva}"], [
2643       AC_MSG_ERROR([${LIBVA_PKG_ERRORS}.])
2644     ], [
2645       AC_MSG_WARN([${LIBVA_PKG_ERRORS}.])
2646     ])
2647   ])
2648   PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm], [
2649     have_vaapi_drm="yes"
2650   ], [
2651     AC_MSG_WARN([${LIBVA_DRM_PKG_ERRORS}.])
2652   ])
2653   PKG_CHECK_MODULES(LIBVA_X11, [libva-x11], [
2654     have_vaapi_x11="yes"
2655   ], [
2656     AC_MSG_WARN([${LIBVA_X11_PKG_ERRORS}.])
2657   ])
2658   PKG_CHECK_MODULES(LIBVA_WL, [libva-wayland], [
2659     have_vaapi_wl="yes"
2660   ], [
2661     AC_MSG_WARN([${LIBVA_WL_PKG_ERRORS}.])
2662   ])
2663 ])
2664 AM_CONDITIONAL([HAVE_VAAPI], [test "${have_vaapi}" = "yes"])
2665 AM_CONDITIONAL([HAVE_VAAPI_DRM], [test "${have_vaapi_drm}" = "yes"])
2666 AM_CONDITIONAL([HAVE_VAAPI_X11], [test "${have_vaapi_x11}" = "yes"])
2667 AM_CONDITIONAL([HAVE_VAAPI_WL], [test "${have_vaapi_wl}" = "yes"])
2668
2669 have_avcodec_vaapi="no"
2670 AS_IF([test "${have_vaapi}" = "yes" -a "${have_avcodec}" = "yes"], [
2671   VLC_SAVE_FLAGS
2672   CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
2673   CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
2674   AC_CHECK_HEADERS([libavcodec/vaapi.h], [
2675     AC_MSG_NOTICE([VA API acceleration activated])
2676     have_avcodec_vaapi="yes"
2677   ],[
2678     AS_IF([test -n "${enable_libva}"], [
2679       AC_MSG_ERROR([libva is present but libavcodec/vaapi.h is missing])
2680     ], [
2681       AC_MSG_WARN([libva is present but libavcodec/vaapi.h is missing ])
2682     ])
2683   ])
2684   VLC_RESTORE_FLAGS
2685 ])
2686 AM_CONDITIONAL([HAVE_AVCODEC_VAAPI], [test "${have_avcodec_vaapi}" = "yes"])
2687
2688 dnl
2689 dnl dxva2 needs avcodec
2690 dnl
2691 AC_ARG_ENABLE([dxva2],
2692   AS_HELP_STRING([--enable-dxva2], [DxVA2 GPU decoding support (default auto)]))
2693
2694 have_avcodec_dxva2="no"
2695 AS_IF([test "${enable_dxva2}" != "no"], [
2696   if test "${SYS}" = "mingw32"; then
2697   AS_IF([test "x${have_avcodec}" = "xyes"], [
2698     AC_CHECK_HEADERS([dxva2api.h],
2699       [
2700         AC_CHECK_HEADERS([libavcodec/dxva2.h], [
2701            AC_MSG_NOTICE([DxVA2 acceleration activated])
2702            have_avcodec_dxva2="yes"
2703         ],[
2704     AS_IF([test "${enable_dxva2}" = "yes"],
2705           [AC_MSG_ERROR([dxva2 is present but libavcodec/dxva2.h is missing])],
2706               [AC_MSG_WARN([dxva2 is present but libavcodec/dxva2.h is missing ])])
2707         ], [#undef _WIN32_WINNT
2708             /* DXVA2 is only available in Vista and above */
2709             #define _WIN32_WINNT 0x600])
2710       ],[
2711     AS_IF([test "${enable_dxva2}" = "yes"],
2712               [AC_MSG_ERROR([Could not find required dxva2api.h])],
2713               [AC_MSG_WARN([dxva2api.h not found])])
2714       ],[#include <d3d9.h>])
2715   ],[
2716     AS_IF([test "x${enable_dxva2}" != "x"], [
2717       AC_MSG_ERROR([--enable-dxva2 and --disable-avcodec options are mutually exclusive.])
2718     ])
2719   ])
2720   fi
2721 ])
2722 AM_CONDITIONAL([HAVE_AVCODEC_DXVA2], [test "${have_avcodec_dxva2}" = "yes"])
2723
2724 dnl
2725 dnl d3d11va needs avcodec
2726 dnl
2727 AC_ARG_ENABLE([d3d11va],
2728   AS_HELP_STRING([--enable-d3d11va], [D3D11 GPU decoding support (default auto)]))
2729
2730 have_avcodec_d3d11va="no"
2731 AS_IF([test "${enable_d3d11va}" != "no"], [
2732   if test "${SYS}" = "mingw32"; then
2733   AS_IF([test "x${have_avcodec}" = "xyes"], [
2734         AC_CHECK_TYPES([ID3D11VideoDecoder],
2735           [
2736             AC_CHECK_HEADERS([dxva2api.h],
2737               [
2738                 AC_CHECK_HEADERS([libavcodec/d3d11va.h], [
2739                    AC_MSG_NOTICE([D3D11 acceleration activated])
2740                    AC_DEFINE([HAVE_AVCODEC_D3D11VA], [1], [Define if the d3d11va module is built])
2741                    have_avcodec_d3d11va="yes"
2742                 ],[
2743                   AS_IF([test "${enable_d3d11va}" = "yes"],
2744                     [AC_MSG_ERROR([d3d11va is present but libavcodec/d3d11va.h is missing])],
2745                         [AC_MSG_WARN([d3d11va is present but libavcodec/d3d11va.h is missing ])])
2746                   ], [#undef _WIN32_WINNT
2747                       /* D3D11 is only available in Vista and above */
2748                       #define _WIN32_WINNT 0x600])
2749                   ],[
2750                     AS_IF([test "${enable_d3d11va}" = "yes"],
2751                           [AC_MSG_ERROR([Could not find required dxva2api.h])],
2752                           [AC_MSG_WARN([dxva2api.h not found])])
2753                   ],[#include <d3d9.h>])
2754           ],[
2755             AS_IF([test "${enable_d3d11va}" = "yes"],
2756                   [AC_MSG_ERROR([Could not find required ID3D11VideoDecoder in d3d11.h])],
2757                   [AC_MSG_WARN([ID3D11VideoDecoder not found])])
2758           ], [#include <d3d11.h>])
2759   ],[
2760     AS_IF([test "x${enable_d3d11va}" != "x"], [
2761       AC_MSG_ERROR([--enable-d3d11va and --disable-avcodec options are mutually exclusive.])
2762     ])
2763   ])
2764   fi
2765 ])
2766 AM_CONDITIONAL([HAVE_AVCODEC_D3D11VA], [test "${have_avcodec_d3d11va}" = "yes"])
2767
2768 dnl
2769 dnl DXGI debug
2770 dnl
2771 AC_CHECK_HEADERS([dxgidebug.h dxgi1_6.h d3d11_4.h])
2772
2773 dnl
2774 dnl IApplicationData2
2775 dnl
2776 have_iapplication_data2="no"
2777 AC_CHECK_TYPES([IApplicationData2],[],[],[#include <windows.storage.h>])
2778
2779 dnl
2780 dnl DirectComposition
2781 dnl
2782 AC_LANG_PUSH([C++])
2783 AC_CHECK_HEADERS([dcomp.h], [
2784     have_dcomp="yes"
2785 ], [], [
2786   #include <windows.h>
2787 ])
2788 AC_LANG_POP([C++])
2789 AM_CONDITIONAL([HAVE_DCOMP], [test "${have_dcomp}" = "yes"])
2790
2791
2792 dnl
2793 dnl  avformat demuxer/muxer plugin
2794 dnl
2795
2796 AC_ARG_ENABLE([avformat],
2797 AS_HELP_STRING([--enable-avformat], [libavformat containers (default enabled)]),, [
2798   enable_avformat="${have_avcodec}"
2799 ])
2800 have_avformat="no"
2801 AS_IF([test "${enable_avformat}" != "no"], [
2802   PKG_CHECK_MODULES(AVFORMAT,[libavformat >= 53.21.0 libavcodec libavutil], [
2803       have_avformat="yes"
2804       VLC_SAVE_FLAGS
2805       CPPFLAGS="${CPPFLAGS} ${AVFORMAT_CFLAGS}"
2806       CFLAGS="${CFLAGS} ${AVFORMAT_CFLAGS}"
2807       AC_CHECK_HEADERS([libavformat/avformat.h libavformat/avio.h])
2808       AC_CHECK_HEADERS([libavcodec/avcodec.h])
2809       AC_CHECK_HEADERS([libavutil/avutil.h])
2810       AS_IF([test "$enable_merge_ffmpeg" = "no"], [
2811         have_avformat="no"
2812       ])
2813       VLC_RESTORE_FLAGS
2814     ],[
2815       AC_MSG_ERROR([${AVFORMAT_PKG_ERRORS}. Pass --disable-avformat to ignore this error.])
2816   ])
2817 ])
2818 AM_CONDITIONAL([HAVE_AVFORMAT], [test "${enable_avformat}" != "no"])
2819
2820 dnl
2821 dnl  swscale image scaling and conversion plugin
2822 dnl
2823
2824 AC_ARG_ENABLE([swscale],
2825   AS_HELP_STRING([--enable-swscale],[libswscale image scaling and conversion
2826           (default enabled)]))
2827 if test "${enable_swscale}" != "no"
2828 then
2829   PKG_CHECK_MODULES(SWSCALE,[libswscale >= 0.5.0],
2830     [
2831       VLC_SAVE_FLAGS
2832       CPPFLAGS="${CPPFLAGS} ${SWSCALE_CFLAGS}"
2833       CFLAGS="${CFLAGS} ${SWSCALE_CFLAGS}"
2834       AC_CHECK_HEADERS([libswscale/swscale.h])
2835       AC_CHECK_HEADERS([libavutil/avutil.h])
2836       VLC_ADD_PLUGIN([swscale])
2837       VLC_ADD_LIBS([swscale],[$SWSCALE_LIBS])
2838       VLC_ADD_CFLAGS([swscale],[$SWSCALE_CFLAGS])
2839       AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
2840         VLC_ADD_LIBS([swscale],[${ac_cv_ld_bsymbolic}])
2841       ])
2842       VLC_RESTORE_FLAGS
2843     ],[
2844       AC_MSG_ERROR([${SWSCALE_PKG_ERRORS}. Pass --disable-swscale to ignore this error. Proper software scaling and some video chroma conversion will be missing.])
2845   ])
2846 fi
2847
2848 dnl
2849 dnl  postproc plugin
2850 dnl
2851
2852 AC_ARG_ENABLE([postproc],
2853 AS_HELP_STRING([--enable-postproc], [libpostproc image post-processing (default auto)]))
2854 if test "${enable_postproc}" != "no"
2855 then
2856   PKG_CHECK_MODULES(POSTPROC,[libpostproc libavutil],
2857     [
2858       VLC_SAVE_FLAGS
2859       CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
2860       CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
2861       AC_CHECK_HEADERS([postproc/postprocess.h])
2862       VLC_ADD_PLUGIN([postproc])
2863       VLC_RESTORE_FLAGS
2864     ],[
2865       AC_MSG_WARN([${POSTPROC_PKG_ERRORS}.])
2866   ])
2867 fi
2868
2869 dnl
2870 dnl  faad decoder plugin
2871 dnl
2872 PKG_WITH_MODULES([FAAD],[faad2],
2873   VLC_ADD_PLUGIN(faad)
2874   VLC_ADD_CFLAGS(faad, [$FAAD_CFLAGS])
2875   VLC_ADD_LIBS(faad,[$FAAD_LIBS]),
2876   AS_IF([test "x${enable_faad}" != "xno"],[
2877     AC_CHECK_HEADERS([neaacdec.h], [
2878       AC_CHECK_LIB([faad], [NeAACDecOpen],[
2879                       VLC_ADD_PLUGIN([faad])
2880                       VLC_ADD_LIBS([faad],[-lfaad])
2881                       found_faad="yes"
2882                    ],[], [$LIBM])
2883     ])
2884     AS_IF([test "x${found_faad}" != "xyes"],
2885         AS_IF([test "x${enable_faad}" == "xyes"],
2886             AC_MSG_ERROR([${FAAD_PKG_ERRORS}.]),
2887             AC_MSG_WARN([${FAAD_PKG_ERRORS}.]))
2888     )
2889   ]),
2890 [faad AAC audio decoder])
2891
2892 dnl
2893 dnl  AOM encoder/decoder plugin
2894 dnl
2895 PKG_ENABLE_MODULES_VLC([AOM], [], [aom], [libaom AV1 encoder and decoder (default auto)])
2896
2897 dnl
2898 dnl  Rav1e encoder plugin
2899 dnl
2900 PKG_ENABLE_MODULES_VLC([RAV1E], [], [rav1e], [rav1e encoder module codec (default auto)])
2901
2902 dnl
2903 dnl  Dav1d decoder plugin
2904 dnl
2905 PKG_ENABLE_MODULES_VLC([DAV1D], [], [dav1d >= 0.5.0], [AV1 decoder (default auto)])
2906
2907 dnl
2908 dnl libvpx decoder plugin
2909 dnl
2910 AC_ARG_ENABLE([vpx],
2911     AS_HELP_STRING([--enable-vpx],[libvpx VP8/VP9 encoder and decoder (default auto)]))
2912 AS_IF([test "${enable_vpx}" != "no"],[
2913     PKG_CHECK_MODULES([VPX], [vpx >= 1.5.0], [
2914         VLC_ADD_PLUGIN([vpx])
2915         VLC_ADD_CPPFLAGS([vpx], [${VPX_CFLAGS}])
2916         VLC_ADD_LIBS([vpx], [${VPX_LIBS}])
2917         AC_CHECK_LIB([vpx],[vpx_codec_vp8_dx], [
2918             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP8_DECODER])
2919         ], [], [${VPX_LIBS}])
2920         AC_CHECK_LIB([vpx],[vpx_codec_vp9_dx], [
2921             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP9_DECODER])
2922         ], [], [${VPX_LIBS}])
2923         AC_CHECK_LIB([vpx],[vpx_codec_vp8_cx], [
2924             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP8_ENCODER])
2925         ], [], [${VPX_LIBS}])
2926         AC_CHECK_LIB([vpx],[vpx_codec_vp9_cx], [
2927             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP9_ENCODER])
2928         ], [], [${VPX_LIBS}])
2929     ], [
2930     AS_IF([test "${enable_vpx}" = "yes"],[
2931         AC_MSG_ERROR([libvpx 1.5.0 or higher was not found])
2932     ])])
2933 ])
2934
2935 dnl
2936 dnl twolame encoder plugin
2937 dnl
2938 PKG_ENABLE_MODULES_VLC([TWOLAME], [], [twolame], [MPEG Audio Layer 2 encoder], [auto], [], [], [ -DLIBTWOLAME_STATIC])
2939
2940 dnl
2941 dnl fdk-aac encoder plugin
2942 dnl
2943 PKG_ENABLE_MODULES_VLC([FDKAAC], [], [fdk-aac], [FDK-AAC encoder], [disabled])
2944
2945
2946 dnl
2947 dnl A52/AC3 decoder plugin
2948 dnl
2949 AC_ARG_ENABLE([a52],
2950   AS_HELP_STRING([--enable-a52], [A/52 support with liba52 (default enabled)]))
2951 if test "${enable_a52}" != "no"
2952 then
2953   AC_ARG_WITH([a52],
2954     AS_HELP_STRING([--with-a52=PATH], [a52 headers and libraries]))
2955     if test -z "${with_a52}"
2956     then
2957       LDFLAGS_test=""
2958       CPPFLAGS_test=""
2959     else
2960       LDFLAGS_test="-L${with_a52}/lib"
2961       CPPFLAGS_test="-I${with_a52}/include"
2962     fi
2963     VLC_SAVE_FLAGS
2964     CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_test} ${CPPFLAGS_a52}"
2965     LDFLAGS="${LDFLAGS} ${LDFLAGS_test} ${LIBS_a52}"
2966     AC_CHECK_HEADERS([a52dec/a52.h], [
2967       AC_CHECK_LIB([a52], [a52_free], [
2968         VLC_ADD_PLUGIN([a52])
2969         VLC_ADD_LIBS([a52],[${LDFLAGS_test} -la52 $LIBM])
2970         VLC_ADD_CPPFLAGS([a52],[${CPPFLAGS_test}])
2971       ],[
2972         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.])
2973         ], [$LIBM])
2974     ],[
2975       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.])
2976     ])
2977     VLC_RESTORE_FLAGS
2978 fi
2979
2980 dnl
2981 dnl DTS Coherent Acoustics decoder plugin
2982 dnl
2983 PKG_ENABLE_MODULES_VLC([DCA], [dca], [libdca >= 0.0.5], [DTS Coherent Acoustics support with libdca], [auto])
2984
2985 dnl
2986 dnl  Flac plugin
2987 dnl
2988 PKG_ENABLE_MODULES_VLC([FLAC], [], [flac], [libflac decoder/encoder support], [auto])
2989
2990 dnl
2991 dnl  Libmpeg2 plugin
2992 dnl
2993 PKG_ENABLE_MODULES_VLC([LIBMPEG2], [], [libmpeg2 > 0.3.2], [libmpeg2 decoder support], [auto])
2994
2995 dnl
2996 dnl  Vorbis plugin
2997 dnl
2998 PKG_ENABLE_MODULES_VLC([VORBIS], [], [ogg vorbis >= 1.1 vorbisenc >= 1.1], [Vorbis decoder and encoder], [auto])
2999
3000 dnl
3001 dnl  Tremor plugin
3002 dnl
3003 AC_ARG_ENABLE([tremor],
3004   AS_HELP_STRING([--enable-tremor], [Tremor decoder support (default disabled)]))
3005 if test "${enable_tremor}" = "yes"
3006 then
3007   AC_CHECK_HEADERS([tremor/ivorbiscodec.h], [
3008     VLC_ADD_PLUGIN([tremor])
3009    ],[])
3010 fi
3011
3012 dnl
3013 dnl  Speex plugins
3014 dnl
3015 PKG_ENABLE_MODULES_VLC([SPEEX], [], [ogg speex >= 1.0.5], [Speex support], [auto])
3016 have_speexdsp="no"
3017 AS_IF([test "${enable_speex}" != "no"], [
3018   PKG_CHECK_MODULES([SPEEXDSP], [speexdsp], [
3019     have_speexdsp="yes"
3020   ], [
3021     AC_MSG_WARN([${SPEEXDSP_PKG_ERRORS}.])
3022   ])
3023 ])
3024 AM_CONDITIONAL([HAVE_SPEEXDSP], [test "$have_speexdsp" = "yes"])
3025
3026 dnl
3027 dnl  RNNoise plugin - Recurrent neural network for audio noise reduction
3028 dnl
3029 PKG_ENABLE_MODULES_VLC([RNNOISE], [], [rnnoise], [Rnnoise denoiser], [auto])
3030
3031 dnl
3032 dnl  Opus plugin
3033 dnl
3034 PKG_ENABLE_MODULES_VLC([OPUS], [], [ogg opus >= 1.0.3], [Opus support], [auto])
3035
3036 dnl
3037 dnl  Ambisonic channel mixer and binauralizer plugin
3038 dnl
3039 PKG_ENABLE_MODULES_VLC([SPATIALAUDIO], [], [spatialaudio], [Ambisonic channel mixer and binauralizer], [auto])
3040
3041 dnl
3042 dnl  theora decoder plugin
3043 dnl
3044 PKG_ENABLE_MODULES_VLC([THEORA], [], [ogg theoradec >= 1.0 theoraenc], [experimental theora codec], [auto])
3045
3046 dnl
3047 dnl  OggSpots decoder plugin
3048 dnl
3049 PKG_ENABLE_MODULES_VLC([OGGSPOTS], [], [ogg], [experimental OggSpots codec], [auto])
3050
3051 dnl
3052 dnl  Daala decoder plugin
3053 dnl
3054 PKG_ENABLE_MODULES_VLC([DAALA], [], [daaladec daalaenc], [experimental daala codec], [disabled])
3055
3056 dnl
3057 dnl  schroedinger decoder plugin (for dirac format video)
3058 dnl
3059 PKG_ENABLE_MODULES_VLC([SCHROEDINGER], [], [schroedinger-1.0 >= 1.0.10], [dirac decoder and encoder using schroedinger], [auto])
3060
3061 dnl
3062 dnl  PNG decoder module
3063 dnl
3064 AC_ARG_ENABLE([png],
3065   AS_HELP_STRING([--enable-png], [PNG support (default enabled)]))
3066 AS_IF([test "${enable_png}" != "no"], [
3067 AC_CHECK_HEADERS([png.h], [
3068   VLC_SAVE_FLAGS
3069   LDFLAGS="${LDFLAGS} -lz $LIBM"
3070   AC_CHECK_LIB([png], [png_set_alpha_mode], [
3071     VLC_ADD_PLUGIN([png])
3072   ], [], [-lz $LIBM])
3073   VLC_RESTORE_FLAGS
3074   ])
3075 ])
3076
3077 dnl
3078 dnl  JPEG decoder module
3079 dnl
3080 AC_ARG_ENABLE([jpeg],
3081   AS_HELP_STRING([--enable-jpeg], [JPEG support (default enabled)]))
3082 AS_IF([test "${enable_jpeg}" != "no"], [
3083 AC_CHECK_HEADERS([jpeglib.h], [
3084   VLC_ADD_PLUGIN([jpeg])
3085   ])
3086 ])
3087
3088 dnl
3089 dnl  BPG decoder module
3090 dnl
3091 AC_ARG_ENABLE([bpg],
3092   AS_HELP_STRING([--enable-bpg], [BPG support (default disabled)]))
3093 AS_IF([test "${enable_bpg}" != "no"], [
3094 AC_CHECK_HEADERS([libbpg.h], [
3095   VLC_ADD_PLUGIN([bpg])
3096   ])
3097 ])
3098
3099 dnl
3100 dnl H262 encoder plugin (lib262)
3101 dnl
3102 AC_ARG_ENABLE([x262],
3103   AS_HELP_STRING([--enable-x262], [H262 encoding support with static libx262 (default disabled)]))
3104 if test "${enable_x262}" != "no"; then
3105     PKG_CHECK_MODULES(X262, x262, [
3106         VLC_ADD_PLUGIN([x262])
3107         VLC_ADD_LDFLAGS([x262],[${X262_LIBS}])
3108         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3109           VLC_ADD_LIBS([x262],[${av_cv_ld_bsymbolic}])
3110         ])
3111         VLC_ADD_CFLAGS([x262],[${X262_CFLAGS}])
3112         if echo ${X262_LIBS} |grep -q 'pthreadGC2'; then
3113           VLC_ADD_CFLAGS([x262], [-DPTW32_STATIC_LIB])
3114         fi
3115     ], [
3116        if test "${enable_x262}" = "yes"; then
3117         AC_MSG_ERROR([x262 module doesn't work without staticly compiled libx262.a])
3118        fi
3119     ])
3120 fi
3121
3122 dnl x265 encoder
3123 PKG_ENABLE_MODULES_VLC([X265],, [x265], [HEVC/H.265 encoder], [auto])
3124
3125 dnl
3126 dnl H264 encoder plugin (using libx264)
3127 dnl
3128 AC_ARG_ENABLE([x264],
3129   AS_HELP_STRING([--enable-x264], [H264 encoding support with libx264 (default enabled)]))
3130 if test "${enable_x264}" != "no"; then
3131       PKG_CHECK_MODULES(X264,x264 >= 0.148, [
3132         VLC_ADD_PLUGIN([x264])
3133         VLC_ADD_LIBS([x264],[${X264_LIBS}])
3134
3135         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3136           VLC_ADD_LDFLAGS([x264],[${ac_cv_ld_bsymbolic}])
3137         ])
3138
3139         VLC_ADD_CFLAGS([x264],[${X264_CFLAGS}])
3140         if echo ${X264_LIBS} |grep -q 'pthreadGC2'; then
3141           VLC_ADD_CFLAGS([x264], [-DPTW32_STATIC_LIB])
3142         fi
3143       ],[
3144         if test "${enable_x264}" = "yes"; then
3145             AC_MSG_ERROR([${X264_PKG_ERRORS}: you may get it from http://www.videolan.org/x264.html])
3146           fi
3147       ])
3148 fi
3149
3150 dnl
3151 dnl H264 encoder plugin (libx264 > 153)
3152 dnl
3153 AC_ARG_ENABLE([x26410b],
3154   AS_HELP_STRING([--enable-x26410b], [H264 10-bit encoding support with libx264 (default enabled)]))
3155 if test "${enable_x26410b}" != "no"; then
3156       PKG_CHECK_MODULES(X26410b,x264 >= 0.153, [
3157         VLC_ADD_PLUGIN([x26410b])
3158         VLC_ADD_LIBS([x26410b],[${X264_LIBS}])
3159
3160         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3161           VLC_ADD_LDFLAGS([x26410b],[${ac_cv_ld_bsymbolic}])
3162         ])
3163
3164         VLC_ADD_CFLAGS([x26410b],[${X264_CFLAGS}])
3165         if echo ${X264_LIBS} |grep -q 'pthreadGC2'; then
3166           VLC_ADD_CFLAGS([x26410b], [-DPTW32_STATIC_LIB])
3167         fi
3168       ],[
3169         if test "${enable_x26410b}" = "yes"; then
3170             AC_MSG_ERROR([${X264_PKG_ERRORS}: you may get it from http://www.videolan.org/x264.html])
3171           fi
3172       ])
3173 fi
3174
3175
3176 dnl
3177 dnl Intel QuickSync (aka MediaSDK) H264/H262 encoder
3178 dnl
3179 PKG_ENABLE_MODULES_VLC([MFX], [qsv], [libmfx], [Intel QuickSync MPEG4-Part10/MPEG2 (aka H.264/H.262) encoder], [auto])
3180
3181 dnl
3182 dnl libfluidsynth (MIDI synthetizer) plugin
3183 dnl
3184 PKG_ENABLE_MODULES_VLC([FLUIDSYNTH], [], [fluidsynth >= 1.1.2], [MIDI synthetiser with libfluidsynth], [auto])
3185 PKG_ENABLE_MODULES_VLC([FLUIDLITE], [fluidsynth], [fluidlite], [MIDI synthetiser with libfluidsynth], [auto])
3186 AC_CHECK_HEADERS([fluidlite.h], [AC_SUBST([FLUIDSYNTH_LIBS], ${FLUIDLITE_LIBS})])
3187
3188 dnl
3189 dnl Teletext Modules
3190 dnl vbi decoder plugin (using libzbvi)
3191 dnl telx module
3192 dnl uncompatible
3193 dnl
3194 AC_ARG_ENABLE([zvbi],
3195   AS_HELP_STRING([--enable-zvbi],[VBI (inc. Teletext) decoding support with
3196                   libzvbi (default enabled)]))
3197 AC_ARG_ENABLE([telx],
3198   AS_HELP_STRING([--enable-telx],[Teletext decoding module (conflicting with
3199                   zvbi) (default enabled if zvbi is absent)]))
3200
3201 AS_IF( [test "${enable_zvbi}" != "no"],[
3202     PKG_CHECK_MODULES(ZVBI, [zvbi-0.2 >= 0.2.28],
3203         [
3204           VLC_ADD_PLUGIN([zvbi])
3205           AC_DEFINE(ZVBI_COMPILED, 1, [Define if the zvbi module is built])
3206           have_zvbi="yes"
3207           AS_IF( [test "${enable_telx}" = "yes"],[
3208                   AC_MSG_WARN([The zvbi and telx modules are incompatible. Using zvbi.])
3209                   ])
3210         ],[
3211           AC_MSG_WARN([${ZVBI_PKG_ERRORS}. Enabling the telx module instead.])
3212         ])
3213     ])
3214 AM_CONDITIONAL([HAVE_ZVBI], [test "x${have_zvbi}" = x"yes"])
3215
3216 AS_IF( [test "${enable_telx}" != "no" ],[
3217   VLC_ADD_PLUGIN([telx])
3218   have_telx="yes"
3219   AC_DEFINE(TELX_COMPILED, 1, [Define if the telx module is built])
3220   ])
3221 AM_CONDITIONAL([HAVE_TELX], [test "x${have_telx}" = x"yes"])
3222
3223 dnl
3224 dnl ARIB subtitles rendering module
3225 dnl
3226 AC_ARG_ENABLE([aribsub],
3227   AS_HELP_STRING([--enable-aribsub],[ARIB Subtitles support (default enabled)]))
3228 AS_IF( [test "${enable_aribsub}" != "no" ],[
3229   PKG_CHECK_MODULES(ARIBB24, [aribb24 >= 1.0.1], [
3230       have_aribb24="yes"
3231       VLC_ADD_PLUGIN([aribsub])
3232       VLC_ADD_LIBS([aribsub],[-laribb24])
3233       AC_DEFINE(HAVE_ARIBB24, 1, [Define if libaribb24 is available.])
3234     ],[
3235       AC_MSG_WARN(Library [aribb24] needed for [aribsub] was not found)
3236       have_aribb24="no"
3237   ])
3238 ])
3239 AM_CONDITIONAL([HAVE_ARIBB24], [test x"${have_aribb24}" = x"yes"])
3240
3241 dnl
3242 dnl ARIB B25
3243 dnl
3244 PKG_ENABLE_MODULES_VLC([ARIBB25], [aribcam], [aribb25 >= 0.2.6], [ARIB STD-B25], [auto])
3245
3246 dnl
3247 dnl  kate decoder plugin
3248 dnl
3249 PKG_ENABLE_MODULES_VLC([KATE], [], [kate >= 0.3.0], [kate codec], [auto])
3250
3251 dnl
3252 dnl  tiger rendering for kate decoder plugin
3253 dnl
3254 AC_ARG_ENABLE([tiger],
3255 AS_HELP_STRING([--enable-tiger], [Tiger rendering library for Kate streams (default auto)]))
3256 AS_IF([test "${enable_tiger}" != "no"], [
3257   PKG_CHECK_MODULES(TIGER,[tiger >= 0.3.1], [
3258       AC_DEFINE(HAVE_TIGER, 1, [Define if libtiger is available.])],[
3259         AS_IF([test -n "${enable_tiger}"], [
3260           AC_MSG_ERROR([${TIGER_PKG_ERRORS}.])
3261         ])
3262   ])
3263 ])
3264
3265 dnl
3266 dnl  check if we can build the css selector engine
3267 dnl
3268 AC_ARG_ENABLE([css],
3269 AS_HELP_STRING([--enable-css], [CSS selector engine (default auto)]))
3270 AS_IF([test "${enable_css}" != "no"], [
3271   with_css="yes"
3272   AC_DEFINE(HAVE_CSS, 1, [Define if CSS engine is built])
3273 ])
3274 AM_CONDITIONAL([ENABLE_CSS], [test "${with_css}" = "yes"])
3275
3276
3277 dnl
3278 dnl  Video plugins
3279 dnl
3280
3281 EXTEND_HELP_STRING([Video plugins:])
3282
3283 dnl
3284 dnl  libplacebo support
3285 dnl
3286 AC_ARG_ENABLE([libplacebo],
3287   AS_HELP_STRING([--disable-libplacebo],
3288       [disable libplacebo support (default auto)]))
3289
3290 AS_IF([test "$enable_libplacebo" != "no"], [
3291   PKG_CHECK_MODULES([LIBPLACEBO], [libplacebo >= 0.5], [
3292     AC_DEFINE([HAVE_LIBPLACEBO], [1], [Define to 1 if libplacebo is enabled.])
3293     PKG_CHECK_MODULES([LIBPLACEBO], [libplacebo >= 1.7],
3294       [have_libplacebo_vk="yes"], [have_libplacebo_vk="no"])
3295   ], [
3296     AS_IF([test -n "${enable_libplacebo}"], [
3297       AC_MSG_ERROR([${LIBPLACEBO_PKG_ERRORS}.])
3298     ])
3299     enable_libplacebo="no"
3300   ])
3301 ])
3302 AM_CONDITIONAL([HAVE_LIBPLACEBO], [test "$enable_libplacebo" != "no"])
3303
3304 dnl
3305 dnl  OpenGL
3306 dnl
3307 PKG_CHECK_MODULES([EGL], [egl], [
3308   have_egl="yes"
3309 ], [
3310   have_egl="no"
3311 ])
3312 AM_CONDITIONAL([HAVE_EGL], [test "${have_egl}" = "yes"])
3313
3314 have_gl="no"
3315 PKG_CHECK_MODULES([GL], [gl], [
3316   have_gl="yes"
3317 ], [
3318   AC_MSG_CHECKING([for OpenGL])
3319   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3320 #ifdef _WIN32
3321 # include <GL/glew.h>
3322 #endif
3323 #include <GL/gl.h>
3324 ]], [
3325     [int t0 = GL_TEXTURE0;]])
3326   ], [
3327     GL_CFLAGS=""
3328     have_gl="yes"
3329     AS_IF([test "${SYS}" != "mingw32"], [
3330       GL_LIBS="-lGL"
3331     ], [
3332       GL_LIBS="-lopengl32"
3333     ])
3334   ])
3335   AC_MSG_RESULT([${have_gl}])
3336 ])
3337 AM_CONDITIONAL([HAVE_GL], [test "${have_gl}" = "yes"])
3338 AS_IF([test "${have_gl}" = "yes"], [
3339   AC_DEFINE([HAVE_GL], 1, [Defined if having OpenGL])
3340 ])
3341
3342 dnl OpenGL ES 2: depends on EGL 1.1
3343 have_gles2="no"
3344 AC_ARG_ENABLE(gles2,
3345   [AS_HELP_STRING([--enable-gles2],
3346       [enable GLES2 support (default disabled)])])
3347 AS_IF([test "$enable_gles2" = "yes"], [
3348   PKG_CHECK_MODULES([GLES2], [glesv2], [have_gles2="yes"], [])
3349   ])
3350 AM_CONDITIONAL([HAVE_GLES2], [test "${have_gles2}" = "yes"])
3351
3352 dnl
3353 dnl Vulkan
3354 dnl
3355 AC_ARG_ENABLE(vulkan,
3356   [AS_HELP_STRING([--disable-vulkan],
3357       [disable Vulkan support (default auto)])])
3358
3359 AS_IF([test "$enable_vulkan" != "no"], [
3360   AS_IF([test "$have_libplacebo_vk" = "yes"], [
3361     PKG_CHECK_MODULES([VULKAN], [vulkan >= 1.0.26], [
3362       AC_DEFINE([HAVE_VULKAN], [1], [Define to 1 if vulkan is enabled.])
3363     ], [
3364       AS_IF([test -n "${enable_vulkan}"], [
3365         AC_MSG_ERROR([${VULKAN_PKG_ERRORS}.])
3366       ])
3367       enable_vulkan="no"
3368     ])
3369   ], [
3370     AS_IF([test -n "${enable_vulkan}"], [
3371       AC_MSG_ERROR([Vulkan support requires libplacebo 1.7 as well. Do not use --disable-libplacebo.])
3372     ])
3373     enable_vulkan="no"
3374   ])
3375 ])
3376 AM_CONDITIONAL(HAVE_VULKAN, [test "$enable_vulkan" != "no"])
3377
3378 dnl
3379 dnl  Xlib
3380 dnl
3381
3382 AC_PATH_XTRA()
3383 AC_CHECK_HEADERS([X11/Xlib.h])
3384
3385 dnl
3386 dnl  X C Bindings modules
3387 dnl
3388 AC_ARG_ENABLE([xcb],
3389   AS_HELP_STRING([--enable-xcb], [X11 support with XCB (default enabled)]),, [
3390   AS_IF([test "${SYS}" != "mingw32" -a "${SYS}" != "darwin"], [
3391     enable_xcb="yes"
3392   ], [
3393     enable_xcb="no"
3394   ])
3395 ])
3396
3397 have_xcb="no"
3398 have_xkbcommon_x11="no"
3399 have_xcb_keysyms="no"
3400 AS_IF([test "${enable_xcb}" != "no"], [
3401   xcb_err=""
3402
3403   dnl libxcb
3404   PKG_CHECK_MODULES([XCB], [xcb >= 1.6],, [
3405     xcb_err="$xcb_err ${XCB_PKG_ERRORS}."])
3406   PKG_CHECK_MODULES([XCB_COMPOSITE], [xcb-composite],, [
3407     xcb_err="$xcb_err ${XCB_COMPOSITE_PKG_ERRORS}."])
3408   PKG_CHECK_MODULES([XCB_RANDR], [xcb-randr >= 1.3],, [
3409     xcb_err="$xcb_err ${XCB_RANDR_PKG_ERRORS}."])
3410   PKG_CHECK_MODULES([XCB_RENDER], [xcb-render],, [
3411     xcb_err="$xcb_err ${XCB_RENDER_PKG_ERRORS}."])
3412   PKG_CHECK_MODULES([XCB_SHM], [xcb-shm >= 1.9.2],, [
3413     xcb_err="$xcb_err ${XCB_SHM_PKG_ERRORS}."])
3414   PKG_CHECK_MODULES([XCB_XKB], [xcb-xkb],, [
3415     xcb_err="$xcb_err ${XCB_XKB_PKG_ERRORS}."])
3416
3417   dnl xproto
3418   PKG_CHECK_MODULES(XPROTO, [xproto],, [
3419     xcb_err="$xcb_err ${XPROTO_PKG_ERRORS}."])
3420
3421   AS_IF([test -n "$xcb_err"], [
3422     AC_MSG_ERROR([$xcb_err Pass --disable-xcb to skip X11 support.])
3423   ])
3424
3425   dnl xkbcommon
3426   PKG_CHECK_MODULES([XKBCOMMON_X11], [xkbcommon-x11], [
3427     have_xkbcommon_x11="yes"
3428   ], [
3429     AC_MSG_WARN([${XKBCOMMON_X11_PKG_ERRORS}. Hotkeys are disabled.])
3430   ])
3431
3432   dnl xcb-utils
3433   PKG_CHECK_MODULES([XCB_KEYSYMS], [xcb-keysyms >= 0.3.4], [
3434     have_xcb_keysyms="yes"
3435   ], [
3436     AC_MSG_WARN([${XCB_KEYSYMS_PKG_ERRORS}. Global hotkeys are disabled.])
3437   ])
3438
3439   have_xcb="yes"
3440 ])
3441 AM_CONDITIONAL([HAVE_XCB], [test "${have_xcb}" = "yes"])
3442 AM_CONDITIONAL([HAVE_XKBCOMMON_X11], [test "${have_xkbcommon_x11}" = "yes"])
3443 AM_CONDITIONAL([HAVE_XCB_KEYSYMS], [test "${have_xcb_keysyms}" = "yes"])
3444
3445
3446 dnl
3447 dnl VDPAU needs X11
3448 dnl
3449 AC_ARG_ENABLE([vdpau],
3450   [AS_HELP_STRING([--enable-vdpau], [VDPAU hardware support (default auto)])])
3451 have_vdpau="no"
3452 AS_IF([test "${enable_vdpau}" != "no"], [
3453   PKG_CHECK_MODULES([VDPAU], [vdpau >= 0.6], [
3454     have_vdpau="yes"
3455     AS_IF([test "${no_x}" = "yes"], [
3456       AC_MSG_ERROR([VDPAU requires Xlib (X11).])
3457     ])
3458   ], [
3459     AS_IF([test -n "${enable_vdpau}"], [
3460       AC_MSG_ERROR([${VDPAU_PKG_ERRORS}.])
3461     ])
3462   ])
3463 ])
3464 AM_CONDITIONAL([HAVE_VDPAU], [test "${have_vdpau}" = "yes"])
3465
3466 have_avcodec_vdpau="no"
3467 AS_IF([test "${have_vdpau}" = "yes" -a "${have_avcodec}" = "yes"], [
3468   case "${avfork}" in
3469     libav) av_vdpau_ver="56.10.0" ;;
3470     ffmpeg) av_vdpau_ver="56.19.100" ;;
3471   esac
3472   PKG_CHECK_EXISTS([libavcodec >= ${av_vdpau_ver}], [
3473     have_avcodec_vdpau="yes"
3474     AC_MSG_NOTICE([VDPAU decoding acceleration activated])
3475   ], [
3476     AS_IF([test -n "${enable_vdpau}"], [
3477       AC_MSG_ERROR([libavcodec >= 56.10.0 is required for VDPAU decoding.])
3478     ], [
3479       AC_MSG_WARN([libavcodec >= 56.10.0 are required for VDPAU decoding.])
3480     ])
3481   ])
3482 ])
3483 AM_CONDITIONAL([HAVE_AVCODEC_VDPAU], [test "${have_avcodec_vdpau}" = "yes"])
3484
3485
3486 dnl
3487 dnl  Wayland
3488 dnl
3489 AC_ARG_ENABLE([wayland],
3490   AS_HELP_STRING([--enable-wayland], [Wayland support (default auto)]))
3491
3492 have_wayland="no"
3493 AS_IF([test "${enable_wayland}" != "no"], [
3494   wl_err=""
3495
3496   dnl wayland
3497   PKG_CHECK_MODULES([WAYLAND_CLIENT], [wayland-client >= 1.5.91],, [
3498     wl_err="$wl_err ${WAYLAND_CLIENT_PKG_ERRORS}."
3499   ])
3500   PKG_CHECK_MODULES([WAYLAND_CURSOR], [wayland-cursor],, [
3501     wl_err="$wl_err ${WAYLAND_CURSOR_PKG_ERRORS}."
3502   ])
3503   PKG_CHECK_MODULES([WAYLAND_EGL], [wayland-egl],, [
3504     wl_err="$wl_err ${WAYLAND_EGL_PKG_ERRORS}."
3505   ])
3506   PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland-scanner >= 1.15], [
3507     WAYLAND_SCANNER="$(${PKG_CONFIG} wayland-scanner --variable wayland_scanner)"
3508   ], [
3509     wl_err="$wl_err ${WAYLAND_SCANNER_PKG_ERRORS}."
3510   ])
3511
3512   dnl wayland-protocols
3513   PKG_CHECK_MODULES([WAYLAND_PROTOCOLS], [wayland-protocols >= 1.15], [
3514     WAYLAND_PROTOCOLS="$(${PKG_CONFIG} wayland-protocols --variable pkgdatadir)"
3515   ], [
3516     wl_err="$wl_err ${WAYLAND_PROTOCOLS_PKG_ERRORS}."
3517   ])
3518
3519   AS_IF([test -n "$wl_err"], [
3520     AS_IF([test -n "$enable_wayland"], [
3521       AC_MSG_ERROR([$wl_err])
3522     ], [
3523       AC_MSG_WARN([$wl_err])
3524     ])
3525   ], [
3526     have_wayland="yes"
3527   ])
3528
3529   dnl xkbcommon
3530   PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon], [
3531     have_xkbcommon="yes"
3532   ], [
3533     AC_MSG_WARN([${XKBCOMMON_PKG_ERRORS}. Hotkeys are disabled.])
3534   ])
3535 ])
3536 AM_CONDITIONAL([HAVE_WAYLAND], [test "${have_wayland}" = "yes"])
3537 AC_SUBST([WAYLAND_PROTOCOLS])
3538 AC_SUBST([WAYLAND_SCANNER])
3539 AM_CONDITIONAL([HAVE_XKBCOMMON], [test "${have_xkbcommon}" = "yes"])
3540
3541
3542 dnl
3543 dnl  freetype module
3544 dnl
3545 AC_ARG_ENABLE([freetype],
3546   AS_HELP_STRING([--enable-freetype],   [freetype support   (default auto)]))
3547 AC_ARG_ENABLE([fribidi],
3548   AS_HELP_STRING([--enable-fribidi],    [fribidi support    (default auto)]))
3549 AC_ARG_ENABLE([harfbuzz],
3550   AS_HELP_STRING([--enable-harfbuzz],   [harfbuzz support   (default auto)]))
3551 AC_ARG_ENABLE([fontconfig],
3552   AS_HELP_STRING([--enable-fontconfig], [fontconfig support (default auto)]))
3553
3554 AC_ARG_WITH([default-font],
3555     AS_HELP_STRING([--with-default-font=PATH],
3556         [Path to the default font]),
3557         [AC_DEFINE_UNQUOTED([DEFAULT_FONT_FILE],
3558             "$withval", [Default font])])
3559 AC_ARG_WITH([default-monospace-font],
3560     AS_HELP_STRING([--with-default-monospace-font=PATH],
3561         [Path to the default font]),
3562         [AC_DEFINE_UNQUOTED([DEFAULT_MONOSPACE_FONT_FILE],
3563             "$withval", [Default monospace font])])
3564
3565 AC_ARG_WITH([default-font-family],
3566     AS_HELP_STRING([--with-default-font-family=NAME],
3567         [Name of the default font family]),
3568         [AC_DEFINE_UNQUOTED([DEFAULT_FAMILY],
3569             "$withval", [Default font family])])
3570 AC_ARG_WITH([default-monospace-font-family],
3571     AS_HELP_STRING([--with-default-monospace-font-family=NAME],
3572         [Name of the default font family]),
3573         [AC_DEFINE_UNQUOTED([DEFAULT_MONOSPACE_FAMILY],
3574             "$withval", [Default monospace font family])])
3575
3576 have_freetype="no"
3577 have_fontconfig="no"
3578 have_fribidi="no"
3579 have_harfbuzz="no"
3580
3581 if test "${enable_freetype}" != "no"; then
3582    PKG_CHECK_MODULES(FREETYPE, freetype2, [
3583       have_freetype="yes"
3584       VLC_ADD_CPPFLAGS([skins2],[${FREETYPE_CFLAGS}])
3585       VLC_ADD_LIBS([skins2],[${FREETYPE_LIBS}])
3586
3587     dnl fontconfig support
3588     AS_IF([test "${enable_fontconfig}" != "no" -a "${SYS}" != "mingw32" -a "${SYS}" != "darwin"], [
3589       PKG_CHECK_MODULES(FONTCONFIG, [fontconfig >= 2.11], [
3590         have_fontconfig="yes"
3591       ], [
3592         AC_MSG_WARN([${FONTCONFIG_PKG_ERRORS}. Styles will be disabled in FreeType.])
3593       ])
3594     ])
3595
3596       dnl fribidi support
3597       if test "${enable_fribidi}" != "no"; then
3598         PKG_CHECK_MODULES(FRIBIDI, fribidi, [
3599           have_fribidi="yes"
3600           VLC_ADD_CPPFLAGS([skins2], [${FRIBIDI_CFLAGS} -DHAVE_FRIBIDI])
3601           VLC_ADD_LIBS([skins2], [${FRIBIDI_LIBS}])
3602         ],[AC_MSG_WARN([${FRIBIDI_PKG_ERRORS}. Bidirectional text and complex scripts (Arabic, Farsi, Thai...) will be disabled in FreeType.])])
3603       fi
3604
3605       dnl harfbuzz support
3606       if test "${have_fribidi}" != "no"; then
3607         if test "${enable_harfbuzz}" != "no"; then
3608           PKG_CHECK_MODULES(HARFBUZZ, harfbuzz, [
3609             have_harfbuzz="yes"
3610             VLC_ADD_CPPFLAGS([skins2], [${HARFBUZZ_CFLAGS} -DHAVE_HARFBUZZ])
3611             VLC_ADD_LIBS([skins2], [${HARFBUZZ_LIBS}])
3612           ],[AC_MSG_WARN([${HARFBUZZ_PKG_ERRORS}. Support for complex scripts (Arabic, Farsi, Thai...) will be disabled in FreeType.])])
3613         fi
3614       fi
3615   ],[
3616   AS_IF([test -n "${enable_freetype}"],[
3617     AC_MSG_ERROR([${FREETYPE_PKG_ERRORS}. Install FreeType2 development or configure with --disable-freetype.])
3618     ])
3619   ])
3620 fi
3621
3622 AM_CONDITIONAL([HAVE_FREETYPE], [test "${have_freetype}" = "yes"])
3623 AM_CONDITIONAL([HAVE_FONTCONFIG], [test "${have_fontconfig}" = "yes"])
3624 AM_CONDITIONAL([HAVE_FRIBIDI], [test "${have_fribidi}" = "yes"])
3625 AM_CONDITIONAL([HAVE_HARFBUZZ], [test "${have_harfbuzz}" = "yes"])
3626
3627 dnl
3628 dnl libass subtitle rendering module
3629 dnl
3630 AC_ARG_ENABLE([libass],
3631   AS_HELP_STRING([--enable-libass], [Subtitle support using libass (default enabled)]))
3632 AS_IF( [test "${enable_libass}" != "no"], [
3633   PKG_CHECK_MODULES(LIBASS, [libass >= 0.9.8],
3634       [
3635         VLC_ADD_PLUGIN([libass])
3636
3637         if test "${have_fontconfig}" != "no"; then
3638             VLC_ADD_CPPFLAGS([libass],[-DHAVE_FONTCONFIG])
3639             VLC_ADD_LIBS([libass],[${FONTCONFIG_LIBS}])
3640         fi
3641       ],[
3642         AC_MSG_WARN([${LIBASS_PKG_ERRORS}.])
3643       ])
3644   ])
3645
3646 dnl
3647 dnl SAPI (text to Speech renderer for Windows)
3648 dnl
3649 AC_LANG_PUSH([C++])
3650 AC_CHECK_TYPES([ISpObjectToken],[
3651               have_sapi="yes"
3652             ],[AC_MSG_WARN([sapi.h not found. Text to Speech renderer for Windows disabled])],
3653               [#include <windows.h>
3654                #include <sapi.h>
3655                #include <sphelper.h>])
3656 AM_CONDITIONAL([HAVE_SAPI], [test "${have_sapi}" = "yes"])
3657 AC_LANG_POP([C++])
3658
3659 dnl
3660 dnl  SVG module (text rendering and image decoding)
3661 dnl
3662 PKG_ENABLE_MODULES_VLC([SVG], [], [librsvg-2.0 >= 2.9.0], [SVG rendering library],[auto])
3663 PKG_ENABLE_MODULES_VLC([SVGDEC], [], [librsvg-2.0 >= 2.9.0 cairo >= 1.13.1], [SVG image decoder library],[auto])
3664
3665 dnl
3666 dnl  Windows DirectX module
3667 dnl
3668
3669 AC_ARG_ENABLE([directx],
3670   AS_HELP_STRING([--enable-directx],
3671     [Microsoft DirectX support (default enabled on Windows)]),, [
3672   AS_IF([test "${SYS}" = "mingw32"], [
3673     enable_directx="yes"
3674   ], [
3675     enable_directx="no"
3676   ])
3677 ])
3678 AS_IF([test "${enable_directx}" != "no"], [
3679   dnl OpenGL
3680   AC_CHECK_HEADERS([GL/glew.h], [
3681     AC_CHECK_HEADERS([GL/wglew.h], [
3682         VLC_ADD_PLUGIN([glwin32 wgl])
3683       ],, [
3684         #include <windows.h>
3685         #include <GL/glew.h>
3686       ])],, [
3687       #include <windows.h>
3688    ])
3689
3690   dnl Direct3D11
3691   AC_CHECK_HEADERS([d3d11.h], [
3692     VLC_ADD_PLUGIN([direct3d11 direct3d11_filters])
3693   ])
3694
3695   dnl Direct3D9
3696   AC_CHECK_HEADERS([d3d9.h], [
3697     VLC_ADD_PLUGIN([direct3d9])
3698     AC_CHECK_HEADERS([d3dx9effect.h])
3699
3700     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
3701         [[#define COBJMACROS
3702           #include <d3d9.h>
3703           #include <dxva2api.h>
3704           #ifndef IDirectXVideoProcessorService_GetVideoProcessorDeviceGuids
3705           # error dxva2 too old
3706           #endif
3707         ]],[[;]])
3708       ],[
3709         VLC_ADD_PLUGIN([direct3d9_filters])
3710       ],
3711       [AC_MSG_WARN([Could not find required IDirectXVideoDecoder in dxva2api.h])])
3712
3713   ])
3714 ])
3715
3716 dnl
3717 dnl  Linux framebuffer module
3718 dnl
3719 AC_CHECK_HEADER([linux/fb.h], [
3720   VLC_ADD_PLUGIN([fb])
3721 ])
3722
3723 dnl
3724 dnl  Linux kernel mode setting module
3725 dnl
3726 PKG_ENABLE_MODULES_VLC([KMS], [], [libdrm >= 2.4.83], [Linux kernel mode setting output], [auto])
3727
3728 dnl
3729 dnl  libcaca plugin
3730 dnl
3731 PKG_ENABLE_MODULES_VLC([CACA], [], [caca >= 0.99.beta14], [libcaca output],[auto])
3732
3733 dnl
3734 dnl  OS/2 KVA plugin
3735 dnl
3736 AC_ARG_ENABLE([kva],
3737   AS_HELP_STRING([--enable-kva],
3738     [support the K Video Accelerator KVA (default enabled on OS/2)]),, [
3739   AS_IF([test "$SYS" = "os2"], [
3740     enable_kva="yes"
3741   ])
3742 ])
3743 have_kva="no"
3744 KVA_LIBS=""
3745 AS_IF([test "$enable_kva" != "no"], [
3746   AC_CHECK_HEADERS([kva.h], [
3747     have_kva="yes"
3748     AC_CHECK_LIB([kva], [main], [
3749       KVA_LIBS="-lkva"
3750     ])
3751   ])
3752 ])
3753 AC_SUBST([KVA_LIBS])
3754 AM_CONDITIONAL([HAVE_KVA], [test "${have_kva}" = "yes"])
3755
3756 dnl
3757 dnl MMAL plugin
3758 dnl
3759 MMAL_CFLAGS=""
3760 MMAL_LIBS=""
3761 AC_ARG_ENABLE([mmal],
3762   AS_HELP_STRING([--enable-mmal],
3763     [Multi-Media Abstraction Layer (MMAL) hardware plugin (default enable)]))
3764 if test "${enable_mmal}" != "no"; then
3765   VLC_SAVE_FLAGS
3766   LDFLAGS="${LDFLAGS} -L/opt/vc/lib -lvchostif"
3767   CPPFLAGS="${CPPFLAGS} -isystem /opt/vc/include -isystem /opt/vc/include/interface/vcos/pthreads -isystem /opt/vc/include/interface/vmcs_host/linux"
3768   AC_CHECK_HEADERS([interface/mmal/mmal.h],
3769     [ AC_CHECK_LIB([bcm_host], [vc_tv_unregister_callback_full], [
3770         have_mmal="yes"
3771         MMAL_CFLAGS="-isystem /opt/vc/include -isystem /opt/vc/include/interface/vcos/pthreads -isystem /opt/vc/include/interface/vmcs_host/linux"
3772         MMAL_LIBS="-L/opt/vc/lib -lbcm_host -lmmal -lmmal_core -lmmal_components -lmmal_util -lvchostif -lvcsm -lvchiq_arm"
3773         ],[
3774         AS_IF([test "${enable_mmal}" = "yes"],
3775             [ AC_MSG_ERROR([Cannot find bcm library...]) ],
3776             [ AC_MSG_WARN([Cannot find bcm library...]) ])
3777           ],
3778         [])
3779     ] , [ AS_IF([test "${enable_mmal}" = "yes"],
3780       [ AC_MSG_ERROR([Cannot find development headers for mmal...]) ],
3781       [ AC_MSG_WARN([Cannot find development headers for mmal...]) ]) ])
3782   VLC_RESTORE_FLAGS
3783 fi
3784 AC_SUBST([MMAL_CFLAGS])
3785 AC_SUBST([MMAL_LIBS])
3786 AM_CONDITIONAL([HAVE_MMAL], [test "${have_mmal}" = "yes"])
3787
3788 dnl
3789 dnl  Audio plugins
3790 dnl
3791
3792 EXTEND_HELP_STRING([Audio plugins:])
3793
3794 dnl
3795 dnl  Pulseaudio module
3796 dnl
3797 AC_ARG_ENABLE([pulse],
3798   AS_HELP_STRING([--enable-pulse],
3799     [use the PulseAudio client library (default auto)]))
3800 have_pulse="no"
3801 AS_IF([test "${enable_pulse}" != "no"], [
3802   PKG_CHECK_MODULES([PULSE], [libpulse >= 1.0], [
3803     have_pulse="yes"
3804   ], [
3805     AS_IF([test "x${enable_pulse}" != "x"], [
3806       AC_MSG_ERROR([$PULSE_PKG_ERRORS. PulseAudio 1.0 or later required.])
3807     ])
3808   ])
3809 ])
3810 AM_CONDITIONAL([HAVE_PULSE], [test "${have_pulse}" = "yes"])
3811
3812 dnl
3813 dnl  ALSA module
3814 dnl
3815 AC_ARG_ENABLE([alsa],
3816   AS_HELP_STRING([--enable-alsa],
3817     [support the Advanced Linux Sound Architecture (default auto)]),, [
3818   AS_IF([test "$SYS" = "linux" -a "${have_pulse}" = "no"], [
3819     enable_alsa="yes"
3820   ])
3821 ])
3822 have_alsa="no"
3823 AS_IF([test "${enable_alsa}" != "no"], [
3824   PKG_CHECK_MODULES([ALSA], [alsa >= 1.0.24], [
3825     have_alsa="yes"
3826   ], [
3827     AS_IF([test "x${enable_alsa}" != "x"], [
3828       AC_MSG_ERROR([$ALSA_PKG_ERRORS. alsa-lib 1.0.24 or later required. Pass --disable-alsa to ignore this error.])
3829     ])
3830   ])
3831 ])
3832 AM_CONDITIONAL([HAVE_ALSA], [test "${have_alsa}" = "yes"])
3833
3834 dnl
3835 dnl  Open Sound System module
3836 dnl
3837 AC_ARG_ENABLE([oss],
3838   AS_HELP_STRING([--enable-oss],
3839     [support the Open Sound System OSS (default enabled on FreeBSD/NetBSD/DragonFlyBSD)]),, [
3840   AS_IF([test "$SYS" = "mingw32" -o "$SYS" = "linux" -o "$SYS" = "openbsd"], [
3841     enable_oss="no"
3842   ])
3843 ])
3844 have_oss="no"
3845 OSS_LIBS=""
3846 AS_IF([test "$enable_oss" != "no"], [
3847   AC_CHECK_HEADERS([soundcard.h sys/soundcard.h], [
3848     have_oss="yes"
3849     AC_CHECK_LIB([ossaudio], [main], [
3850       OSS_LIBS="-lossaudio"
3851     ])
3852   ])
3853 ])
3854 AC_SUBST([OSS_LIBS])
3855 AM_CONDITIONAL([HAVE_OSS], [test "${have_oss}" = "yes"])
3856
3857 dnl
3858 dnl  OpenBSD sndio module
3859 dnl
3860 AC_ARG_ENABLE([sndio],
3861   AS_HELP_STRING([--disable-sndio],
3862     [support the OpenBSD sndio (default auto)]),, [
3863   AS_IF([test "$SYS" = "openbsd"], [
3864     enable_sndio="yes"
3865   ])
3866 ])
3867 have_sndio="no"
3868 AS_IF([test "$enable_sndio" != "no"], [
3869   AC_CHECK_HEADER([sndio.h], [
3870     have_sndio="yes"
3871   ])
3872 ])
3873 AM_CONDITIONAL([HAVE_SNDIO], [test "${have_sndio}" = "yes"])
3874
3875 dnl
3876 dnl  Windows Audio Session plugin
3877 dnl
3878 AC_ARG_ENABLE([wasapi],
3879   AS_HELP_STRING([--enable-wasapi],
3880     [use the Windows Audio Session API (default auto)])
3881 )
3882 have_wasapi="no"
3883 AS_IF([test "$enable_wasapi" != "no"], [
3884   AC_CHECK_HEADER([audioclient.h], [
3885     have_wasapi="yes"
3886   ], [
3887     AS_IF([test "x