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