player: No need to pass the item to vlc_player_input_RestoreMlStates
[vlc.git] / configure.ac
blob0d7af8a01ea99e8f35be2a300f93f1cb6694bba3
1 dnl Autoconf settings for vlc
3 AC_COPYRIGHT([Copyright 1999-2020 VLC authors and VideoLAN])
5 AC_INIT([vlc], [4.0.0-dev])
6 VERSION_MAJOR=4
7 VERSION_MINOR=0
8 VERSION_REVISION=0
9 VERSION_EXTRA=0
10 VERSION_DEV=dev
12 PKGDIR="vlc"
13 AC_SUBST([PKGDIR])
15 CONFIGURE_LINE="`echo "$0 $ac_configure_args" | sed -e 's/\\\/\\\\\\\/g'`"
16 CODENAME="Otto Chriek"
17 COPYRIGHT_YEARS="1996-2020"
19 AC_CONFIG_SRCDIR([src/libvlc.c])
20 AC_CONFIG_AUX_DIR([autotools])
21 AC_CONFIG_MACRO_DIR([m4])
22 AC_CONFIG_LIBOBJ_DIR([compat])
23 AC_CANONICAL_BUILD
24 AC_CANONICAL_HOST
25 AC_PRESERVE_HELP_ORDER
27 AM_INIT_AUTOMAKE([tar-ustar color-tests foreign])
28 AC_CONFIG_HEADERS([config.h])
30 AM_SILENT_RULES([yes])
31 AM_MAINTAINER_MODE([enable])
33 dnl
34 dnl Check for tools
35 dnl
36 AC_PROG_CC
37 AC_USE_SYSTEM_EXTENSIONS
38 VLC_PROG_CC_C11
39 AH_VERBATIM([FORTIFY_SOURCE],
40   [/* Enable compile-time and run-time bounds-checking, and some warnings,
41    without upsetting glibc 2.15+ or toolchains predefining _FORTIFY_SOURCE */
42 #if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
43 # define _FORTIFY_SOURCE 2
44 #endif])
45 AC_DEFINE([_FILE_OFFSET_BITS], 64, [Define to 64 for large files support.])
46 AC_DEFINE([__LIBVLC__],, [Define within the LibVLC source code tree.])
47 AC_DEFINE([WIN32_LEAN_AND_MEAN],, [Define to limit the scope of <windows.h>.])
49 AC_PROG_CXX
50 AC_PROG_CPP
51 AC_PROG_OBJC
52 AC_PROG_EGREP
53 AC_PROG_MAKE_SET
54 AC_PROG_INSTALL
55 AM_PROG_AS
56 AC_PROG_LEX
57 AC_PROG_YACC
59 AC_ARG_VAR([DESKTOP_FILE_VALIDATE], [Validator for desktop entry files])
60 AC_CHECK_PROGS([DESKTOP_FILE_VALIDATE], [${DESKTOP_FILE_VALIDATE} desktop-file-validate], :)
61 AC_ARG_VAR([BUILDCC], [Build system C11 or C99 compiler command])
62 AC_CHECK_PROGS([BUILDCC], [c11-gcc c11 c99-gcc c99], [false])
63 AS_IF([test "$BUILDCC" = "false"], [
64   AC_MSG_ERROR([Cannot find native C99 compiler: please define BUILDCC.])
67 dnl Check for compiler properties
68 AC_C_CONST
69 AC_C_INLINE
70 AC_C_RESTRICT
71 AX_CXX_COMPILE_STDCXX_14([noext], [mandatory])
73 dnl 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*)
142     dnl Workaround possible Xcode 11 bug
143     CFLAGS="${CFLAGS} -fno-stack-check"
144     CXXFLAGS="${CXXFLAGS} -fno-stack-check"
145     OBJCFLAGS="${OBJCFLAGS} -fno-stack-check"
147     dnl Force gcc "-arch" flag
148     ARCH_flag=""
149     case "${host_cpu}" in
150       i?86)
151         ARCH_flag="-arch i386"
152         X86ASMFLAGS="-f macho32"
153         X86ASMDEFS="${X86ASMDEFS} -DPREFIX"
154       ;;
155       ppc64*)
156         ARCH_flag="-arch ppc64"
157       ;;
158       ppc*)
159         ARCH_flag="-arch ppc"
160       ;;
161       x86_64)
162         ARCH_flag="-arch x86_64"
163         X86ASMFLAGS="-f macho64"
164         X86ASMDEFS="${X86ASMDEFS} -DPREFIX"
165       ;;
166       arm*)
167         ac_cv_c_bigendian="no"
168         ac_cv_c_attribute_packed="no"
169       ;;
170     esac
172     SYS=darwin
173     CFLAGS="${CFLAGS} -D_INTL_REDIRECT_MACROS -std=gnu11 ${ARCH_flag}"
174     CXX="${CXX} -stdlib=libc++ -std=c++11"
175     CXXFLAGS="${CXXFLAGS} -D_INTL_REDIRECT_MACROS ${ARCH_flag}"
176     CPPFLAGS="${CPPFLAGS} ${ARCH_flag}"
177     OBJCFLAGS="${OBJCFLAGS} -D_INTL_REDIRECT_MACROS -std=gnu11 ${ARCH_flag} -Werror=partial-availability"
178     LDFLAGS="${LDFLAGS} -Wl,-headerpad_max_install_names ${ARCH_flag}"
179     VLC_ADD_LIBS([libvlc vlc],[-Wl,-undefined,dynamic_lookup,-framework,AppKit])
180     VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreFoundation,-framework,CoreServices])
182     AC_EGREP_CPP(yes,
183             [#import <TargetConditionals.h>
184              #if TARGET_OS_IPHONE
185              yes
186              #endif],
187              [HAVE_IOS="1"],
188              [HAVE_OSX="1"])
190     AC_EGREP_CPP(yes,
191             [#import <TargetConditionals.h>
192              #if TARGET_OS_TV
193              yes
194              #endif],
195              [HAVE_TVOS="1"
196              HAVE_IOS="0"
197              HAVE_OSX="0"
198              ac_cv_func_daemon=no
199              ac_cv_func_fork=no
200              ],)
202     dnl
203     dnl  Handle Mac OS X SDK flags
204     dnl
205     AC_ARG_WITH(macosx-sdk,
206       AS_HELP_STRING([--with-macosx-sdk=DIR],
207         [compile using the SDK in DIR]))
208     if test "${with_macosx_sdk}" != "" ; then
209         test ! -d "${with_macosx_sdk}" && AC_MSG_ERROR([SDK "${with_macosx_sdk}" not found])
210         CPP="${CPP} -isysroot ${with_macosx_sdk}"
211         CC="${CC} -isysroot ${with_macosx_sdk}"
212         CXX="${CXX} -isysroot ${with_macosx_sdk}"
213         OBJC="${OBJC} -isysroot ${with_macosx_sdk}"
214         LD="${LD} -syslibroot ${with_macosx_sdk}"
215     fi
216     AC_ARG_WITH(macosx-version-min,
217       AS_HELP_STRING([--with-macosx-version-min=VERSION],
218         [compile for Mac OS X VERSION and above]))
219     if test "${with_macosx_version_min}" != "" ; then
220         CPP="${CPP} -mmacosx-version-min=${with_macosx_version_min}"
221         CC="${CC} -mmacosx-version-min=${with_macosx_version_min}"
222         CXX="${CXX} -mmacosx-version-min=${with_macosx_version_min}"
223         OBJC="${OBJC} -mmacosx-version-min=${with_macosx_version_min}"
224         LD="${LD} -mmacosx_version_min=${with_macosx_version_min}"
225     fi
226     ;;
227   *mingw32* | *cygwin* | *wince* | *mingwce*)
228     dnl Force libtool to not link to (shared) libgcc_s when detecting C++ dependencies
229     dnl When doing this test with -static-libgcc it will link on (static) libgcc_eh
230     CXXFLAGS="${CXXFLAGS} -static-libgcc"
231     AC_CHECK_TOOL(WINDRES, windres, :)
232     AC_CHECK_TOOL(OBJCOPY, objcopy, :)
233     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
234       [[#ifdef _WIN32_WINNT
235        # error _WIN32_WINNT already defined
236        #endif
237       ]],[[;]])
238     ],[
239       AC_DEFINE([_WIN32_WINNT], 0x0601, [Define to '0x0601' for Windows 7 APIs.])
240     ])
241     AC_DEFINE([_WIN32_IE], 0x0600, [Define to '0x0600' for IE 6.0 (and shell) APIs.])
242     AC_DEFINE([UNICODE], [1], [Define to 1 for Unicode (Wide Chars) APIs.])
243     AC_DEFINE([_ISOC99_SOURCE], [1], [Extensions to ISO C89 from ISO C99.])
244     AC_DEFINE([_ISOC11_SOURCE], [1], [Extensions to ISO C99 from ISO C11.])
245     AC_DEFINE([_POSIX_SOURCE], [1], [IEEE Std 1003.1.])
246     AC_DEFINE([_POSIX_C_SOURCE], [200809L], [IEEE Std 1003.1.])
247     AC_DEFINE([_XOPEN_SOURCE], [700], [POSIX and XPG 7th edition])
248     AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [XPG things and X/Open Unix extensions.])
249     AC_DEFINE([_BSD_SOURCE], [1], [ISO C, POSIX, and 4.3BSD things.])
250     AC_DEFINE([_SVID_SOURCE], [1], [ISO C, POSIX, and SVID things.])
252     case "${host_os}" in
253       *mingw32*)
254         SYS=mingw32
255         ;;
256       *cygwin*)
257         dnl Check if we are using the mno-cygwin mode in which case we are
258         dnl actually dealing with a mingw32 compiler.
259         AC_EGREP_CPP(yes,
260             [#ifdef _WIN32
261              yes
262              #endif],
263             SYS=mingw32, AC_MSG_ERROR([VLC requires -mno-cygwin]))
264         ;;
265     esac
267     if test "${SYS}" = "mingw32"; then
268         # DEP, ASLR, NO SEH
269         LDFLAGS="${LDFLAGS} -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase"
271         AC_CHECK_PROGS(U2D, [unix2dos todos], unix2dos)
272         ac_default_prefix="`pwd`/_win32"
273         DESTDIR="`pwd`/_win32/"
275         dnl
276         dnl NSIS/MSI Installer prefix and WIN64
277         dnl
278         case "${host_cpu}" in
279             aarch64)
280                 HAVE_WIN64="1"
281                 WINDOWS_ARCH="arm64"
282                 PROGRAMFILES="PROGRAMFILES64"
283                 LDFLAGS="${LDFLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x140000000"
284             ;;
285             amd64|x86_64)
286                 HAVE_WIN64="1"
287                 WINDOWS_ARCH="x64"
288                 PROGRAMFILES="PROGRAMFILES64"
289                 LDFLAGS="${LDFLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x140000000"
290                 X86ASMFLAGS="-f win64"
291             ;;
292             armv7)
293                 WINDOWS_ARCH="arm"
294                 PROGRAMFILES="PROGRAMFILES"
295             ;;
296             *)
297                 WINDOWS_ARCH="x86"
298                 PROGRAMFILES="PROGRAMFILES"
299                 X86ASMFLAGS="-f win32"
300                 X86ASMDEFS="${X86ASMDEFS} -DPREFIX"
301             ;;
302         esac
303         AC_SUBST([WINDOWS_ARCH])
304         AC_SUBST([PROGRAMFILES])
306     fi
307     ;;
308   *nto*)
309     SYS=nto
310     ;;
311   solaris*)
312     SYS=solaris
313     ;;
314   hpux*)
315     SYS=hpux
316     ;;
317   *os2*)
318     SYS=os2
319     LDFLAGS="${LDFLAGS} -Zomf -Zbin-files -Zargs-wild -Zhigh-mem"
320     AC_LIBOBJ([freeaddrinfo])
321     AC_LIBOBJ([gai_strerror])
322     AC_CHECK_FUNCS([if_nametoindex])
323     X86ASMFLAGS="-f aout"
324     X86ASMDEFS="-DARCH_X86_32=1 -DARCH_X86_64=0 -DPREFIX"
325     ;;
326   *nacl*)
327     SYS=nacl
328     AC_DEFINE([_XOPEN_SOURCE], [700], [POSIX and XPG 7th edition])
329     AC_LIBOBJ([sigwait])
330     AC_LIBOBJ([recvmsg])
331     AC_LIBOBJ([sendmsg])
332     ;;
333   *)
334     SYS="${host_os}"
335     ;;
336 esac
338 dnl WinRT
339 AC_ARG_ENABLE([winstore_app],
340      AS_HELP_STRING([--enable-winstore-app],
341                     [Build targetted for Windows Store apps (default disabled)]))
343 vlc_winstore_app=0
344 AS_IF([test "${SYS}" = "mingw32"],[
345   LIBCOM="-lole32"
346   AS_IF([test "${enable_winstore_app}" = "yes"], [
347     vlc_winstore_app=1
348     LIBCOM=""
349     AX_APPEND_FLAG([-DWINSTORECOMPAT],[CFLAGS])
350     AX_APPEND_FLAG([-DWINSTORECOMPAT],[CPPFLAGS])
351     AX_APPEND_FLAG([-DWINSTORECOMPAT],[CXXFLAGS])
352     AX_APPEND_FLAG([-lwinstorecompat], [LDFLAGS])
353     VLC_ADD_LIBS([libvlccore], [-lruntimeobject])
354     AC_LIBOBJ([gai_strerror])
355   ],[])
356   AC_SUBST([LIBCOM])
357   ])
358 AC_DEFINE_UNQUOTED(VLC_WINSTORE_APP, ${vlc_winstore_app}, [Define to 1 if you want to build for Windows Store apps])
360 vlc_build_pdb=0
361 AC_ARG_ENABLE([pdb],
362      AS_HELP_STRING([--enable-pdb],
363                     [Build PDB files for windows targets (default off)]))
364 AS_IF([test "${SYS}" = "mingw32"],[
365   AS_IF([test "${enable_pdb}" = "yes"], [
366     vlc_build_pdb=1
367     AX_APPEND_FLAG([-g -gcodeview],[CFLAGS])
368     AX_APPEND_FLAG([-g -gcodeview],[CXXFLAGS])
369     LDFLAGS="${LDFLAGS} -Wl,-pdb="
370   ],[])
373 AM_CONDITIONAL([HAVE_LINUX],   [test "${SYS}" = "linux"])
374 AM_CONDITIONAL([HAVE_OS2],     [test "${SYS}" = "os2"])
376 AM_CONDITIONAL([HAVE_DARWIN],  [test "${SYS}" = "darwin"])
377 AM_CONDITIONAL([HAVE_IOS],     [test "${HAVE_IOS}" = "1"])
378 AM_CONDITIONAL([HAVE_OSX],     [test "${HAVE_OSX}" = "1"])
379 AM_CONDITIONAL([HAVE_TVOS],    [test "${HAVE_TVOS}" = "1"])
381 AM_CONDITIONAL([HAVE_NACL],    [test "${SYS}" = "nacl"])
382 AM_CONDITIONAL([HAVE_LIBANL],  [test "${HAVE_LIBANL}" = "1"])
384 AM_CONDITIONAL([HAVE_WIN32],   [test "${SYS}" = "mingw32"])
385 AM_CONDITIONAL([HAVE_WIN64],   [test "${HAVE_WIN64}" = "1"]) dnl Only used for the packaging
386 AM_CONDITIONAL([HAVE_WINSTORE], [test "$vlc_winstore_app" = "1"])
387 AM_CONDITIONAL([HAVE_WIN32_DESKTOP], [test "${SYS}" = "mingw32" -a "$vlc_winstore_app" = "0"])
388 AM_CONDITIONAL([ENABLE_PDB],   [test "$vlc_build_pdb" = "1"])
390 dnl Use nasm/yasm only on x86
391 AC_CHECK_PROGS(X86ASM, [nasm yasm])
392 AM_CONDITIONAL([HAVE_X86ASM], [test -n "${X86ASM}" && test -n "${X86ASMFLAGS}"])
393 AM_COND_IF([HAVE_X86ASM], [
394   AC_DEFINE([HAVE_X86ASM], [1], [Use external asm on x86.])
397 dnl  Because DOLT is not able to handle --with-pic
398 dnl  correctly, manually add -DPIC to the options for
399 dnl  nasm / yasm here.
400 AS_IF([test x$with_pic = xyes], [X86ASMDEFS="${X86ASMDEFS} -DPIC"])
402 AC_SUBST([X86ASMFLAGS])
403 AC_SUBST([X86ASMDEFS])
406 dnl Sadly autoconf does not think about testing foo.exe when ask to test
407 dnl for program foo on win32
408 case "${build_os}" in
409     cygwin|msys|mingw32)
410         ac_executable_extensions=".exe"
411         BUILDEXEEXT=".exe"
412     ;;
413     os2*)
414         BUILDEXEEXT=".exe"
415     ;;
416     *)
417     ;;
418 esac
419 AC_SUBST([BUILDEXEEXT])
421 dnl Android is linux, but a bit different
422 AS_IF([test "$SYS" = linux],[
423     AC_MSG_CHECKING([for an Android system])
424     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
425         [[#ifndef __ANDROID__
426          # error Not Android
427          #endif
428         ]],[[;]])
429     ],[
430       HAVE_ANDROID="1"
431       AC_MSG_RESULT([yes])
432     ],[
433       AC_MSG_RESULT([no])
434     ])
436 AM_CONDITIONAL([HAVE_ANDROID], [test "${HAVE_ANDROID}" = "1"])
439 dnl  Check for the contrib directory
441 AC_ARG_WITH(contrib,
442   AS_HELP_STRING([--with-contrib[=DIR]],
443     [search for 3rd party libraries in DIR/include and DIR/lib])
445 AC_MSG_CHECKING([for 3rd party libraries path])
446 AS_IF([test -z "${with_contrib}" || test "${with_contrib}" = "yes"], [
447   CONTRIB_DIR="${srcdir}/contrib/${host}"
448   AS_IF([test ! -d "${CONTRIB_DIR}"], [
449     echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
450     CONTRIB_DIR="${srcdir}/contrib/`$CC -dumpmachine`"
451     AS_IF([test ! -d "${CONTRIB_DIR}"], [
452       echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
453       CONTRIB_DIR=""
454       AC_MSG_RESULT([not found])
455     ])
456   ])
457 ], [
458   AS_IF([test "${with_contrib}" != "no"], [
459     CONTRIB_DIR="${with_contrib}"
460   ], [
461     CONTRIB_DIR=""
462     AC_MSG_RESULT([disabled])
463   ])
465 AS_IF([test -n "${CONTRIB_DIR}"], [
466   AS_IF([test -d "${CONTRIB_DIR}/lib"],[
467     CONTRIB_DIR=`cd "${CONTRIB_DIR}" && pwd`
468   ], [
469     echo "${CONTRIB_DIR}/lib not found" >&AS_MESSAGE_LOG_FD
470     CONTRIB_DIR=""
471     AC_MSG_RESULT([not usable])
472   ])
475 AS_IF([test -n "${CONTRIB_DIR}"], [
476   AC_MSG_RESULT([${CONTRIB_DIR}])
477   CPPFLAGS="${CPPFLAGS} -I${CONTRIB_DIR}/include"
478   CFLAGS="${CFLAGS} -I${CONTRIB_DIR}/include"
479   CXXFLAGS="${CXXFLAGS} -I${CONTRIB_DIR}/include"
480   OBJCFLAGS="${OBJCFLAGS} -I${CONTRIB_DIR}/include -F${CONTRIB_DIR} -F${CONTRIB_DIR}/Frameworks"
481   PKG_CONFIG_PATH="${CONTRIB_DIR}/lib/pkgconfig:${CONTRIB_DIR}/share/pkgconfig:${PKG_CONFIG_PATH}"
482   case "${build_os}" in
483       mingw32)
484           export PKG_CONFIG_PATH=`cygpath -mp ${PKG_CONFIG_PATH}`
485       ;;
486       *)
487           export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}"
488       ;;
489   esac
490   LDFLAGS="${LDFLAGS} -L${CONTRIB_DIR}/lib"
492   AS_IF([test -z "$LUAC"], [
493     dnl Old contribs mixed cross-tools and cross-compiled executables
494     AS_IF([test -x "${CONTRIB_DIR}/bin/luac${BUILDEXEEXT}"], [
495       LUAC="${CONTRIB_DIR}/bin/luac${BUILDEXEEXT}"
496     ])
498     dnl Newer contribs follow usual name space rules
499     AS_IF([test -x "${CONTRIB_DIR}/../bin/${host_alias}-luac${BUILDEXEEXT}"], [
500       LUAC="${CONTRIB_DIR}/../bin/${host_alias}-luac${BUILDEXEEXT}"
501     ])
502   ])
504   AS_IF([test "${SYS}" = "darwin"], [
505     export LD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$LD_LIBRARY_PATH"
506     export DYLD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$DYLD_LIBRARY_PATH"
507   ])
508 ], [
509   AS_IF([test -n "${with_contrib}" && test "${with_contrib}" != "no"], [
510     AC_MSG_ERROR([Third party libraries not found!])
511   ])
513 AC_SUBST([CONTRIB_DIR])
515 dnl Add extras/tools to the PATH
516 TOOLS_DIR="${srcdir}/extras/tools/build/bin"
517 AS_IF([test -d "${TOOLS_DIR}"], [
518     TOOLS_DIR=`cd "${TOOLS_DIR}" && pwd`
519     export PATH="${TOOLS_DIR}":$PATH
523 dnl  Libtool
524 dnl  It's very bad, but our former custom system was worst
525 dnl  -- Courmisch
528 dnl override platform specific check for dependent libraries
529 dnl otherwise libtool linking of shared libraries will
530 dnl fail on anything other than pass_all.
531 AC_CACHE_VAL(lt_cv_deplibs_check_method,
532     [lt_cv_deplibs_check_method=pass_all])
534 LT_INIT([dlopen win32-dll shared disable-static])
535 LT_LANG([C++])
536 LT_LANG([Windows Resource])
538 DOLT
540 lt_cv_deplibs_check_method=pass_all
542 AS_IF([test "${enable_shared}" = "no" -a "${enable_vlc}" != "no"], [
543   AC_MSG_ERROR([VLC is based on plugins. Shared libraries cannot be disabled.])
547 dnl Gettext stuff
549 AM_GNU_GETTEXT_VERSION([0.19.8])
550 AM_GNU_GETTEXT([external], [need-formatstring-macros])
553 dnl Iconv stuff
555 AM_ICONV
558 dnl checks for mingw
559 AS_IF([test "${SYS}" = "mingw32"], [
561 AC_PREPROC_IFELSE([AC_LANG_SOURCE([
562 #if !defined(__MINGW32__)
563 # error Not compiling with mingw
564 #endif
565     ])], [
567 dnl Check for broken versions of mingw-runtime compatability library
568     AC_MSG_CHECKING(for broken mingw-runtime)
569     AC_PREPROC_IFELSE([AC_LANG_SOURCE([
570 #include <_mingw.h>
571 #if defined(__MINGW64_VERSION_MAJOR)
572 # if __MINGW64_VERSION_MAJOR < 5
573 #  error Update your mingw-w64! This one is too old.
574 # endif
575 #else
576 # error You cannot compile with Mingw. Use Mingw-w64!
577 #endif
578     ])], [
579         AC_MSG_RESULT([ok])
580     ], [
581         AC_MSG_RESULT([present])
582         AC_MSG_ERROR([LibVLC requires Mingw-w64 version 5.0 or higher!])
583     ])
585     dnl force use of mingw provided c99 *printf over msvcrt
586     CPPFLAGS="${CPPFLAGS} -D__USE_MINGW_ANSI_STDIO=1"
588     dnl Check for the need to include the mingwex lib for mingw32
589     VLC_SAVE_FLAGS
590     AC_CHECK_LIB([mingwex], [opendir],
591         AC_CHECK_LIB([mingw32], [opendir],,
592             [VLC_ADD_LIBS([libvlccore],[-lmingwex])])
593     )
594     VLC_RESTORE_FLAGS
595     ], [
596         AC_MSG_RESULT([Not compiling with mingw])
597     ])
599     dnl Check for fnative-struct or mms-bitfields support for mingw32
600     AX_CHECK_COMPILE_FLAG([-mms-bitfields], [
601         AX_APPEND_FLAG([-mms-bitfields], [CFLAGS])
602         AX_APPEND_FLAG([-mms-bitfields], [CXXFLAGS])
603         # Check for the warning flag without "-Wno-", GCC accepts
604         # -Wno-<anything> for unsupported warnings, which can trigger
605         # other warnings instead.
606         AX_CHECK_COMPILE_FLAG([-Wincompatible-ms-struct], [
607             AX_APPEND_FLAG([-Wno-incompatible-ms-struct], [CFLAGS])
608             AX_APPEND_FLAG([-Wno-incompatible-ms-struct], [CXXFLAGS])
609         ])
610     ], [
611         AX_CHECK_COMPILE_FLAG([-fnative-struct], [
612             AX_APPEND_FLAG([-fnative-struct], [CFLAGS])
613             AX_APPEND_FLAG([-fnative-struct], [CXXFLAGS])
614         ])
615     ])
620 dnl Buggy glibc prevention. Purposedly not cached.
621 dnl See sourceware.org bugs 5058 and 5443.
622 dnl Ubuntu alone has 20 bug numbers for this...
624 AC_MSG_CHECKING(for buggy GNU/libc versions)
625 AC_PREPROC_IFELSE([AC_LANG_SOURCE([
626 #include <limits.h>
627 #if defined (__GLIBC__) && (__GLIBC__ == 2) \
628   && (__GLIBC_MINOR__ >= 5) && (__GLIBC_MINOR__ <= 7)
629 # error GNU/libc with dcgettext killer bug!
630 #endif
631 ])], [
632   AC_MSG_RESULT([not present])
633 ], [
634   AC_MSG_RESULT([found])
635   AS_IF([test "x${enable_nls}" != "xno"], [
636     AC_MSG_ERROR([Buggy GNU/libc (version 2.5 - 2.7) present. VLC would crash; there is no viable
637 work-around for this. Check with your distribution vendor on how to update the
638 glibc run-time. Alternatively, build with --disable-nls.])
639   ])
642 dnl Plugin compilation stuff
644 VLC_LIBRARY_SUFFIX
646 dnl Check for system libs needed
647 need_libc=false
649 dnl Check for usual libc functions
650 AC_CHECK_FUNCS([accept4 daemon fcntl flock fstatat fstatvfs fork getmntent_r getenv getpwuid_r isatty memalign mkostemp mmap open_memstream newlocale pipe2 pread posix_fadvise posix_madvise setlocale stricmp strnicmp strptime uselocale])
651 AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir flockfile fsync getdelim getpid lfind lldiv memrchr nrand48 poll posix_memalign recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy tfind timegm timespec_get strverscmp pathconf])
652 AC_REPLACE_FUNCS([gettimeofday])
653 AC_CHECK_FUNC(fdatasync,,
654   [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
657 VLC_REPLACE_DECL([realpath], [#include <stdlib.h>])
659 dnl mingw64 implements those as static inline, not functions with C linkage
660 VLC_REPLACE_DECL([asprintf], [#include <stdio.h>])
661 VLC_REPLACE_DECL([vasprintf], [#include <stdio.h>])
662 VLC_REPLACE_DECL([gmtime_r], [#include <time.h>])
663 VLC_REPLACE_DECL([localtime_r], [#include <time.h>])
665 dnl C11 static_assert()
666 AC_MSG_CHECKING([for static_assert in assert.h])
667 AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <assert.h>], [
668 static_assert(1, "The impossible happened.");
669 ])], [
670   AC_MSG_RESULT([yes])
671   AC_DEFINE([HAVE_STATIC_ASSERT], [1], [Define to 1 if <assert.h> defines static_assert.])
672 ], [
673   AC_MSG_RESULT([no])
676 # Windows CE does not have strcoll()
677 AC_FUNC_STRCOLL
679 dnl Check for non-standard system calls
680 case "$SYS" in
681   "linux")
682     AC_CHECK_FUNCS([eventfd vmsplice sched_getaffinity recvmmsg memfd_create])
683     ;;
684   "mingw32")
685     AC_CHECK_FUNCS([_lock_file])
686     ;;
687 esac
689 AH_BOTTOM([#include <vlc_fixups.h>])
691 dnl Check for struct pollfd
692 AC_CHECK_TYPES([struct pollfd],,,
693 [#include <sys/types.h>
694 #if HAVE_POLL
695 # include <poll.h>
696 #elif defined (_WIN32)
697 # include <winsock2.h>
698 #endif
701 dnl Check for struct timespec
702 AC_CHECK_TYPES([struct timespec],,,
703 [#include <time.h>])
705 dnl Check for max_align_t
706 AC_CHECK_TYPES([max_align_t],,,
707 [#include <stddef.h>])
709 dnl Checks for socket stuff
710 VLC_SAVE_FLAGS
711 SOCKET_LIBS=""
712 AC_SEARCH_LIBS(connect, [socket], [
713   AS_IF([test "$ac_cv_search_connect" != "none required"], [
714     SOCKET_LIBS="$ac_cv_search_connect"
715   ])
716 ], [
717   AS_IF([test "${SYS}" = "mingw32"], [
718     SOCKET_LIBS="-lws2_32 -liphlpapi"
719   ])
722 AC_SEARCH_LIBS([inet_pton], [nsl], [
723  AS_IF([test "$ac_cv_search_inet_pton" != "none required"], [
724     SOCKET_LIBS="$ac_cv_search_inet_pton $SOCKET_LIBS"
725   ])
726 ],, [${SOCKET_LIBS}])
728 LIBS="${LIBS} ${SOCKET_LIBS}"
729 AC_LINK_IFELSE([
730     AC_LANG_PROGRAM([#ifdef _WIN32
731         #include <ws2tcpip.h>
732         #include <windows.h>
733         # if _WIN32_WINNT < 0x600
734         #  error Needs vista+
735         # endif
736         #else
737         #include <sys/socket.h>
738         #include <arpa/inet.h>
739         #endif], [
740         char dst[[sizeof(struct in_addr)]];
741         inet_pton(AF_INET, "127.0.0.1", dst);
742     ])],[AC_DEFINE([HAVE_INET_PTON],[1],[Define to 1 if you have inet_pton function])],[AC_LIBOBJ([inet_pton])])
743 AC_CHECK_TYPES([struct if_nameindex],,,[#include <net/if.h>])
744 AC_CHECK_FUNCS([if_nameindex])
745 VLC_RESTORE_FLAGS
746 AC_SUBST([SOCKET_LIBS])
748 dnl Check for socklen_t
749 AH_TEMPLATE(socklen_t, [Define to `int' if <sys/socket.h> does not define.])
750 AC_CACHE_CHECK([for socklen_t in sys/socket.h], dnl ` (fix VIM syntax highlight
751 ac_cv_type_socklen_t,
752 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
753 [#include <sys/types.h>
754 #ifdef _WIN32
755 # include <winsock2.h>
756 # include <ws2tcpip.h>
757 #else
758 # include <sys/socket.h>
759 #endif]], [[socklen_t len; len = 0;]])],
760 ac_cv_type_socklen_t=yes,
761 ac_cv_type_socklen_t=no)])
762 AS_IF([test "$ac_cv_type_socklen_t" = no],
763  [AC_DEFINE(socklen_t, unsigned int)])
765 dnl Check for struct sockaddr_storage
766 AH_TEMPLATE(sockaddr_storage, [Define to `sockaddr' if <sys/socket.h> does not define.]) dnl ` (fix VIM syntax highlight
767 AH_TEMPLATE(ss_family, [Define to `sa_family' if <sys/socket.h> does not define.]) dnl ` (fix VIM syntax highlight
768 AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_struct_sockaddr_storage,
769   [AC_TRY_COMPILE(
770     [#include <sys/types.h>
771      #if defined( _WIN32 )
772      # include <winsock2.h>
773      #else
774      # include <sys/socket.h>
775      #endif], [struct sockaddr_storage addr;],
776      ac_cv_struct_sockaddr_storage=yes,
777      ac_cv_struct_sockaddr_storage=no)])
778 AS_IF([test "${ac_cv_struct_sockaddr_storage}" = no], [
779   AC_DEFINE(sockaddr_storage, sockaddr)
780   AC_DEFINE(ss_family, sa_family)
783 dnl FreeBSD has a gnugetopt library for this:
784 GNUGETOPT_LIBS=""
785 AC_CHECK_FUNC(getopt_long,, [
786   AC_CHECK_LIB([gnugetopt],[getopt_long], [
787     GNUGETOPT_LIBS="-lgnugetopt"
788   ])
790 AC_SUBST([GNUGETOPT_LIBS])
792 AC_CHECK_LIB([m], [cos], [
793   LIBM="-lm"
794 ], [
795   LIBM=""
797 AC_SUBST([LIBM])
799 AC_CHECK_LIB([m], [lrintf], [
800   AC_DEFINE(HAVE_LRINTF, 1, [Define to 1 if you have the lrintf function])
801   VLC_ADD_LIBS([skins2],[-lm])
803 AC_CHECK_LIB([m], [nanf],
804   AC_DEFINE(HAVE_NANF, 1, [Define to 1 if you have the NANF function])
806 AC_CHECK_LIB([m], [sincos], [
807   AC_DEFINE(HAVE_SINCOS, 1, [Define to 1 if you have the sincos function.])
808 ], [
809   AC_LIBOBJ([sincos])
812 AC_MSG_CHECKING([broken qsort_r prototype])
813 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdlib.h>
815 _Static_assert(_Generic((qsort_r),
816     void (*)(void *, size_t, size_t, void *,
817              int (*)(void *, const void *, const void *)) : 1, default: 0),
818     "Bad prototype not matched");
819 ])], [
820   AC_MSG_RESULT([broken])
821   AC_DEFINE([HAVE_BROKEN_QSORT_R], 1, [Defined to 1 if the qsort_r() prototype contradicts the upcoming POSIX standard.])
822 ], [
823   AC_MSG_RESULT([no])
826 AC_MSG_CHECKING([_Thread_local support])
827 AC_COMPILE_IFELSE([AC_LANG_SOURCE([_Thread_local int foo = 0;
828                    int main() {}])], [
829     AC_MSG_RESULT([ok])
830     AC_DEFINE(HAVE_THREAD_LOCAL, 1, [Defined to 1 if C11 _Thread_local storage qualifier is supported])
831 ],[ AC_MSG_RESULT([no])])
833 dnl __STDC_NO_THREADS__ can't be trusted on some platforms.
834 dnl check for its availability explicitely
835 AC_CHECK_HEADERS([threads.h])
837 AC_CHECK_LIB([anl],[getaddrinfo_a],[
838   AC_DEFINE(HAVE_LIBANL, 1, [Define to 1 if you have the anl library])
841 dnl Check for dynamic plugins
842 LIBDL=""
843 have_dynamic_objects="no"
844 VLC_SAVE_FLAGS
845 AC_SEARCH_LIBS(dlsym, [dl svld], [
846   AS_IF([test "$ac_cv_search_dlsym" != "none required"], [
847     LIBDL="$ac_cv_search_dlsym"
848   ])
849   have_dynamic_objects="yes"
851 VLC_RESTORE_FLAGS
853 # Windows
854 AS_IF([test "${SYS}" = "mingw32"], [
855   LIBDL=""
856   have_dynamic_objects="yes" #assume we can use shared objects
859 AC_ARG_WITH([libfuzzer],
860     AS_HELP_STRING([--with-libfuzzer=DIR],
861         [use libFuzzer library from DIR and triggers sanitize coverage (default disabled)]),
862      [],
863      [with_libfuzzer=no])
864 AS_VAR_IF(with_libfuzzer, no, [], [
865     enable_shared=no
866     enable_static=yes
867     enable_vlc=no
869 AM_CONDITIONAL([HAVE_LIBFUZZER], [test "${with_libfuzzer}" != "no"])
871 AS_IF([test "${enable_shared}" = "no"], [
872   have_dynamic_objects=no
874 AM_CONDITIONAL([HAVE_DYNAMIC_PLUGINS], [test "${have_dynamic_objects}" != "no"])
876 AC_SUBST([LIBDL])
878 AS_IF([test "${SYS}" != "mingw32"], [
879   AC_SEARCH_LIBS([clock_nanosleep], [rt pthread], [
880     AS_IF([test "$ac_cv_search_clock_nanosleep" != "none required"], [
881       LIBRT="$ac_cv_search_clock_nanosleep"
882     ])
883   ], [
884     AC_SEARCH_LIBS([nanosleep], [rt pthread posix4], [
885       AS_IF([test "$ac_cv_search_nanosleep" != "none required"], [
886         LIBRT="$ac_cv_search_nanosleep"
887       ])
888     ])
889   ])
891 AC_SUBST([LIBRT])
894 dnl Check for headers
897 dnl  POSIX
898 AC_CHECK_HEADERS([arpa/inet.h pthread.h search.h sys/shm.h sys/socket.h sys/uio.h])
899 AC_CHECK_HEADERS([net/if.h], [], [],
901 #include <sys/types.h>
902 #include <sys/socket.h>
904 AC_CHECK_HEADER([syslog.h], [have_syslog="yes"], [have_syslog="no"])
905 AM_CONDITIONAL([HAVE_SYSLOG], [test "$have_syslog" = "yes"])
907 dnl  BSD
908 AC_CHECK_HEADERS([netinet/tcp.h netinet/udplite.h sys/param.h sys/mount.h])
910 dnl  GNU/Linux
911 AC_CHECK_HEADERS([features.h getopt.h linux/dccp.h linux/magic.h sys/eventfd.h])
913 dnl  MacOS
914 AC_CHECK_HEADERS([xlocale.h])
916 dnl Check if C++ headers define locale_t
917 AC_LANG_PUSH(C++)
918 AC_CACHE_CHECK([if C++ headers define locale_t],
919   [ac_cv_cxx_locale_t],
920   [ac_cv_cxx_locale_t=no
921    AC_TRY_COMPILE([#include <locale>], [locale_t loc;],
922                     [ac_cv_cxx_locale_t=yes])])
923 if test "${ac_cv_cxx_locale_t}" != "no"; then
924   AC_DEFINE(HAVE_CXX_LOCALE_T, 1, Define to 1 if C++ headers define locale_t)
926 AC_LANG_POP(C++)
928 dnl LP64 and LLP64 architectures had better define ssize_t by themselves...
929 AH_TEMPLATE(ssize_t, [Define to `int' if <stddef.h> does not define.]) dnl ` (fix VIM syntax highlight
930 AC_CHECK_TYPE(ssize_t,, [
931   AC_DEFINE(ssize_t, int)
934 dnl It seems that autoconf detects pkg-config only during the first
935 dnl PKG_CHECK_MODULES from configure.ac - which makes sense. But in our case,
936 dnl it is nested within a conditional block, so it was not working right.
937 PKG_PROG_PKG_CONFIG()
939 dnl On some OS we need static linking
940 AS_IF([test -n "${PKG_CONFIG}" ],[
941     AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "darwin" -o "${SYS}" = "os2" ],[
942         PKG_CONFIG="${PKG_CONFIG} --static"
943     ])
948 dnl Check for zlib.h and -lz if available
950 AC_CHECK_HEADERS([zlib.h], [ have_zlib=yes ], [ have_zlib=no ])
951 AM_CONDITIONAL([HAVE_ZLIB], [ test "${have_zlib}" = "yes" ])
952 if test "${have_zlib}" = "yes"
953 then
954   VLC_ADD_LIBS([sap],[-lz])
959 dnl Domain name i18n support via GNU libidn
961 PKG_CHECK_MODULES([IDN], [libidn], [
962   have_libidn="yes"
963   AC_DEFINE([HAVE_IDN], 1, [Define to 1 if you have GNU libidn.])
964 ], [
965   have_libidn="no"
969 dnl Check for dbus
970 AC_ARG_ENABLE([dbus],
971   AS_HELP_STRING([--enable-dbus],
972     [compile D-Bus message bus support (default enabled)]))
973 have_dbus="no"
974 AS_IF([test "${enable_dbus}" != "no"], [
975   PKG_CHECK_MODULES(DBUS, [dbus-1 >= 1.6.0], [
976     have_dbus="yes"
977   ], [
978     AS_IF([test -n "${enable_dbus}"], [
979       AC_MSG_ERROR([${DBUS_PKG_ERRORS}.])
980     ], [
981       AC_MSG_WARN([${DBUS_PKG_ERRORS}.])
982     ])
983   ])
985 AM_CONDITIONAL([HAVE_DBUS], [test "${have_dbus}" = "yes"])
988 dnl Check for systemd
989 PKG_CHECK_MODULES([SYSTEMD], [libsystemd], [
990   have_systemd="yes"
991 ], [
992   AC_MSG_WARN([${SYSTEMD_PKG_ERRORS}.])
994 AM_CONDITIONAL([HAVE_SYSTEMD], [test "${have_systemd}" = "yes"])
997 EXTEND_HELP_STRING([Optimization options:])
999 dnl  Compiler warnings
1002 AX_APPEND_COMPILE_FLAGS([-Wall -Wextra -Wsign-compare -Wundef -Wpointer-arith -Wvolatile-register-var -Wformat -Wformat-security -Wduplicated-branches -Wduplicated-cond], [CFLAGS])
1003 AX_APPEND_COMPILE_FLAGS([-Wall -Wextra -Wsign-compare -Wundef -Wpointer-arith -Wvolatile-register-var -Wformat -Wformat-security -Wduplicated-branches -Wduplicated-cond], [CXXFLAGS])
1005 AX_APPEND_COMPILE_FLAGS([-Wbad-function-cast -Wwrite-strings -Wmissing-prototypes -Werror-implicit-function-declaration -Winit-self -Wlogical-op -Wshadow=local -Wmultistatement-macros], [CFLAGS])
1006 AX_APPEND_COMPILE_FLAGS([-pipe], [CFLAGS])
1009 dnl  Debugging mode
1011 AC_ARG_ENABLE([debug],
1012   AS_HELP_STRING([--disable-debug],
1013     [disable run-time assertions (default enabled)]),,
1014   [enable_debug="yes"])
1015 AH_TEMPLATE(NDEBUG,
1016             [Define to 1 if debug code should NOT be compiled])
1017 AS_IF([test "${enable_debug}" != "no"], [
1018   AC_CHECK_HEADERS([valgrind/valgrind.h])
1019 ], [
1020   AC_DEFINE(NDEBUG)
1024 dnl  Profiling
1026 AC_ARG_ENABLE([gprof],
1027   AS_HELP_STRING([--enable-gprof],[profile with gprof (default disabled)]),,
1028   [enable_gprof="no"])
1029 AS_IF([test "${enable_gprof}" != "no"], [
1030   CFLAGS="${CFLAGS} -pg"
1031   CXXFLAGS="${CXXFLAGS} -pg"
1032   OBJCFLAGS="${OBJCFLAGS} -pg"
1033   LDFLAGS="${LDFLAGS} -pg"
1036 AC_ARG_ENABLE([cprof],
1037   AS_HELP_STRING([--enable-cprof],[profile with cprof (default disabled)]),,
1038   [enable_cprof="no"])
1039 AS_IF([test "${enable_gprof}" != "no"], [
1040   CFLAGS="${CFLAGS} -finstrument-functions"
1041   CXXFLAGS="${CXXFLAGS} -finstrument-functions"
1042   OBJCFLAGS="${OBJCFLAGS} -finstrument-functions"
1043   LDFLAGS="${LDFLAGS} -finstrument-functions"
1047 dnl  Test coverage
1049 AC_ARG_ENABLE([coverage],
1050   AS_HELP_STRING([--enable-coverage],
1051     [build for test coverage (default disabled)]),,
1052   [enable_coverage="no"])
1053 AS_IF([test "${enable_coverage}" != "no"], [
1054   CFLAGS="-fprofile-arcs -ftest-coverage ${CFLAGS}"
1055   CXXFLAGS="-fprofile-arcs -ftest-coverage ${CXXFLAGS}"
1056   LDFLAGS="-lgcov ${LDFLAGS}"
1059 AS_IF([test "${SYS}" != "mingw32" -a "${SYS}" != "os2"], [
1060   VLC_SAVE_FLAGS
1061   CFLAGS="${CFLAGS} -fvisibility=hidden"
1062   CXXFLAGS="${CXXFLAGS} -fvisibility=hidden"
1063   OBJCFLAGS="${OBJCFLAGS} -fvisibility=hidden"
1064   AC_CACHE_CHECK([if $CC accepts -fvisibility=hidden],
1065                  [ac_cv_c_visibility_hidden], [
1066     AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
1067       ac_cv_c_visibility_hidden=yes
1068     ], [
1069       ac_cv_c_visibility_hidden=no
1070     ])
1071   ])
1072   AS_IF([test "${ac_cv_c_visibility_hidden}" = "no"], [VLC_RESTORE_FLAGS])
1076 dnl Sanitizer flags
1078 AC_ARG_WITH([sanitizer],
1079     AS_HELP_STRING([--with-sanitizer=(address/memory/undefined/thread)],
1080         [build with sanitizer flags (default disabled)]),
1081      [],
1082      [with_sanitizer=no])
1084 AS_VAR_IF(with_sanitizer, no, [], [
1085     AX_CHECK_COMPILE_FLAG([-fsanitize=${with_sanitizer}], [
1086         AX_APPEND_FLAG([-fsanitize=${with_sanitizer}])
1087         AX_APPEND_FLAG([-fsanitize=${with_sanitizer}], [CXXFLAGS])
1088         AX_APPEND_FLAG([-fsanitize=${with_sanitizer}], [LDFLAGS])
1089     ], [
1090         AC_MSG_ERROR(["-fsanitize=${with_sanitizer} not supported!"])
1091     ])
1092     AX_APPEND_FLAG([-g])
1093     AX_APPEND_FLAG([-g], [CXXFLAGS])
1095     AS_IF([test -z "${with_sanitizer##*address*}" ], [
1096        AX_APPEND_COMPILE_FLAGS([-fsanitize-address-use-after-scope -fno-omit-frame-pointer -fsanitize=pointer-compare -fsanitize=pointer-subtract])
1097        AX_APPEND_COMPILE_FLAGS([-fsanitize-address-use-after-scope -fno-omit-frame-pointer -fsanitize=pointer-compare -fsanitize=pointer-subtract], [CXXFLAGS])
1098     ])
1099     AS_IF([test -z "${with_sanitizer##*memory*}" ], [
1100         AX_APPEND_COMPILE_FLAGS([-fPIE -pie])
1101         AX_APPEND_COMPILE_FLAGS([-fPIE -pie], [CXXFLAGS])
1102     ])
1103     AS_IF([test -z "${with_sanitizer##*thread*}" ], [
1104         AX_APPEND_COMPILE_FLAGS([-fPIE -pie])
1105         AX_APPEND_COMPILE_FLAGS([-fPIE -pie], [CXXFLAGS])
1106     ])
1110 dnl  Enable/disable optimizations
1112 AC_ARG_ENABLE([optimizations],
1113   AS_HELP_STRING([--disable-optimizations],
1114     [disable compiler optimizations (default enabled)]),,
1115   [enable_optimizations="yes"])
1117 dnl Check for various optimization flags
1118 AS_IF([test "${enable_optimizations}" != "no"], [
1120   dnl -O3 only in production builds
1121   AS_IF([test "${enable_debug}" = "no"], [
1122     VLC_SAVE_FLAGS
1123     CFLAGS="${CFLAGS} -O3"
1124     CXXFLAGS="${CXXFLAGS} -O3"
1125     OBJCFLAGS="${OBJCFLAGS} -O3"
1126     AC_CACHE_CHECK([if $CC accepts -O3],  [ac_cv_c_o3], [
1127       AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
1128         ac_cv_c_o3=yes
1129       ], [
1130         ac_cv_c_o3=no
1131       ])
1132     ])
1133     AS_IF([test "${ac_cv_c_o3}" = "no"], [VLC_RESTORE_FLAGS])
1134   ])
1136   dnl Check for fast maths
1137   AX_APPEND_COMPILE_FLAGS([-fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-signaling-nans -fcx-limited-range], [CFLAGS])
1138   AX_APPEND_COMPILE_FLAGS([-fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-signaling-nans -fcx-limited-range], [CXXFLAGS])
1140 AH_BOTTOM([
1141 #if defined(_MSC_VER) && !defined(__clang__)
1142 # pragma fenv_access(off)
1143 # pragma fp_contract(on)
1144 #elif defined(__GNUC__)
1145 /* Not supported so far */
1146 #else
1147 # pragma STDC FENV_ACCESS OFF
1148 # pragma STDC FP_CONTRACT ON
1149 #endif
1152   dnl Check for -funroll-loops
1153   VLC_SAVE_FLAGS
1154   CFLAGS="${CFLAGS} -funroll-loops"
1155   CXXFLAGS="${CXXFLAGS} -funroll-loops"
1156   OBJCFLAGS="${OBJCFLAGS} -funroll-loops"
1157   AC_CACHE_CHECK([if $CC accepts -funroll-loops], [ac_cv_c_unroll_loops], [
1158     AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
1159       ac_cv_c_unroll_loops=yes
1160     ], [
1161       ac_cv_c_unroll_loops=no
1162     ])
1163   ])
1164   AS_IF([test "${ac_cv_c_unroll_loops}" = "no"], [VLC_RESTORE_FLAGS])
1166   AS_IF([test "$enable_debug" = "no"], [
1167     dnl Check for -fomit-frame-pointer
1168     VLC_SAVE_FLAGS
1169     CFLAGS="${CFLAGS} -fomit-frame-pointer"
1170     CXXFLAGS="${CXXFLAGS} -fomit-frame-pointer"
1171     OBJCFLAGS="${OBJCFLAGS} -fomit-frame-pointer"
1172     AC_CACHE_CHECK([if $CC accepts -fomit-frame-pointer],
1173       [ac_cv_c_omit_frame_pointer], [
1174       AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
1175         ac_cv_c_omit_frame_pointer=yes
1176       ], [
1177         ac_cv_c_omit_frame_pointer=no
1178       ])
1179     ])
1180     AS_IF([test "${ac_cv_c_omit_frame_pointer}" = "no"], [VLC_RESTORE_FLAGS])
1181   ])
1185 AC_ARG_ENABLE([ssp],
1186   AS_HELP_STRING([--disable-ssp],
1187   [disable stack smashing protection (default enabled for optimized builds)]), [],
1188   [enable_ssp="yes"])
1190 AS_IF([test "${enable_ssp}" != "no" -a "${enable_optimizations}" != "no"], [
1191   VLC_SAVE_FLAGS
1192   AX_APPEND_COMPILE_FLAGS([-fstack-protector-strong])
1193   AX_APPEND_COMPILE_FLAGS([-fstack-protector-strong], [CXXFLAGS])
1194   dnl Win32 requires linking to ssp for stack-protection
1195   AS_IF([test "${SYS}" = "mingw32"], [
1196       LDFLAGS="${LDFLAGS} -lssp"
1197       AC_CACHE_CHECK([if linker supports stack protectors], [ac_cv_ld_ssp], [
1198         AC_TRY_LINK([#include <stdio.h>],[char buf[100]; fgets(buf, sizeof(buf), stdin);], [
1199           ac_cv_ld_ssp="yes"
1200         ], [
1201           ac_cv_ld_ssp="no"
1202         ])
1203       ])
1204       AS_IF([test "${ac_cv_ld_ssp}" = "no"], [VLC_RESTORE_FLAGS])
1205   ])
1208 AS_IF([test "${SYS}" = "mingw32"], [
1209     dnl library for BCrypt APIs
1210     AS_IF([test "${vlc_winstore_app}" = 1],
1211           [LDFLAGS="${LDFLAGS} -lbcrypt"])
1214 VLC_SAVE_FLAGS
1215 LDFLAGS="${LDFLAGS} -Wl,-Bsymbolic"
1216 AC_CACHE_CHECK([if linker supports -Bsymbolic], [ac_cv_ld_bsymbolic], [
1217   AC_TRY_LINK([],, [
1218     ac_cv_ld_bsymbolic="-Wl,-Bsymbolic"
1219   ], [
1220     ac_cv_ld_bsymbolic=""
1221   ])
1223 VLC_RESTORE_FLAGS
1224 SYMBOLIC_LDFLAGS="${ac_cv_ld_bsymbolic}"
1225 AC_SUBST([SYMBOLIC_LDFLAGS])
1227 VLC_SAVE_FLAGS
1228 LDFLAGS="${LDFLAGS} -Wl,-z,defs"
1229 AC_CACHE_CHECK([if linker supports -z,defs], [ac_cv_ld_z_defs], [
1230   AC_TRY_LINK([],, [
1231     ac_cv_ld_z_defs="yes"
1232   ], [
1233     ac_cv_ld_z_defs="no"
1234   ])
1236 AS_IF([test "${ac_cv_ld_z_defs}" = "no"], [VLC_RESTORE_FLAGS])
1238 dnl Check for __attribute__((packed))
1239 AC_CACHE_CHECK([for __attribute__((packed))],
1240   [ac_cv_c_attribute_packed],
1241   [ac_cv_c_attribute_packed=no
1242    AC_TRY_COMPILE(, [struct __attribute__((__packed__)) foo { int a; } b; (void)b;],
1243                     [ac_cv_c_attribute_packed=yes])])
1244 if test "${ac_cv_c_attribute_packed}" != "no"; then
1245   AC_DEFINE(HAVE_ATTRIBUTE_PACKED, 1, Support for __attribute__((packed)) for structs)
1249 dnl  Check the CPU
1251 case "${host_cpu}" in
1252   "")
1253     ARCH=unknown
1254     ;;
1255   armv*)
1256     ARCH="arm"
1257     host_cpu="arm"
1258     ;;
1259   *)
1260     ARCH="${host_cpu}"
1261     ;;
1262 esac
1264 dnl Check for backtrace() support
1265 AC_CHECK_HEADERS([execinfo.h])
1266 AC_CHECK_FUNCS([backtrace])
1269 dnl  default modules
1271 ALIASES="${ALIASES} cvlc rvlc"
1274 dnl  Accelerated modules
1277 dnl  Check for fully working MMX intrinsics
1278 dnl  We need support for -mmmx, we need <mmintrin.h>, and we also need a
1279 dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1280 AC_ARG_ENABLE([mmx],
1281   AS_HELP_STRING([--disable-mmx],
1282     [disable MMX optimizations (default auto)]),,[
1283   case "${host_cpu}" in
1284     i?86|x86_64)
1285       enable_mmx="yes"
1286       ;;
1287     *)
1288       enable_mmx="no"
1289       ;;
1290   esac
1292 have_mmx="no"
1293 have_mmxext="no"
1294 AS_IF([test "${enable_mmx}" != "no"], [
1295   ARCH="${ARCH} mmx"
1296   VLC_SAVE_FLAGS
1297   CFLAGS="${CFLAGS} -mmmx"
1298   AC_CACHE_CHECK([if $CC groks MMX intrinsics], [ac_cv_c_mmx_intrinsics], [
1299     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1300 [#include <mmintrin.h>
1301 #include <stdint.h>
1302 uint64_t frobzor;]], [
1303 [__m64 a, b, c;
1304 a = b = c = (__m64)frobzor;
1305 a = _mm_slli_pi16(a, 3);
1306 a = _mm_adds_pi16(a, b);
1307 c = _mm_srli_pi16(c, 8);
1308 c = _mm_slli_pi16(c, 3);
1309 b = _mm_adds_pi16(b, c);
1310 a = _mm_unpacklo_pi8(a, b);
1311 frobzor = (uint64_t)a;]])], [
1312       ac_cv_c_mmx_intrinsics=yes
1313     ], [
1314       ac_cv_c_mmx_intrinsics=no
1315     ])
1316   ])
1317   VLC_RESTORE_FLAGS
1318   AS_IF([test "${ac_cv_c_mmx_intrinsics}" != "no"], [
1319     AC_DEFINE(HAVE_MMX_INTRINSICS, 1, [Define to 1 if MMX intrinsics are available.])
1320   ])
1322   VLC_SAVE_FLAGS
1323   CFLAGS="${CFLAGS} -mmmx"
1324   AC_CACHE_CHECK([if $CC groks MMX inline assembly], [ac_cv_mmx_inline], [
1325     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1326 void *p;
1327 asm volatile("packuswb %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
1329     ], [
1330       ac_cv_mmx_inline=yes
1331     ], [
1332       ac_cv_mmx_inline=no
1333     ])
1334   ])
1335   AS_IF([test "${ac_cv_mmx_inline}" != "no"], [
1336     AC_DEFINE(CAN_COMPILE_MMX, 1, [Define to 1 inline MMX assembly is available.])
1337     have_mmx="yes"
1338   ])
1340   AC_CACHE_CHECK([if $CC groks MMX EXT inline assembly],
1341                  [ac_cv_mmxext_inline], [
1342     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1343 void *p;
1344 asm volatile("maskmovq %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
1346     ], [
1347       ac_cv_mmxext_inline=yes
1348     ], [
1349       ac_cv_mmxext_inline=no
1350     ])
1351   ])
1352   VLC_RESTORE_FLAGS
1353   AS_IF([test "${ac_cv_mmxext_inline}" != "no"], [
1354     AC_DEFINE(CAN_COMPILE_MMXEXT, 1, [Define to 1 if MMX EXT inline assembly is available.])
1355     have_mmxext="yes"
1356   ])
1358 AM_CONDITIONAL([HAVE_MMX], [test "${have_mmx}" = "yes"])
1359 AM_CONDITIONAL([HAVE_MMXEXT], [test "${have_mmxext}" = "yes"])
1361 dnl  Check for fully workin SSE2 intrinsics
1362 dnl  We need support for -msse[2], we need <emmintrin.h>, and we also need a
1363 dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1364 AC_ARG_ENABLE([sse],
1365   AS_HELP_STRING([--disable-sse],
1366     [disable SSE (1-4) optimizations (default auto)]),, [
1367   case "${host_cpu}" in
1368     i?86|x86_64)
1369       enable_sse=yes
1370       ;;
1371     *)
1372       enable_sse=no
1373       ;;
1374   esac
1376 have_sse2="no"
1377 AS_IF([test "${enable_sse}" != "no"], [
1378   ARCH="${ARCH} sse sse2"
1380   VLC_SAVE_FLAGS
1381   CFLAGS="${CFLAGS} -msse2"
1382   AC_CACHE_CHECK([if $CC groks SSE2 intrinsics], [ac_cv_c_sse2_intrinsics], [
1383     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1384 [#include <emmintrin.h>
1385 #include <stdint.h>
1386 uint64_t frobzor;]], [
1387 [__m128i a, b, c;
1388 a = b = c = _mm_set1_epi64((__m64)frobzor);
1389 a = _mm_slli_epi16(a, 3);
1390 a = _mm_adds_epi16(a, b);
1391 c = _mm_srli_epi16(c, 8);
1392 c = _mm_slli_epi16(c, 3);
1393 b = _mm_adds_epi16(b, c);
1394 a = _mm_unpacklo_epi8(a, b);
1395 frobzor = (uint64_t)_mm_movepi64_pi64(a);]])], [
1396       ac_cv_c_sse2_intrinsics=yes
1397     ], [
1398       ac_cv_c_sse2_intrinsics=no
1399     ])
1400   ])
1401   VLC_RESTORE_FLAGS
1402   AS_IF([test "${ac_cv_c_sse2_intrinsics}" != "no"], [
1403     AC_DEFINE(HAVE_SSE2_INTRINSICS, 1, [Define to 1 if SSE2 intrinsics are available.])
1404   ])
1406   VLC_SAVE_FLAGS
1407   CFLAGS="${CFLAGS} -msse"
1408   AC_CACHE_CHECK([if $CC groks SSE inline assembly], [ac_cv_sse_inline], [
1409     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1410 void *p;
1411 asm volatile("xorps %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
1413     ], [
1414       ac_cv_sse_inline=yes
1415     ], [
1416       ac_cv_sse_inline=no
1417     ])
1418   ])
1420   AS_IF([test "${ac_cv_sse_inline}" != "no" -a "${SYS}" != "solaris"], [
1421     AC_DEFINE(CAN_COMPILE_SSE, 1, [Define to 1 if SSE inline assembly is available.])
1422   ])
1424   AC_CACHE_CHECK([if $CC groks SSE2 inline assembly], [ac_cv_sse2_inline], [
1425     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1426 void *p;
1427 asm volatile("punpckhqdq %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
1429     ], [
1430       ac_cv_sse2_inline=yes
1431     ], [
1432       ac_cv_sse2_inline=no
1433     ])
1434   ])
1435   AS_IF([test "${ac_cv_sse2_inline}" != "no" -a "${SYS}" != "solaris"], [
1436     AC_DEFINE(CAN_COMPILE_SSE2, 1, [Define to 1 if SSE2 inline assembly is available.])
1437     have_sse2="yes"
1438   ])
1440   # SSE3
1441   AC_CACHE_CHECK([if $CC groks SSE3 inline assembly], [ac_cv_sse3_inline], [
1442     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1443 void *p;
1444 asm volatile("movsldup %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1446     ], [
1447       ac_cv_sse3_inline=yes
1448     ], [
1449       ac_cv_sse3_inline=no
1450     ])
1451   ])
1453   AS_IF([test "${ac_cv_sse3_inline}" != "no"], [
1454     AC_DEFINE(CAN_COMPILE_SSE3, 1, [Define to 1 if SSE3 inline assembly is available.]) ])
1456   # SSSE3
1457   AC_CACHE_CHECK([if $CC groks SSSE3 inline assembly], [ac_cv_ssse3_inline], [
1458     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1459 void *p;
1460 asm volatile("pabsw %%xmm0,%%xmm0"::"r"(p):"xmm0");
1462     ], [
1463       ac_cv_ssse3_inline=yes
1464     ], [
1465       ac_cv_ssse3_inline=no
1466     ])
1467   ])
1469   AS_IF([test "${ac_cv_ssse3_inline}" != "no"], [
1470     AC_DEFINE(CAN_COMPILE_SSSE3, 1, [Define to 1 if SSSE3 inline assembly is available.]) ])
1472   # SSE4.1
1473   AC_CACHE_CHECK([if $CC groks SSE4.1 inline assembly],
1474                  [ac_cv_sse4_1_inline], [
1475     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1476 void *p;
1477 asm volatile("pmaxsb %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1479     ], [
1480       ac_cv_sse4_1_inline=yes
1481     ], [
1482       ac_cv_sse4_1_inline=no
1483     ])
1484   ])
1486   AS_IF([test "${ac_cv_sse4_1_inline}" != "no"], [
1487     AC_DEFINE(CAN_COMPILE_SSE4_1, 1, [Define to 1 if SSE4_1 inline assembly is available.]) ])
1489   # SSE4.2
1490   AC_CACHE_CHECK([if $CC groks SSE4.2 inline assembly],
1491                  [ac_cv_sse4_2_inline], [
1492     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1493 void *p;
1494 asm volatile("pcmpgtq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1496     ], [
1497       ac_cv_sse4_2_inline=yes
1498     ], [
1499       ac_cv_sse4_2_inline=no
1500     ])
1501   ])
1503   AS_IF([test "${ac_cv_sse4_2_inline}" != "no"], [
1504     AC_DEFINE(CAN_COMPILE_SSE4_2, 1, [Define to 1 if SSE4_2 inline assembly is available.]) ])
1506   # SSE4A
1507   AC_CACHE_CHECK([if $CC groks SSE4A inline assembly], [ac_cv_sse4a_inline], [
1508     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1509 void *p;
1510 asm volatile("insertq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
1512     ], [
1513       ac_cv_sse4a_inline=yes
1514     ], [
1515       ac_cv_sse4a_inline=no
1516     ])
1517   ])
1518   VLC_RESTORE_FLAGS
1519   AS_IF([test "${ac_cv_sse4a_inline}" != "no"], [
1520     AC_DEFINE([CAN_COMPILE_SSE4A], [1], [Define to 1 if SSE4A inline assembly is available.]) ])
1522 AM_CONDITIONAL([HAVE_SSE2], [test "$have_sse2" = "yes"])
1524 dnl  Check for fully workin AVX2 intrinsics
1525 dnl  We need support for -mavx[2], we need <immintrin.h>, and we also need a
1526 dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1527 AC_ARG_ENABLE([avx],
1528   AS_HELP_STRING([--disable-avx],
1529     [disable AVX (1-2) optimizations (default auto)]),, [
1530   case "${host_cpu}" in
1531     i?86|x86_64)
1532       enable_avx=yes
1533       ;;
1534     *)
1535       enable_avx=no
1536       ;;
1537   esac
1539 have_avx2="no"
1540 AS_IF([test "${enable_avx}" != "no"], [
1541   ARCH="${ARCH} avx avx2"
1543   VLC_SAVE_FLAGS
1544   CFLAGS="${CFLAGS} -mavx2"
1545   AC_CACHE_CHECK([if $CC groks AVX2 intrinsics], [ac_cv_c_avx2_intrinsics], [
1546     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1547 [#include <immintrin.h>
1548 #include <stdint.h>
1549 uint64_t frobzor;]], [
1550 [__m256i a, b, c;
1551 a = b = c = _mm256_set1_epi64x((int64_t)frobzor);
1552 a = _mm256_slli_epi16(a, 3);
1553 a = _mm256_adds_epi16(a, b);
1554 c = _mm256_srli_epi16(c, 8);
1555 c = _mm256_slli_epi16(c, 3);
1556 b = _mm256_adds_epi16(b, c);
1557 a = _mm256_unpacklo_epi8(a, b);
1558 frobzor = (uint64_t)_mm256_extract_epi64(a, 0);]])], [
1559       ac_cv_c_avx2_intrinsics=yes
1560     ], [
1561       ac_cv_c_avx2_intrinsics=no
1562     ])
1563   ])
1564   VLC_RESTORE_FLAGS
1565   AS_IF([test "${ac_cv_c_avx2_intrinsics}" != "no"], [
1566     AC_DEFINE(HAVE_AVX2_INTRINSICS, 1, [Define to 1 if AVX2 intrinsics are available.])
1567   ])
1569   VLC_SAVE_FLAGS
1570   CFLAGS="${CFLAGS} -mavx"
1571   AC_CACHE_CHECK([if $CC groks AVX inline assembly], [ac_cv_avx_inline], [
1572     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1573 void *p;
1574 asm volatile("xorps256 %%ymm1,%%ymm2"::"r"(p):"ymm1", "ymm2");
1576     ], [
1577       ac_cv_avx_inline=yes
1578     ], [
1579       ac_cv_avx_inline=no
1580     ])
1581   ])
1583   AS_IF([test "${ac_cv_avx_inline}" != "no" -a "${SYS}" != "solaris"], [
1584     AC_DEFINE(CAN_COMPILE_AVX, 1, [Define to 1 if AVX inline assembly is available.])
1585   ])
1587   AC_CACHE_CHECK([if $CC groks AVX2 inline assembly], [ac_cv_avx2_inline], [
1588     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1589 void *p;
1590 asm volatile("punpckhqdq256 %%ymm1,%%ymm2"::"r"(p):"ymm1", "ymm2");
1592     ], [
1593       ac_cv_avx2_inline=yes
1594     ], [
1595       ac_cv_avx2_inline=no
1596     ])
1597   ])
1598   VLC_RESTORE_FLAGS
1599   AS_IF([test "${ac_cv_avx2_inline}" != "no" -a "${SYS}" != "solaris"], [
1600     AC_DEFINE(CAN_COMPILE_AVX2, 1, [Define to 1 if AVX2 inline assembly is available.])
1601     have_avx2="yes"
1602   ])
1604 AM_CONDITIONAL([HAVE_AVX2], [test "$have_avx2" = "yes"])
1606 VLC_SAVE_FLAGS
1607 CFLAGS="${CFLAGS} -mmmx"
1608 have_3dnow="no"
1609 AC_CACHE_CHECK([if $CC groks 3D Now! inline assembly], [ac_cv_3dnow_inline], [
1610   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
1611 void *p;
1612 asm volatile("pfadd %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
1614   ], [
1615     ac_cv_3dnow_inline=yes
1616   ], [
1617     ac_cv_3dnow_inline=no
1618   ])
1620 VLC_RESTORE_FLAGS
1621 AS_IF([test "${ac_cv_3dnow_inline}" != "no"], [
1622   AC_DEFINE([CAN_COMPILE_3DNOW], 1,
1623             [Define to 1 if 3D Now! inline assembly is available.])
1624   have_3dnow="yes"
1626 AM_CONDITIONAL([HAVE_3DNOW], [test "$have_3dnow" = "yes"])
1629 AC_ARG_ENABLE([neon],
1630   AS_HELP_STRING([--disable-neon],
1631     [disable ARM NEON optimizations (default auto)]),, [
1632   case "${host_cpu}" in
1633     "arm")
1634       enable_neon="32"
1635       ;;
1636     "aarch64")
1637       enable_neon="64"
1638       ;;
1639     *)
1640       enable_neon="no"
1641       ;;
1642   esac
1644 AS_IF([test "${enable_neon}" != "no"], [
1645   VLC_SAVE_FLAGS
1646   AC_CACHE_CHECK([if $CCAS groks ARM NEON assembly], [ac_cv_arm_neon], [
1647     AS_IF([test "${enable_neon}" != "64"], [
1648       CFLAGS="${CFLAGS} -mfpu=neon -mhard-float"
1649       AC_COMPILE_IFELSE([
1650         AC_LANG_PROGRAM(,[[
1651 asm volatile("vqmovun.s64 d0, q1":::"d0");
1653       ], [
1654         ac_cv_arm_neon="32"
1655       ], [
1656         ac_cv_arm_neon="no"
1657       ])
1658     ], [
1659       CFLAGS="${CFLAGS} -march=armv8-a+simd"
1660       AC_COMPILE_IFELSE([
1661         AC_LANG_PROGRAM(,[[
1662 asm volatile("uhadd v0.8b, v0.8b, v1.8b":::"v0");
1664       ], [
1665         ac_cv_arm_neon="64"
1666       ], [
1667         ac_cv_arm_neon="no"
1668       ])
1669     ])
1670   ])
1671   VLC_RESTORE_FLAGS
1673 AM_CONDITIONAL([HAVE_NEON], [test "${ac_cv_arm_neon}" = "32"])
1674 AM_CONDITIONAL([HAVE_ARM64], [test "${ac_cv_arm_neon}" = "64"])
1676 AC_ARG_ENABLE([sve],
1677   AS_HELP_STRING([--disable-sve],
1678     [disable ARM SVE optimizations (default auto)]),, [
1679   AS_IF([test "${host_cpu}" = "aarch64"], [enable_sve="yes"] ,[enable_sve="no"])
1681 AS_IF([test "${enable_sve}" != "no"], [
1682   VLC_SAVE_FLAGS
1683   CFLAGS="${CFLAGS} -march=armv8-a+sve"
1684   AC_CACHE_CHECK([if $CCAS groks ARM SVE assembly], [ac_cv_arm_sve], [
1685     AC_COMPILE_IFELSE([
1686       AC_LANG_PROGRAM(,[[
1687 asm volatile("ptrue p0.s" ::: "p0");
1689     ], [
1690       ac_cv_arm_sve="yes"
1691     ], [
1692       ac_cv_arm_sve="no"
1693     ])
1694   ])
1695   VLC_RESTORE_FLAGS
1697 AM_CONDITIONAL([HAVE_SVE], [test "${ac_cv_arm_sve}" = "yes"])
1699 AC_ARG_ENABLE([branch-protection],
1700   AS_HELP_STRING([--disable-branch-protection],
1701     [disable AArch64 branch protection (default auto)]),, [
1702   AS_IF([test "${host_cpu}" = "aarch64"], [enable_brprot="yes"] ,[enable_brprot="no"])
1704 AS_IF([test "${enable_brprot}" != "no"], [
1705   AX_CHECK_COMPILE_FLAG([-mbranch-protection=standard], [
1706     AX_APPEND_FLAG([-mbranch-protection=standard], [CFLAGS])
1707     AX_APPEND_FLAG([-mbranch-protection=standard], [CXXFLAGS])
1708   ])
1712 AC_ARG_ENABLE([altivec],
1713   AS_HELP_STRING([--disable-altivec],
1714     [disable AltiVec optimizations (default auto)]),, [
1715   AS_CASE("${host_cpu}", [powerpc*],
1716         [enable_altivec=yes], [enable_altivec=no])
1718 have_altivec="no"
1719 ALTIVEC_CFLAGS=""
1720 AS_IF([test "${enable_altivec}" = "yes"], [
1721   ARCH="${ARCH} altivec";
1722   VLC_SAVE_FLAGS
1723   AC_CACHE_CHECK([if $CC groks AltiVec inline assembly],
1724     [ac_cv_altivec_inline],
1725     [AC_TRY_COMPILE(,[asm volatile("vperm 0,1,2,3");],
1726          ac_cv_altivec_inline="yes",
1727          [CFLAGS="${CFLAGS} -Wa,-maltivec"
1728           AC_TRY_COMPILE(,[asm volatile("vperm 0,1,2,3");],
1729             [ac_cv_altivec_inline="-Wa,-maltivec"],
1730             ac_cv_altivec_inline=no)
1731          ])])
1732   VLC_RESTORE_FLAGS
1733   AS_IF([test "${ac_cv_altivec_inline}" != "no"], [
1734     AC_DEFINE(CAN_COMPILE_ALTIVEC, 1,
1735               [Define to 1 if AltiVec inline assembly is available.])
1736     AS_IF([test "${ac_cv_altivec_inline}" != "yes"], [
1737       ALTIVEC_CFLAGS="${ac_cv_altivec_inline}"
1738       VLC_ADD_CFLAGS([libvlccore],[${ac_cv_altivec_inline}])
1739     ])
1740     have_altivec="yes"
1741   ])
1743   VLC_SAVE_FLAGS
1744   AC_CACHE_CHECK([if \$CC groks AltiVec C extensions],
1745   [ac_cv_c_altivec], [
1746     CFLAGS="${CFLAGS} -maltivec"
1747     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1748 [#include <altivec.h>]], [
1749 [vec_ld(0, (unsigned char *)0);]])], [
1750       ac_cv_c_altivec="-maltivec"
1751     ], [
1752       ac_cv_c_altivec="no"
1753     ])
1754   ])
1755   VLC_RESTORE_FLAGS
1756   AS_IF([test "${ac_cv_c_altivec}" != "no"], [
1757     CPPFLAGS="${CPPFLAGS} ${ac_cv_c_altivec}"
1758     AC_DEFINE(CAN_COMPILE_C_ALTIVEC, 1, [Define to 1 if C AltiVec extensions are available.])
1759     VLC_ADD_CFLAGS([libvlccore],[${ac_cv_c_altivec}])
1760     ALTIVEC_CFLAGS="$ALTIVEC_CFLAGS ${ac_cv_c_altivec}"
1761     VLC_ADD_CFLAGS([deinterlace],[${ac_cv_c_altivec}])
1762     have_altivec="yes"
1763   ])
1764   AC_CHECK_HEADERS([altivec.h])
1766   VLC_SAVE_FLAGS
1767   LDFLAGS="${LDFLAGS} -Wl,-framework,vecLib"
1768   AC_CACHE_CHECK([if linker needs -framework vecLib],
1769     [ac_cv_ld_altivec],
1770     [AC_TRY_LINK([],,ac_cv_ld_altivec=yes,ac_cv_ld_altivec=no)])
1771   VLC_RESTORE_FLAGS
1772   AS_IF([test "${ac_cv_ld_altivec}" != "no"], [
1773     VLC_ADD_LIBS([libvlccore],[-Wl,-framework,vecLib])
1774   ])
1776 AC_SUBST([ALTIVEC_CFLAGS])
1777 AM_CONDITIONAL([HAVE_ALTIVEC], [test "$have_altivec" = "yes"])
1780 dnl  Memory usage
1782 AC_ARG_ENABLE([optimize-memory],
1783   AS_HELP_STRING([--enable-optimize-memory],
1784     [optimize memory usage over performance]))
1785 if test "${enable_optimize_memory}" = "yes"; then
1786   AC_DEFINE(OPTIMIZE_MEMORY, 1, Define if you want to optimize memory usage over performance)
1790 dnl Allow running as root (useful for people running on embedded platforms)
1792 AC_ARG_ENABLE([run-as-root],
1793   AS_HELP_STRING([--enable-run-as-root],
1794     [allow running VLC as root (default disabled)]))
1795 AS_IF([test "${enable_run_as_root}" = "yes"],[
1796     AC_DEFINE(ALLOW_RUN_AS_ROOT, 1,
1797               [Define to 1 to allow running VLC as root (uid 0).])
1801 dnl Stream output
1803 AC_ARG_ENABLE([sout],
1804   AS_HELP_STRING([--disable-sout],
1805     [disable streaming output (default enabled)]))
1806 AS_IF([test "${enable_sout}" != "no"], [
1807   AC_DEFINE(ENABLE_SOUT, 1, [Define to 1 for stream output support.])
1809 AM_CONDITIONAL([ENABLE_SOUT], [test "${enable_sout}" != "no"])
1811 dnl Lua modules
1812 AC_ARG_ENABLE([lua],
1813   AS_HELP_STRING([--disable-lua],
1814     [disable LUA scripting support (default enabled)]))
1815 if test "${enable_lua}" != "no"
1816 then
1817   PKG_CHECK_MODULES(LUA, lua5.2,
1818     [ have_lua=yes ],
1819     [
1820     AC_MSG_WARN([${LUA_PKG_ERRORS}, trying lua 5.1 instead])
1822     PKG_CHECK_MODULES(LUA, lua5.1,
1823       [ have_lua=yes ],
1824       [
1825       AC_MSG_WARN([${LUA_PKG_ERRORS}, trying lua >= 5.1 instead])
1826       PKG_CHECK_MODULES(LUA, lua >= 5.1,
1827         [ have_lua=yes ],
1828         [
1829           AC_MSG_WARN([${LUA_PKG_ERRORS}, trying manual detection instead])
1830           have_lua=yes
1831           AC_CHECK_HEADERS([lua.h lauxlib.h lualib.h],
1832             [],
1833             [ have_lua=no ] )
1834           AC_CHECK_LIB(  lua5.2 , luaL_newstate,
1835             [LUA_LIBS="-llua5.2"],
1836           AC_CHECK_LIB( lua5.1 , luaL_newstate,
1837             [LUA_LIBS="-llua5.1"],
1838             AC_CHECK_LIB( lua51 , luaL_newstate,
1839               [LUA_LIBS="-llua51"],
1840               AC_CHECK_LIB( lua , luaL_newstate,
1841                 [LUA_LIBS="-llua"],
1842                 [ have_lua=no
1843                 ], [-lm])
1844             )))
1845         ])
1846       ])
1847     ])
1848   if test "x${have_lua}" != "xyes" ;  then
1849       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.])
1850   fi
1851   AC_ARG_VAR([LUAC], [LUA byte compiler])
1852   AS_IF([test -z "$LUAC"], [
1853      AC_CHECK_TOOL(LUAC, [luac], [false])
1854   ])
1855   AS_IF([test "${LUAC}" = "false"], [
1856     AC_MSG_ERROR([Could not find the LUA byte compiler.])
1857   ])
1858   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], [
1859     AC_MSG_ERROR([You need 32-bits luac when using lua from contrib.])
1860   ])
1862 AM_CONDITIONAL([BUILD_LUA], [test "${have_lua}" = "yes"])
1866 dnl VideoLAN manager
1868 AC_ARG_ENABLE([vlm],
1869   AS_HELP_STRING([--disable-vlm],
1870     [disable the stream manager (default enabled)]),,
1871   [enable_vlm="${enable_sout}"])
1872 AS_IF([test "${enable_vlm}" != "no"], [
1873   AS_IF([test "${enable_sout}" = "no"], [
1874     AC_MSG_ERROR([VLM requires the stream output. Do not use --disable-sout.])
1875   ])
1876   AC_DEFINE(ENABLE_VLM, 1, [Define if you want the VideoLAN manager support])
1878 AM_CONDITIONAL([ENABLE_VLM], [test "${enable_vlm}" != "no"])
1882 dnl Addons manager storage and repositories modules
1884 AC_ARG_ENABLE([addonmanagermodules],
1885   AS_HELP_STRING([--disable-addonmanagermodules],
1886     [disable the addons manager modules (default enabled)]))
1887 if test "${enable_addonmanagermodules}" != "no"
1888 then
1889   AC_DEFINE(ENABLE_ADDONMANAGERMODULES, 1, [Define if you want the addons manager modules])
1891 AM_CONDITIONAL([ENABLE_ADDONMANAGERMODULES], [test "${enable_addonmanagermodules}" != "no"])
1895 dnl  Input plugins
1898 EXTEND_HELP_STRING([Input plugins:])
1901 dnl  libarchive access module
1903 PKG_ENABLE_MODULES_VLC([ARCHIVE], [archive], [libarchive >= 3.1.0], (libarchive support), [auto])
1906 dnl  live555 input
1908 AC_ARG_ENABLE([live555],
1909   AS_HELP_STRING([--enable-live555],
1910     [enable RTSP input through live555 (default enabled)]))
1912 AS_IF([test "${enable_live555}" != "no" -a -n "${CXX}"], [
1913   PKG_CHECK_MODULES(LIVE555, live555, [
1914     VLC_ADD_PLUGIN([live555])
1915     VLC_ADD_CXXFLAGS([live555], [$LIVE555_CFLAGS])
1916     VLC_ADD_LIBS([live555],[$LIVE555_LIBS])
1917   ], [
1918     AC_MSG_WARN([${LIVE555_PKG_ERRORS}.])
1920     AC_LANG_PUSH(C++)
1921     VLC_SAVE_FLAGS
1923     dnl detect include paths
1924     AS_IF([test -f "${CONTRIB_DIR}/include/UsageEnvironment/UsageEnvironment.hh"], [
1925       CPPFLAGS_live555="-I${CONTRIB_DIR}/include/liveMedia -I${CONTRIB_DIR}/include/groupsock -I${CONTRIB_DIR}/include/BasicUsageEnvironment -I${CONTRIB_DIR}/include/UsageEnvironment"
1926     ], [
1927       AS_IF([test "${SYS}" != "os2"], [
1928         LIVE555_PREFIX=${LIVE555_PREFIX-"/usr"}
1929         CPPFLAGS_live555="-I${LIVE555_PREFIX}/include/liveMedia -I${LIVE555_PREFIX}/include/groupsock -I${LIVE555_PREFIX}/include/BasicUsageEnvironment -I${LIVE555_PREFIX}/include/UsageEnvironment"
1930       ], [
1931         LIVE555_PREFIX=${LIVE555_PREFIX-"/usr/lib/live"}
1932         CPPFLAGS_live555="-I${LIVE555_PREFIX}/liveMedia/include -I${LIVE555_PREFIX}/groupsock/include -I${LIVE555_PREFIX}/BasicUsageEnvironment/include -I${LIVE555_PREFIX}/UsageEnvironment/include"
1933         LDFLAGS_live555="-L${LIVE555_PREFIX}/liveMedia -L${LIVE555_PREFIX}/groupsock -L${LIVE555_PREFIX}/BasicUsageEnvironment -L${LIVE555_PREFIX}/UsageEnvironment"
1934       ])
1935     ])
1937     dnl CPP Flags
1938     AS_IF([test "${SYS}" = "solaris"], [
1939       CPPFLAGS_live555="${CPPFLAGS_live555} -DSOLARIS"
1940     ])
1941     CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_live555}"
1942     LDFLAGS="${LDFLAGS} ${LDFLAGS_live555}"
1944     dnl version check
1945     AC_CACHE_CHECK([for live555 version 1324598400 or later], [ac_cv_live555], [
1946       AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
1947 [#include <liveMedia_version.hh>
1948 #if !defined (LIVEMEDIA_LIBRARY_VERSION_INT) || (LIVEMEDIA_LIBRARY_VERSION_INT < 1324598400)
1949 # error BOOM
1950 #endif]])
1951       ], [
1952         ac_cv_live555="yes"
1953       ], [
1954         ac_cv_live555="no"
1955       ])
1956     ])
1958     AS_IF([test "$ac_cv_live555" = "no"], [
1959       AC_MSG_WARN([live555 is missing or its installed version is too old:
1960 Version 2011.12.23 or later is required to proceed.
1961 You can get an updated one from http://www.live555.com/liveMedia .])
1962       AS_IF([test -n "${enable_live555}"], [
1963         AC_MSG_ERROR([Update live555 or pass --disable-live555 to disable RTSP input support.])
1964       ])
1965     ], [
1966       other_libs="-lgroupsock -lBasicUsageEnvironment -lUsageEnvironment"
1967       other_libs_pic="-lgroupsock_pic -lBasicUsageEnvironment_pic -lUsageEnvironment_pic"
1968       AS_IF([test "${SYS}" = "mingw32"], [
1969         # add ws2_32 for closesocket, select, recv
1970         other_libs="$other_libs -lws2_32"
1971       ])
1973       dnl We need to check for pic because live555 don't provide shared libs
1974       dnl and we want to build a plugins so we need -fPIC on some arch.
1975       VLC_ADD_CXXFLAGS([live555], [${CPPFLAGS_live555}])
1976       VLC_ADD_LDFLAGS([live555], [${LDFLAGS_live555}])
1977       AC_CHECK_LIB([liveMedia_pic], [main], [
1978         VLC_ADD_PLUGIN([live555])
1979         VLC_ADD_LIBS([live555], [-lliveMedia_pic ${other_libs_pic}])
1980       ],[
1981         AC_CHECK_LIB([liveMedia], [main], [
1982           VLC_ADD_PLUGIN([live555])
1983           VLC_ADD_LIBS([live555], [-lliveMedia ${other_libs}])
1984         ],[],[${other_libs}])
1985       ],[${other_libs_pic}])
1986     ])
1987     VLC_RESTORE_FLAGS
1988     AC_LANG_POP(C++)
1989   ])
1993 dnl IIDC and DV FireWire input modules
1995 PKG_ENABLE_MODULES_VLC([DC1394], [], [libdc1394-2 >= 2.1.0], [IIDC FireWire input module], [auto])
1996 PKG_ENABLE_MODULES_VLC([DV1394], [], [libraw1394 >= 2.0.1 libavc1394 >= 0.5.3], [DV FireWire input module], [auto])
1999 dnl - linsys modules: access module check for libzvbi
2001 AC_ARG_ENABLE([linsys],
2002   AS_HELP_STRING([--enable-linsys],
2003     [Linux Linear Systems Ltd. SDI and HD-SDI input cards (default enabled)]))
2004 AS_IF([test "$SYS" = "linux" -a "${enable_linsys}" != "no"], [
2005   VLC_ADD_PLUGIN([linsys_hdsdi])
2006   PKG_CHECK_MODULES(LINSYS_SDI, [zvbi-0.2 >= 0.2.28], [
2007     VLC_ADD_PLUGIN([linsys_sdi])
2008   ], [
2009     AC_MSG_WARN([${LINSYS_SDI_PKG_ERRORS}.])
2010   ])
2014 dnl dvdread module: check for libdvdread
2016 PKG_ENABLE_MODULES_VLC([DVDREAD], [], [dvdread > 6.0.0], [dvdread input module], [auto])
2019 dnl libdvdnav plugin
2021 PKG_ENABLE_MODULES_VLC([DVDNAV], [], [dvdnav >= 6.0.0], [DVD with navigation input module (dvdnav)], [auto])
2024 dnl  Blu-ray Disc Support with libbluray
2026 PKG_ENABLE_MODULES_VLC([BLURAY], [libbluray], [libbluray >= 0.6.2], (libbluray for Blu-ray disc support ) )
2029 dnl  OpenCV wrapper and example filters
2031 PKG_ENABLE_MODULES_VLC([OPENCV], [opencv_example opencv_wrapper], [opencv > 2.0], (OpenCV (computer vision) filter), [auto])
2035 dnl  libsmbclient plugin
2037 PKG_ENABLE_MODULES_VLC([SMBCLIENT], [smbc], [smbclient], (SMB/CIFS support), [auto])
2040 dnl  liBDSM access module
2042 AM_CONDITIONAL([HAVE_DSM], [test "$AS_TR_SH(with_dsm)" = "yes"])
2043 PKG_WITH_MODULES([DSM], [libdsm >= 0.2.0], [
2044        VLC_ADD_PLUGIN([dsm])
2045        VLC_ADD_CFLAGS([dsm], [$DSM_CFLAGS])
2046        VLC_ADD_LIBS([dsm], [$DSM_LIBS])
2047        have_dsm="yes"
2048    ],,[libdsm SMB/CIFS access/sd module], [auto])
2049 AM_CONDITIONAL([HAVE_DSM], [test "${have_dsm}" = "yes"])
2052 dnl sftp access support
2054 PKG_ENABLE_MODULES_VLC([SFTP], [sftp], [libssh2], (support SFTP file transfer via libssh2), [auto])
2057 dnl nfs access support
2059 PKG_ENABLE_MODULES_VLC([NFS], [nfs], [libnfs >= 1.10.0], (support nfs protocol via libnfs), [auto])
2062 dnl smb2 access support
2064 PKG_ENABLE_MODULES_VLC([SMB2], [smb2], [libsmb2 >= 3.0.0], (support smb2 protocol via libsmb2), [auto])
2067 dnl  Video4Linux 2
2069 AC_ARG_ENABLE([v4l2], AS_HELP_STRING([--disable-v4l2],
2070   [disable Video4Linux version 2 (default auto)]))
2071 have_v4l2="no"
2072 AS_IF([test "$enable_v4l2" != "no"], [
2073   AC_CHECK_HEADERS([linux/videodev2.h], [
2074     have_v4l2="yes"
2075   ])
2077 AM_CONDITIONAL([HAVE_V4L2], [test "${have_v4l2}" != "no"])
2080 dnl  NVDEC decoder/encoder
2082 AC_ARG_ENABLE([nvdec], AS_HELP_STRING([--disable-nvdec],
2083   [disable NVDEC decoder (default auto)]))
2084 have_nvdec="no"
2085 AS_IF([test "$enable_nvdec" != "no"], [
2086   AC_CHECK_HEADERS([ffnvcodec/dynlink_loader.h], [
2087     have_nvdec="yes"
2088   ])
2090 AM_CONDITIONAL([HAVE_NVDEC], [test "${have_nvdec}" != "no"])
2093 dnl special access module for Blackmagic SDI cards
2095 AC_ARG_ENABLE([decklink],
2096   AS_HELP_STRING([--disable-decklink],
2097     [disable Blackmagic DeckLink SDI input (default auto)]))
2098 AC_ARG_WITH([decklink_sdk],
2099   AS_HELP_STRING([--with-decklink-sdk=DIR],
2100     [location of Blackmagic DeckLink SDI SDK]))
2101 have_decklink=no
2102 if test "${enable_decklink}" != "no"
2103 then
2104   if test "${with_decklink_sdk}" != "no" -a -n "${with_decklink_sdk}"
2105   then
2106     VLC_ADD_CPPFLAGS([decklink decklinkoutput stream_out_sdi],[-I${with_decklink_sdk}/include])
2107   fi
2108   VLC_SAVE_FLAGS
2109   CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_decklink}"
2110   AC_LANG_PUSH([C++])
2111   AC_CHECK_HEADERS([DeckLinkAPIDispatch.cpp], [
2112       have_decklink=yes
2113       AS_IF([test "${SYS}" = "darwin"], [
2114         VLC_ADD_LIBS([decklink decklinkoutput],[-Wl,-framework,CoreFoundation])
2115       ])
2116   ], [
2117       AS_IF([test "${enable_decklink}" = "yes"], [
2118         AC_MSG_ERROR([Blackmagic DeckLink SDI include files not found!])
2119       ], [
2120         AC_MSG_WARN([Blackmagic DeckLink SDI include files not found, decklink disabled])
2121       ])
2122   ])
2123   AC_LANG_POP([C++])
2124   VLC_RESTORE_FLAGS
2126 AM_CONDITIONAL([HAVE_DECKLINK], [ test "${have_decklink}" != "no" ])
2130 dnl  Built-in CD-DA and VCD module
2132 AC_ARG_ENABLE([vcd],
2133   AS_HELP_STRING([--disable-vcd],
2134     [disable built-in VCD and CD-DA support (default enabled)]))
2136 AC_ARG_ENABLE([libcddb],
2137   AS_HELP_STRING([--disable-libcddb],
2138     [disable CDDB for Audio CD (default enabled)]))
2140 if test "${enable_vcd}" != "no" -a "${enable_winstore_app}" != "yes"
2141 then
2142   AC_MSG_CHECKING(for cdrom_msf0 in linux/cdrom.h)
2143   AC_EGREP_HEADER(cdrom_msf0,linux/cdrom.h,[
2144     AC_MSG_RESULT(yes)
2145     VLC_ADD_PLUGIN([vcd cdda])
2146   ],[
2147     AC_MSG_RESULT(no)
2148   ])
2150   AC_MSG_CHECKING(for scsireq in sys/scsiio.h)
2151   AC_EGREP_HEADER(scsireq,sys/scsiio.h,[
2152     AC_MSG_RESULT(yes)
2153     VLC_ADD_PLUGIN([vcd cdda])
2154     AC_DEFINE(HAVE_SCSIREQ_IN_SYS_SCSIIO_H, 1, For NetBSD VCD support)
2155   ],[
2156     AC_MSG_RESULT(no)
2157   ])
2159   AC_MSG_CHECKING(for ioc_toc_header in sys/cdio.h)
2160   AC_EGREP_HEADER(ioc_toc_header ,sys/cdio.h,[
2161     AC_MSG_RESULT(yes)
2162     VLC_ADD_PLUGIN([vcd cdda])
2163     AC_DEFINE(HAVE_IOC_TOC_HEADER_IN_SYS_CDIO_H, 1, For FreeBSD VCD support)
2164   ],[
2165     AC_MSG_RESULT(no)
2166   ])
2168   if test "${SYS}" = "bsdi" -o "${SYS}" = "mingw32" -o "${SYS}" = "os2" -o "${SYS}" = "darwin"
2169   then
2170     VLC_ADD_PLUGIN([vcd cdda])
2171   fi
2173   if test "$enable_libcddb" != "no"; then
2174     PKG_CHECK_MODULES(LIBCDDB, [libcddb >= 0.9.5], [
2175       HAVE_LIBCDDB=yes
2176       AC_DEFINE(HAVE_LIBCDDB, 1, [Define this if you have libcddb installed])
2177       VLC_ADD_LIBS([cdda],[$LIBCDDB_LIBS])
2178       VLC_ADD_CFLAGS([cdda],[$LIBCDDB_CFLAGS])
2179       ],:
2180       [AC_MSG_WARN([${LIBCDDB_PKG_ERRORS}: CDDB access disabled.])
2181       HAVE_LIBCDDB=no])
2182   fi
2186 dnl Linux DVB
2188 AC_CACHE_CHECK([for Linux DVB version 5.1], [ac_cv_linux_dvb_5_1], [
2189   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
2190 [#include <linux/dvb/version.h>
2191 #if (DVB_API_VERSION < 5)
2192 # error Linux DVB API v3.2 and older are not supported.
2193 #endif
2194 #if (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR < 1)
2195 # error Linux DVB API v5.0 is unsupported. Please update.
2196 #endif
2197 ]])], [
2198   ac_cv_linux_dvb_5_1=yes
2199 ], [
2200   ac_cv_linux_dvb_5_1=no
2201 ])])
2202 AM_CONDITIONAL([HAVE_LINUX_DVB], [test "$ac_cv_linux_dvb_5_1" = "yes"])
2205 dnl  Screen capture module
2207 AC_ARG_ENABLE([screen],
2208   AS_HELP_STRING([--enable-screen],
2209     [disable screen capture (default enabled)]))
2210 if test "${enable_screen}" != "no"; then
2211   if test "${SYS}" = "darwin"; then
2212     AC_CHECK_HEADERS([ApplicationServices/ApplicationServices.h], [
2213       VLC_ADD_PLUGIN([screen])
2214     ])
2215   fi
2217 AM_CONDITIONAL([HAVE_MAC_SCREEN], [test "${SYS}" = "darwin" -a "x${enable_screen}" != "xno"])
2220 dnl  VNC/RFB access module
2222 PKG_ENABLE_MODULES_VLC([VNC], [vnc], [libvncclient >= 0.9.9], (VNC/rfb client support), [auto])
2224 dnl  RDP/Remote Desktop access module
2226 PKG_ENABLE_MODULES_VLC([FREERDP], [rdp], [freerdp >= 1.0.1], (RDP/Remote Desktop client support) )
2229 dnl AVFoundation
2230 AC_SUBST([have_avfoundation], ["no"])
2231 AC_ARG_ENABLE([macosx-avfoundation],
2232   AS_HELP_STRING([--enable-macosx-avfoundation], [Mac OS X avcapture (video) module (default enabled on Mac OS X)]))
2233 if test "x${enable_macosx_avfoundation}" != "xno" &&
2234   (test "${SYS}" = "darwin" || test "${enable_macosx_avfoundation}" = "yes")
2235 then
2236   SAVED_LIBS="${LIBS}"
2237   LIBS="-framework AVFoundation"
2238   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [])],[have_avfoundation=yes],[have_avfoundation=no])
2239   LIBS="${SAVED_LIBS}"
2240   if test "${have_avfoundation}" != "no"
2241   then
2242     VLC_ADD_PLUGIN([avcapture])
2243   fi
2245 AM_CONDITIONAL([HAVE_AVFOUNDATION], [test "${have_avfoundation}" != "no"])
2248 dnl  DCP plugin (using asdcplib)
2250 PKG_WITH_MODULES([ASDCP], [asdcplib], [have_asdcp="yes"])
2251 AM_CONDITIONAL([HAVE_ASDCP], [test "${have_asdcp}" = "yes"])
2254 dnl  Demux plugins
2257 EXTEND_HELP_STRING([Mux/Demux plugins:])
2260 dnl  libdvbpsi check for ts mux/demux
2262 have_dvbpsi="no"
2263 PKG_WITH_MODULES([DVBPSI], [libdvbpsi >= 1.2.0], [have_dvbpsi="yes"])
2264 AM_CONDITIONAL([HAVE_DVBPSI], [test "${have_dvbpsi}" = "yes"])
2268 dnl  GME demux plugin
2270 AC_ARG_ENABLE([gme],
2271   AS_HELP_STRING([--enable-gme],
2272     [use Game Music Emu (default auto)]))
2273 AS_IF([test "${enable_gme}" != "no"], [
2274   AC_CHECK_HEADER([gme/gme.h], [
2275     AC_CHECK_LIB([gme], [gme_identify_header], [
2276       VLC_ADD_PLUGIN([gme])
2277     ], [
2278       AC_CHECK_LIB([gme], [gme_identify_extension], [
2279          VLC_ADD_LIBS([gme], [-lstdc++ $LIBM])
2280          VLC_ADD_PLUGIN([gme])
2281       ],, [-lstdc++ $LIBM])
2282     ])
2283     VLC_ADD_LIBS([gme], [-lgme])
2284   ], [
2285     AS_IF([test "x${enable_gme}" != "x"], [
2286       AC_MSG_ERROR([GME cannot be found. Please install the development files.])
2287     ])
2288   ])
2293 dnl  SIDPlay plugin
2295 AC_ARG_ENABLE([sid],
2296     AS_HELP_STRING([--enable-sid],[C64 sid demux support (default auto)]))
2297 AS_IF([test "${enable_sid}" != "no"], [
2298     PKG_CHECK_MODULES(SID, [libsidplay2], [
2299         AC_LANG_PUSH(C++)
2300         oldCPPFLAGS="$CPPFLAGS"
2301         CPPFLAGS="$CPPFLAGS $SID_CFLAGS"
2302         AC_CHECK_HEADER([sidplay/builders/resid.h], [
2303             VLC_ADD_PLUGIN([sid])
2304             VLC_ADD_CFLAGS([sid], [$SID_CFLAGS])
2305             VLC_ADD_LIBS([sid], [$SID_LIBS] [-lresid-builder])
2306         ], [
2307             AS_IF([test -n "${enable_sid}"],
2308                 [AC_MSG_ERROR([${SID_PKG_ERRORS} (required for sid).])],
2309                 [AC_MSG_WARN([${SID_PKG_ERRORS} (required for sid).])]
2310                 )
2311         ])
2312         CPPFLAGS="$oldCPPFLAGS"
2313         AC_LANG_POP(C++)
2314     ], [
2315         AS_IF([test "x${enable_sid}" = "xyes"],
2316             [AC_MSG_ERROR([${SID_PKG_ERRORS} (required for sid).])],
2317             [AC_MSG_WARN([${SID_PKG_ERRORS} (required for sid).])]
2318             )
2319     ])
2324 dnl  ogg demux plugin
2326 PKG_ENABLE_MODULES_VLC([OGG], [mux_ogg], [ogg >= 1.0], [Ogg demux support], [auto])
2327 PKG_CHECK_MODULES(LIBVORBIS, [vorbis >= 1.1], [
2328     AC_DEFINE(HAVE_LIBVORBIS, 1, [Define to 1 if you have the libvorbis])
2329 ],[true])
2330 PKG_ENABLE_MODULES_VLC([OGG], [], [ogg >= 1.0], [Ogg demux support], [auto], [${LIBVORBIS_CFLAGS}], [${LIBVORBIS_LIBS}])
2331 if test "${enable_sout}" != "no"; then
2332 dnl Check for libshout
2333     PKG_ENABLE_MODULES_VLC([SHOUT], [access_output_shout], [shout >= 2.1], [libshout output plugin], [auto])
2337 dnl  matroska demux plugin
2339 PKG_WITH_MODULES([MATROSKA], [libebml >= 1.3.6 libmatroska], [
2340        VLC_ADD_PLUGIN([mkv])
2341        VLC_ADD_CFLAGS([mkv], [$MATROSKA_CFLAGS])
2342        VLC_ADD_LIBS([mkv], [$MATROSKA_LIBS])
2343        have_matroska="yes"
2344    ],,[MKV format support], [auto])
2345 AM_CONDITIONAL([HAVE_MATROSKA], [test "${have_matroska}" = "yes"])
2348 dnl  modplug demux plugin
2350 AC_ARG_ENABLE([mod],
2351   AS_HELP_STRING([--disable-mod],
2352     [do not use libmodplug (default auto)]))
2353 if test "${enable_mod}" != "no" ; then
2354     PKG_CHECK_MODULES(LIBMODPLUG, [libmodplug >= 0.8.9.0], [
2355           VLC_ADD_PLUGIN([mod])
2356           VLC_ADD_CXXFLAGS([mod],[$LIBMODPLUG_CFLAGS])
2357           VLC_ADD_CFLAGS([mod],[$LIBMODPLUG_CFLAGS]) #modules/demux/mod.c needs CFLAGS_mod, not CXXFLAGS_mod
2358           VLC_ADD_LIBS([mod],[$LIBMODPLUG_LIBS])
2359     ],[
2360        AS_IF([test -n "${enable_mod}"],
2361          [AC_MSG_ERROR([${LIBMODPLUG_PKG_ERRORS}.])],
2362          [AC_MSG_WARN([${LIBMODPLUG_PKG_ERRORS}.])])
2363     ])
2367 dnl  mpc demux plugin
2369 AC_ARG_ENABLE([mpc],
2370   AS_HELP_STRING([--disable-mpc], [do not use libmpcdec (default auto)]))
2371 if test "${enable_mpc}" != "no"
2372 then
2373     AC_CHECK_HEADERS([mpcdec/mpcdec.h], [
2374     VLC_ADD_PLUGIN([mpc])
2375     VLC_ADD_LIBS([mpc],[-lmpcdec])])
2379 dnl  Codec plugins
2382 EXTEND_HELP_STRING([Codec plugins:])
2385 dnl shine encoder plugin
2387 PKG_ENABLE_MODULES_VLC([SHINE], [], [shine >= 3.0.0], [MPEG Audio Layer 3 encoder], [auto], [], [], [])
2391 dnl openmax il codec plugin
2393 AC_ARG_ENABLE([omxil],
2394   AS_HELP_STRING([--enable-omxil], [openmax il codec module (default disabled)]))
2395 if test "${enable_omxil}" = "yes"
2396 then
2397   VLC_ADD_PLUGIN([omxil])
2401 dnl raspberry pi openmax il configuration
2403 AC_ARG_ENABLE([rpi-omxil],
2404   AS_HELP_STRING([--enable-rpi-omxil], [openmax il configured for raspberry pi (default disabled)]))
2405 if test "${enable_rpi_omxil}" = "yes"
2406 then
2407   VLC_ADD_PLUGIN([omxil])
2408   VLC_ADD_CFLAGS([omxil],[-DRPI_OMX])
2412 dnl CrystalHD codec plugin
2414 AC_ARG_ENABLE([crystalhd],
2415   AS_HELP_STRING([--enable-crystalhd], [crystalhd codec plugin (default auto)]))
2416 if test "${enable_crystalhd}" != "no"; then
2417     AC_CHECK_HEADER(libcrystalhd/libcrystalhd_if.h, [
2418       VLC_ADD_PLUGIN([crystalhd])
2419       VLC_ADD_LIBS([crystalhd], [-lcrystalhd])
2420     ],[
2421       if test "${SYS}" = "mingw32" ; then
2422         AC_CHECK_HEADERS([libcrystalhd/bc_dts_defs.h], [
2423           VLC_ADD_PLUGIN([crystalhd])
2424           AC_CHECK_HEADERS([libcrystalhd/bc_drv_if.h], [
2425             VLC_ADD_LIBS([crystalhd], [-lbcmDIL])
2426             ])
2427         ],[
2428           AS_IF([test x"${enable_crystalhd}" = "xyes"],
2429                 [AC_MSG_ERROR("Could not find CrystalHD development headers")],
2430                 [AC_MSG_WARN("Could not find CrystalHD development headers")])
2431         ],[#define __LINUX_USER__
2432                #include <libcrystalhd/bc_dts_types.h>
2433         ])
2434       fi
2435     ],[
2436        #include <libcrystalhd/bc_dts_types.h>
2437       ])
2441 dnl  mad plugin
2443 have_mad="no"
2444 MAD_CFLAGS=""
2445 MAD_LIBS=""
2447 AC_ARG_WITH(mad, AS_HELP_STRING([--with-mad=PATH], [path to libmad]), [
2448   enable_mad="yes"
2449 ], [
2450   with_mad="no"
2452 AS_IF([test "${with_mad}" != "no"], [
2453   MAD_CFLAGS="-I${with_mad}/include"
2454   MAD_LIBS="-L${with_mad}/lib"
2457 AC_ARG_ENABLE([mad],
2458   AS_HELP_STRING([--enable-mad], [libmad module (default enabled)]))
2459 AS_IF([test "${enable_mad}" != "no"], [
2460   VLC_SAVE_FLAGS
2461   CPPFLAGS="${CPPFLAGS} ${MAD_CFLAGS}"
2462   LDFLAGS="${LDFLAGS} ${MAD_LIBS}"
2463   AC_CHECK_HEADERS([mad.h], [
2464     AC_CHECK_LIB([mad], [mad_bit_init], [
2465       have_mad="yes"
2466       MAD_LIBS="${MAD_LIBS} -lmad"
2467     ])
2468   ])
2469   VLC_RESTORE_FLAGS
2470   AS_IF([test -n "$enable_mad" -a "${have_mad}" = "no"], [
2471     AC_MSG_ERROR([Could not find libmad. Install it or pass --disable-mad to disable it.])
2472   ])
2474 AC_SUBST([MAD_CFLAGS])
2475 AC_SUBST([MAD_LIBS])
2476 AM_CONDITIONAL([HAVE_MAD], [test "${have_mad}" = "yes"])
2478 dnl  mpg123 plugin
2481 PKG_ENABLE_MODULES_VLC([MPG123], [mpg123], [libmpg123], [libmpg123 decoder support], [auto])
2484 dnl gstreamer stuff
2486 AC_ARG_ENABLE([gst-decode],
2487   AS_HELP_STRING([--enable-gst-decode], [GStreamer based decoding support (currently supports only video decoding) (default auto)]))
2489 have_gst_decode="no"
2490 AS_IF([test "${enable_gst_decode}" != "no"], [
2491   PKG_CHECK_MODULES([GST_APP], [gstreamer-app-1.0], [
2492     PKG_CHECK_MODULES([GST_VIDEO], [gstreamer-video-1.0], [
2493       have_gst_decode="yes"
2494     ], [
2495       AC_MSG_WARN([${GST_VIDEO_PKG_ERRORS}. GStreamer decoder module will not be built.])
2496     ])
2497   ], [
2498     AC_MSG_WARN([${GST_APP_PKG_ERRORS}. GStreamer modules will not be built.])
2499   ])
2501 AM_CONDITIONAL([HAVE_GST_DECODE], [test "${have_gst_decode}" = "yes"])
2504 dnl  avcodec decoder/encoder plugin
2506 AC_ARG_ENABLE([merge-ffmpeg],
2507 AS_HELP_STRING([--enable-merge-ffmpeg], [merge FFmpeg-based plugins (default disabled)]),, [
2508   enable_merge_ffmpeg="no"
2510 AM_CONDITIONAL([MERGE_FFMPEG], [test "$enable_merge_ffmpeg" != "no"])
2512 AC_MSG_CHECKING([for libavutil variant])
2513 PKG_CHECK_EXISTS([libavutil], [
2514   libavutil_version="$(${PKG_CONFIG} --modversion libavutil)"
2515   libavutil_micro="${libavutil_version##*.}"
2516   AS_IF([test ${libavutil_micro} -le 99], [
2517     avfork="libav"
2518   ], [
2519     avfork="ffmpeg"
2520   ])
2521 ], [
2522   avfork="none"
2524 AC_MSG_RESULT([${avfork}])
2526 AC_ARG_ENABLE([avcodec],
2527 AS_HELP_STRING([--enable-avcodec], [libavcodec codec (default enabled)]))
2528 AS_IF([test "${enable_avcodec}" != "no"], [
2529   dnl We need >=57.16.0 from libav or >=57.37.100 from ffmpeg
2530   case "${avfork}" in
2531     libav) av_codec_ver="57.16.0" ;;
2532     dnl 05f66706d182eb0c36af54d72614bf4c33e957a9  includes libavutil 55.9.0
2533     ffmpeg) av_codec_ver="57.37.100" ;;
2534     dnl 7fc329e2dd6226dfecaa4a1d7adf353bf2773726  include libavutil 55.22.101
2535     *) AC_MSG_ERROR([Missing libav or FFmpeg. Pass --disable-avcodec to ignore this error.])
2536   esac
2537   PKG_CHECK_MODULES(AVCODEC,[libavcodec >= ${av_codec_ver} libavutil >= 55.9.0], [
2538     VLC_SAVE_FLAGS
2539     CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
2540     CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
2541     AC_CHECK_HEADERS([libavcodec/avcodec.h])
2542     AC_CHECK_HEADERS([libavutil/avutil.h])
2543     VLC_RESTORE_FLAGS
2544     have_avcodec="yes"
2545   ],[
2546     AC_MSG_ERROR([${AVCODEC_PKG_ERRORS}. Pass --disable-avcodec to ignore this error.])
2547   ])
2548 ], [
2549   have_avcodec="no"
2551 AM_CONDITIONAL([HAVE_AVCODEC], [test "${have_avcodec}" != "no"])
2554 dnl libva needs avcodec
2556 AC_ARG_ENABLE([libva],
2557   AS_HELP_STRING([--enable-libva], [VAAPI GPU decoding support (libVA) (default auto)]))
2559 AS_IF([test "${enable_libva}" = "yes" -a "${have_avcodec}" != "yes" ], [
2560   AC_MSG_ERROR([--enable-libva and --disable-avcodec options are mutually exclusive. Use --enable-avcodec.])
2563 have_vaapi="no"
2564 have_vaapi_drm="no"
2565 have_vaapi_x11="no"
2566 have_vaapi_wl="no"
2567 AS_IF([test "${enable_libva}" != "no"], [
2568   PKG_CHECK_MODULES([LIBVA], [libva >= 0.38], [
2569     have_vaapi="yes"
2570   ], [
2571     AS_IF([test -n "${enable_libva}"], [
2572       AC_MSG_ERROR([${LIBVA_PKG_ERRORS}.])
2573     ], [
2574       AC_MSG_WARN([${LIBVA_PKG_ERRORS}.])
2575     ])
2576   ])
2577   PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm], [
2578     have_vaapi_drm="yes"
2579   ], [
2580     AC_MSG_WARN([${LIBVA_DRM_PKG_ERRORS}.])
2581   ])
2582   PKG_CHECK_MODULES(LIBVA_X11, [libva-x11], [
2583     have_vaapi_x11="yes"
2584   ], [
2585     AC_MSG_WARN([${LIBVA_X11_PKG_ERRORS}.])
2586   ])
2587   PKG_CHECK_MODULES(LIBVA_WL, [libva-wayland], [
2588     have_vaapi_wl="yes"
2589   ], [
2590     AC_MSG_WARN([${LIBVA_WL_PKG_ERRORS}.])
2591   ])
2593 AM_CONDITIONAL([HAVE_VAAPI], [test "${have_vaapi}" = "yes"])
2594 AM_CONDITIONAL([HAVE_VAAPI_DRM], [test "${have_vaapi_drm}" = "yes"])
2595 AM_CONDITIONAL([HAVE_VAAPI_X11], [test "${have_vaapi_x11}" = "yes"])
2596 AM_CONDITIONAL([HAVE_VAAPI_WL], [test "${have_vaapi_wl}" = "yes"])
2598 have_avcodec_vaapi="no"
2599 AS_IF([test "${have_vaapi}" = "yes" -a "${have_avcodec}" = "yes"], [
2600   VLC_SAVE_FLAGS
2601   CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
2602   CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
2603   AC_CHECK_HEADERS([libavcodec/vaapi.h], [
2604     AC_MSG_NOTICE([VA API acceleration activated])
2605     have_avcodec_vaapi="yes"
2606   ],[
2607     AS_IF([test -n "${enable_libva}"], [
2608       AC_MSG_ERROR([libva is present but libavcodec/vaapi.h is missing])
2609     ], [
2610       AC_MSG_WARN([libva is present but libavcodec/vaapi.h is missing ])
2611     ])
2612   ])
2613   VLC_RESTORE_FLAGS
2615 AM_CONDITIONAL([HAVE_AVCODEC_VAAPI], [test "${have_avcodec_vaapi}" = "yes"])
2618 dnl dxva2 needs avcodec
2620 AC_ARG_ENABLE([dxva2],
2621   AS_HELP_STRING([--enable-dxva2], [DxVA2 GPU decoding support (default auto)]))
2623 have_avcodec_dxva2="no"
2624 AS_IF([test "${enable_dxva2}" != "no"], [
2625   if test "${SYS}" = "mingw32"; then
2626   AS_IF([test "x${have_avcodec}" = "xyes"], [
2627     AC_CHECK_HEADERS([dxva2api.h],
2628       [
2629         AC_CHECK_HEADERS([libavcodec/dxva2.h], [
2630            AC_MSG_NOTICE([DxVA2 acceleration activated])
2631            have_avcodec_dxva2="yes"
2632         ],[
2633     AS_IF([test "${enable_dxva2}" = "yes"],
2634           [AC_MSG_ERROR([dxva2 is present but libavcodec/dxva2.h is missing])],
2635               [AC_MSG_WARN([dxva2 is present but libavcodec/dxva2.h is missing ])])
2636         ], [#undef _WIN32_WINNT
2637             /* DXVA2 is only available in Vista and above */
2638             #define _WIN32_WINNT 0x600])
2639       ],[
2640     AS_IF([test "${enable_dxva2}" = "yes"],
2641               [AC_MSG_ERROR([Could not find required dxva2api.h])],
2642               [AC_MSG_WARN([dxva2api.h not found])])
2643       ],[#include <d3d9.h>])
2644   ],[
2645     AS_IF([test "x${enable_dxva2}" != "x"], [
2646       AC_MSG_ERROR([--enable-dxva2 and --disable-avcodec options are mutually exclusive.])
2647     ])
2648   ])
2649   fi
2651 AM_CONDITIONAL([HAVE_AVCODEC_DXVA2], [test "${have_avcodec_dxva2}" = "yes"])
2654 dnl d3d11va needs avcodec
2656 AC_ARG_ENABLE([d3d11va],
2657   AS_HELP_STRING([--enable-d3d11va], [D3D11 GPU decoding support (default auto)]))
2659 have_avcodec_d3d11va="no"
2660 AS_IF([test "${enable_d3d11va}" != "no"], [
2661   if test "${SYS}" = "mingw32"; then
2662   AS_IF([test "x${have_avcodec}" = "xyes"], [
2663         AC_CHECK_TYPES([ID3D11VideoDecoder],
2664           [
2665             AC_CHECK_HEADERS([dxva2api.h],
2666               [
2667                 AC_CHECK_HEADERS([libavcodec/d3d11va.h], [
2668                    AC_MSG_NOTICE([D3D11 acceleration activated])
2669                    AC_DEFINE([HAVE_AVCODEC_D3D11VA], [1], [Define if the d3d11va module is built])
2670                    have_avcodec_d3d11va="yes"
2671                 ],[
2672                   AS_IF([test "${enable_d3d11va}" = "yes"],
2673                     [AC_MSG_ERROR([d3d11va is present but libavcodec/d3d11va.h is missing])],
2674                         [AC_MSG_WARN([d3d11va is present but libavcodec/d3d11va.h is missing ])])
2675                   ], [#undef _WIN32_WINNT
2676                       /* D3D11 is only available in Vista and above */
2677                       #define _WIN32_WINNT 0x600])
2678                   ],[
2679                     AS_IF([test "${enable_d3d11va}" = "yes"],
2680                           [AC_MSG_ERROR([Could not find required dxva2api.h])],
2681                           [AC_MSG_WARN([dxva2api.h not found])])
2682                   ],[#include <d3d9.h>])
2683           ],[
2684             AS_IF([test "${enable_d3d11va}" = "yes"],
2685                   [AC_MSG_ERROR([Could not find required ID3D11VideoDecoder in d3d11.h])],
2686                   [AC_MSG_WARN([ID3D11VideoDecoder not found])])
2687           ], [#include <d3d11.h>])
2688   ],[
2689     AS_IF([test "x${enable_d3d11va}" != "x"], [
2690       AC_MSG_ERROR([--enable-d3d11va and --disable-avcodec options are mutually exclusive.])
2691     ])
2692   ])
2693   fi
2695 AM_CONDITIONAL([HAVE_AVCODEC_D3D11VA], [test "${have_avcodec_d3d11va}" = "yes"])
2698 dnl DXGI debug
2700 AC_CHECK_HEADERS([dxgidebug.h dxgi1_6.h])
2703 dnl  avformat demuxer/muxer plugin
2706 AC_ARG_ENABLE([avformat],
2707 AS_HELP_STRING([--enable-avformat], [libavformat containers (default enabled)]),, [
2708   enable_avformat="${have_avcodec}"
2710 have_avformat="no"
2711 AS_IF([test "${enable_avformat}" != "no"], [
2712   PKG_CHECK_MODULES(AVFORMAT,[libavformat >= 53.21.0 libavcodec libavutil], [
2713       have_avformat="yes"
2714       VLC_SAVE_FLAGS
2715       CPPFLAGS="${CPPFLAGS} ${AVFORMAT_CFLAGS}"
2716       CFLAGS="${CFLAGS} ${AVFORMAT_CFLAGS}"
2717       AC_CHECK_HEADERS([libavformat/avformat.h libavformat/avio.h])
2718       AC_CHECK_HEADERS([libavcodec/avcodec.h])
2719       AC_CHECK_HEADERS([libavutil/avutil.h])
2720       AS_IF([test "$enable_merge_ffmpeg" = "no"], [
2721         have_avformat="no"
2722       ])
2723       VLC_RESTORE_FLAGS
2724     ],[
2725       AC_MSG_ERROR([${AVFORMAT_PKG_ERRORS}. Pass --disable-avformat to ignore this error.])
2726   ])
2728 AM_CONDITIONAL([HAVE_AVFORMAT], [test "${enable_avformat}" != "no"])
2731 dnl  swscale image scaling and conversion plugin
2734 AC_ARG_ENABLE([swscale],
2735   AS_HELP_STRING([--enable-swscale],[libswscale image scaling and conversion
2736           (default enabled)]))
2737 if test "${enable_swscale}" != "no"
2738 then
2739   PKG_CHECK_MODULES(SWSCALE,[libswscale],
2740     [
2741       VLC_SAVE_FLAGS
2742       CPPFLAGS="${CPPFLAGS} ${SWSCALE_CFLAGS}"
2743       CFLAGS="${CFLAGS} ${SWSCALE_CFLAGS}"
2744       AC_CHECK_HEADERS([libswscale/swscale.h])
2745       AC_CHECK_HEADERS([libavutil/avutil.h])
2746       VLC_ADD_PLUGIN([swscale])
2747       VLC_ADD_LIBS([swscale],[$SWSCALE_LIBS])
2748       VLC_ADD_CFLAGS([swscale],[$SWSCALE_CFLAGS])
2749       AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
2750         VLC_ADD_LIBS([swscale],[${ac_cv_ld_bsymbolic}])
2751       ])
2752       VLC_RESTORE_FLAGS
2753     ],[
2754       AC_MSG_ERROR([${SWSCALE_PKG_ERRORS}. Pass --disable-swscale to ignore this error. Proper software scaling and some video chroma conversion will be missing.])
2755   ])
2759 dnl  postproc plugin
2762 AC_ARG_ENABLE([postproc],
2763 AS_HELP_STRING([--enable-postproc], [libpostproc image post-processing (default auto)]))
2764 if test "${enable_postproc}" != "no"
2765 then
2766   PKG_CHECK_MODULES(POSTPROC,[libpostproc libavutil],
2767     [
2768       VLC_SAVE_FLAGS
2769       CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
2770       CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
2771       AC_CHECK_HEADERS([postproc/postprocess.h])
2772       VLC_ADD_PLUGIN([postproc])
2773       VLC_RESTORE_FLAGS
2774     ],[
2775       AC_MSG_WARN([${POSTPROC_PKG_ERRORS}.])
2776   ])
2780 dnl  faad decoder plugin
2782 AC_ARG_ENABLE([faad],
2783 AS_HELP_STRING([--enable-faad], [faad codec (default auto)]))
2784 have_faad="no"
2785 AS_IF([test "${enable_faad}" != "no"], [
2786   AC_CHECK_HEADERS([neaacdec.h], [
2787     AC_CHECK_LIB([faad], [NeAACDecOpen], [have_faad="yes"],, [$LIBM])
2789     AS_IF([test "${have_faad}" = "yes"], [
2790       VLC_ADD_PLUGIN([faad])
2791       VLC_ADD_LIBS([faad],[-lfaad])
2792     ], [
2793       AS_IF([test "${enable_faad}" = "yes"], [
2794         AC_MSG_ERROR([cannot find FAAD library])
2795       ], [
2796         AC_MSG_WARN([cannot find FAAD library])
2797       ])
2798     ])
2799   ])
2803 dnl  AOM decoder plugin
2805 PKG_ENABLE_MODULES_VLC([AOM], [], [aom], [experimental AV1 codec (default auto)])
2808 dnl  Dav1d decoder plugin
2810 PKG_ENABLE_MODULES_VLC([DAV1D], [], [dav1d], [AV1 decoder (default auto)])
2813 dnl libvpx decoder plugin
2815 AC_ARG_ENABLE([vpx],
2816     AS_HELP_STRING([--enable-vpx],[libvpx VP8/VP9 encoder and decoder (default auto)]))
2817 AS_IF([test "${enable_vpx}" != "no"],[
2818     PKG_CHECK_MODULES([VPX], [vpx >= 1.5.0], [
2819         VLC_ADD_PLUGIN([vpx])
2820         VLC_ADD_CPPFLAGS([vpx], [${VPX_CFLAGS}])
2821         VLC_ADD_LIBS([vpx], [${VPX_LIBS}])
2822         AC_CHECK_LIB([vpx],[vpx_codec_vp8_dx], [
2823             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP8_DECODER])
2824         ], [], [${VPX_LIBS}])
2825         AC_CHECK_LIB([vpx],[vpx_codec_vp9_dx], [
2826             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP9_DECODER])
2827         ], [], [${VPX_LIBS}])
2828         AC_CHECK_LIB([vpx],[vpx_codec_vp8_cx], [
2829             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP8_ENCODER])
2830         ], [], [${VPX_LIBS}])
2831         AC_CHECK_LIB([vpx],[vpx_codec_vp9_cx], [
2832             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP9_ENCODER])
2833         ], [], [${VPX_LIBS}])
2834     ], [
2835     AS_IF([test "${enable_vpx}" = "yes"],[
2836         AC_MSG_ERROR([libvpx 1.5.0 or higher was not found])
2837     ])])
2841 dnl twolame encoder plugin
2843 PKG_ENABLE_MODULES_VLC([TWOLAME], [], [twolame], [MPEG Audio Layer 2 encoder], [auto], [], [], [ -DLIBTWOLAME_STATIC])
2846 dnl fdk-aac encoder plugin
2848 PKG_ENABLE_MODULES_VLC([FDKAAC], [], [fdk-aac], [FDK-AAC encoder], [disabled])
2852 dnl A52/AC3 decoder plugin
2854 AC_ARG_ENABLE([a52],
2855   AS_HELP_STRING([--enable-a52], [A/52 support with liba52 (default enabled)]))
2856 if test "${enable_a52}" != "no"
2857 then
2858   AC_ARG_WITH([a52],
2859     AS_HELP_STRING([--with-a52=PATH], [a52 headers and libraries]))
2860     if test -z "${with_a52}"
2861     then
2862       LDFLAGS_test=""
2863       CPPFLAGS_test=""
2864     else
2865       LDFLAGS_test="-L${with_a52}/lib"
2866       CPPFLAGS_test="-I${with_a52}/include"
2867     fi
2868     VLC_SAVE_FLAGS
2869     CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_test} ${CPPFLAGS_a52}"
2870     LDFLAGS="${LDFLAGS} ${LDFLAGS_test} ${LIBS_a52}"
2871     AC_CHECK_HEADERS([a52dec/a52.h], [
2872       AC_CHECK_LIB([a52], [a52_free], [
2873         VLC_ADD_PLUGIN([a52])
2874         VLC_ADD_LIBS([a52],[${LDFLAGS_test} -la52 $LIBM])
2875         VLC_ADD_CPPFLAGS([a52],[${CPPFLAGS_test}])
2876       ],[
2877         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.])
2878         ], [$LIBM])
2879     ],[
2880       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.])
2881     ])
2882     VLC_RESTORE_FLAGS
2886 dnl DTS Coherent Acoustics decoder plugin
2888 PKG_ENABLE_MODULES_VLC([DCA], [dca], [libdca >= 0.0.5], [DTS Coherent Acoustics support with libdca], [auto])
2891 dnl  Flac plugin
2893 PKG_ENABLE_MODULES_VLC([FLAC], [], [flac], [libflac decoder/encoder support], [auto])
2896 dnl  Libmpeg2 plugin
2898 PKG_ENABLE_MODULES_VLC([LIBMPEG2], [], [libmpeg2 > 0.3.2], [libmpeg2 decoder support], [auto])
2901 dnl  Vorbis plugin
2903 PKG_ENABLE_MODULES_VLC([VORBIS], [], [ogg vorbis >= 1.1 vorbisenc >= 1.1], [Vorbis decoder and encoder], [auto])
2906 dnl  Tremor plugin
2908 AC_ARG_ENABLE([tremor],
2909   AS_HELP_STRING([--enable-tremor], [Tremor decoder support (default disabled)]))
2910 if test "${enable_tremor}" = "yes"
2911 then
2912   AC_CHECK_HEADERS([tremor/ivorbiscodec.h], [
2913     VLC_ADD_PLUGIN([tremor])
2914    ],[])
2918 dnl  Speex plugins
2920 PKG_ENABLE_MODULES_VLC([SPEEX], [], [ogg speex >= 1.0.5], [Speex support], [auto])
2921 have_speexdsp="no"
2922 AS_IF([test "${enable_speex}" != "no"], [
2923   PKG_CHECK_MODULES([SPEEXDSP], [speexdsp], [
2924     have_speexdsp="yes"
2925   ], [
2926     AC_MSG_WARN([${SPEEXDSP_PKG_ERRORS}.])
2927   ])
2929 AM_CONDITIONAL([HAVE_SPEEXDSP], [test "$have_speexdsp" = "yes"])
2932 dnl  Opus plugin
2934 PKG_ENABLE_MODULES_VLC([OPUS], [], [ogg opus >= 1.0.3], [Opus support], [auto])
2937 dnl  Ambisonic channel mixer and binauralizer plugin
2939 PKG_ENABLE_MODULES_VLC([SPATIALAUDIO], [], [spatialaudio], [Ambisonic channel mixer and binauralizer], [auto])
2942 dnl  theora decoder plugin
2944 PKG_ENABLE_MODULES_VLC([THEORA], [], [ogg theoradec >= 1.0 theoraenc], [experimental theora codec], [auto])
2947 dnl  OggSpots decoder plugin
2949 PKG_ENABLE_MODULES_VLC([OGGSPOTS], [], [ogg], [experimental OggSpots codec], [auto])
2952 dnl  Daala decoder plugin
2954 PKG_ENABLE_MODULES_VLC([DAALA], [], [daaladec daalaenc], [experimental daala codec], [disabled])
2957 dnl  schroedinger decoder plugin (for dirac format video)
2959 PKG_ENABLE_MODULES_VLC([SCHROEDINGER], [], [schroedinger-1.0 >= 1.0.10], [dirac decoder and encoder using schroedinger], [auto])
2962 dnl  PNG decoder module
2964 AC_ARG_ENABLE([png],
2965   AS_HELP_STRING([--enable-png], [PNG support (default enabled)]))
2966 AS_IF([test "${enable_png}" != "no"], [
2967 AC_CHECK_HEADERS([png.h], [
2968   VLC_SAVE_FLAGS
2969   LDFLAGS="${LDFLAGS} -lz $LIBM"
2970   AC_CHECK_LIB([png], [png_set_alpha_mode], [
2971     VLC_ADD_PLUGIN([png])
2972   ], [], [-lz $LIBM])
2973   VLC_RESTORE_FLAGS
2974   ])
2978 dnl  JPEG decoder module
2980 AC_ARG_ENABLE([jpeg],
2981   AS_HELP_STRING([--enable-jpeg], [JPEG support (default enabled)]))
2982 AS_IF([test "${enable_jpeg}" != "no"], [
2983 AC_CHECK_HEADERS([jpeglib.h], [
2984   VLC_ADD_PLUGIN([jpeg])
2985   ])
2989 dnl  BPG decoder module
2991 AC_ARG_ENABLE([bpg],
2992   AS_HELP_STRING([--enable-bpg], [BPG support (default disabled)]))
2993 AS_IF([test "${enable_bpg}" != "no"], [
2994 AC_CHECK_HEADERS([libbpg.h], [
2995   VLC_ADD_PLUGIN([bpg])
2996   ])
3000 dnl H262 encoder plugin (lib262)
3002 AC_ARG_ENABLE([x262],
3003   AS_HELP_STRING([--enable-x262], [H262 encoding support with static libx262 (default disabled)]))
3004 if test "${enable_x262}" != "no"; then
3005     PKG_CHECK_MODULES(X262, x262, [
3006         VLC_ADD_PLUGIN([x262])
3007         VLC_ADD_LDFLAGS([x262],[${X262_LIBS}])
3008         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3009           VLC_ADD_LIBS([x262],[${av_cv_ld_bsymbolic}])
3010         ])
3011         VLC_ADD_CFLAGS([x262],[${X262_CFLAGS}])
3012         if echo ${X262_LIBS} |grep -q 'pthreadGC2'; then
3013           VLC_ADD_CFLAGS([x262], [-DPTW32_STATIC_LIB])
3014         fi
3015     ], [
3016        if test "${enable_x262}" = "yes"; then
3017         AC_MSG_ERROR([x262 module doesn't work without staticly compiled libx262.a])
3018        fi
3019     ])
3022 dnl x265 encoder
3023 PKG_ENABLE_MODULES_VLC([X265],, [x265], [HEVC/H.265 encoder], [auto])
3026 dnl H264 encoder plugin (using libx264)
3028 AC_ARG_ENABLE([x264],
3029   AS_HELP_STRING([--enable-x264], [H264 encoding support with libx264 (default enabled)]))
3030 if test "${enable_x264}" != "no"; then
3031       PKG_CHECK_MODULES(X264,x264 >= 0.148, [
3032         VLC_ADD_PLUGIN([x264])
3033         VLC_ADD_LIBS([x264],[${X264_LIBS}])
3035         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3036           VLC_ADD_LDFLAGS([x264],[${ac_cv_ld_bsymbolic}])
3037         ])
3039         VLC_ADD_CFLAGS([x264],[${X264_CFLAGS}])
3040         if echo ${X264_LIBS} |grep -q 'pthreadGC2'; then
3041           VLC_ADD_CFLAGS([x264], [-DPTW32_STATIC_LIB])
3042         fi
3043       ],[
3044         if test "${enable_x264}" = "yes"; then
3045             AC_MSG_ERROR([${X264_PKG_ERRORS}: you may get it from http://www.videolan.org/x264.html])
3046           fi
3047       ])
3051 dnl H264 encoder plugin (libx264 > 153)
3053 AC_ARG_ENABLE([x26410b],
3054   AS_HELP_STRING([--enable-x26410b], [H264 10-bit encoding support with libx264 (default enabled)]))
3055 if test "${enable_x26410b}" != "no"; then
3056       PKG_CHECK_MODULES(X26410b,x264 >= 0.153, [
3057         VLC_ADD_PLUGIN([x26410b])
3058         VLC_ADD_LIBS([x26410b],[${X264_LIBS}])
3060         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3061           VLC_ADD_LDFLAGS([x26410b],[${ac_cv_ld_bsymbolic}])
3062         ])
3064         VLC_ADD_CFLAGS([x26410b],[${X264_CFLAGS}])
3065         if echo ${X264_LIBS} |grep -q 'pthreadGC2'; then
3066           VLC_ADD_CFLAGS([x26410b], [-DPTW32_STATIC_LIB])
3067         fi
3068       ],[
3069         if test "${enable_x26410b}" = "yes"; then
3070             AC_MSG_ERROR([${X264_PKG_ERRORS}: you may get it from http://www.videolan.org/x264.html])
3071           fi
3072       ])
3077 dnl Intel QuickSync (aka MediaSDK) H264/H262 encoder
3079 PKG_ENABLE_MODULES_VLC([MFX], [qsv], [libmfx], [Intel QuickSync MPEG4-Part10/MPEG2 (aka H.264/H.262) encoder], [auto])
3082 dnl libfluidsynth (MIDI synthetizer) plugin
3084 PKG_ENABLE_MODULES_VLC([FLUIDSYNTH], [], [fluidsynth >= 1.1.2], [MIDI synthetiser with libfluidsynth], [auto])
3085 PKG_ENABLE_MODULES_VLC([FLUIDLITE], [fluidsynth], [fluidlite], [MIDI synthetiser with libfluidsynth], [auto])
3086 AC_CHECK_HEADERS([fluidlite.h], [AC_SUBST([FLUIDSYNTH_LIBS], ${FLUIDLITE_LIBS})])
3089 dnl Teletext Modules
3090 dnl vbi decoder plugin (using libzbvi)
3091 dnl telx module
3092 dnl uncompatible
3094 AC_ARG_ENABLE([zvbi],
3095   AS_HELP_STRING([--enable-zvbi],[VBI (inc. Teletext) decoding support with
3096                   libzvbi (default enabled)]))
3097 AC_ARG_ENABLE([telx],
3098   AS_HELP_STRING([--enable-telx],[Teletext decoding module (conflicting with
3099                   zvbi) (default enabled if zvbi is absent)]))
3101 AS_IF( [test "${enable_zvbi}" != "no"],[
3102     PKG_CHECK_MODULES(ZVBI, [zvbi-0.2 >= 0.2.28],
3103         [
3104           VLC_ADD_PLUGIN([zvbi])
3105           AC_DEFINE(ZVBI_COMPILED, 1, [Define if the zvbi module is built])
3106           AS_IF( [test "${enable_telx}" = "yes"],[
3107                   AC_MSG_WARN([The zvbi and telx modules are incompatible. Using zvbi.])
3108                   ])
3109         ],[
3110           AC_MSG_WARN([${ZVBI_PKG_ERRORS}. Enabling the telx module instead.])
3111         ])
3112     ])
3113 AS_IF( [test "${enable_telx}" != "no" ],[
3114   VLC_ADD_PLUGIN([telx])
3115   ])
3118 dnl ARIB subtitles rendering module
3120 AC_ARG_ENABLE([aribsub],
3121   AS_HELP_STRING([--enable-aribsub],[ARIB Subtitles support (default enabled)]))
3122 AS_IF( [test "${enable_aribsub}" != "no" ],[
3123   PKG_CHECK_MODULES(ARIBB24, [aribb24 >= 1.0.1], [
3124       have_aribb24="yes"
3125       VLC_ADD_PLUGIN([aribsub])
3126       VLC_ADD_LIBS([aribsub],[-laribb24])
3127       AC_DEFINE(HAVE_ARIBB24, 1, [Define if libaribb24 is available.])
3128     ],[
3129       AC_MSG_WARN(Library [aribb24] needed for [aribsub] was not found)
3130       have_aribb24="no"
3131   ])
3133 AM_CONDITIONAL([HAVE_ARIBB24], [test x"${have_aribb24}" = x"yes"])
3136 dnl ARIB B25
3138 PKG_ENABLE_MODULES_VLC([ARIBB25], [aribcam], [aribb25 >= 0.2.6], [ARIB STD-B25], [auto])
3141 dnl  kate decoder plugin
3143 PKG_ENABLE_MODULES_VLC([KATE], [], [kate >= 0.3.0], [kate codec], [auto])
3146 dnl  tiger rendering for kate decoder plugin
3148 AC_ARG_ENABLE([tiger],
3149 AS_HELP_STRING([--enable-tiger], [Tiger rendering library for Kate streams (default auto)]))
3150 AS_IF([test "${enable_tiger}" != "no"], [
3151   PKG_CHECK_MODULES(TIGER,[tiger >= 0.3.1], [
3152       AC_DEFINE(HAVE_TIGER, 1, [Define if libtiger is available.])],[
3153         AS_IF([test -n "${enable_tiger}"], [
3154           AC_MSG_ERROR([${TIGER_PKG_ERRORS}.])
3155         ])
3156   ])
3160 dnl  check if we can build the css selector engine
3162 AC_ARG_ENABLE([css],
3163 AS_HELP_STRING([--enable-css], [CSS selector engine (default auto)]))
3164 AS_IF([test "${enable_css}" != "no"], [
3165   with_css="yes"
3166   AC_DEFINE(HAVE_CSS, 1, [Define if CSS engine is built])
3168 AM_CONDITIONAL([ENABLE_CSS], [test "${with_css}" = "yes"])
3172 dnl  Video plugins
3175 EXTEND_HELP_STRING([Video plugins:])
3178 dnl  libplacebo support
3180 AC_ARG_ENABLE([libplacebo],
3181   AS_HELP_STRING([--disable-libplacebo],
3182       [disable libplacebo support (default auto)]))
3184 AS_IF([test "$enable_libplacebo" != "no"], [
3185   PKG_CHECK_MODULES([LIBPLACEBO], [libplacebo >= 0.5], [
3186     AC_DEFINE([HAVE_LIBPLACEBO], [1], [Define to 1 if libplacebo is enabled.])
3187     PKG_CHECK_MODULES([LIBPLACEBO], [libplacebo >= 1.7],
3188       [have_libplacebo_vk="yes"], [have_libplacebo_vk="no"])
3189   ], [
3190     AS_IF([test -n "${enable_libplacebo}"], [
3191       AC_MSG_ERROR([${LIBPLACEBO_PKG_ERRORS}.])
3192     ])
3193     enable_libplacebo="no"
3194   ])
3196 AM_CONDITIONAL([HAVE_LIBPLACEBO], [test "$enable_libplacebo" != "no"])
3199 dnl  OpenGL
3201 PKG_CHECK_MODULES([EGL], [egl], [
3202   have_egl="yes"
3203 ], [
3204   have_egl="no"
3206 AM_CONDITIONAL([HAVE_EGL], [test "${have_egl}" = "yes"])
3208 have_gl="no"
3209 PKG_CHECK_MODULES([GL], [gl], [
3210   have_gl="yes"
3211 ], [
3212   AC_MSG_CHECKING([for OpenGL])
3213   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3214 #ifdef _WIN32
3215 # include <GL/glew.h>
3216 #endif
3217 #include <GL/gl.h>
3218 ]], [
3219     [int t0 = GL_TEXTURE0;]])
3220   ], [
3221     GL_CFLAGS=""
3222     have_gl="yes"
3223     AS_IF([test "${SYS}" != "mingw32"], [
3224       GL_LIBS="-lGL"
3225     ], [
3226       GL_LIBS="-lopengl32"
3227     ])
3228   ])
3229   AC_MSG_RESULT([${have_gl}])
3231 AM_CONDITIONAL([HAVE_GL], [test "${have_gl}" = "yes"])
3232 AS_IF([test "${have_gl}" = "yes"], [
3233   AC_DEFINE([HAVE_GL], 1, [Defined if having OpenGL])
3236 dnl OpenGL ES 2: depends on EGL 1.1
3237 PKG_ENABLE_MODULES_VLC([GLES2], [], [glesv2], [OpenGL ES v2 support], [disabled])
3240 dnl Vulkan
3242 AC_ARG_ENABLE(vulkan,
3243   [AS_HELP_STRING([--disable-vulkan],
3244       [disable Vulkan support (default auto)])])
3246 AS_IF([test "$enable_vulkan" != "no"], [
3247   AS_IF([test "$have_libplacebo_vk" = "yes"], [
3248     PKG_CHECK_MODULES([VULKAN], [vulkan >= 1.0.26], [
3249       AC_DEFINE([HAVE_VULKAN], [1], [Define to 1 if vulkan is enabled.])
3250     ], [
3251       AS_IF([test -n "${enable_vulkan}"], [
3252         AC_MSG_ERROR([${VULKAN_PKG_ERRORS}.])
3253       ])
3254       enable_vulkan="no"
3255     ])
3256   ], [
3257     AS_IF([test -n "${enable_vulkan}"], [
3258       AC_MSG_ERROR([Vulkan support requires libplacebo 1.7 as well. Do not use --disable-libplacebo.])
3259     ])
3260     enable_vulkan="no"
3261   ])
3263 AM_CONDITIONAL(HAVE_VULKAN, [test "$enable_vulkan" != "no"])
3266 dnl  Xlib
3269 AC_PATH_XTRA()
3270 AC_CHECK_HEADERS([X11/Xlib.h])
3273 dnl  X C Bindings modules
3275 AC_ARG_ENABLE([xcb],
3276   AS_HELP_STRING([--enable-xcb], [X11 support with XCB (default enabled)]),, [
3277   AS_IF([test "${SYS}" != "mingw32" -a "${SYS}" != "darwin"], [
3278     enable_xcb="yes"
3279   ], [
3280     enable_xcb="no"
3281   ])
3284 have_xcb="no"
3285 have_xkbcommon_x11="no"
3286 have_xcb_keysyms="no"
3287 AS_IF([test "${enable_xcb}" != "no"], [
3288   xcb_err=""
3290   dnl libxcb
3291   PKG_CHECK_MODULES([XCB], [xcb >= 1.6],, [
3292     xcb_err="$xcb_err ${XCB_PKG_ERRORS}."])
3293   PKG_CHECK_MODULES([XCB_COMPOSITE], [xcb-composite],, [
3294     xcb_err="$xcb_err ${XCB_COMPOSITE_PKG_ERRORS}."])
3295   PKG_CHECK_MODULES([XCB_RANDR], [xcb-randr >= 1.3],, [
3296     xcb_err="$xcb_err ${XCB_RANDR_PKG_ERRORS}."])
3297   PKG_CHECK_MODULES([XCB_RENDER], [xcb-render],, [
3298     xcb_err="$xcb_err ${XCB_RENDER_PKG_ERRORS}."])
3299   PKG_CHECK_MODULES([XCB_SHM], [xcb-shm >= 1.9.2],, [
3300     xcb_err="$xcb_err ${XCB_SHM_PKG_ERRORS}."])
3301   PKG_CHECK_MODULES([XCB_XKB], [xcb-xkb],, [
3302     xcb_err="$xcb_err ${XCB_XKB_PKG_ERRORS}."])
3304   dnl xproto
3305   PKG_CHECK_MODULES(XPROTO, [xproto],, [
3306     xcb_err="$xcb_err ${XPROTO_PKG_ERRORS}."])
3308   AS_IF([test -n "$xcb_err"], [
3309     AC_MSG_ERROR([$xcb_err Pass --disable-xcb to skip X11 support.])
3310   ])
3312   dnl xkbcommon
3313   PKG_CHECK_MODULES([XKBCOMMON_X11], [xkbcommon-x11], [
3314     have_xkbcommon_x11="yes"
3315   ], [
3316     AC_MSG_WARN([${XKBCOMMON_X11_PKG_ERRORS}. Hotkeys are disabled.])
3317   ])
3319   dnl xcb-utils
3320   PKG_CHECK_MODULES([XCB_KEYSYMS], [xcb-keysyms >= 0.3.4], [
3321     have_xcb_keysyms="yes"
3322   ], [
3323     AC_MSG_WARN([${XCB_KEYSYMS_PKG_ERRORS}. Global hotkeys are disabled.])
3324   ])
3326   have_xcb="yes"
3328 AM_CONDITIONAL([HAVE_XCB], [test "${have_xcb}" = "yes"])
3329 AM_CONDITIONAL([HAVE_XKBCOMMON_X11], [test "${have_xkbcommon_x11}" = "yes"])
3330 AM_CONDITIONAL([HAVE_XCB_KEYSYMS], [test "${have_xcb_keysyms}" = "yes"])
3334 dnl VDPAU needs X11
3336 AC_ARG_ENABLE([vdpau],
3337   [AS_HELP_STRING([--enable-vdpau], [VDPAU hardware support (default auto)])])
3338 have_vdpau="no"
3339 AS_IF([test "${enable_vdpau}" != "no"], [
3340   PKG_CHECK_MODULES([VDPAU], [vdpau >= 0.6], [
3341     have_vdpau="yes"
3342     AS_IF([test "${no_x}" = "yes"], [
3343       AC_MSG_ERROR([VDPAU requires Xlib (X11).])
3344     ])
3345   ], [
3346     AS_IF([test -n "${enable_vdpau}"], [
3347       AC_MSG_ERROR([${VDPAU_PKG_ERRORS}.])
3348     ])
3349   ])
3351 AM_CONDITIONAL([HAVE_VDPAU], [test "${have_vdpau}" = "yes"])
3353 have_avcodec_vdpau="no"
3354 AS_IF([test "${have_vdpau}" = "yes" -a "${have_avcodec}" = "yes"], [
3355   case "${avfork}" in
3356     libav) av_vdpau_ver="56.10.0" ;;
3357     ffmpeg) av_vdpau_ver="56.19.100" ;;
3358   esac
3359   PKG_CHECK_EXISTS([libavcodec >= ${av_vdpau_ver}], [
3360     have_avcodec_vdpau="yes"
3361     AC_MSG_NOTICE([VDPAU decoding acceleration activated])
3362   ], [
3363     AS_IF([test -n "${enable_vdpau}"], [
3364       AC_MSG_ERROR([libavcodec >= 56.10.0 is required for VDPAU decoding.])
3365     ], [
3366       AC_MSG_WARN([libavcodec >= 56.10.0 are required for VDPAU decoding.])
3367     ])
3368   ])
3370 AM_CONDITIONAL([HAVE_AVCODEC_VDPAU], [test "${have_avcodec_vdpau}" = "yes"])
3374 dnl  Wayland
3376 AC_ARG_ENABLE([wayland],
3377   AS_HELP_STRING([--enable-wayland], [Wayland support (default auto)]))
3379 have_wayland="no"
3380 AS_IF([test "${enable_wayland}" != "no"], [
3381   wl_err=""
3383   dnl wayland
3384   PKG_CHECK_MODULES([WAYLAND_CLIENT], [wayland-client >= 1.5.91],, [
3385     wl_err="$wl_err ${WAYLAND_CLIENT_PKG_ERRORS}."
3386   ])
3387   PKG_CHECK_MODULES([WAYLAND_CURSOR], [wayland-cursor],, [
3388     wl_err="$wl_err ${WAYLAND_CURSOR_PKG_ERRORS}."
3389   ])
3390   PKG_CHECK_MODULES([WAYLAND_EGL], [wayland-egl],, [
3391     wl_err="$wl_err ${WAYLAND_EGL_PKG_ERRORS}."
3392   ])
3393   PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland-scanner >= 1.15], [
3394     WAYLAND_SCANNER="$(${PKG_CONFIG} wayland-scanner --variable wayland_scanner)"
3395   ], [
3396     wl_err="$wl_err ${WAYLAND_SCANNER_PKG_ERRORS}."
3397   ])
3399   dnl wayland-protocols
3400   PKG_CHECK_MODULES([WAYLAND_PROTOCOLS], [wayland-protocols >= 1.15], [
3401     WAYLAND_PROTOCOLS="$(${PKG_CONFIG} wayland-protocols --variable pkgdatadir)"
3402   ], [
3403     wl_err="$wl_err ${WAYLAND_PROTOCOLS_PKG_ERRORS}."
3404   ])
3406   AS_IF([test -n "$wl_err"], [
3407     AS_IF([test -n "$enable_wayland"], [
3408       AC_MSG_ERROR([$wl_err])
3409     ], [
3410       AC_MSG_WARN([$wl_err])
3411     ])
3412   ], [
3413     have_wayland="yes"
3414   ])
3416   dnl xkbcommon
3417   PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon], [
3418     have_xkbcommon="yes"
3419   ], [
3420     AC_MSG_WARN([${XKBCOMMON_PKG_ERRORS}. Hotkeys are disabled.])
3421   ])
3423 AM_CONDITIONAL([HAVE_WAYLAND], [test "${have_wayland}" = "yes"])
3424 AC_SUBST([WAYLAND_PROTOCOLS])
3425 AC_SUBST([WAYLAND_SCANNER])
3426 AM_CONDITIONAL([HAVE_XKBCOMMON], [test "${have_xkbcommon}" = "yes"])
3430 dnl  SDL image decoder module
3432 AC_ARG_ENABLE([sdl-image],
3433   AS_HELP_STRING([--enable-sdl-image], [SDL image support (default enabled)]))
3434 AS_IF([test "${enable_sdl_image}" != "no"],[
3435   PKG_CHECK_MODULES(SDL_IMAGE, [SDL_image >= 1.2.10], [
3436     VLC_ADD_PLUGIN([sdl_image])
3437   ], [
3438     AC_MSG_WARN([${SDL_IMAGE_PKG_ERRORS}. You should install it alongside your SDL package.])
3439   ])
3443 dnl  freetype module
3445 AC_ARG_ENABLE([freetype],
3446   AS_HELP_STRING([--enable-freetype],   [freetype support   (default auto)]))
3447 AC_ARG_ENABLE([fribidi],
3448   AS_HELP_STRING([--enable-fribidi],    [fribidi support    (default auto)]))
3449 AC_ARG_ENABLE([harfbuzz],
3450   AS_HELP_STRING([--enable-harfbuzz],   [harfbuzz support   (default auto)]))
3451 AC_ARG_ENABLE([fontconfig],
3452   AS_HELP_STRING([--enable-fontconfig], [fontconfig support (default auto)]))
3454 AC_ARG_WITH([default-font],
3455     AS_HELP_STRING([--with-default-font=PATH],
3456         [Path to the default font]),
3457         [AC_DEFINE_UNQUOTED([DEFAULT_FONT_FILE],
3458             "$withval", [Default font])])
3459 AC_ARG_WITH([default-monospace-font],
3460     AS_HELP_STRING([--with-default-monospace-font=PATH],
3461         [Path to the default font]),
3462         [AC_DEFINE_UNQUOTED([DEFAULT_MONOSPACE_FONT_FILE],
3463             "$withval", [Default monospace font])])
3465 AC_ARG_WITH([default-font-family],
3466     AS_HELP_STRING([--with-default-font-family=NAME],
3467         [Name of the default font family]),
3468         [AC_DEFINE_UNQUOTED([DEFAULT_FAMILY],
3469             "$withval", [Default font family])])
3470 AC_ARG_WITH([default-monospace-font-family],
3471     AS_HELP_STRING([--with-default-monospace-font-family=NAME],
3472         [Name of the default font family]),
3473         [AC_DEFINE_UNQUOTED([DEFAULT_MONOSPACE_FAMILY],
3474             "$withval", [Default monospace font family])])
3476 have_freetype="no"
3477 have_fontconfig="no"
3478 have_fribidi="no"
3479 have_harfbuzz="no"
3481 if test "${enable_freetype}" != "no"; then
3482    PKG_CHECK_MODULES(FREETYPE, freetype2, [
3483       have_freetype="yes"
3484       VLC_ADD_CPPFLAGS([skins2],[${FREETYPE_CFLAGS}])
3485       VLC_ADD_LIBS([skins2],[${FREETYPE_LIBS}])
3487     dnl fontconfig support
3488     AS_IF([test "${enable_fontconfig}" != "no" -a "${SYS}" != "mingw32" -a "${SYS}" != "darwin"], [
3489       PKG_CHECK_MODULES(FONTCONFIG, [fontconfig >= 2.11], [
3490         have_fontconfig="yes"
3491       ], [
3492         AC_MSG_WARN([${FONTCONFIG_PKG_ERRORS}. Styles will be disabled in FreeType.])
3493       ])
3494     ])
3496       dnl fribidi support
3497       if test "${enable_fribidi}" != "no"; then
3498         PKG_CHECK_MODULES(FRIBIDI, fribidi, [
3499           have_fribidi="yes"
3500           VLC_ADD_CPPFLAGS([skins2], [${FRIBIDI_CFLAGS} -DHAVE_FRIBIDI])
3501           VLC_ADD_LIBS([skins2], [${FRIBIDI_LIBS}])
3502         ],[AC_MSG_WARN([${FRIBIDI_PKG_ERRORS}. Bidirectional text and complex scripts (Arabic, Farsi, Thai...) will be disabled in FreeType.])])
3503       fi
3505       dnl harfbuzz support
3506       if test "${have_fribidi}" != "no"; then
3507         if test "${enable_harfbuzz}" != "no"; then
3508           PKG_CHECK_MODULES(HARFBUZZ, harfbuzz, [
3509             have_harfbuzz="yes"
3510             VLC_ADD_CPPFLAGS([skins2], [${HARFBUZZ_CFLAGS} -DHAVE_HARFBUZZ])
3511             VLC_ADD_LIBS([skins2], [${HARFBUZZ_LIBS}])
3512           ],[AC_MSG_WARN([${HARFBUZZ_PKG_ERRORS}. Support for complex scripts (Arabic, Farsi, Thai...) will be disabled in FreeType.])])
3513         fi
3514       fi
3515   ],[
3516   AS_IF([test -n "${enable_freetype}"],[
3517     AC_MSG_ERROR([${FREETYPE_PKG_ERRORS}. Install FreeType2 development or configure with --disable-freetype.])
3518     ])
3519   ])
3522 AM_CONDITIONAL([HAVE_FREETYPE], [test "${have_freetype}" = "yes"])
3523 AM_CONDITIONAL([HAVE_FONTCONFIG], [test "${have_fontconfig}" = "yes"])
3524 AM_CONDITIONAL([HAVE_FRIBIDI], [test "${have_fribidi}" = "yes"])
3525 AM_CONDITIONAL([HAVE_HARFBUZZ], [test "${have_harfbuzz}" = "yes"])
3528 dnl libass subtitle rendering module
3530 AC_ARG_ENABLE([libass],
3531   AS_HELP_STRING([--enable-libass], [Subtitle support using libass (default enabled)]))
3532 AS_IF( [test "${enable_libass}" != "no"], [
3533   PKG_CHECK_MODULES(LIBASS, [libass >= 0.9.8],
3534       [
3535         VLC_ADD_PLUGIN([libass])
3537         if test "${have_fontconfig}" != "no"; then
3538             VLC_ADD_CPPFLAGS([libass],[-DHAVE_FONTCONFIG])
3539             VLC_ADD_LIBS([libass],[${FONTCONFIG_LIBS}])
3540         fi
3541       ],[
3542         AC_MSG_WARN([${LIBASS_PKG_ERRORS}.])
3543       ])
3544   ])
3547 dnl SAPI (text to Speech renderer for Windows)
3549 AC_LANG_PUSH([C++])
3550 AC_CHECK_TYPES([ISpObjectToken],[
3551               have_sapi="yes"
3552             ],[AC_MSG_WARN([sapi.h not found. Text to Speech renderer for Windows disabled])],
3553               [#include <windows.h>
3554                #include <sapi.h>
3555                #include <sphelper.h>])
3556 AM_CONDITIONAL([HAVE_SAPI], [test "${have_sapi}" = "yes"])
3557 AC_LANG_POP([C++])
3560 dnl  SVG module (text rendering and image decoding)
3562 PKG_ENABLE_MODULES_VLC([SVG], [], [librsvg-2.0 >= 2.9.0], [SVG rendering library],[auto])
3563 PKG_ENABLE_MODULES_VLC([SVGDEC], [], [librsvg-2.0 >= 2.9.0 cairo >= 1.13.1], [SVG image decoder library],[auto])
3566 dnl  Windows DirectX module
3569 AC_ARG_ENABLE([directx],
3570   AS_HELP_STRING([--enable-directx],
3571     [Microsoft DirectX support (default enabled on Windows)]),, [
3572   AS_IF([test "${SYS}" = "mingw32"], [
3573     enable_directx="yes"
3574   ], [
3575     enable_directx="no"
3576   ])
3578 AS_IF([test "${enable_directx}" != "no"], [
3579   dnl OpenGL
3580   AC_CHECK_HEADERS([GL/glew.h], [
3581     AC_CHECK_HEADERS([GL/wglew.h], [
3582         VLC_ADD_PLUGIN([glwin32 wgl])
3583       ],, [
3584         #include <windows.h>
3585         #include <GL/glew.h>
3586       ])],, [
3587       #include <windows.h>
3588    ])
3590   dnl Direct3D11
3591   AC_CHECK_HEADERS([d3d11.h], [
3592     VLC_ADD_PLUGIN([direct3d11 direct3d11_filters])
3593   ])
3595   dnl Direct3D9
3596   AC_CHECK_HEADERS([d3d9.h], [
3597     VLC_ADD_PLUGIN([direct3d9])
3598     AC_CHECK_HEADERS([d3dx9effect.h])
3600     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
3601         [[#define COBJMACROS
3602           #include <d3d9.h>
3603           #include <dxva2api.h>
3604           #ifndef IDirectXVideoProcessorService_GetVideoProcessorDeviceGuids
3605           # error dxva2 too old
3606           #endif
3607         ]],[[;]])
3608       ],[
3609         VLC_ADD_PLUGIN([direct3d9_filters])
3610       ],
3611       [AC_MSG_WARN([Could not find required IDirectXVideoDecoder in dxva2api.h])])
3613   ])
3617 dnl  Linux framebuffer module
3619 AC_CHECK_HEADER([linux/fb.h], [
3620   VLC_ADD_PLUGIN([fb])
3624 dnl  Linux kernel mode setting module
3626 PKG_ENABLE_MODULES_VLC([KMS], [], [libdrm >= 2.4.83], [Linux kernel mode setting output], [auto])
3629 dnl  libcaca plugin
3631 PKG_ENABLE_MODULES_VLC([CACA], [], [caca >= 0.99.beta14], [libcaca output],[auto])
3634 dnl  OS/2 KVA plugin
3636 AC_ARG_ENABLE([kva],
3637   AS_HELP_STRING([--enable-kva],
3638     [support the K Video Accelerator KVA (default enabled on OS/2)]),, [
3639   AS_IF([test "$SYS" = "os2"], [
3640     enable_kva="yes"
3641   ])
3643 have_kva="no"
3644 KVA_LIBS=""
3645 AS_IF([test "$enable_kva" != "no"], [
3646   AC_CHECK_HEADERS([kva.h], [
3647     have_kva="yes"
3648     AC_CHECK_LIB([kva], [main], [
3649       KVA_LIBS="-lkva"
3650     ])
3651   ])
3653 AC_SUBST([KVA_LIBS])
3654 AM_CONDITIONAL([HAVE_KVA], [test "${have_kva}" = "yes"])
3657 dnl MMAL plugin
3659 AC_ARG_ENABLE([mmal],
3660   AS_HELP_STRING([--enable-mmal],
3661     [Multi-Media Abstraction Layer (MMAL) hardware plugin (default enable)]))
3662 if test "${enable_mmal}" != "no"; then
3663   VLC_SAVE_FLAGS
3664   LDFLAGS="${LDFLAGS} -L/opt/vc/lib -lvchostif"
3665   CPPFLAGS="${CPPFLAGS} -isystem /opt/vc/include -isystem /opt/vc/include/interface/vcos/pthreads -isystem /opt/vc/include/interface/vmcs_host/linux"
3666   AC_CHECK_HEADERS([interface/mmal/mmal.h],
3667     [ AC_CHECK_LIB([bcm_host], [vc_tv_unregister_callback_full], [
3668         have_mmal="yes"
3669         VLC_ADD_PLUGIN([mmal])
3670         VLC_ADD_LDFLAGS([mmal],[ -L/opt/vc/lib ])
3671         VLC_ADD_CFLAGS([mmal],[ -isystem /opt/vc/include -isystem /opt/vc/include/interface/vcos/pthreads -isystem /opt/vc/include/interface/vmcs_host/linux ])
3672         VLC_ADD_LIBS([mmal],[ -lbcm_host -lmmal -lmmal_core -lmmal_components -lmmal_util -lvchostif -lvcsm ]) ], [
3673           AS_IF([test "${enable_mmal}" = "yes"],
3674             [ AC_MSG_ERROR([Cannot find bcm library...]) ],
3675             [ AC_MSG_WARN([Cannot find bcm library...]) ])
3676           ],
3677         [])
3678     ] , [ AS_IF([test "${enable_mmal}" = "yes"],
3679       [ AC_MSG_ERROR([Cannot find development headers for mmal...]) ],
3680       [ AC_MSG_WARN([Cannot find development headers for mmal...]) ]) ])
3681   VLC_RESTORE_FLAGS
3683 AM_CONDITIONAL([HAVE_MMAL], [test "${have_mmal}" = "yes"])
3686 dnl  Audio plugins
3689 EXTEND_HELP_STRING([Audio plugins:])
3692 dnl  Pulseaudio module
3694 AC_ARG_ENABLE([pulse],
3695   AS_HELP_STRING([--enable-pulse],
3696     [use the PulseAudio client library (default auto)]))
3697 have_pulse="no"
3698 AS_IF([test "${enable_pulse}" != "no"], [
3699   PKG_CHECK_MODULES([PULSE], [libpulse >= 1.0], [
3700     have_pulse="yes"
3701   ], [
3702     AS_IF([test "x${enable_pulse}" != "x"], [
3703       AC_MSG_ERROR([$PULSE_PKG_ERRORS. PulseAudio 1.0 or later required.])
3704     ])
3705   ])
3707 AM_CONDITIONAL([HAVE_PULSE], [test "${have_pulse}" = "yes"])
3710 dnl  ALSA module
3712 AC_ARG_ENABLE([alsa],
3713   AS_HELP_STRING([--enable-alsa],
3714     [support the Advanced Linux Sound Architecture (default auto)]),, [
3715   AS_IF([test "$SYS" = "linux" -a "${have_pulse}" = "no"], [
3716     enable_alsa="yes"
3717   ])
3719 have_alsa="no"
3720 AS_IF([test "${enable_alsa}" != "no"], [
3721   PKG_CHECK_MODULES([ALSA], [alsa >= 1.0.24], [
3722     have_alsa="yes"
3723   ], [
3724     AS_IF([test "x${enable_alsa}" != "x"], [
3725       AC_MSG_ERROR([$ALSA_PKG_ERRORS. alsa-lib 1.0.24 or later required. Pass --disable-alsa to ignore this error.])
3726     ])
3727   ])
3729 AM_CONDITIONAL([HAVE_ALSA], [test "${have_alsa}" = "yes"])
3732 dnl  Open Sound System module
3734 AC_ARG_ENABLE([oss],
3735   AS_HELP_STRING([--enable-oss],
3736     [support the Open Sound System OSS (default enabled on FreeBSD/NetBSD/DragonFlyBSD)]),, [
3737   AS_IF([test "$SYS" = "mingw32" -o "$SYS" = "linux" -o "$SYS" = "openbsd"], [
3738     enable_oss="no"
3739   ])
3741 have_oss="no"
3742 OSS_LIBS=""
3743 AS_IF([test "$enable_oss" != "no"], [
3744   AC_CHECK_HEADERS([soundcard.h sys/soundcard.h], [
3745     have_oss="yes"
3746     AC_CHECK_LIB([ossaudio], [main], [
3747       OSS_LIBS="-lossaudio"
3748     ])
3749   ])
3751 AC_SUBST([OSS_LIBS])
3752 AM_CONDITIONAL([HAVE_OSS], [test "${have_oss}" = "yes"])
3755 dnl  OpenBSD sndio module
3757 AC_ARG_ENABLE([sndio],
3758   AS_HELP_STRING([--disable-sndio],
3759     [support the OpenBSD sndio (default auto)]),, [
3760   AS_IF([test "$SYS" = "openbsd"], [
3761     enable_sndio="yes"
3762   ])
3764 have_sndio="no"
3765 AS_IF([test "$enable_sndio" != "no"], [
3766   AC_CHECK_HEADER([sndio.h], [
3767     have_sndio="yes"
3768   ])
3770 AM_CONDITIONAL([HAVE_SNDIO], [test "${have_sndio}" = "yes"])
3773 dnl  Windows Audio Session plugin
3775 AC_ARG_ENABLE([wasapi],
3776   AS_HELP_STRING([--enable-wasapi],
3777     [use the Windows Audio Session API (default auto)])
3779 have_wasapi="no"
3780 AS_IF([test "$enable_wasapi" != "no"], [
3781   AC_CHECK_HEADER([audioclient.h], [
3782     have_wasapi="yes"
3783   ], [
3784     AS_IF([test "x${enable_wasapi}" != "x"], [
3785       AC_MSG_ERROR([Windows Audio Session API not found.])
3786     ])
3787   ])
3789 AM_CONDITIONAL([HAVE_WASAPI], [test "${have_wasapi}" = "yes"])
3792 dnl  JACK modules
3794 AC_ARG_ENABLE([jack],
3795   AS_HELP_STRING([--disable-jack],
3796     [do not use jack (default auto)]))
3797 have_jack="no"
3798 AS_IF([test "${enable_jack}" != "no"], [
3799     PKG_CHECK_MODULES(JACK, jack >= 1.9.7,
3800       [ have_jack=yes ],
3801       [
3802       AC_MSG_WARN([${JACK_PKG_ERRORS}, trying jack1 instead])
3804       PKG_CHECK_MODULES(JACK, jack >= 0.120.1 jack < 1.0,
3805       [ have_jack=yes ],
3806       [
3807       AS_IF([test -n "${enable_jack}"],
3808          [AC_MSG_ERROR([${JACK_PKG_ERRORS}.])],
3809          [AC_MSG_WARN([${JACK_PKG_ERRORS}.])])
3810       ])
3811     ])
3813 AM_CONDITIONAL([HAVE_JACK], [test "${have_jack}" != "no"])
3816 dnl  OpenSLES Android
3818 AC_ARG_ENABLE([opensles],
3819   AS_HELP_STRING([--enable-opensles], [Android OpenSL ES audio module (default disabled)]))
3820 if test "${HAVE_ANDROID}" = "1"; then
3821   if test "${enable_opensles}" = "yes"; then
3822       AC_CHECK_HEADERS([SLES/OpenSLES.h],
3823         [ VLC_ADD_PLUGIN([opensles_android]) ],
3824         [ AC_MSG_ERROR([cannot find OpenSLES headers])] )
3825   fi
3829 dnl libsamplerate plugin
3831 PKG_ENABLE_MODULES_VLC([SAMPLERATE], [], [samplerate], [Resampler with libsamplerate], [auto])
3834 dnl  soxr module
3836 PKG_ENABLE_MODULES_VLC([SOXR], [], [soxr >= 0.1.2], [SoX Resampler library], [auto])
3839 dnl  OS/2 KAI plugin
3841 AC_ARG_ENABLE([kai],
3842   AS_HELP_STRING([--enable-kai],
3843     [support the K Audio Interface KAI (default enabled on OS/2)]),, [
3844   AS_IF([test "$SYS" = "os2"], [
3845     enable_kai="yes"
3846   ])
3848 have_kai="no"
3849 KAI_LIBS=""
3850 AS_IF([test "$enable_kai" != "no"], [
3851   AC_CHECK_HEADERS([kai.h], [
3852     have_kai="yes"
3853     AC_CHECK_LIB([kai], [main], [
3854       KAI_LIBS="-lkai"
3855     ])
3856   ])
3858 AC_SUBST([KAI_LIBS])
3859 AM_CONDITIONAL([HAVE_KAI], [test "${have_kai}" = "yes"])
3862 dnl  chromaprint audio track fingerprinter
3864 PKG_ENABLE_MODULES_VLC([CHROMAPRINT], [stream_out_chromaprint], [libchromaprint >= 0.6.0], [Chromaprint audio fingeprinter], [auto])
3867 dnl  Chromecast streaming support
3869 m4_pushdef([protobuf_lite_version], 2.5.0)
3870 AC_ARG_VAR(PROTOC, [protobuf compiler])
3871 AC_CHECK_PROGS(PROTOC, protoc, no)
3872 PKG_WITH_MODULES([CHROMECAST],[protobuf-lite >= protobuf_lite_version], [
3873     AS_IF([test "x${PROTOC}" != "xno"], [
3874         build_chromecast="yes"
3875     ], [
3876     AC_MSG_ERROR(protoc compiler needed for [chromecast] was not found)
3877     ])
3878 ], [
3879     AS_IF([test "${enable_chromecast}" = "yes"],
3880         AC_MSG_ERROR(Library [protobuf-lite >= protobuf_lite_version] needed for [chromecast] was not found),
3881         AC_MSG_WARN(Library [protobuf-lite >= protobuf_lite_version] needed for [chromecast] was not found)
3882     )
3883     enable_chromecast="no"
3884 ], [(Chromecast streaming support)], [auto])
3885 AM_CONDITIONAL([BUILD_CHROMECAST], [test "${build_chromecast}" = "yes"])
3886 m4_popdef([protobuf_lite_version])
3889 dnl  Interface plugins
3892 EXTEND_HELP_STRING([Interface plugins:])
3895 dnl QT
3897 AC_ARG_ENABLE([qt],
3898   AS_HELP_STRING([--disable-qt], [Qt UI support (default enabled)]),, [
3899   AS_IF([test "${enable_vlc}" != "no"], [enable_qt="yes"])
3900   AS_IF([test "${SYS}" = "darwin"], [
3901     enable_qt="no"
3902   ])
3904 have_qt5_x11="no"
3905 AS_IF([test "${enable_qt}" != "no"], [
3906   PKG_CHECK_MODULES([QT], [Qt5Core >= 5.11.0 Qt5Widgets Qt5Gui Qt5Quick Qt5QuickWidgets Qt5QuickControls2 Qt5Svg], [
3907       PKG_CHECK_MODULES([QT5_X11], [Qt5X11Extras], [
3908           have_qt5_x11="yes"
3909       ],[
3910           AC_MSG_WARN([Not building Qt Interface with X11 helpers.])
3911       ])
3912       QT_PATH="$(eval $PKG_CONFIG --variable=exec_prefix Qt5Core)"
3913       QT_HOST_PATH="$(eval $PKG_CONFIG --variable=host_bins Qt5Core)"
3914       QT_VERSION="$(eval $PKG_CONFIG --modversion Qt5Gui)"
3915       AC_PATH_PROGS(MOC, [moc-qt5 moc], moc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
3916       AC_PATH_PROGS(RCC, [rcc-qt5 rcc], rcc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
3917       AC_PATH_PROGS(UIC, [uic-qt5 uic], uic, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
3918       AC_PATH_PROGS(QMLCACHE, [qmlcachegen-qt5 qmlcachegen], no, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
3919       AS_IF([test "x${QMLCACHE}" = "xno"], [
3920           AC_MSG_WARN([qmlcachegen not found])
3921       ])
3922     ], [
3923       AS_IF([test -n "${enable_qt}"],[
3924         AC_MSG_ERROR([${QT_PKG_ERRORS}. If you want to build VLC without GUI, pass --disable-qt.])
3925       ],[
3926         AC_MSG_WARN([${QT_PKG_ERRORS}.])
3927       ])
3928       enable_qt="no"
3929     ])
3932 AC_ARG_ENABLE([qt-qml-cache],
3933   AS_HELP_STRING([--enable-qt-qml-cache],
3934     [enable qml cache generation]))
3935 AM_CONDITIONAL([HAVE_QMLCACHE], [test "${enable_qt_qml_cache}" = "yes" && test "x$QMLCACHE" != "xno"])
3937 AC_ARG_ENABLE([qt-qml-debug],
3938   AS_HELP_STRING([--enable-qt-qml-debug], [enable qml debuger]))
3939 AM_CONDITIONAL(QT_QML_DEBUG, [test "${enable_qt_qml_debug}" = "yes"])
3941 AS_IF([test "${enable_qt}" != "no"], [
3942   ALIASES="${ALIASES} qvlc"
3944 AC_SUBST([QT_VERSION])
3945 AM_CONDITIONAL([ENABLE_QT], [test "$enable_qt" != "no"])
3946 AM_CONDITIONAL([HAVE_QT5_X11], [test "${have_qt5_x11}" = "yes"])
3949 dnl detect kde4-config patch (used for kde solids).
3951 AC_ARG_VAR([KDE4_CONFIG], [kde4-config utility])
3952 AS_IF([test "x$KDE4_CONFIG" = "x"], [
3953   KDE4_CONFIG="kde4-config"
3957 dnl Simple test for skins2 dependency
3959 AS_IF([test "$enable_qt" = "no"], [
3960   AS_IF([test "${enable_skins2}" = "yes"], [
3961     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.])
3962   ], [
3963     enable_skins2="no"
3964     AC_MSG_WARN([The skins2 module depends on the Qt interface, Qt is not built so skins2 is disabled.])
3965   ])
3969 dnl Skins2 module
3971 AC_ARG_ENABLE([skins2],
3972   AS_HELP_STRING([--enable-skins2], [skins interface module (default auto)]))
3973 AS_IF([test "${enable_skins2}" != "no"], [
3974   have_skins_deps="yes"
3976   dnl Win32
3977   AS_IF([test "${SYS}" = "mingw32"], [
3978     VLC_ADD_CPPFLAGS([skins2],[-U_OFF_T_ -U_off_t -DWIN32_SKINS])
3979     VLC_ADD_LIBS([skins2],[-lgdi32 -lole32 -luuid -lmsimg32])
3980   dnl OS/2
3981   ], [test "${SYS}" = "os2"], [
3982     VLC_ADD_CPPFLAGS([skins2],[ -DOS2_SKINS])
3983   dnl Linux/Unix
3984   ], [
3985     PKG_CHECK_MODULES([XPM], [xpm],, [have_skins_deps="no"])
3986     PKG_CHECK_MODULES([XINERAMA], [xinerama],, [have_skins_deps="no"])
3987     PKG_CHECK_MODULES([XCURSOR], [xcursor],, [have_skins_deps="no"])
3988     PKG_CHECK_MODULES([XEXT], [xext],, [have_skins_deps="no"])
3989     VLC_ADD_CPPFLAGS([skins2],[${X_CFLAGS} ${XEXT_CFLAGS} ${XPM_CFLAGS} -DX11_SKINS])
3990     VLC_ADD_LIBS([skins2],[${X_LIBS} ${X_PRE_LIBS} ${XEXT_LIBS} ${XPM_LIBS} ${XINERAMA_LIBS} ${XCURSOR_LIBS} -lX11])
3991   ])
3993   dnl we need freetype
3994   AS_IF([test "${have_freetype}" != "yes"], [
3995     have_skins_deps="no"
3996   ])
3998   AS_IF([test "${have_skins_deps}" = "no"], [
3999     AS_IF([test "x${enable_skins2}" = "x"], [
4000       AC_MSG_WARN([Skins2 interface disabled due to missing dependencies.])
4001     ], [
4002       AC_MSG_ERROR([Skins2 interface requires FreeType, libxcursor, libxpm, libxext and libxinerama])
4003     ])
4004     enable_skins2="no"
4005   ], [
4006     ALIASES="${ALIASES} svlc"
4007     enable_skins2="yes"
4008   ])
4010 AM_CONDITIONAL([BUILD_SKINS], [test "${enable_skins2}" = "yes"])
4012 AC_ARG_ENABLE([libtar],
4013   AS_HELP_STRING([--enable-libtar], [libtar support for skins2 (default auto)]))
4014 AS_IF([test "${enable_skins2}" = "yes" && test "${enable_libtar}" != "no"], [
4015   AC_CHECK_HEADERS([libtar.h], [
4016     VLC_ADD_LIBS([skins2],[-ltar])
4017   ])
4021 dnl  MacOS X gui module
4023 AC_ARG_ENABLE([macosx],
4024   AS_HELP_STRING([--enable-macosx], [Mac OS X gui support (default enabled on Mac OS X)]))
4025 if test "x${enable_macosx}" != "xno" -a "${SYS}" = "darwin"
4026 then
4028   dnl
4029   dnl If possible, use xcrun to find the right ibtool
4030   dnl
4032   AC_PATH_PROG([XCRUN], [xcrun], [no])
4033   AS_IF([test ! "x${XCRUN}" = "xno"], [
4034     AC_MSG_CHECKING([for ibtool (using xcrun)])
4035     XIB="$(eval $XCRUN -f ibtool 2>/dev/null || echo no)"
4036     AC_MSG_RESULT([${XIB}])
4037   ], [
4038     AC_MSG_WARN([Looking for tools without using xcrun])
4039   ])
4041   AS_IF([test "x${XIB}" = "xno"], [
4042     AC_PATH_PROG(XIB, [ibtool], [no])
4043     AS_IF([test "x${XIB}" = "xno"], [
4044       AC_MSG_ERROR([ibtool was not found, but is required for --enable-macosx])
4045     ])
4046   ])
4048 AM_CONDITIONAL([ENABLE_MACOSX_UI], [test "$enable_macosx" != "no" -a "${SYS}" = "darwin"])
4051 dnl  MacOS X sparkle update support
4053 AC_ARG_ENABLE([sparkle],
4054   AS_HELP_STRING([--enable-sparkle], [Sparkle update support for OS X (default enabled on Mac OS X)]))
4055 if test "x${enable_sparkle}" != "xno" -a "${HAVE_OSX}" = "1"
4056 then
4057   if test ! -d ${CONTRIB_DIR}/Sparkle.framework -a ! -d ${CONTRIB_DIR}/Frameworks/Sparkle.framework
4058   then
4059     AC_MSG_ERROR([Sparkle framework is required and was not found in ${CONTRIB_DIR}])
4060   fi
4062   AC_DEFINE([HAVE_SPARKLE], [1], [Define to 1 if sparkle is enabled.])
4064 AM_CONDITIONAL([HAVE_SPARKLE], [test "$enable_sparkle" != "no"])
4067 dnl  MacOS X breakpad creash reporter support
4069 AC_ARG_WITH([breakpad],
4070   AS_HELP_STRING([--with-breakpad=URL], [Enable Breakpad reporter using given URL]), [], [with_breakpad=no])
4072 AS_IF([test "$with_breakpad" != "no"], [
4074   AS_IF([test "$with_breakpad" = "yes"], [
4075     AC_MSG_ERROR([You need to supply the CrashDragon Server URL as value for --with-breakpad])
4076   ])
4078   AS_IF([test "$HAVE_OSX" = "1"], [
4079     AC_MSG_CHECKING([for Breakpad framework])
4080     AS_IF([test ! -d ${CONTRIB_DIR}/Breakpad.framework -a \
4081                 ! -d ${CONTRIB_DIR}/Frameworks/Breakpad.framework], [
4082       AC_MSG_RESULT([no])
4083       with_breakpad="no"
4084       AC_MSG_ERROR([Breakpad framework is required and was not found in ${CONTRIB_DIR}])
4085     ], [
4086       AC_MSG_RESULT([yes])
4087     ])
4088   ],[
4089     PKG_CHECK_MODULES([BREAKPAD], [breakpad-client], [
4090       LDFLAGS="${LDFLAGS} -Wl,--build-id"
4091     ], [
4092       AC_MSG_ERROR(["breakpad not found"])
4093     ])
4094   ])
4097 AM_CONDITIONAL([HAVE_BREAKPAD], [test "$with_breakpad" != "no"])
4098 AS_IF([test "$with_breakpad" != "no"], [
4099   AC_SUBST([BREAKPAD_URL], ["${with_breakpad}"])
4103 dnl  Minimal Mac OS X module
4105 AC_ARG_ENABLE([minimal-macosx],
4106   AS_HELP_STRING([--enable-minimal-macosx], [Minimal Mac OS X support (default disabled)]))
4107 if test "${enable_minimal_macosx}" = "yes" -a "${SYS}" = "darwin"
4108 then
4109   VLC_ADD_PLUGIN([minimal_macosx])
4113 dnl Mac OS X fancy dmg build tool
4115 if test "${HAVE_OSX}" = "1"
4116 then
4117   AC_PATH_PROG(DMGBUILD, dmgbuild, no)
4118   AS_IF([test "x${DMGBUILD}" = "xno"], [
4119     AC_MSG_WARN([dmgbuild not found -- unable to build fancy DMGs])
4120   ])
4122 AM_CONDITIONAL([HAVE_DMGBUILD], [test "x$DMGBUILD" != "xno" -a "${HAVE_OSX}" = "1"])
4125 dnl  VideoToolbox plugins
4126 AC_CHECK_HEADERS([VideoToolbox/VideoToolbox.h], [
4127     VLC_ADD_PLUGIN([videotoolbox])
4128     VLC_ADD_PLUGIN([cvpx])
4129   ])
4132 dnl  AudioToolbox MIDI plugin
4133 AC_CHECK_HEADERS([AudioToolbox/AudioToolbox.h], [
4134   VLC_ADD_PLUGIN([audiotoolboxmidi])
4138 dnl  ncurses module
4140 AC_ARG_ENABLE([ncurses],
4141 AS_HELP_STRING([--disable-ncurses],[ncurses text-based interface (default auto)]))
4142 have_ncurses="no"
4143 AS_IF([test "${enable_ncurses}" != "no"] ,[
4144   PKG_CHECK_MODULES([NCURSES], [ncursesw], [
4145     have_ncurses="yes"
4146     ALIASES="${ALIASES} nvlc"
4147   ], [
4148     AS_IF([test -n "${enable_ncurses}"], [
4149       AC_MSG_ERROR([${NCURSES_PKG_ERRORS}.])
4150     ])
4151   ])
4153 AM_CONDITIONAL([HAVE_NCURSES], [test "${have_ncurses}" = "yes"])
4156 dnl  Lirc plugin
4158 AC_ARG_ENABLE([lirc],
4159   AS_HELP_STRING([--enable-lirc], [lirc support (default disabled)]))
4160 have_lirc="no"
4161 AS_IF([test "${enable_lirc}" = "yes"], [
4162   AC_CHECK_HEADER(lirc/lirc_client.h, [
4163     AC_CHECK_LIB([lirc_client], [lirc_init], [
4164       have_lirc="yes"
4165     ])
4166   ])
4168 AM_CONDITIONAL([HAVE_LIRC], [test "${have_lirc}" = "yes"])
4171 dnl  Bitstream
4173 PKG_CHECK_MODULES([BITSTREAM], [bitstream > 1.4],[have_bitstream="yes"], [have_bitstream="no"])
4174 AM_CONDITIONAL([HAVE_BITSTREAM], [test "${have_bitstream}" = "yes"])
4177 dnl  SRT plugin
4179 PKG_ENABLE_MODULES_VLC([SRT], [access_srt access_output_srt], [srt >= 1.3.0], [SRT input/output plugin], [auto], [], [], [-DENABLE_SRT])
4181 EXTEND_HELP_STRING([Visualisations and Video filter plugins:])
4183 dnl  goom visualization plugin
4185 PKG_ENABLE_MODULES_VLC([GOOM], [], [libgoom2], [goom visualization plugin], [auto])
4188 dnl libprojectM visualization plugin
4190 AC_ARG_ENABLE([projectm],
4191   AS_HELP_STRING([--enable-projectm], [projectM visualization plugin (default enabled)]))
4192 AS_IF([test "${enable_projectm}" != "no"],
4193   [
4194     PKG_CHECK_MODULES(PROJECTM, libprojectM,
4195     [
4196       VLC_ADD_PLUGIN([projectm])
4197       PKG_CHECK_EXISTS([libprojectM >= 2.0.0],
4198         [ AC_DEFINE([HAVE_PROJECTM2], 1, [Define to 1 if using libprojectM 2.x]) ],
4199         [ AC_MSG_WARN( [Using libprojectM version 1] )
4200       ])
4201     ],[
4202       AC_MSG_WARN([${PROJECTM_PKG_ERRORS}.])
4203     ])
4204   ])
4207 dnl Vovoid VSXu visualization plugin
4209 AC_ARG_ENABLE([vsxu],
4210   AS_HELP_STRING([--enable-vsxu], [Vovoid VSXu visualization plugin (default auto)]))
4211 AS_IF([test "${enable_vsxu}" != "no"],
4212   [
4213     PKG_CHECK_MODULES(VSXU, libvsxu,
4214     [
4215       VLC_ADD_PLUGIN([vsxu])
4216     ],[
4217       AC_MSG_WARN([${VSXU_PKG_ERRORS}.])
4218     ])
4219   ])
4221 EXTEND_HELP_STRING([Service Discovery plugins:])
4223 dnl  Avahi-Zeroconf services discovery
4224 PKG_ENABLE_MODULES_VLC([AVAHI], [], [avahi-client >= 0.6], [Zeroconf services discovery], [auto])
4227 dnl  libudev services discovery
4228 PKG_ENABLE_MODULES_VLC([UDEV], [], [libudev >= 142], [Linux udev services discovery], [auto])
4231 dnl MTP devices services discovery
4232 PKG_ENABLE_MODULES_VLC([MTP], [mtp access_mtp], [libmtp >= 1.0.0], [MTP devices support], [auto])
4235 dnl UPnP Plugin (Intel SDK)
4237 PKG_ENABLE_MODULES_VLC([UPNP], [upnp], [libupnp], [Intel UPNP SDK],[auto])
4240 dnl mDNS using libmicrodns
4242 PKG_ENABLE_MODULES_VLC([MICRODNS], [], [microdns], [mDNS services discovery], [auto])
4245 EXTEND_HELP_STRING([Misc options:])
4248 dnl  libxml2 module
4250 PKG_ENABLE_MODULES_VLC([LIBXML2], [xml], [libxml-2.0 >= 2.5], [libxml2 support],[auto])
4254 dnl libgcrypt
4256 AC_ARG_ENABLE([libgcrypt],
4257   AS_HELP_STRING([--disable-libgcrypt], [gcrypt support (default enabled)]))
4258 AC_ARG_VAR([GCRYPT_CFLAGS], [C compiler flags for gcrypt])
4259 AC_ARG_VAR([GCRYPT_LIBS], [linker flags flags for gcrypt])
4261 # require libgcrypt >= 1.6.0
4262 AS_IF([test "${enable_libgcrypt}" != "no"], [
4263   AC_CACHE_CHECK([for gcrypt 1.6.0 or later], [ac_cv_lib_gcrypt], [
4264     VLC_SAVE_FLAGS
4265     CFLAGS="${CFLAGS} ${GCRYPT_CFLAGS}"
4266     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
4267 [#include <gcrypt.h>
4268 #if GCRYPT_VERSION_NUMBER < 0x010600
4269 #error
4270 #endif]])], [
4271       ac_cv_lib_gcrypt=yes
4272     ], [
4273       ac_cv_lib_gcrypt=no
4274     ])
4275     VLC_RESTORE_FLAGS
4276   ])
4278   AS_IF([test "${ac_cv_lib_gcrypt}" = "yes"], [
4279     AC_DEFINE([HAVE_GCRYPT], 1, [Defined if having gcrypt])
4280   ], [
4281     AS_IF([test "${enable_libgcrypt}" = "yes"], [
4282       AC_MSG_ERROR([libgcrypt version 1.6.0 or higher not found. Install libgcrypt or pass --disable-libgcrypt.])
4283     ])
4284   ])
4287 AS_IF([test -z "$GCRYPT_LIBS"], [
4288   GCRYPT_LIBS="-lgcrypt -lgpg-error"
4291 AC_SUBST([GCRYPT_CFLAGS])
4292 AC_SUBST([GCRYPT_LIBS])
4293 AM_CONDITIONAL([HAVE_GCRYPT], [test "${ac_cv_lib_gcrypt}" = "yes"])
4296 dnl TLS/SSL
4298 AC_ARG_ENABLE([gnutls],
4299   AS_HELP_STRING([--enable-gnutls], [GNU TLS TLS/SSL support (default enabled)]))
4300 AS_IF([test "${enable_gnutls}" != "no"], [
4301   PKG_CHECK_MODULES(GNUTLS, [gnutls >= 3.5.0], [
4302     VLC_ADD_PLUGIN([gnutls])
4303   ], [
4304     AS_IF([test -n "${enable_gnutls}"], [
4305       AC_MSG_ERROR([${GNUTLS_PKG_ERRORS}.)])
4306     ])
4307   ])
4312 dnl Taglib plugin
4314 AC_ARG_ENABLE([taglib],
4315   AS_HELP_STRING([--disable-taglib],
4316     [do not use TagLib (default enabled)]))
4317 AS_IF([test "${enable_taglib}" != "no"], [
4318   PKG_CHECK_MODULES(TAGLIB, taglib >= 1.11, [
4319     VLC_ADD_PLUGIN([taglib])
4320   ], [
4321     AC_MSG_WARN([${TAGLIB_PKG_ERRORS}.])])
4325 dnl  libsecret
4327 PKG_ENABLE_MODULES_VLC([SECRET], [], [libsecret-1 >= 0.18], [use libsecret for keystore], [auto])
4330 dnl  kwallet
4332 AC_ARG_ENABLE([kwallet],
4333   AS_HELP_STRING([--enable-kwallet],
4334     [use kwallet (via D-Bus) for keystore (default enabled)]))
4335 AS_IF([test "${enable_kwallet}" != "no" -a "${have_dbus}" = "yes"], [
4336   VLC_ADD_PLUGIN([kwallet])
4340 dnl update checking system
4342 AC_ARG_ENABLE([update-check],
4343   AS_HELP_STRING([--enable-update-check], [update checking system (default disabled)]))
4344 if test "${enable_update_check}" = "yes"
4345 then
4346  AS_IF([test "${ac_cv_lib_gcrypt}" != "yes"],[
4347     AC_MSG_ERROR([libgcrypt is required for update checking system]) ])
4349 AM_CONDITIONAL([UPDATE_CHECK], [test "${enable_update_check}" = "yes"])
4352 dnl OS X notification plugin
4354 AC_ARG_ENABLE([osx_notifications],
4355   AS_HELP_STRING([--enable-osx-notifications],
4356     [macOS notification plugin (default disabled)]),,
4357   [enable_osx_notifications=no])
4358 AS_IF([test "${enable_osx_notifications}" != "no"], [
4359   VLC_ADD_PLUGIN([osx_notifications])
4363 dnl Libnotify notification plugin
4365 PKG_ENABLE_MODULES_VLC([NOTIFY], [], [libnotify gtk+-3.0], [libnotify notification], [auto])
4367 PKG_ENABLE_MODULES_VLC([MEDIALIBRARY], [medialibrary], [medialibrary >= 0.7.1], (medialibrary support), [auto])
4370 dnl  Endianness check
4372 AC_C_BIGENDIAN
4373 AS_IF([test "${ac_cv_c_bigendian}" = "yes"], [
4374   DEFS_BIGENDIAN="-DWORDS_BIGENDIAN=1"
4375 ], [
4376   DEFS_BIGENDIAN=""
4378 AC_SUBST([DEFS_BIGENDIAN])
4381 dnl Where to install KDE solid .desktop
4383 AC_ARG_WITH(kde-solid,
4384   AS_HELP_STRING([--with-kde-solid=PATH],
4385                  [KDE Solid actions directory (auto)]),, [
4387 if test "${SYS}" != "mingw32" -a "${SYS}" != "darwin" -a "${HAVE_ANDROID}" != "1" ; then
4388   with_kde_solid="yes"
4391 soliddatadir=""
4392 AS_IF([test "${with_kde_solid}" != "no"], [
4393   AS_IF([test "${with_kde_solid}" = "yes"], [
4394     kde4datadir="`${KDE4_CONFIG} --install data`"
4395     AS_IF([test "x$kde4datadir" = "x"], [kde4datadir='${datadir}/kde4/apps'])
4396     soliddatadir="${kde4datadir}/solid/actions"
4397   ], [
4398     soliddatadir="${with_kde_solid}"
4399   ])
4401 AC_SUBST([soliddatadir])
4402 AM_CONDITIONAL([KDE_SOLID], [test "x${soliddatadir}" != "x"])
4405 dnl  Find tools for win32 packaging
4407 AS_IF([test "${SYS}" = "mingw32"], [
4408     dnl
4409     dnl Find makensis required to build the NSIS installer
4410     dnl
4411     nsis_major_required="3"
4412     nsis_version_ok="no"
4413     AC_PATH_PROG([MAKENSIS], [makensis], [no])
4414     AS_IF([test "$MAKENSIS" != "no"], [
4415         # Check version
4416         AC_MSG_CHECKING([makensis version])
4417         nsis_version=$($MAKENSIS -VERSION)
4418         AC_MSG_RESULT([$nsis_version])
4419         nsis_version_major=$(echo "$nsis_version" | awk -F \. '{print $1}' | sed 's/v//')
4420         # Check if major version is a valid number
4421         AS_IF([test -n "$nsis_version_major" && \
4422                test "$nsis_version_major" -eq "$nsis_version_major" 2> /dev/null], [
4423             # Do the version check using major version
4424             AS_IF([test "$nsis_version_major" -lt "$nsis_major_required"], [
4425                 AC_MSG_WARN([makensis too old, (needs ${nsis_major_required}.x, have ${nsis_version_major}.x)])
4426             ], [
4427                 nsis_version_ok="yes"
4428             ])
4429         ], [
4430             AC_MSG_WARN([failed to check the makensis version])
4431         ])
4432     ])
4433     dnl
4434     dnl Find 7zip
4435     dnl
4436     AC_PATH_PROG([SEVENZIP], [7z], [7z])
4438 AM_CONDITIONAL([HAVE_MAKENSIS], [test "x$MAKENSIS" != "xno" && test "$nsis_version_ok" = "yes"])
4441 dnl Check wether we have the PROCESS_MITIGATION_IMAGE_LOAD_POLICY
4442 dnl It should only be available when building for win10, but some SDKs define it unconditionnaly
4444 if test "${SYS}" = "mingw32"; then
4445     AC_CHECK_TYPES([PROCESS_MITIGATION_IMAGE_LOAD_POLICY],,,[#include <windows.h>])
4448 EXTEND_HELP_STRING([Components:])
4451 dnl  the VLC binary
4453 AC_ARG_ENABLE([vlc],
4454   AS_HELP_STRING([--enable-vlc], [build the VLC media player (default enabled)]))
4455 AM_CONDITIONAL([BUILD_VLC], [test "${enable_vlc}" != "no"])
4458 dnl Fuzzer (at the end not to mess dependencies FLAGS)
4460 AS_VAR_IF(with_libfuzzer, no, [], [
4461     LIBS="-lstdc++ ${LIBM}"
4462     AS_IF([test "${with_libfuzzer}" != "yes"], [
4463       LIBS="$LIBS -L${with_libfuzzer}"
4464     ])
4465     LIBS="$LIBS -lFuzzer"
4466     AX_CHECK_COMPILE_FLAG(-fsanitize-coverage=trace-pc-guard, [
4467         AX_APPEND_FLAG([-fsanitize-coverage=trace-pc-guard])
4468         AX_APPEND_FLAG([-fsanitize-coverage=trace-pc-guard], [CXXFLAGS])
4469         AX_APPEND_COMPILE_FLAGS([-fsanitize-coverage=trace-cmp])
4470         AX_APPEND_COMPILE_FLAGS([-fsanitize-coverage=trace-cmp], [CXXFLAGS])
4471     ], [
4472         AX_CHECK_COMPILE_FLAG(-fsanitize-coverage=trace-pc, [
4473             AX_APPEND_FLAG([-fsanitize-coverage=trace-pc])
4474             AX_APPEND_FLAG([-fsanitize-coverage=trace-pc], [CXXFLAGS])
4475         ], [
4476             AC_MSG_ERROR([Sanitizer coverage not supported by your compiler])
4477         ])
4478     ])
4482 dnl  Stuff used by the program
4484 VERSION_MESSAGE="${VERSION} ${CODENAME}"
4485 COPYRIGHT_MESSAGE="Copyright © ${COPYRIGHT_YEARS} the VideoLAN team"
4486 AC_DEFINE_UNQUOTED([VERSION_MESSAGE], "${VERSION_MESSAGE}", [Simple version string])
4487 AC_DEFINE_UNQUOTED([COPYRIGHT_MESSAGE], "${COPYRIGHT_MESSAGE}", [Copyright string])
4488 AC_DEFINE_UNQUOTED([COPYRIGHT_YEARS], "${COPYRIGHT_YEARS}", [The copyright years])
4489 AC_DEFINE_UNQUOTED([CONFIGURE_LINE], "${CONFIGURE_LINE}", [The ./configure command line])
4490 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MAJOR],${VERSION_MAJOR}, [version major number])
4491 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MINOR],${VERSION_MINOR}, [version minor number])
4492 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_REVISION],${VERSION_REVISION}, [version revision number])
4493 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_EXTRA],${VERSION_EXTRA}, [version extra number])
4494 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_DEV],"${VERSION_DEV}", [version development string])
4495 AC_SUBST([COPYRIGHT_MESSAGE])
4496 AC_SUBST([VERSION_MESSAGE])
4497 AC_SUBST([VERSION_MAJOR])
4498 AC_SUBST([VERSION_MINOR])
4499 AC_SUBST([VERSION_REVISION])
4500 AC_SUBST([VERSION_EXTRA])
4501 AC_SUBST([COPYRIGHT_YEARS])
4502 AC_DEFINE_UNQUOTED([VLC_COMPILE_BY], "`whoami|sed -e 's/\\\/\\\\\\\/g'`", [user who ran configure])
4503 AC_DEFINE_UNQUOTED([VLC_COMPILE_HOST], "`hostname -f 2>/dev/null || hostname`", [host which ran configure])
4504 AC_DEFINE_UNQUOTED([VLC_COMPILER], "`$CC -v 2>&1 | tail -n 1 | sed -e 's/ *$//'`", [compiler])
4506 dnl  Handle substvars that use $(top_srcdir)
4508 CPPFLAGS="-I\$(top_srcdir)/include -I\$(top_builddir)/include ${CPPFLAGS}"
4511 dnl  Configuration is finished
4513 AC_SUBST([SYS])
4514 AC_SUBST([ARCH])
4515 AC_SUBST([ALIASES])
4516 AC_SUBST([ASM])
4517 AC_SUBST([MOC])
4518 AC_SUBST([RCC])
4519 AC_SUBST([UIC])
4520 AC_SUBST([WINDRES])
4521 AC_SUBST([WINE_SDK_PATH])
4522 AC_SUBST([LIBEXT])
4523 AC_SUBST([AM_CPPFLAGS])
4524 AC_SUBST([MACOSX_DEPLOYMENT_TARGET])
4525 AC_SUBST([FILE_LIBVLCCORE_DLL])
4526 AC_SUBST([FILE_LIBVLC_DLL])
4528 AC_CONFIG_FILES([
4529   Makefile
4530   doc/Makefile
4531   modules/Makefile
4532   m4/Makefile
4533   po/Makefile.in
4534   share/Makefile
4535   compat/Makefile
4536   src/Makefile
4537   lib/Makefile
4538   bin/Makefile
4539   test/Makefile
4540   modules/hw/mmal/Makefile
4541   share/vlc.appdata.xml.in
4544 AM_COND_IF([HAVE_WIN32], [
4545   AC_CONFIG_FILES([
4546     extras/package/win32/NSIS/spad.nsi
4547     extras/package/win32/NSIS/vlc.win32.nsi
4548     extras/package/win32/msi/config.wxi
4549   ])
4552 AM_COND_IF([HAVE_DARWIN], [
4553   AC_CONFIG_FILES([
4554     modules/gui/macosx/UI/InfoPlist.strings:modules/gui/macosx/Resources/InfoPlist.strings.in
4555     share/macosx/Info.plist:share/Info.plist.in
4556   ])
4559 dnl Generate makefiles
4560 AC_OUTPUT
4562 dnl Do we have to use make or gmake ?
4563 if make --version 2>&1|grep -q GNU
4564 then
4565     # GNU make, all seems good
4566     MAKE=make
4567 else
4568     # Known GNU make alias (on BSD)
4569     MAKE=gmake
4571 dnl Shortcut to nice compile message
4572 if test -n $SHELL; then
4573   SHELL=${CONFIG_SHELL-/bin/sh}
4575 rm -f compile
4576 compile_top_srcdir=`sed -ne "s/^top_srcdir *= *//p" < Makefile`
4577 echo "#! $SHELL
4578 rm -f .error\$\$
4579 ERROR=0
4580 export PATH=\"$PATH\" LANG=C
4581 ($MAKE V=1 \$@ 2>&1 || touch .error\$\$)| $compile_top_srcdir/extras/buildsystem/make.pl
4582 test -f .error\$\$ && ERROR=1
4583 rm -f .error\$\$
4584 exit \$ERROR" >compile
4585 chmod a+x compile
4587 echo "
4588 libvlc configuration
4589 --------------------
4590 version               : ${VERSION}
4591 system                : ${SYS}
4592 architecture          : ${ARCH}
4593 optimizations         : ${enable_optimizations}"
4594 if test "${enable_vlc}" != "no"; then
4595 echo "vlc aliases           :${ALIASES}"
4596 else
4597 echo "build vlc executable  : no"
4599 echo "
4600 To build vlc and its plugins, type \`$MAKE', or \`./compile' if you like nice colors."