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