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