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