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