qml: show the media title on top of the player view
[vlc.git] / configure.ac
blob7741ddca554239f4093a0f6837e4cc15a74bd078
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"],
1703     [enable_branch_protection="yes"], [enable_branch_protection="no"])
1705 AS_IF([test "${enable_branch_protection}" != "no"], [
1706   AX_CHECK_COMPILE_FLAG([-mbranch-protection=standard], [
1707     AX_APPEND_FLAG([-mbranch-protection=standard], [CFLAGS])
1708     AX_APPEND_FLAG([-mbranch-protection=standard], [CXXFLAGS])
1709   ])
1713 AC_ARG_ENABLE([altivec],
1714   AS_HELP_STRING([--disable-altivec],
1715     [disable AltiVec optimizations (default auto)]),, [
1716   AS_CASE("${host_cpu}", [powerpc*],
1717         [enable_altivec=yes], [enable_altivec=no])
1719 have_altivec="no"
1720 ALTIVEC_CFLAGS=""
1721 AS_IF([test "${enable_altivec}" = "yes"], [
1722   ARCH="${ARCH} altivec";
1723   VLC_SAVE_FLAGS
1724   AC_CACHE_CHECK([if $CC groks AltiVec inline assembly],
1725     [ac_cv_altivec_inline],
1726     [AC_TRY_COMPILE(,[asm volatile("vperm 0,1,2,3");],
1727          ac_cv_altivec_inline="yes",
1728          [CFLAGS="${CFLAGS} -Wa,-maltivec"
1729           AC_TRY_COMPILE(,[asm volatile("vperm 0,1,2,3");],
1730             [ac_cv_altivec_inline="-Wa,-maltivec"],
1731             ac_cv_altivec_inline=no)
1732          ])])
1733   VLC_RESTORE_FLAGS
1734   AS_IF([test "${ac_cv_altivec_inline}" != "no"], [
1735     AC_DEFINE(CAN_COMPILE_ALTIVEC, 1,
1736               [Define to 1 if AltiVec inline assembly is available.])
1737     AS_IF([test "${ac_cv_altivec_inline}" != "yes"], [
1738       ALTIVEC_CFLAGS="${ac_cv_altivec_inline}"
1739       VLC_ADD_CFLAGS([libvlccore],[${ac_cv_altivec_inline}])
1740     ])
1741     have_altivec="yes"
1742   ])
1744   VLC_SAVE_FLAGS
1745   AC_CACHE_CHECK([if \$CC groks AltiVec C extensions],
1746   [ac_cv_c_altivec], [
1747     CFLAGS="${CFLAGS} -maltivec"
1748     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
1749 [#include <altivec.h>]], [
1750 [vec_ld(0, (unsigned char *)0);]])], [
1751       ac_cv_c_altivec="-maltivec"
1752     ], [
1753       ac_cv_c_altivec="no"
1754     ])
1755   ])
1756   VLC_RESTORE_FLAGS
1757   AS_IF([test "${ac_cv_c_altivec}" != "no"], [
1758     CPPFLAGS="${CPPFLAGS} ${ac_cv_c_altivec}"
1759     AC_DEFINE(CAN_COMPILE_C_ALTIVEC, 1, [Define to 1 if C AltiVec extensions are available.])
1760     VLC_ADD_CFLAGS([libvlccore],[${ac_cv_c_altivec}])
1761     ALTIVEC_CFLAGS="$ALTIVEC_CFLAGS ${ac_cv_c_altivec}"
1762     VLC_ADD_CFLAGS([deinterlace],[${ac_cv_c_altivec}])
1763     have_altivec="yes"
1764   ])
1765   AC_CHECK_HEADERS([altivec.h])
1767   VLC_SAVE_FLAGS
1768   LDFLAGS="${LDFLAGS} -Wl,-framework,vecLib"
1769   AC_CACHE_CHECK([if linker needs -framework vecLib],
1770     [ac_cv_ld_altivec],
1771     [AC_TRY_LINK([],,ac_cv_ld_altivec=yes,ac_cv_ld_altivec=no)])
1772   VLC_RESTORE_FLAGS
1773   AS_IF([test "${ac_cv_ld_altivec}" != "no"], [
1774     VLC_ADD_LIBS([libvlccore],[-Wl,-framework,vecLib])
1775   ])
1777 AC_SUBST([ALTIVEC_CFLAGS])
1778 AM_CONDITIONAL([HAVE_ALTIVEC], [test "$have_altivec" = "yes"])
1781 dnl  Memory usage
1783 AC_ARG_ENABLE([optimize-memory],
1784   AS_HELP_STRING([--enable-optimize-memory],
1785     [optimize memory usage over performance]))
1786 if test "${enable_optimize_memory}" = "yes"; then
1787   AC_DEFINE(OPTIMIZE_MEMORY, 1, Define if you want to optimize memory usage over performance)
1791 dnl Allow running as root (useful for people running on embedded platforms)
1793 AC_ARG_ENABLE([run-as-root],
1794   AS_HELP_STRING([--enable-run-as-root],
1795     [allow running VLC as root (default disabled)]))
1796 AS_IF([test "${enable_run_as_root}" = "yes"],[
1797     AC_DEFINE(ALLOW_RUN_AS_ROOT, 1,
1798               [Define to 1 to allow running VLC as root (uid 0).])
1802 dnl Stream output
1804 AC_ARG_ENABLE([sout],
1805   AS_HELP_STRING([--disable-sout],
1806     [disable streaming output (default enabled)]))
1807 AS_IF([test "${enable_sout}" != "no"], [
1808   AC_DEFINE(ENABLE_SOUT, 1, [Define to 1 for stream output support.])
1810 AM_CONDITIONAL([ENABLE_SOUT], [test "${enable_sout}" != "no"])
1812 dnl Lua modules
1813 AC_ARG_ENABLE([lua],
1814   AS_HELP_STRING([--disable-lua],
1815     [disable LUA scripting support (default enabled)]))
1816 if test "${enable_lua}" != "no"
1817 then
1818   PKG_CHECK_MODULES(LUA, lua5.2,
1819     [ have_lua=yes ],
1820     [
1821     AC_MSG_WARN([${LUA_PKG_ERRORS}, trying lua 5.1 instead])
1823     PKG_CHECK_MODULES(LUA, lua5.1,
1824       [ have_lua=yes ],
1825       [
1826       AC_MSG_WARN([${LUA_PKG_ERRORS}, trying lua >= 5.1 instead])
1827       PKG_CHECK_MODULES(LUA, lua >= 5.1,
1828         [ have_lua=yes ],
1829         [
1830           AC_MSG_WARN([${LUA_PKG_ERRORS}, trying manual detection instead])
1831           have_lua=yes
1832           AC_CHECK_HEADERS([lua.h lauxlib.h lualib.h],
1833             [],
1834             [ have_lua=no ] )
1835           AC_CHECK_LIB(  lua5.2 , luaL_newstate,
1836             [LUA_LIBS="-llua5.2"],
1837           AC_CHECK_LIB( lua5.1 , luaL_newstate,
1838             [LUA_LIBS="-llua5.1"],
1839             AC_CHECK_LIB( lua51 , luaL_newstate,
1840               [LUA_LIBS="-llua51"],
1841               AC_CHECK_LIB( lua , luaL_newstate,
1842                 [LUA_LIBS="-llua"],
1843                 [ have_lua=no
1844                 ], [-lm])
1845             )))
1846         ])
1847       ])
1848     ])
1849   if test "x${have_lua}" != "xyes" ;  then
1850       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.])
1851   fi
1852   AC_ARG_VAR([LUAC], [LUA byte compiler])
1853   AS_IF([test -z "$LUAC"], [
1854      AC_CHECK_TOOL(LUAC, [luac], [false])
1855   ])
1856   AS_IF([test "${LUAC}" = "false"], [
1857     AC_MSG_ERROR([Could not find the LUA byte compiler.])
1858   ])
1859   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], [
1860     AC_MSG_ERROR([You need 32-bits luac when using lua from contrib.])
1861   ])
1863 AM_CONDITIONAL([BUILD_LUA], [test "${have_lua}" = "yes"])
1867 dnl VideoLAN manager
1869 AC_ARG_ENABLE([vlm],
1870   AS_HELP_STRING([--disable-vlm],
1871     [disable the stream manager (default enabled)]),,
1872   [enable_vlm="${enable_sout}"])
1873 AS_IF([test "${enable_vlm}" != "no"], [
1874   AS_IF([test "${enable_sout}" = "no"], [
1875     AC_MSG_ERROR([VLM requires the stream output. Do not use --disable-sout.])
1876   ])
1877   AC_DEFINE(ENABLE_VLM, 1, [Define if you want the VideoLAN manager support])
1879 AM_CONDITIONAL([ENABLE_VLM], [test "${enable_vlm}" != "no"])
1883 dnl Addons manager storage and repositories modules
1885 AC_ARG_ENABLE([addonmanagermodules],
1886   AS_HELP_STRING([--disable-addonmanagermodules],
1887     [disable the addons manager modules (default enabled)]))
1888 if test "${enable_addonmanagermodules}" != "no"
1889 then
1890   AC_DEFINE(ENABLE_ADDONMANAGERMODULES, 1, [Define if you want the addons manager modules])
1892 AM_CONDITIONAL([ENABLE_ADDONMANAGERMODULES], [test "${enable_addonmanagermodules}" != "no"])
1896 dnl  Input plugins
1899 EXTEND_HELP_STRING([Input plugins:])
1902 dnl  libarchive access module
1904 PKG_ENABLE_MODULES_VLC([ARCHIVE], [archive], [libarchive >= 3.1.0], (libarchive support), [auto])
1907 dnl  live555 input
1909 AC_ARG_ENABLE([live555],
1910   AS_HELP_STRING([--enable-live555],
1911     [enable RTSP input through live555 (default enabled)]))
1913 AS_IF([test "${enable_live555}" != "no" -a -n "${CXX}"], [
1914   PKG_CHECK_MODULES(LIVE555, live555, [
1915     VLC_ADD_PLUGIN([live555])
1916     VLC_ADD_CXXFLAGS([live555], [$LIVE555_CFLAGS])
1917     VLC_ADD_LIBS([live555],[$LIVE555_LIBS])
1918   ], [
1919     AC_MSG_WARN([${LIVE555_PKG_ERRORS}.])
1921     AC_LANG_PUSH(C++)
1922     VLC_SAVE_FLAGS
1924     dnl detect include paths
1925     AS_IF([test -f "${CONTRIB_DIR}/include/UsageEnvironment/UsageEnvironment.hh"], [
1926       CPPFLAGS_live555="-I${CONTRIB_DIR}/include/liveMedia -I${CONTRIB_DIR}/include/groupsock -I${CONTRIB_DIR}/include/BasicUsageEnvironment -I${CONTRIB_DIR}/include/UsageEnvironment"
1927     ], [
1928       AS_IF([test "${SYS}" != "os2"], [
1929         LIVE555_PREFIX=${LIVE555_PREFIX-"/usr"}
1930         CPPFLAGS_live555="-I${LIVE555_PREFIX}/include/liveMedia -I${LIVE555_PREFIX}/include/groupsock -I${LIVE555_PREFIX}/include/BasicUsageEnvironment -I${LIVE555_PREFIX}/include/UsageEnvironment"
1931       ], [
1932         LIVE555_PREFIX=${LIVE555_PREFIX-"/usr/lib/live"}
1933         CPPFLAGS_live555="-I${LIVE555_PREFIX}/liveMedia/include -I${LIVE555_PREFIX}/groupsock/include -I${LIVE555_PREFIX}/BasicUsageEnvironment/include -I${LIVE555_PREFIX}/UsageEnvironment/include"
1934         LDFLAGS_live555="-L${LIVE555_PREFIX}/liveMedia -L${LIVE555_PREFIX}/groupsock -L${LIVE555_PREFIX}/BasicUsageEnvironment -L${LIVE555_PREFIX}/UsageEnvironment"
1935       ])
1936     ])
1938     dnl CPP Flags
1939     AS_IF([test "${SYS}" = "solaris"], [
1940       CPPFLAGS_live555="${CPPFLAGS_live555} -DSOLARIS"
1941     ])
1942     CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_live555}"
1943     LDFLAGS="${LDFLAGS} ${LDFLAGS_live555}"
1945     dnl version check
1946     AC_CACHE_CHECK([for live555 version 1324598400 or later], [ac_cv_live555], [
1947       AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
1948 [#include <liveMedia_version.hh>
1949 #if !defined (LIVEMEDIA_LIBRARY_VERSION_INT) || (LIVEMEDIA_LIBRARY_VERSION_INT < 1324598400)
1950 # error BOOM
1951 #endif]])
1952       ], [
1953         ac_cv_live555="yes"
1954       ], [
1955         ac_cv_live555="no"
1956       ])
1957     ])
1959     AS_IF([test "$ac_cv_live555" = "no"], [
1960       AC_MSG_WARN([live555 is missing or its installed version is too old:
1961 Version 2011.12.23 or later is required to proceed.
1962 You can get an updated one from http://www.live555.com/liveMedia .])
1963       AS_IF([test -n "${enable_live555}"], [
1964         AC_MSG_ERROR([Update live555 or pass --disable-live555 to disable RTSP input support.])
1965       ])
1966     ], [
1967       other_libs="-lgroupsock -lBasicUsageEnvironment -lUsageEnvironment"
1968       other_libs_pic="-lgroupsock_pic -lBasicUsageEnvironment_pic -lUsageEnvironment_pic"
1969       AS_IF([test "${SYS}" = "mingw32"], [
1970         # add ws2_32 for closesocket, select, recv
1971         other_libs="$other_libs -lws2_32"
1972       ])
1974       dnl We need to check for pic because live555 don't provide shared libs
1975       dnl and we want to build a plugins so we need -fPIC on some arch.
1976       VLC_ADD_CXXFLAGS([live555], [${CPPFLAGS_live555}])
1977       VLC_ADD_LDFLAGS([live555], [${LDFLAGS_live555}])
1978       AC_CHECK_LIB([liveMedia_pic], [main], [
1979         VLC_ADD_PLUGIN([live555])
1980         VLC_ADD_LIBS([live555], [-lliveMedia_pic ${other_libs_pic}])
1981       ],[
1982         AC_CHECK_LIB([liveMedia], [main], [
1983           VLC_ADD_PLUGIN([live555])
1984           VLC_ADD_LIBS([live555], [-lliveMedia ${other_libs}])
1985         ],[],[${other_libs}])
1986       ],[${other_libs_pic}])
1987     ])
1988     VLC_RESTORE_FLAGS
1989     AC_LANG_POP(C++)
1990   ])
1994 dnl IIDC and DV FireWire input modules
1996 PKG_ENABLE_MODULES_VLC([DC1394], [], [libdc1394-2 >= 2.1.0], [IIDC FireWire input module], [auto])
1997 PKG_ENABLE_MODULES_VLC([DV1394], [], [libraw1394 >= 2.0.1 libavc1394 >= 0.5.3], [DV FireWire input module], [auto])
2000 dnl - linsys modules: access module check for libzvbi
2002 AC_ARG_ENABLE([linsys],
2003   AS_HELP_STRING([--enable-linsys],
2004     [Linux Linear Systems Ltd. SDI and HD-SDI input cards (default enabled)]))
2005 AS_IF([test "$SYS" = "linux" -a "${enable_linsys}" != "no"], [
2006   VLC_ADD_PLUGIN([linsys_hdsdi])
2007   PKG_CHECK_MODULES(LINSYS_SDI, [zvbi-0.2 >= 0.2.28], [
2008     VLC_ADD_PLUGIN([linsys_sdi])
2009   ], [
2010     AC_MSG_WARN([${LINSYS_SDI_PKG_ERRORS}.])
2011   ])
2015 dnl dvdread module: check for libdvdread
2017 PKG_ENABLE_MODULES_VLC([DVDREAD], [], [dvdread > 6.0.0], [dvdread input module], [auto])
2020 dnl libdvdnav plugin
2022 PKG_ENABLE_MODULES_VLC([DVDNAV], [], [dvdnav >= 6.0.0], [DVD with navigation input module (dvdnav)], [auto])
2025 dnl  Blu-ray Disc Support with libbluray
2027 PKG_ENABLE_MODULES_VLC([BLURAY], [libbluray], [libbluray >= 0.6.2], (libbluray for Blu-ray disc support ) )
2030 dnl  OpenCV wrapper and example filters
2032 PKG_ENABLE_MODULES_VLC([OPENCV], [opencv_example opencv_wrapper], [opencv > 2.0], (OpenCV (computer vision) filter), [auto])
2036 dnl  libsmbclient plugin
2038 PKG_ENABLE_MODULES_VLC([SMBCLIENT], [smbc], [smbclient], (SMB/CIFS support), [auto])
2041 dnl  liBDSM access module
2043 AM_CONDITIONAL([HAVE_DSM], [test "$AS_TR_SH(with_dsm)" = "yes"])
2044 PKG_WITH_MODULES([DSM], [libdsm >= 0.2.0], [
2045        VLC_ADD_PLUGIN([dsm])
2046        VLC_ADD_CFLAGS([dsm], [$DSM_CFLAGS])
2047        VLC_ADD_LIBS([dsm], [$DSM_LIBS])
2048        have_dsm="yes"
2049    ],,[libdsm SMB/CIFS access/sd module], [auto])
2050 AM_CONDITIONAL([HAVE_DSM], [test "${have_dsm}" = "yes"])
2053 dnl sftp access support
2055 PKG_ENABLE_MODULES_VLC([SFTP], [sftp], [libssh2], (support SFTP file transfer via libssh2), [auto])
2058 dnl nfs access support
2060 PKG_ENABLE_MODULES_VLC([NFS], [nfs], [libnfs >= 1.10.0], (support nfs protocol via libnfs), [auto])
2063 dnl smb2 access support
2065 PKG_ENABLE_MODULES_VLC([SMB2], [smb2], [libsmb2 >= 3.0.0], (support smb2 protocol via libsmb2), [auto])
2068 dnl  Video4Linux 2
2070 AC_ARG_ENABLE([v4l2], AS_HELP_STRING([--disable-v4l2],
2071   [disable Video4Linux version 2 (default auto)]))
2072 have_v4l2="no"
2073 AS_IF([test "$enable_v4l2" != "no"], [
2074   AC_CHECK_HEADERS([linux/videodev2.h], [
2075     have_v4l2="yes"
2076   ])
2078 AM_CONDITIONAL([HAVE_V4L2], [test "${have_v4l2}" != "no"])
2081 dnl  NVDEC decoder/encoder
2083 AC_ARG_ENABLE([nvdec], AS_HELP_STRING([--disable-nvdec],
2084   [disable NVDEC decoder (default auto)]))
2085 have_nvdec="no"
2086 AS_IF([test "$enable_nvdec" != "no"], [
2087   AC_CHECK_HEADERS([ffnvcodec/dynlink_loader.h], [
2088     have_nvdec="yes"
2089   ])
2091 AM_CONDITIONAL([HAVE_NVDEC], [test "${have_nvdec}" != "no"])
2094 dnl special access module for Blackmagic SDI cards
2096 AC_ARG_ENABLE([decklink],
2097   AS_HELP_STRING([--disable-decklink],
2098     [disable Blackmagic DeckLink SDI input (default auto)]))
2099 AC_ARG_WITH([decklink_sdk],
2100   AS_HELP_STRING([--with-decklink-sdk=DIR],
2101     [location of Blackmagic DeckLink SDI SDK]))
2102 have_decklink=no
2103 if test "${enable_decklink}" != "no"
2104 then
2105   if test "${with_decklink_sdk}" != "no" -a -n "${with_decklink_sdk}"
2106   then
2107     VLC_ADD_CPPFLAGS([decklink decklinkoutput stream_out_sdi],[-I${with_decklink_sdk}/include])
2108   fi
2109   VLC_SAVE_FLAGS
2110   CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_decklink}"
2111   AC_LANG_PUSH([C++])
2112   AC_CHECK_HEADERS([DeckLinkAPIDispatch.cpp], [
2113       have_decklink=yes
2114       AS_IF([test "${SYS}" = "darwin"], [
2115         VLC_ADD_LIBS([decklink decklinkoutput],[-Wl,-framework,CoreFoundation])
2116       ])
2117   ], [
2118       AS_IF([test "${enable_decklink}" = "yes"], [
2119         AC_MSG_ERROR([Blackmagic DeckLink SDI include files not found!])
2120       ], [
2121         AC_MSG_WARN([Blackmagic DeckLink SDI include files not found, decklink disabled])
2122       ])
2123   ])
2124   AC_LANG_POP([C++])
2125   VLC_RESTORE_FLAGS
2127 AM_CONDITIONAL([HAVE_DECKLINK], [ test "${have_decklink}" != "no" ])
2131 dnl  Built-in CD-DA and VCD module
2133 AC_ARG_ENABLE([vcd],
2134   AS_HELP_STRING([--disable-vcd],
2135     [disable built-in VCD and CD-DA support (default enabled)]))
2137 AC_ARG_ENABLE([libcddb],
2138   AS_HELP_STRING([--disable-libcddb],
2139     [disable CDDB for Audio CD (default enabled)]))
2141 if test "${enable_vcd}" != "no" -a "${enable_winstore_app}" != "yes"
2142 then
2143   AC_MSG_CHECKING(for cdrom_msf0 in linux/cdrom.h)
2144   AC_EGREP_HEADER(cdrom_msf0,linux/cdrom.h,[
2145     AC_MSG_RESULT(yes)
2146     VLC_ADD_PLUGIN([vcd cdda])
2147   ],[
2148     AC_MSG_RESULT(no)
2149   ])
2151   AC_MSG_CHECKING(for scsireq in sys/scsiio.h)
2152   AC_EGREP_HEADER(scsireq,sys/scsiio.h,[
2153     AC_MSG_RESULT(yes)
2154     VLC_ADD_PLUGIN([vcd cdda])
2155     AC_DEFINE(HAVE_SCSIREQ_IN_SYS_SCSIIO_H, 1, For NetBSD VCD support)
2156   ],[
2157     AC_MSG_RESULT(no)
2158   ])
2160   AC_MSG_CHECKING(for ioc_toc_header in sys/cdio.h)
2161   AC_EGREP_HEADER(ioc_toc_header ,sys/cdio.h,[
2162     AC_MSG_RESULT(yes)
2163     VLC_ADD_PLUGIN([vcd cdda])
2164     AC_DEFINE(HAVE_IOC_TOC_HEADER_IN_SYS_CDIO_H, 1, For FreeBSD VCD support)
2165   ],[
2166     AC_MSG_RESULT(no)
2167   ])
2169   if test "${SYS}" = "bsdi" -o "${SYS}" = "mingw32" -o "${SYS}" = "os2" -o "${SYS}" = "darwin"
2170   then
2171     VLC_ADD_PLUGIN([vcd cdda])
2172   fi
2174   if test "$enable_libcddb" != "no"; then
2175     PKG_CHECK_MODULES(LIBCDDB, [libcddb >= 0.9.5], [
2176       HAVE_LIBCDDB=yes
2177       AC_DEFINE(HAVE_LIBCDDB, 1, [Define this if you have libcddb installed])
2178       VLC_ADD_LIBS([cdda],[$LIBCDDB_LIBS])
2179       VLC_ADD_CFLAGS([cdda],[$LIBCDDB_CFLAGS])
2180       ],:
2181       [AC_MSG_WARN([${LIBCDDB_PKG_ERRORS}: CDDB access disabled.])
2182       HAVE_LIBCDDB=no])
2183   fi
2187 dnl Linux DVB
2189 AC_CACHE_CHECK([for Linux DVB version 5.1], [ac_cv_linux_dvb_5_1], [
2190   AC_PREPROC_IFELSE([AC_LANG_PROGRAM([
2191 [#include <linux/dvb/version.h>
2192 #if (DVB_API_VERSION < 5)
2193 # error Linux DVB API v3.2 and older are not supported.
2194 #endif
2195 #if (DVB_API_VERSION == 5 && DVB_API_VERSION_MINOR < 1)
2196 # error Linux DVB API v5.0 is unsupported. Please update.
2197 #endif
2198 ]])], [
2199   ac_cv_linux_dvb_5_1=yes
2200 ], [
2201   ac_cv_linux_dvb_5_1=no
2202 ])])
2203 AM_CONDITIONAL([HAVE_LINUX_DVB], [test "$ac_cv_linux_dvb_5_1" = "yes"])
2206 dnl  Screen capture module
2208 AC_ARG_ENABLE([screen],
2209   AS_HELP_STRING([--enable-screen],
2210     [disable screen capture (default enabled)]))
2211 if test "${enable_screen}" != "no"; then
2212   if test "${SYS}" = "darwin"; then
2213     AC_CHECK_HEADERS([ApplicationServices/ApplicationServices.h], [
2214       VLC_ADD_PLUGIN([screen])
2215     ])
2216   fi
2218 AM_CONDITIONAL([HAVE_MAC_SCREEN], [test "${SYS}" = "darwin" -a "x${enable_screen}" != "xno"])
2221 dnl  VNC/RFB access module
2223 PKG_ENABLE_MODULES_VLC([VNC], [vnc], [libvncclient >= 0.9.9], (VNC/rfb client support), [auto])
2225 dnl  RDP/Remote Desktop access module
2227 PKG_ENABLE_MODULES_VLC([FREERDP], [rdp], [freerdp >= 1.0.1], (RDP/Remote Desktop client support) )
2230 dnl AVFoundation
2231 AC_SUBST([have_avfoundation], ["no"])
2232 AC_ARG_ENABLE([macosx-avfoundation],
2233   AS_HELP_STRING([--enable-macosx-avfoundation], [Mac OS X avcapture (video) module (default enabled on Mac OS X)]))
2234 if test "x${enable_macosx_avfoundation}" != "xno" &&
2235   (test "${SYS}" = "darwin" || test "${enable_macosx_avfoundation}" = "yes")
2236 then
2237   SAVED_LIBS="${LIBS}"
2238   LIBS="-framework AVFoundation"
2239   AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [])],[have_avfoundation=yes],[have_avfoundation=no])
2240   LIBS="${SAVED_LIBS}"
2241   if test "${have_avfoundation}" != "no"
2242   then
2243     VLC_ADD_PLUGIN([avcapture])
2244   fi
2246 AM_CONDITIONAL([HAVE_AVFOUNDATION], [test "${have_avfoundation}" != "no"])
2249 dnl  DCP plugin (using asdcplib)
2251 PKG_WITH_MODULES([ASDCP], [asdcplib], [have_asdcp="yes"])
2252 AM_CONDITIONAL([HAVE_ASDCP], [test "${have_asdcp}" = "yes"])
2255 dnl  Demux plugins
2258 EXTEND_HELP_STRING([Mux/Demux plugins:])
2261 dnl  libdvbpsi check for ts mux/demux
2263 have_dvbpsi="no"
2264 PKG_WITH_MODULES([DVBPSI], [libdvbpsi >= 1.2.0], [have_dvbpsi="yes"])
2265 AM_CONDITIONAL([HAVE_DVBPSI], [test "${have_dvbpsi}" = "yes"])
2269 dnl  GME demux plugin
2271 AC_ARG_ENABLE([gme],
2272   AS_HELP_STRING([--enable-gme],
2273     [use Game Music Emu (default auto)]))
2274 AS_IF([test "${enable_gme}" != "no"], [
2275   AC_CHECK_HEADER([gme/gme.h], [
2276     AC_CHECK_LIB([gme], [gme_identify_header], [
2277       VLC_ADD_PLUGIN([gme])
2278     ], [
2279       AC_CHECK_LIB([gme], [gme_identify_extension], [
2280          VLC_ADD_LIBS([gme], [-lstdc++ $LIBM])
2281          VLC_ADD_PLUGIN([gme])
2282       ],, [-lstdc++ $LIBM])
2283     ])
2284     VLC_ADD_LIBS([gme], [-lgme])
2285   ], [
2286     AS_IF([test "x${enable_gme}" != "x"], [
2287       AC_MSG_ERROR([GME cannot be found. Please install the development files.])
2288     ])
2289   ])
2294 dnl  SIDPlay plugin
2296 AC_ARG_ENABLE([sid],
2297     AS_HELP_STRING([--enable-sid],[C64 sid demux support (default auto)]))
2298 AS_IF([test "${enable_sid}" != "no"], [
2299     PKG_CHECK_MODULES(SID, [libsidplay2], [
2300         AC_LANG_PUSH(C++)
2301         oldCPPFLAGS="$CPPFLAGS"
2302         CPPFLAGS="$CPPFLAGS $SID_CFLAGS"
2303         AC_CHECK_HEADER([sidplay/builders/resid.h], [
2304             VLC_ADD_PLUGIN([sid])
2305             VLC_ADD_CFLAGS([sid], [$SID_CFLAGS])
2306             VLC_ADD_LIBS([sid], [$SID_LIBS] [-lresid-builder])
2307         ], [
2308             AS_IF([test -n "${enable_sid}"],
2309                 [AC_MSG_ERROR([${SID_PKG_ERRORS} (required for sid).])],
2310                 [AC_MSG_WARN([${SID_PKG_ERRORS} (required for sid).])]
2311                 )
2312         ])
2313         CPPFLAGS="$oldCPPFLAGS"
2314         AC_LANG_POP(C++)
2315     ], [
2316         AS_IF([test "x${enable_sid}" = "xyes"],
2317             [AC_MSG_ERROR([${SID_PKG_ERRORS} (required for sid).])],
2318             [AC_MSG_WARN([${SID_PKG_ERRORS} (required for sid).])]
2319             )
2320     ])
2325 dnl  ogg demux plugin
2327 PKG_ENABLE_MODULES_VLC([OGG], [mux_ogg], [ogg >= 1.0], [Ogg demux support], [auto])
2328 PKG_CHECK_MODULES(LIBVORBIS, [vorbis >= 1.1], [
2329     AC_DEFINE(HAVE_LIBVORBIS, 1, [Define to 1 if you have the libvorbis])
2330 ],[true])
2331 PKG_ENABLE_MODULES_VLC([OGG], [], [ogg >= 1.0], [Ogg demux support], [auto], [${LIBVORBIS_CFLAGS}], [${LIBVORBIS_LIBS}])
2332 if test "${enable_sout}" != "no"; then
2333 dnl Check for libshout
2334     PKG_ENABLE_MODULES_VLC([SHOUT], [access_output_shout], [shout >= 2.1], [libshout output plugin], [auto])
2338 dnl  matroska demux plugin
2340 PKG_WITH_MODULES([MATROSKA], [libebml >= 1.3.6 libmatroska], [
2341        VLC_ADD_PLUGIN([mkv])
2342        VLC_ADD_CFLAGS([mkv], [$MATROSKA_CFLAGS])
2343        VLC_ADD_LIBS([mkv], [$MATROSKA_LIBS])
2344        have_matroska="yes"
2345    ],,[MKV format support], [auto])
2346 AM_CONDITIONAL([HAVE_MATROSKA], [test "${have_matroska}" = "yes"])
2349 dnl  modplug demux plugin
2351 AC_ARG_ENABLE([mod],
2352   AS_HELP_STRING([--disable-mod],
2353     [do not use libmodplug (default auto)]))
2354 if test "${enable_mod}" != "no" ; then
2355     PKG_CHECK_MODULES(LIBMODPLUG, [libmodplug >= 0.8.9.0], [
2356           VLC_ADD_PLUGIN([mod])
2357           VLC_ADD_CXXFLAGS([mod],[$LIBMODPLUG_CFLAGS])
2358           VLC_ADD_CFLAGS([mod],[$LIBMODPLUG_CFLAGS]) #modules/demux/mod.c needs CFLAGS_mod, not CXXFLAGS_mod
2359           VLC_ADD_LIBS([mod],[$LIBMODPLUG_LIBS])
2360     ],[
2361        AS_IF([test -n "${enable_mod}"],
2362          [AC_MSG_ERROR([${LIBMODPLUG_PKG_ERRORS}.])],
2363          [AC_MSG_WARN([${LIBMODPLUG_PKG_ERRORS}.])])
2364     ])
2368 dnl  mpc demux plugin
2370 AC_ARG_ENABLE([mpc],
2371   AS_HELP_STRING([--disable-mpc], [do not use libmpcdec (default auto)]))
2372 if test "${enable_mpc}" != "no"
2373 then
2374     AC_CHECK_HEADERS([mpcdec/mpcdec.h], [
2375     VLC_ADD_PLUGIN([mpc])
2376     VLC_ADD_LIBS([mpc],[-lmpcdec])])
2380 dnl  Codec plugins
2383 EXTEND_HELP_STRING([Codec plugins:])
2386 dnl shine encoder plugin
2388 PKG_ENABLE_MODULES_VLC([SHINE], [], [shine >= 3.0.0], [MPEG Audio Layer 3 encoder], [auto], [], [], [])
2392 dnl openmax il codec plugin
2394 AC_ARG_ENABLE([omxil],
2395   AS_HELP_STRING([--enable-omxil], [openmax il codec module (default disabled)]))
2396 if test "${enable_omxil}" = "yes"
2397 then
2398   VLC_ADD_PLUGIN([omxil])
2402 dnl raspberry pi openmax il configuration
2404 AC_ARG_ENABLE([rpi-omxil],
2405   AS_HELP_STRING([--enable-rpi-omxil], [openmax il configured for raspberry pi (default disabled)]))
2406 if test "${enable_rpi_omxil}" = "yes"
2407 then
2408   VLC_ADD_PLUGIN([omxil])
2409   VLC_ADD_CFLAGS([omxil],[-DRPI_OMX])
2413 dnl CrystalHD codec plugin
2415 AC_ARG_ENABLE([crystalhd],
2416   AS_HELP_STRING([--enable-crystalhd], [crystalhd codec plugin (default auto)]))
2417 if test "${enable_crystalhd}" != "no"; then
2418     AC_CHECK_HEADER(libcrystalhd/libcrystalhd_if.h, [
2419       VLC_ADD_PLUGIN([crystalhd])
2420       VLC_ADD_LIBS([crystalhd], [-lcrystalhd])
2421     ],[
2422       if test "${SYS}" = "mingw32" ; then
2423         AC_CHECK_HEADERS([libcrystalhd/bc_dts_defs.h], [
2424           VLC_ADD_PLUGIN([crystalhd])
2425           AC_CHECK_HEADERS([libcrystalhd/bc_drv_if.h], [
2426             VLC_ADD_LIBS([crystalhd], [-lbcmDIL])
2427             ])
2428         ],[
2429           AS_IF([test x"${enable_crystalhd}" = "xyes"],
2430                 [AC_MSG_ERROR("Could not find CrystalHD development headers")],
2431                 [AC_MSG_WARN("Could not find CrystalHD development headers")])
2432         ],[#define __LINUX_USER__
2433                #include <libcrystalhd/bc_dts_types.h>
2434         ])
2435       fi
2436     ],[
2437        #include <libcrystalhd/bc_dts_types.h>
2438       ])
2442 dnl  mad plugin
2444 have_mad="no"
2445 MAD_CFLAGS=""
2446 MAD_LIBS=""
2448 AC_ARG_WITH(mad, AS_HELP_STRING([--with-mad=PATH], [path to libmad]), [
2449   enable_mad="yes"
2450 ], [
2451   with_mad="no"
2453 AS_IF([test "${with_mad}" != "no"], [
2454   MAD_CFLAGS="-I${with_mad}/include"
2455   MAD_LIBS="-L${with_mad}/lib"
2458 AC_ARG_ENABLE([mad],
2459   AS_HELP_STRING([--enable-mad], [libmad module (default enabled)]))
2460 AS_IF([test "${enable_mad}" != "no"], [
2461   VLC_SAVE_FLAGS
2462   CPPFLAGS="${CPPFLAGS} ${MAD_CFLAGS}"
2463   LDFLAGS="${LDFLAGS} ${MAD_LIBS}"
2464   AC_CHECK_HEADERS([mad.h], [
2465     AC_CHECK_LIB([mad], [mad_bit_init], [
2466       have_mad="yes"
2467       MAD_LIBS="${MAD_LIBS} -lmad"
2468     ])
2469   ])
2470   VLC_RESTORE_FLAGS
2471   AS_IF([test -n "$enable_mad" -a "${have_mad}" = "no"], [
2472     AC_MSG_ERROR([Could not find libmad. Install it or pass --disable-mad to disable it.])
2473   ])
2475 AC_SUBST([MAD_CFLAGS])
2476 AC_SUBST([MAD_LIBS])
2477 AM_CONDITIONAL([HAVE_MAD], [test "${have_mad}" = "yes"])
2479 dnl  mpg123 plugin
2482 PKG_ENABLE_MODULES_VLC([MPG123], [mpg123], [libmpg123], [libmpg123 decoder support], [auto])
2485 dnl gstreamer stuff
2487 AC_ARG_ENABLE([gst-decode],
2488   AS_HELP_STRING([--enable-gst-decode], [GStreamer based decoding support (currently supports only video decoding) (default auto)]))
2490 have_gst_decode="no"
2491 AS_IF([test "${enable_gst_decode}" != "no"], [
2492   PKG_CHECK_MODULES([GST_APP], [gstreamer-app-1.0], [
2493     PKG_CHECK_MODULES([GST_VIDEO], [gstreamer-video-1.0], [
2494       have_gst_decode="yes"
2495     ], [
2496       AC_MSG_WARN([${GST_VIDEO_PKG_ERRORS}. GStreamer decoder module will not be built.])
2497     ])
2498   ], [
2499     AC_MSG_WARN([${GST_APP_PKG_ERRORS}. GStreamer modules will not be built.])
2500   ])
2502 AM_CONDITIONAL([HAVE_GST_DECODE], [test "${have_gst_decode}" = "yes"])
2505 dnl  avcodec decoder/encoder plugin
2507 AC_ARG_ENABLE([merge-ffmpeg],
2508 AS_HELP_STRING([--enable-merge-ffmpeg], [merge FFmpeg-based plugins (default disabled)]),, [
2509   enable_merge_ffmpeg="no"
2511 AM_CONDITIONAL([MERGE_FFMPEG], [test "$enable_merge_ffmpeg" != "no"])
2513 AC_MSG_CHECKING([for libavutil variant])
2514 PKG_CHECK_EXISTS([libavutil], [
2515   libavutil_version="$(${PKG_CONFIG} --modversion libavutil)"
2516   libavutil_micro="${libavutil_version##*.}"
2517   AS_IF([test ${libavutil_micro} -le 99], [
2518     avfork="libav"
2519   ], [
2520     avfork="ffmpeg"
2521   ])
2522 ], [
2523   avfork="none"
2525 AC_MSG_RESULT([${avfork}])
2527 AC_ARG_ENABLE([avcodec],
2528 AS_HELP_STRING([--enable-avcodec], [libavcodec codec (default enabled)]))
2529 AS_IF([test "${enable_avcodec}" != "no"], [
2530   dnl We need >=57.16.0 from libav or >=57.37.100 from ffmpeg
2531   case "${avfork}" in
2532     libav) av_codec_ver="57.16.0" ;;
2533     dnl 05f66706d182eb0c36af54d72614bf4c33e957a9  includes libavutil 55.9.0
2534     ffmpeg) av_codec_ver="57.37.100" ;;
2535     dnl 7fc329e2dd6226dfecaa4a1d7adf353bf2773726  include libavutil 55.22.101
2536     *) AC_MSG_ERROR([Missing libav or FFmpeg. Pass --disable-avcodec to ignore this error.])
2537   esac
2538   PKG_CHECK_MODULES(AVCODEC,[libavcodec >= ${av_codec_ver} libavutil >= 55.9.0], [
2539     VLC_SAVE_FLAGS
2540     CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
2541     CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
2542     AC_CHECK_HEADERS([libavcodec/avcodec.h])
2543     AC_CHECK_HEADERS([libavutil/avutil.h])
2544     VLC_RESTORE_FLAGS
2545     have_avcodec="yes"
2546   ],[
2547     AC_MSG_ERROR([${AVCODEC_PKG_ERRORS}. Pass --disable-avcodec to ignore this error.])
2548   ])
2549 ], [
2550   have_avcodec="no"
2552 AM_CONDITIONAL([HAVE_AVCODEC], [test "${have_avcodec}" != "no"])
2555 dnl libva needs avcodec
2557 AC_ARG_ENABLE([libva],
2558   AS_HELP_STRING([--enable-libva], [VAAPI GPU decoding support (libVA) (default auto)]))
2560 AS_IF([test "${enable_libva}" = "yes" -a "${have_avcodec}" != "yes" ], [
2561   AC_MSG_ERROR([--enable-libva and --disable-avcodec options are mutually exclusive. Use --enable-avcodec.])
2564 have_vaapi="no"
2565 have_vaapi_drm="no"
2566 have_vaapi_x11="no"
2567 have_vaapi_wl="no"
2568 AS_IF([test "${enable_libva}" != "no"], [
2569   PKG_CHECK_MODULES([LIBVA], [libva >= 0.38], [
2570     have_vaapi="yes"
2571   ], [
2572     AS_IF([test -n "${enable_libva}"], [
2573       AC_MSG_ERROR([${LIBVA_PKG_ERRORS}.])
2574     ], [
2575       AC_MSG_WARN([${LIBVA_PKG_ERRORS}.])
2576     ])
2577   ])
2578   PKG_CHECK_MODULES([LIBVA_DRM], [libva-drm], [
2579     have_vaapi_drm="yes"
2580   ], [
2581     AC_MSG_WARN([${LIBVA_DRM_PKG_ERRORS}.])
2582   ])
2583   PKG_CHECK_MODULES(LIBVA_X11, [libva-x11], [
2584     have_vaapi_x11="yes"
2585   ], [
2586     AC_MSG_WARN([${LIBVA_X11_PKG_ERRORS}.])
2587   ])
2588   PKG_CHECK_MODULES(LIBVA_WL, [libva-wayland], [
2589     have_vaapi_wl="yes"
2590   ], [
2591     AC_MSG_WARN([${LIBVA_WL_PKG_ERRORS}.])
2592   ])
2594 AM_CONDITIONAL([HAVE_VAAPI], [test "${have_vaapi}" = "yes"])
2595 AM_CONDITIONAL([HAVE_VAAPI_DRM], [test "${have_vaapi_drm}" = "yes"])
2596 AM_CONDITIONAL([HAVE_VAAPI_X11], [test "${have_vaapi_x11}" = "yes"])
2597 AM_CONDITIONAL([HAVE_VAAPI_WL], [test "${have_vaapi_wl}" = "yes"])
2599 have_avcodec_vaapi="no"
2600 AS_IF([test "${have_vaapi}" = "yes" -a "${have_avcodec}" = "yes"], [
2601   VLC_SAVE_FLAGS
2602   CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
2603   CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
2604   AC_CHECK_HEADERS([libavcodec/vaapi.h], [
2605     AC_MSG_NOTICE([VA API acceleration activated])
2606     have_avcodec_vaapi="yes"
2607   ],[
2608     AS_IF([test -n "${enable_libva}"], [
2609       AC_MSG_ERROR([libva is present but libavcodec/vaapi.h is missing])
2610     ], [
2611       AC_MSG_WARN([libva is present but libavcodec/vaapi.h is missing ])
2612     ])
2613   ])
2614   VLC_RESTORE_FLAGS
2616 AM_CONDITIONAL([HAVE_AVCODEC_VAAPI], [test "${have_avcodec_vaapi}" = "yes"])
2619 dnl dxva2 needs avcodec
2621 AC_ARG_ENABLE([dxva2],
2622   AS_HELP_STRING([--enable-dxva2], [DxVA2 GPU decoding support (default auto)]))
2624 have_avcodec_dxva2="no"
2625 AS_IF([test "${enable_dxva2}" != "no"], [
2626   if test "${SYS}" = "mingw32"; then
2627   AS_IF([test "x${have_avcodec}" = "xyes"], [
2628     AC_CHECK_HEADERS([dxva2api.h],
2629       [
2630         AC_CHECK_HEADERS([libavcodec/dxva2.h], [
2631            AC_MSG_NOTICE([DxVA2 acceleration activated])
2632            have_avcodec_dxva2="yes"
2633         ],[
2634     AS_IF([test "${enable_dxva2}" = "yes"],
2635           [AC_MSG_ERROR([dxva2 is present but libavcodec/dxva2.h is missing])],
2636               [AC_MSG_WARN([dxva2 is present but libavcodec/dxva2.h is missing ])])
2637         ], [#undef _WIN32_WINNT
2638             /* DXVA2 is only available in Vista and above */
2639             #define _WIN32_WINNT 0x600])
2640       ],[
2641     AS_IF([test "${enable_dxva2}" = "yes"],
2642               [AC_MSG_ERROR([Could not find required dxva2api.h])],
2643               [AC_MSG_WARN([dxva2api.h not found])])
2644       ],[#include <d3d9.h>])
2645   ],[
2646     AS_IF([test "x${enable_dxva2}" != "x"], [
2647       AC_MSG_ERROR([--enable-dxva2 and --disable-avcodec options are mutually exclusive.])
2648     ])
2649   ])
2650   fi
2652 AM_CONDITIONAL([HAVE_AVCODEC_DXVA2], [test "${have_avcodec_dxva2}" = "yes"])
2655 dnl d3d11va needs avcodec
2657 AC_ARG_ENABLE([d3d11va],
2658   AS_HELP_STRING([--enable-d3d11va], [D3D11 GPU decoding support (default auto)]))
2660 have_avcodec_d3d11va="no"
2661 AS_IF([test "${enable_d3d11va}" != "no"], [
2662   if test "${SYS}" = "mingw32"; then
2663   AS_IF([test "x${have_avcodec}" = "xyes"], [
2664         AC_CHECK_TYPES([ID3D11VideoDecoder],
2665           [
2666             AC_CHECK_HEADERS([dxva2api.h],
2667               [
2668                 AC_CHECK_HEADERS([libavcodec/d3d11va.h], [
2669                    AC_MSG_NOTICE([D3D11 acceleration activated])
2670                    AC_DEFINE([HAVE_AVCODEC_D3D11VA], [1], [Define if the d3d11va module is built])
2671                    have_avcodec_d3d11va="yes"
2672                 ],[
2673                   AS_IF([test "${enable_d3d11va}" = "yes"],
2674                     [AC_MSG_ERROR([d3d11va is present but libavcodec/d3d11va.h is missing])],
2675                         [AC_MSG_WARN([d3d11va is present but libavcodec/d3d11va.h is missing ])])
2676                   ], [#undef _WIN32_WINNT
2677                       /* D3D11 is only available in Vista and above */
2678                       #define _WIN32_WINNT 0x600])
2679                   ],[
2680                     AS_IF([test "${enable_d3d11va}" = "yes"],
2681                           [AC_MSG_ERROR([Could not find required dxva2api.h])],
2682                           [AC_MSG_WARN([dxva2api.h not found])])
2683                   ],[#include <d3d9.h>])
2684           ],[
2685             AS_IF([test "${enable_d3d11va}" = "yes"],
2686                   [AC_MSG_ERROR([Could not find required ID3D11VideoDecoder in d3d11.h])],
2687                   [AC_MSG_WARN([ID3D11VideoDecoder not found])])
2688           ], [#include <d3d11.h>])
2689   ],[
2690     AS_IF([test "x${enable_d3d11va}" != "x"], [
2691       AC_MSG_ERROR([--enable-d3d11va and --disable-avcodec options are mutually exclusive.])
2692     ])
2693   ])
2694   fi
2696 AM_CONDITIONAL([HAVE_AVCODEC_D3D11VA], [test "${have_avcodec_d3d11va}" = "yes"])
2699 dnl DXGI debug
2701 AC_CHECK_HEADERS([dxgidebug.h dxgi1_6.h])
2704 dnl  avformat demuxer/muxer plugin
2707 AC_ARG_ENABLE([avformat],
2708 AS_HELP_STRING([--enable-avformat], [libavformat containers (default enabled)]),, [
2709   enable_avformat="${have_avcodec}"
2711 have_avformat="no"
2712 AS_IF([test "${enable_avformat}" != "no"], [
2713   PKG_CHECK_MODULES(AVFORMAT,[libavformat >= 53.21.0 libavcodec libavutil], [
2714       have_avformat="yes"
2715       VLC_SAVE_FLAGS
2716       CPPFLAGS="${CPPFLAGS} ${AVFORMAT_CFLAGS}"
2717       CFLAGS="${CFLAGS} ${AVFORMAT_CFLAGS}"
2718       AC_CHECK_HEADERS([libavformat/avformat.h libavformat/avio.h])
2719       AC_CHECK_HEADERS([libavcodec/avcodec.h])
2720       AC_CHECK_HEADERS([libavutil/avutil.h])
2721       AS_IF([test "$enable_merge_ffmpeg" = "no"], [
2722         have_avformat="no"
2723       ])
2724       VLC_RESTORE_FLAGS
2725     ],[
2726       AC_MSG_ERROR([${AVFORMAT_PKG_ERRORS}. Pass --disable-avformat to ignore this error.])
2727   ])
2729 AM_CONDITIONAL([HAVE_AVFORMAT], [test "${enable_avformat}" != "no"])
2732 dnl  swscale image scaling and conversion plugin
2735 AC_ARG_ENABLE([swscale],
2736   AS_HELP_STRING([--enable-swscale],[libswscale image scaling and conversion
2737           (default enabled)]))
2738 if test "${enable_swscale}" != "no"
2739 then
2740   PKG_CHECK_MODULES(SWSCALE,[libswscale],
2741     [
2742       VLC_SAVE_FLAGS
2743       CPPFLAGS="${CPPFLAGS} ${SWSCALE_CFLAGS}"
2744       CFLAGS="${CFLAGS} ${SWSCALE_CFLAGS}"
2745       AC_CHECK_HEADERS([libswscale/swscale.h])
2746       AC_CHECK_HEADERS([libavutil/avutil.h])
2747       VLC_ADD_PLUGIN([swscale])
2748       VLC_ADD_LIBS([swscale],[$SWSCALE_LIBS])
2749       VLC_ADD_CFLAGS([swscale],[$SWSCALE_CFLAGS])
2750       AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
2751         VLC_ADD_LIBS([swscale],[${ac_cv_ld_bsymbolic}])
2752       ])
2753       VLC_RESTORE_FLAGS
2754     ],[
2755       AC_MSG_ERROR([${SWSCALE_PKG_ERRORS}. Pass --disable-swscale to ignore this error. Proper software scaling and some video chroma conversion will be missing.])
2756   ])
2760 dnl  postproc plugin
2763 AC_ARG_ENABLE([postproc],
2764 AS_HELP_STRING([--enable-postproc], [libpostproc image post-processing (default auto)]))
2765 if test "${enable_postproc}" != "no"
2766 then
2767   PKG_CHECK_MODULES(POSTPROC,[libpostproc libavutil],
2768     [
2769       VLC_SAVE_FLAGS
2770       CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
2771       CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
2772       AC_CHECK_HEADERS([postproc/postprocess.h])
2773       VLC_ADD_PLUGIN([postproc])
2774       VLC_RESTORE_FLAGS
2775     ],[
2776       AC_MSG_WARN([${POSTPROC_PKG_ERRORS}.])
2777   ])
2781 dnl  faad decoder plugin
2783 AC_ARG_ENABLE([faad],
2784 AS_HELP_STRING([--enable-faad], [faad codec (default auto)]))
2785 have_faad="no"
2786 AS_IF([test "${enable_faad}" != "no"], [
2787   AC_CHECK_HEADERS([neaacdec.h], [
2788     AC_CHECK_LIB([faad], [NeAACDecOpen], [have_faad="yes"],, [$LIBM])
2790     AS_IF([test "${have_faad}" = "yes"], [
2791       VLC_ADD_PLUGIN([faad])
2792       VLC_ADD_LIBS([faad],[-lfaad])
2793     ], [
2794       AS_IF([test "${enable_faad}" = "yes"], [
2795         AC_MSG_ERROR([cannot find FAAD library])
2796       ], [
2797         AC_MSG_WARN([cannot find FAAD library])
2798       ])
2799     ])
2800   ])
2804 dnl  AOM decoder plugin
2806 PKG_ENABLE_MODULES_VLC([AOM], [], [aom], [experimental AV1 codec (default auto)])
2809 dnl  Dav1d decoder plugin
2811 PKG_ENABLE_MODULES_VLC([DAV1D], [], [dav1d >= 0.5.0], [AV1 decoder (default auto)])
2814 dnl libvpx decoder plugin
2816 AC_ARG_ENABLE([vpx],
2817     AS_HELP_STRING([--enable-vpx],[libvpx VP8/VP9 encoder and decoder (default auto)]))
2818 AS_IF([test "${enable_vpx}" != "no"],[
2819     PKG_CHECK_MODULES([VPX], [vpx >= 1.5.0], [
2820         VLC_ADD_PLUGIN([vpx])
2821         VLC_ADD_CPPFLAGS([vpx], [${VPX_CFLAGS}])
2822         VLC_ADD_LIBS([vpx], [${VPX_LIBS}])
2823         AC_CHECK_LIB([vpx],[vpx_codec_vp8_dx], [
2824             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP8_DECODER])
2825         ], [], [${VPX_LIBS}])
2826         AC_CHECK_LIB([vpx],[vpx_codec_vp9_dx], [
2827             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP9_DECODER])
2828         ], [], [${VPX_LIBS}])
2829         AC_CHECK_LIB([vpx],[vpx_codec_vp8_cx], [
2830             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP8_ENCODER])
2831         ], [], [${VPX_LIBS}])
2832         AC_CHECK_LIB([vpx],[vpx_codec_vp9_cx], [
2833             VLC_ADD_CPPFLAGS([vpx], [-DENABLE_VP9_ENCODER])
2834         ], [], [${VPX_LIBS}])
2835     ], [
2836     AS_IF([test "${enable_vpx}" = "yes"],[
2837         AC_MSG_ERROR([libvpx 1.5.0 or higher was not found])
2838     ])])
2842 dnl twolame encoder plugin
2844 PKG_ENABLE_MODULES_VLC([TWOLAME], [], [twolame], [MPEG Audio Layer 2 encoder], [auto], [], [], [ -DLIBTWOLAME_STATIC])
2847 dnl fdk-aac encoder plugin
2849 PKG_ENABLE_MODULES_VLC([FDKAAC], [], [fdk-aac], [FDK-AAC encoder], [disabled])
2853 dnl A52/AC3 decoder plugin
2855 AC_ARG_ENABLE([a52],
2856   AS_HELP_STRING([--enable-a52], [A/52 support with liba52 (default enabled)]))
2857 if test "${enable_a52}" != "no"
2858 then
2859   AC_ARG_WITH([a52],
2860     AS_HELP_STRING([--with-a52=PATH], [a52 headers and libraries]))
2861     if test -z "${with_a52}"
2862     then
2863       LDFLAGS_test=""
2864       CPPFLAGS_test=""
2865     else
2866       LDFLAGS_test="-L${with_a52}/lib"
2867       CPPFLAGS_test="-I${with_a52}/include"
2868     fi
2869     VLC_SAVE_FLAGS
2870     CPPFLAGS="${CPPFLAGS} ${CPPFLAGS_test} ${CPPFLAGS_a52}"
2871     LDFLAGS="${LDFLAGS} ${LDFLAGS_test} ${LIBS_a52}"
2872     AC_CHECK_HEADERS([a52dec/a52.h], [
2873       AC_CHECK_LIB([a52], [a52_free], [
2874         VLC_ADD_PLUGIN([a52])
2875         VLC_ADD_LIBS([a52],[${LDFLAGS_test} -la52 $LIBM])
2876         VLC_ADD_CPPFLAGS([a52],[${CPPFLAGS_test}])
2877       ],[
2878         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.])
2879         ], [$LIBM])
2880     ],[
2881       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.])
2882     ])
2883     VLC_RESTORE_FLAGS
2887 dnl DTS Coherent Acoustics decoder plugin
2889 PKG_ENABLE_MODULES_VLC([DCA], [dca], [libdca >= 0.0.5], [DTS Coherent Acoustics support with libdca], [auto])
2892 dnl  Flac plugin
2894 PKG_ENABLE_MODULES_VLC([FLAC], [], [flac], [libflac decoder/encoder support], [auto])
2897 dnl  Libmpeg2 plugin
2899 PKG_ENABLE_MODULES_VLC([LIBMPEG2], [], [libmpeg2 > 0.3.2], [libmpeg2 decoder support], [auto])
2902 dnl  Vorbis plugin
2904 PKG_ENABLE_MODULES_VLC([VORBIS], [], [ogg vorbis >= 1.1 vorbisenc >= 1.1], [Vorbis decoder and encoder], [auto])
2907 dnl  Tremor plugin
2909 AC_ARG_ENABLE([tremor],
2910   AS_HELP_STRING([--enable-tremor], [Tremor decoder support (default disabled)]))
2911 if test "${enable_tremor}" = "yes"
2912 then
2913   AC_CHECK_HEADERS([tremor/ivorbiscodec.h], [
2914     VLC_ADD_PLUGIN([tremor])
2915    ],[])
2919 dnl  Speex plugins
2921 PKG_ENABLE_MODULES_VLC([SPEEX], [], [ogg speex >= 1.0.5], [Speex support], [auto])
2922 have_speexdsp="no"
2923 AS_IF([test "${enable_speex}" != "no"], [
2924   PKG_CHECK_MODULES([SPEEXDSP], [speexdsp], [
2925     have_speexdsp="yes"
2926   ], [
2927     AC_MSG_WARN([${SPEEXDSP_PKG_ERRORS}.])
2928   ])
2930 AM_CONDITIONAL([HAVE_SPEEXDSP], [test "$have_speexdsp" = "yes"])
2933 dnl  Opus plugin
2935 PKG_ENABLE_MODULES_VLC([OPUS], [], [ogg opus >= 1.0.3], [Opus support], [auto])
2938 dnl  Ambisonic channel mixer and binauralizer plugin
2940 PKG_ENABLE_MODULES_VLC([SPATIALAUDIO], [], [spatialaudio], [Ambisonic channel mixer and binauralizer], [auto])
2943 dnl  theora decoder plugin
2945 PKG_ENABLE_MODULES_VLC([THEORA], [], [ogg theoradec >= 1.0 theoraenc], [experimental theora codec], [auto])
2948 dnl  OggSpots decoder plugin
2950 PKG_ENABLE_MODULES_VLC([OGGSPOTS], [], [ogg], [experimental OggSpots codec], [auto])
2953 dnl  Daala decoder plugin
2955 PKG_ENABLE_MODULES_VLC([DAALA], [], [daaladec daalaenc], [experimental daala codec], [disabled])
2958 dnl  schroedinger decoder plugin (for dirac format video)
2960 PKG_ENABLE_MODULES_VLC([SCHROEDINGER], [], [schroedinger-1.0 >= 1.0.10], [dirac decoder and encoder using schroedinger], [auto])
2963 dnl  PNG decoder module
2965 AC_ARG_ENABLE([png],
2966   AS_HELP_STRING([--enable-png], [PNG support (default enabled)]))
2967 AS_IF([test "${enable_png}" != "no"], [
2968 AC_CHECK_HEADERS([png.h], [
2969   VLC_SAVE_FLAGS
2970   LDFLAGS="${LDFLAGS} -lz $LIBM"
2971   AC_CHECK_LIB([png], [png_set_alpha_mode], [
2972     VLC_ADD_PLUGIN([png])
2973   ], [], [-lz $LIBM])
2974   VLC_RESTORE_FLAGS
2975   ])
2979 dnl  JPEG decoder module
2981 AC_ARG_ENABLE([jpeg],
2982   AS_HELP_STRING([--enable-jpeg], [JPEG support (default enabled)]))
2983 AS_IF([test "${enable_jpeg}" != "no"], [
2984 AC_CHECK_HEADERS([jpeglib.h], [
2985   VLC_ADD_PLUGIN([jpeg])
2986   ])
2990 dnl  BPG decoder module
2992 AC_ARG_ENABLE([bpg],
2993   AS_HELP_STRING([--enable-bpg], [BPG support (default disabled)]))
2994 AS_IF([test "${enable_bpg}" != "no"], [
2995 AC_CHECK_HEADERS([libbpg.h], [
2996   VLC_ADD_PLUGIN([bpg])
2997   ])
3001 dnl H262 encoder plugin (lib262)
3003 AC_ARG_ENABLE([x262],
3004   AS_HELP_STRING([--enable-x262], [H262 encoding support with static libx262 (default disabled)]))
3005 if test "${enable_x262}" != "no"; then
3006     PKG_CHECK_MODULES(X262, x262, [
3007         VLC_ADD_PLUGIN([x262])
3008         VLC_ADD_LDFLAGS([x262],[${X262_LIBS}])
3009         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3010           VLC_ADD_LIBS([x262],[${av_cv_ld_bsymbolic}])
3011         ])
3012         VLC_ADD_CFLAGS([x262],[${X262_CFLAGS}])
3013         if echo ${X262_LIBS} |grep -q 'pthreadGC2'; then
3014           VLC_ADD_CFLAGS([x262], [-DPTW32_STATIC_LIB])
3015         fi
3016     ], [
3017        if test "${enable_x262}" = "yes"; then
3018         AC_MSG_ERROR([x262 module doesn't work without staticly compiled libx262.a])
3019        fi
3020     ])
3023 dnl x265 encoder
3024 PKG_ENABLE_MODULES_VLC([X265],, [x265], [HEVC/H.265 encoder], [auto])
3027 dnl H264 encoder plugin (using libx264)
3029 AC_ARG_ENABLE([x264],
3030   AS_HELP_STRING([--enable-x264], [H264 encoding support with libx264 (default enabled)]))
3031 if test "${enable_x264}" != "no"; then
3032       PKG_CHECK_MODULES(X264,x264 >= 0.148, [
3033         VLC_ADD_PLUGIN([x264])
3034         VLC_ADD_LIBS([x264],[${X264_LIBS}])
3036         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3037           VLC_ADD_LDFLAGS([x264],[${ac_cv_ld_bsymbolic}])
3038         ])
3040         VLC_ADD_CFLAGS([x264],[${X264_CFLAGS}])
3041         if echo ${X264_LIBS} |grep -q 'pthreadGC2'; then
3042           VLC_ADD_CFLAGS([x264], [-DPTW32_STATIC_LIB])
3043         fi
3044       ],[
3045         if test "${enable_x264}" = "yes"; then
3046             AC_MSG_ERROR([${X264_PKG_ERRORS}: you may get it from http://www.videolan.org/x264.html])
3047           fi
3048       ])
3052 dnl H264 encoder plugin (libx264 > 153)
3054 AC_ARG_ENABLE([x26410b],
3055   AS_HELP_STRING([--enable-x26410b], [H264 10-bit encoding support with libx264 (default enabled)]))
3056 if test "${enable_x26410b}" != "no"; then
3057       PKG_CHECK_MODULES(X26410b,x264 >= 0.153, [
3058         VLC_ADD_PLUGIN([x26410b])
3059         VLC_ADD_LIBS([x26410b],[${X264_LIBS}])
3061         AS_IF([test -n "${ac_cv_ld_bsymbolic}"], [
3062           VLC_ADD_LDFLAGS([x26410b],[${ac_cv_ld_bsymbolic}])
3063         ])
3065         VLC_ADD_CFLAGS([x26410b],[${X264_CFLAGS}])
3066         if echo ${X264_LIBS} |grep -q 'pthreadGC2'; then
3067           VLC_ADD_CFLAGS([x26410b], [-DPTW32_STATIC_LIB])
3068         fi
3069       ],[
3070         if test "${enable_x26410b}" = "yes"; then
3071             AC_MSG_ERROR([${X264_PKG_ERRORS}: you may get it from http://www.videolan.org/x264.html])
3072           fi
3073       ])
3078 dnl Intel QuickSync (aka MediaSDK) H264/H262 encoder
3080 PKG_ENABLE_MODULES_VLC([MFX], [qsv], [libmfx], [Intel QuickSync MPEG4-Part10/MPEG2 (aka H.264/H.262) encoder], [auto])
3083 dnl libfluidsynth (MIDI synthetizer) plugin
3085 PKG_ENABLE_MODULES_VLC([FLUIDSYNTH], [], [fluidsynth >= 1.1.2], [MIDI synthetiser with libfluidsynth], [auto])
3086 PKG_ENABLE_MODULES_VLC([FLUIDLITE], [fluidsynth], [fluidlite], [MIDI synthetiser with libfluidsynth], [auto])
3087 AC_CHECK_HEADERS([fluidlite.h], [AC_SUBST([FLUIDSYNTH_LIBS], ${FLUIDLITE_LIBS})])
3090 dnl Teletext Modules
3091 dnl vbi decoder plugin (using libzbvi)
3092 dnl telx module
3093 dnl uncompatible
3095 AC_ARG_ENABLE([zvbi],
3096   AS_HELP_STRING([--enable-zvbi],[VBI (inc. Teletext) decoding support with
3097                   libzvbi (default enabled)]))
3098 AC_ARG_ENABLE([telx],
3099   AS_HELP_STRING([--enable-telx],[Teletext decoding module (conflicting with
3100                   zvbi) (default enabled if zvbi is absent)]))
3102 AS_IF( [test "${enable_zvbi}" != "no"],[
3103     PKG_CHECK_MODULES(ZVBI, [zvbi-0.2 >= 0.2.28],
3104         [
3105           VLC_ADD_PLUGIN([zvbi])
3106           AC_DEFINE(ZVBI_COMPILED, 1, [Define if the zvbi module is built])
3107           AS_IF( [test "${enable_telx}" = "yes"],[
3108                   AC_MSG_WARN([The zvbi and telx modules are incompatible. Using zvbi.])
3109                   ])
3110         ],[
3111           AC_MSG_WARN([${ZVBI_PKG_ERRORS}. Enabling the telx module instead.])
3112         ])
3113     ])
3114 AS_IF( [test "${enable_telx}" != "no" ],[
3115   VLC_ADD_PLUGIN([telx])
3116   ])
3119 dnl ARIB subtitles rendering module
3121 AC_ARG_ENABLE([aribsub],
3122   AS_HELP_STRING([--enable-aribsub],[ARIB Subtitles support (default enabled)]))
3123 AS_IF( [test "${enable_aribsub}" != "no" ],[
3124   PKG_CHECK_MODULES(ARIBB24, [aribb24 >= 1.0.1], [
3125       have_aribb24="yes"
3126       VLC_ADD_PLUGIN([aribsub])
3127       VLC_ADD_LIBS([aribsub],[-laribb24])
3128       AC_DEFINE(HAVE_ARIBB24, 1, [Define if libaribb24 is available.])
3129     ],[
3130       AC_MSG_WARN(Library [aribb24] needed for [aribsub] was not found)
3131       have_aribb24="no"
3132   ])
3134 AM_CONDITIONAL([HAVE_ARIBB24], [test x"${have_aribb24}" = x"yes"])
3137 dnl ARIB B25
3139 PKG_ENABLE_MODULES_VLC([ARIBB25], [aribcam], [aribb25 >= 0.2.6], [ARIB STD-B25], [auto])
3142 dnl  kate decoder plugin
3144 PKG_ENABLE_MODULES_VLC([KATE], [], [kate >= 0.3.0], [kate codec], [auto])
3147 dnl  tiger rendering for kate decoder plugin
3149 AC_ARG_ENABLE([tiger],
3150 AS_HELP_STRING([--enable-tiger], [Tiger rendering library for Kate streams (default auto)]))
3151 AS_IF([test "${enable_tiger}" != "no"], [
3152   PKG_CHECK_MODULES(TIGER,[tiger >= 0.3.1], [
3153       AC_DEFINE(HAVE_TIGER, 1, [Define if libtiger is available.])],[
3154         AS_IF([test -n "${enable_tiger}"], [
3155           AC_MSG_ERROR([${TIGER_PKG_ERRORS}.])
3156         ])
3157   ])
3161 dnl  check if we can build the css selector engine
3163 AC_ARG_ENABLE([css],
3164 AS_HELP_STRING([--enable-css], [CSS selector engine (default auto)]))
3165 AS_IF([test "${enable_css}" != "no"], [
3166   with_css="yes"
3167   AC_DEFINE(HAVE_CSS, 1, [Define if CSS engine is built])
3169 AM_CONDITIONAL([ENABLE_CSS], [test "${with_css}" = "yes"])
3173 dnl  Video plugins
3176 EXTEND_HELP_STRING([Video plugins:])
3179 dnl  libplacebo support
3181 AC_ARG_ENABLE([libplacebo],
3182   AS_HELP_STRING([--disable-libplacebo],
3183       [disable libplacebo support (default auto)]))
3185 AS_IF([test "$enable_libplacebo" != "no"], [
3186   PKG_CHECK_MODULES([LIBPLACEBO], [libplacebo >= 0.5], [
3187     AC_DEFINE([HAVE_LIBPLACEBO], [1], [Define to 1 if libplacebo is enabled.])
3188     PKG_CHECK_MODULES([LIBPLACEBO], [libplacebo >= 1.7],
3189       [have_libplacebo_vk="yes"], [have_libplacebo_vk="no"])
3190   ], [
3191     AS_IF([test -n "${enable_libplacebo}"], [
3192       AC_MSG_ERROR([${LIBPLACEBO_PKG_ERRORS}.])
3193     ])
3194     enable_libplacebo="no"
3195   ])
3197 AM_CONDITIONAL([HAVE_LIBPLACEBO], [test "$enable_libplacebo" != "no"])
3200 dnl  OpenGL
3202 PKG_CHECK_MODULES([EGL], [egl], [
3203   have_egl="yes"
3204 ], [
3205   have_egl="no"
3207 AM_CONDITIONAL([HAVE_EGL], [test "${have_egl}" = "yes"])
3209 have_gl="no"
3210 PKG_CHECK_MODULES([GL], [gl], [
3211   have_gl="yes"
3212 ], [
3213   AC_MSG_CHECKING([for OpenGL])
3214   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3215 #ifdef _WIN32
3216 # include <GL/glew.h>
3217 #endif
3218 #include <GL/gl.h>
3219 ]], [
3220     [int t0 = GL_TEXTURE0;]])
3221   ], [
3222     GL_CFLAGS=""
3223     have_gl="yes"
3224     AS_IF([test "${SYS}" != "mingw32"], [
3225       GL_LIBS="-lGL"
3226     ], [
3227       GL_LIBS="-lopengl32"
3228     ])
3229   ])
3230   AC_MSG_RESULT([${have_gl}])
3232 AM_CONDITIONAL([HAVE_GL], [test "${have_gl}" = "yes"])
3233 AS_IF([test "${have_gl}" = "yes"], [
3234   AC_DEFINE([HAVE_GL], 1, [Defined if having OpenGL])
3237 dnl OpenGL ES 2: depends on EGL 1.1
3238 PKG_ENABLE_MODULES_VLC([GLES2], [], [glesv2], [OpenGL ES v2 support], [disabled])
3241 dnl Vulkan
3243 AC_ARG_ENABLE(vulkan,
3244   [AS_HELP_STRING([--disable-vulkan],
3245       [disable Vulkan support (default auto)])])
3247 AS_IF([test "$enable_vulkan" != "no"], [
3248   AS_IF([test "$have_libplacebo_vk" = "yes"], [
3249     PKG_CHECK_MODULES([VULKAN], [vulkan >= 1.0.26], [
3250       AC_DEFINE([HAVE_VULKAN], [1], [Define to 1 if vulkan is enabled.])
3251     ], [
3252       AS_IF([test -n "${enable_vulkan}"], [
3253         AC_MSG_ERROR([${VULKAN_PKG_ERRORS}.])
3254       ])
3255       enable_vulkan="no"
3256     ])
3257   ], [
3258     AS_IF([test -n "${enable_vulkan}"], [
3259       AC_MSG_ERROR([Vulkan support requires libplacebo 1.7 as well. Do not use --disable-libplacebo.])
3260     ])
3261     enable_vulkan="no"
3262   ])
3264 AM_CONDITIONAL(HAVE_VULKAN, [test "$enable_vulkan" != "no"])
3267 dnl  Xlib
3270 AC_PATH_XTRA()
3271 AC_CHECK_HEADERS([X11/Xlib.h])
3274 dnl  X C Bindings modules
3276 AC_ARG_ENABLE([xcb],
3277   AS_HELP_STRING([--enable-xcb], [X11 support with XCB (default enabled)]),, [
3278   AS_IF([test "${SYS}" != "mingw32" -a "${SYS}" != "darwin"], [
3279     enable_xcb="yes"
3280   ], [
3281     enable_xcb="no"
3282   ])
3285 have_xcb="no"
3286 have_xkbcommon_x11="no"
3287 have_xcb_keysyms="no"
3288 AS_IF([test "${enable_xcb}" != "no"], [
3289   xcb_err=""
3291   dnl libxcb
3292   PKG_CHECK_MODULES([XCB], [xcb >= 1.6],, [
3293     xcb_err="$xcb_err ${XCB_PKG_ERRORS}."])
3294   PKG_CHECK_MODULES([XCB_COMPOSITE], [xcb-composite],, [
3295     xcb_err="$xcb_err ${XCB_COMPOSITE_PKG_ERRORS}."])
3296   PKG_CHECK_MODULES([XCB_RANDR], [xcb-randr >= 1.3],, [
3297     xcb_err="$xcb_err ${XCB_RANDR_PKG_ERRORS}."])
3298   PKG_CHECK_MODULES([XCB_RENDER], [xcb-render],, [
3299     xcb_err="$xcb_err ${XCB_RENDER_PKG_ERRORS}."])
3300   PKG_CHECK_MODULES([XCB_SHM], [xcb-shm >= 1.9.2],, [
3301     xcb_err="$xcb_err ${XCB_SHM_PKG_ERRORS}."])
3302   PKG_CHECK_MODULES([XCB_XKB], [xcb-xkb],, [
3303     xcb_err="$xcb_err ${XCB_XKB_PKG_ERRORS}."])
3305   dnl xproto
3306   PKG_CHECK_MODULES(XPROTO, [xproto],, [
3307     xcb_err="$xcb_err ${XPROTO_PKG_ERRORS}."])
3309   AS_IF([test -n "$xcb_err"], [
3310     AC_MSG_ERROR([$xcb_err Pass --disable-xcb to skip X11 support.])
3311   ])
3313   dnl xkbcommon
3314   PKG_CHECK_MODULES([XKBCOMMON_X11], [xkbcommon-x11], [
3315     have_xkbcommon_x11="yes"
3316   ], [
3317     AC_MSG_WARN([${XKBCOMMON_X11_PKG_ERRORS}. Hotkeys are disabled.])
3318   ])
3320   dnl xcb-utils
3321   PKG_CHECK_MODULES([XCB_KEYSYMS], [xcb-keysyms >= 0.3.4], [
3322     have_xcb_keysyms="yes"
3323   ], [
3324     AC_MSG_WARN([${XCB_KEYSYMS_PKG_ERRORS}. Global hotkeys are disabled.])
3325   ])
3327   have_xcb="yes"
3329 AM_CONDITIONAL([HAVE_XCB], [test "${have_xcb}" = "yes"])
3330 AM_CONDITIONAL([HAVE_XKBCOMMON_X11], [test "${have_xkbcommon_x11}" = "yes"])
3331 AM_CONDITIONAL([HAVE_XCB_KEYSYMS], [test "${have_xcb_keysyms}" = "yes"])
3335 dnl VDPAU needs X11
3337 AC_ARG_ENABLE([vdpau],
3338   [AS_HELP_STRING([--enable-vdpau], [VDPAU hardware support (default auto)])])
3339 have_vdpau="no"
3340 AS_IF([test "${enable_vdpau}" != "no"], [
3341   PKG_CHECK_MODULES([VDPAU], [vdpau >= 0.6], [
3342     have_vdpau="yes"
3343     AS_IF([test "${no_x}" = "yes"], [
3344       AC_MSG_ERROR([VDPAU requires Xlib (X11).])
3345     ])
3346   ], [
3347     AS_IF([test -n "${enable_vdpau}"], [
3348       AC_MSG_ERROR([${VDPAU_PKG_ERRORS}.])
3349     ])
3350   ])
3352 AM_CONDITIONAL([HAVE_VDPAU], [test "${have_vdpau}" = "yes"])
3354 have_avcodec_vdpau="no"
3355 AS_IF([test "${have_vdpau}" = "yes" -a "${have_avcodec}" = "yes"], [
3356   case "${avfork}" in
3357     libav) av_vdpau_ver="56.10.0" ;;
3358     ffmpeg) av_vdpau_ver="56.19.100" ;;
3359   esac
3360   PKG_CHECK_EXISTS([libavcodec >= ${av_vdpau_ver}], [
3361     have_avcodec_vdpau="yes"
3362     AC_MSG_NOTICE([VDPAU decoding acceleration activated])
3363   ], [
3364     AS_IF([test -n "${enable_vdpau}"], [
3365       AC_MSG_ERROR([libavcodec >= 56.10.0 is required for VDPAU decoding.])
3366     ], [
3367       AC_MSG_WARN([libavcodec >= 56.10.0 are required for VDPAU decoding.])
3368     ])
3369   ])
3371 AM_CONDITIONAL([HAVE_AVCODEC_VDPAU], [test "${have_avcodec_vdpau}" = "yes"])
3375 dnl  Wayland
3377 AC_ARG_ENABLE([wayland],
3378   AS_HELP_STRING([--enable-wayland], [Wayland support (default auto)]))
3380 have_wayland="no"
3381 AS_IF([test "${enable_wayland}" != "no"], [
3382   wl_err=""
3384   dnl wayland
3385   PKG_CHECK_MODULES([WAYLAND_CLIENT], [wayland-client >= 1.5.91],, [
3386     wl_err="$wl_err ${WAYLAND_CLIENT_PKG_ERRORS}."
3387   ])
3388   PKG_CHECK_MODULES([WAYLAND_CURSOR], [wayland-cursor],, [
3389     wl_err="$wl_err ${WAYLAND_CURSOR_PKG_ERRORS}."
3390   ])
3391   PKG_CHECK_MODULES([WAYLAND_EGL], [wayland-egl],, [
3392     wl_err="$wl_err ${WAYLAND_EGL_PKG_ERRORS}."
3393   ])
3394   PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland-scanner >= 1.15], [
3395     WAYLAND_SCANNER="$(${PKG_CONFIG} wayland-scanner --variable wayland_scanner)"
3396   ], [
3397     wl_err="$wl_err ${WAYLAND_SCANNER_PKG_ERRORS}."
3398   ])
3400   dnl wayland-protocols
3401   PKG_CHECK_MODULES([WAYLAND_PROTOCOLS], [wayland-protocols >= 1.15], [
3402     WAYLAND_PROTOCOLS="$(${PKG_CONFIG} wayland-protocols --variable pkgdatadir)"
3403   ], [
3404     wl_err="$wl_err ${WAYLAND_PROTOCOLS_PKG_ERRORS}."
3405   ])
3407   AS_IF([test -n "$wl_err"], [
3408     AS_IF([test -n "$enable_wayland"], [
3409       AC_MSG_ERROR([$wl_err])
3410     ], [
3411       AC_MSG_WARN([$wl_err])
3412     ])
3413   ], [
3414     have_wayland="yes"
3415   ])
3417   dnl xkbcommon
3418   PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon], [
3419     have_xkbcommon="yes"
3420   ], [
3421     AC_MSG_WARN([${XKBCOMMON_PKG_ERRORS}. Hotkeys are disabled.])
3422   ])
3424 AM_CONDITIONAL([HAVE_WAYLAND], [test "${have_wayland}" = "yes"])
3425 AC_SUBST([WAYLAND_PROTOCOLS])
3426 AC_SUBST([WAYLAND_SCANNER])
3427 AM_CONDITIONAL([HAVE_XKBCOMMON], [test "${have_xkbcommon}" = "yes"])
3431 dnl  SDL image decoder module
3433 AC_ARG_ENABLE([sdl-image],
3434   AS_HELP_STRING([--enable-sdl-image], [SDL image support (default enabled)]))
3435 AS_IF([test "${enable_sdl_image}" != "no"],[
3436   PKG_CHECK_MODULES(SDL_IMAGE, [SDL_image >= 1.2.10], [
3437     VLC_ADD_PLUGIN([sdl_image])
3438   ], [
3439     AC_MSG_WARN([${SDL_IMAGE_PKG_ERRORS}. You should install it alongside your SDL package.])
3440   ])
3444 dnl  freetype module
3446 AC_ARG_ENABLE([freetype],
3447   AS_HELP_STRING([--enable-freetype],   [freetype support   (default auto)]))
3448 AC_ARG_ENABLE([fribidi],
3449   AS_HELP_STRING([--enable-fribidi],    [fribidi support    (default auto)]))
3450 AC_ARG_ENABLE([harfbuzz],
3451   AS_HELP_STRING([--enable-harfbuzz],   [harfbuzz support   (default auto)]))
3452 AC_ARG_ENABLE([fontconfig],
3453   AS_HELP_STRING([--enable-fontconfig], [fontconfig support (default auto)]))
3455 AC_ARG_WITH([default-font],
3456     AS_HELP_STRING([--with-default-font=PATH],
3457         [Path to the default font]),
3458         [AC_DEFINE_UNQUOTED([DEFAULT_FONT_FILE],
3459             "$withval", [Default font])])
3460 AC_ARG_WITH([default-monospace-font],
3461     AS_HELP_STRING([--with-default-monospace-font=PATH],
3462         [Path to the default font]),
3463         [AC_DEFINE_UNQUOTED([DEFAULT_MONOSPACE_FONT_FILE],
3464             "$withval", [Default monospace font])])
3466 AC_ARG_WITH([default-font-family],
3467     AS_HELP_STRING([--with-default-font-family=NAME],
3468         [Name of the default font family]),
3469         [AC_DEFINE_UNQUOTED([DEFAULT_FAMILY],
3470             "$withval", [Default font family])])
3471 AC_ARG_WITH([default-monospace-font-family],
3472     AS_HELP_STRING([--with-default-monospace-font-family=NAME],
3473         [Name of the default font family]),
3474         [AC_DEFINE_UNQUOTED([DEFAULT_MONOSPACE_FAMILY],
3475             "$withval", [Default monospace font family])])
3477 have_freetype="no"
3478 have_fontconfig="no"
3479 have_fribidi="no"
3480 have_harfbuzz="no"
3482 if test "${enable_freetype}" != "no"; then
3483    PKG_CHECK_MODULES(FREETYPE, freetype2, [
3484       have_freetype="yes"
3485       VLC_ADD_CPPFLAGS([skins2],[${FREETYPE_CFLAGS}])
3486       VLC_ADD_LIBS([skins2],[${FREETYPE_LIBS}])
3488     dnl fontconfig support
3489     AS_IF([test "${enable_fontconfig}" != "no" -a "${SYS}" != "mingw32" -a "${SYS}" != "darwin"], [
3490       PKG_CHECK_MODULES(FONTCONFIG, [fontconfig >= 2.11], [
3491         have_fontconfig="yes"
3492       ], [
3493         AC_MSG_WARN([${FONTCONFIG_PKG_ERRORS}. Styles will be disabled in FreeType.])
3494       ])
3495     ])
3497       dnl fribidi support
3498       if test "${enable_fribidi}" != "no"; then
3499         PKG_CHECK_MODULES(FRIBIDI, fribidi, [
3500           have_fribidi="yes"
3501           VLC_ADD_CPPFLAGS([skins2], [${FRIBIDI_CFLAGS} -DHAVE_FRIBIDI])
3502           VLC_ADD_LIBS([skins2], [${FRIBIDI_LIBS}])
3503         ],[AC_MSG_WARN([${FRIBIDI_PKG_ERRORS}. Bidirectional text and complex scripts (Arabic, Farsi, Thai...) will be disabled in FreeType.])])
3504       fi
3506       dnl harfbuzz support
3507       if test "${have_fribidi}" != "no"; then
3508         if test "${enable_harfbuzz}" != "no"; then
3509           PKG_CHECK_MODULES(HARFBUZZ, harfbuzz, [
3510             have_harfbuzz="yes"
3511             VLC_ADD_CPPFLAGS([skins2], [${HARFBUZZ_CFLAGS} -DHAVE_HARFBUZZ])
3512             VLC_ADD_LIBS([skins2], [${HARFBUZZ_LIBS}])
3513           ],[AC_MSG_WARN([${HARFBUZZ_PKG_ERRORS}. Support for complex scripts (Arabic, Farsi, Thai...) will be disabled in FreeType.])])
3514         fi
3515       fi
3516   ],[
3517   AS_IF([test -n "${enable_freetype}"],[
3518     AC_MSG_ERROR([${FREETYPE_PKG_ERRORS}. Install FreeType2 development or configure with --disable-freetype.])
3519     ])
3520   ])
3523 AM_CONDITIONAL([HAVE_FREETYPE], [test "${have_freetype}" = "yes"])
3524 AM_CONDITIONAL([HAVE_FONTCONFIG], [test "${have_fontconfig}" = "yes"])
3525 AM_CONDITIONAL([HAVE_FRIBIDI], [test "${have_fribidi}" = "yes"])
3526 AM_CONDITIONAL([HAVE_HARFBUZZ], [test "${have_harfbuzz}" = "yes"])
3529 dnl libass subtitle rendering module
3531 AC_ARG_ENABLE([libass],
3532   AS_HELP_STRING([--enable-libass], [Subtitle support using libass (default enabled)]))
3533 AS_IF( [test "${enable_libass}" != "no"], [
3534   PKG_CHECK_MODULES(LIBASS, [libass >= 0.9.8],
3535       [
3536         VLC_ADD_PLUGIN([libass])
3538         if test "${have_fontconfig}" != "no"; then
3539             VLC_ADD_CPPFLAGS([libass],[-DHAVE_FONTCONFIG])
3540             VLC_ADD_LIBS([libass],[${FONTCONFIG_LIBS}])
3541         fi
3542       ],[
3543         AC_MSG_WARN([${LIBASS_PKG_ERRORS}.])
3544       ])
3545   ])
3548 dnl SAPI (text to Speech renderer for Windows)
3550 AC_LANG_PUSH([C++])
3551 AC_CHECK_TYPES([ISpObjectToken],[
3552               have_sapi="yes"
3553             ],[AC_MSG_WARN([sapi.h not found. Text to Speech renderer for Windows disabled])],
3554               [#include <windows.h>
3555                #include <sapi.h>
3556                #include <sphelper.h>])
3557 AM_CONDITIONAL([HAVE_SAPI], [test "${have_sapi}" = "yes"])
3558 AC_LANG_POP([C++])
3561 dnl  SVG module (text rendering and image decoding)
3563 PKG_ENABLE_MODULES_VLC([SVG], [], [librsvg-2.0 >= 2.9.0], [SVG rendering library],[auto])
3564 PKG_ENABLE_MODULES_VLC([SVGDEC], [], [librsvg-2.0 >= 2.9.0 cairo >= 1.13.1], [SVG image decoder library],[auto])
3567 dnl  Windows DirectX module
3570 AC_ARG_ENABLE([directx],
3571   AS_HELP_STRING([--enable-directx],
3572     [Microsoft DirectX support (default enabled on Windows)]),, [
3573   AS_IF([test "${SYS}" = "mingw32"], [
3574     enable_directx="yes"
3575   ], [
3576     enable_directx="no"
3577   ])
3579 AS_IF([test "${enable_directx}" != "no"], [
3580   dnl OpenGL
3581   AC_CHECK_HEADERS([GL/glew.h], [
3582     AC_CHECK_HEADERS([GL/wglew.h], [
3583         VLC_ADD_PLUGIN([glwin32 wgl])
3584       ],, [
3585         #include <windows.h>
3586         #include <GL/glew.h>
3587       ])],, [
3588       #include <windows.h>
3589    ])
3591   dnl Direct3D11
3592   AC_CHECK_HEADERS([d3d11.h], [
3593     VLC_ADD_PLUGIN([direct3d11 direct3d11_filters])
3594   ])
3596   dnl Direct3D9
3597   AC_CHECK_HEADERS([d3d9.h], [
3598     VLC_ADD_PLUGIN([direct3d9])
3599     AC_CHECK_HEADERS([d3dx9effect.h])
3601     AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
3602         [[#define COBJMACROS
3603           #include <d3d9.h>
3604           #include <dxva2api.h>
3605           #ifndef IDirectXVideoProcessorService_GetVideoProcessorDeviceGuids
3606           # error dxva2 too old
3607           #endif
3608         ]],[[;]])
3609       ],[
3610         VLC_ADD_PLUGIN([direct3d9_filters])
3611       ],
3612       [AC_MSG_WARN([Could not find required IDirectXVideoDecoder in dxva2api.h])])
3614   ])
3618 dnl  Linux framebuffer module
3620 AC_CHECK_HEADER([linux/fb.h], [
3621   VLC_ADD_PLUGIN([fb])
3625 dnl  Linux kernel mode setting module
3627 PKG_ENABLE_MODULES_VLC([KMS], [], [libdrm >= 2.4.83], [Linux kernel mode setting output], [auto])
3630 dnl  libcaca plugin
3632 PKG_ENABLE_MODULES_VLC([CACA], [], [caca >= 0.99.beta14], [libcaca output],[auto])
3635 dnl  OS/2 KVA plugin
3637 AC_ARG_ENABLE([kva],
3638   AS_HELP_STRING([--enable-kva],
3639     [support the K Video Accelerator KVA (default enabled on OS/2)]),, [
3640   AS_IF([test "$SYS" = "os2"], [
3641     enable_kva="yes"
3642   ])
3644 have_kva="no"
3645 KVA_LIBS=""
3646 AS_IF([test "$enable_kva" != "no"], [
3647   AC_CHECK_HEADERS([kva.h], [
3648     have_kva="yes"
3649     AC_CHECK_LIB([kva], [main], [
3650       KVA_LIBS="-lkva"
3651     ])
3652   ])
3654 AC_SUBST([KVA_LIBS])
3655 AM_CONDITIONAL([HAVE_KVA], [test "${have_kva}" = "yes"])
3658 dnl MMAL plugin
3660 AC_ARG_ENABLE([mmal],
3661   AS_HELP_STRING([--enable-mmal],
3662     [Multi-Media Abstraction Layer (MMAL) hardware plugin (default enable)]))
3663 if test "${enable_mmal}" != "no"; then
3664   VLC_SAVE_FLAGS
3665   LDFLAGS="${LDFLAGS} -L/opt/vc/lib -lvchostif"
3666   CPPFLAGS="${CPPFLAGS} -isystem /opt/vc/include -isystem /opt/vc/include/interface/vcos/pthreads -isystem /opt/vc/include/interface/vmcs_host/linux"
3667   AC_CHECK_HEADERS([interface/mmal/mmal.h],
3668     [ AC_CHECK_LIB([bcm_host], [vc_tv_unregister_callback_full], [
3669         have_mmal="yes"
3670         VLC_ADD_PLUGIN([mmal])
3671         VLC_ADD_LDFLAGS([mmal],[ -L/opt/vc/lib ])
3672         VLC_ADD_CFLAGS([mmal],[ -isystem /opt/vc/include -isystem /opt/vc/include/interface/vcos/pthreads -isystem /opt/vc/include/interface/vmcs_host/linux ])
3673         VLC_ADD_LIBS([mmal],[ -lbcm_host -lmmal -lmmal_core -lmmal_components -lmmal_util -lvchostif -lvcsm -lvchiq_arm ]) ], [
3674           AS_IF([test "${enable_mmal}" = "yes"],
3675             [ AC_MSG_ERROR([Cannot find bcm library...]) ],
3676             [ AC_MSG_WARN([Cannot find bcm library...]) ])
3677           ],
3678         [])
3679     ] , [ AS_IF([test "${enable_mmal}" = "yes"],
3680       [ AC_MSG_ERROR([Cannot find development headers for mmal...]) ],
3681       [ AC_MSG_WARN([Cannot find development headers for mmal...]) ]) ])
3682   VLC_RESTORE_FLAGS
3684 AM_CONDITIONAL([HAVE_MMAL], [test "${have_mmal}" = "yes"])
3687 dnl  Audio plugins
3690 EXTEND_HELP_STRING([Audio plugins:])
3693 dnl  Pulseaudio module
3695 AC_ARG_ENABLE([pulse],
3696   AS_HELP_STRING([--enable-pulse],
3697     [use the PulseAudio client library (default auto)]))
3698 have_pulse="no"
3699 AS_IF([test "${enable_pulse}" != "no"], [
3700   PKG_CHECK_MODULES([PULSE], [libpulse >= 1.0], [
3701     have_pulse="yes"
3702   ], [
3703     AS_IF([test "x${enable_pulse}" != "x"], [
3704       AC_MSG_ERROR([$PULSE_PKG_ERRORS. PulseAudio 1.0 or later required.])
3705     ])
3706   ])
3708 AM_CONDITIONAL([HAVE_PULSE], [test "${have_pulse}" = "yes"])
3711 dnl  ALSA module
3713 AC_ARG_ENABLE([alsa],
3714   AS_HELP_STRING([--enable-alsa],
3715     [support the Advanced Linux Sound Architecture (default auto)]),, [
3716   AS_IF([test "$SYS" = "linux" -a "${have_pulse}" = "no"], [
3717     enable_alsa="yes"
3718   ])
3720 have_alsa="no"
3721 AS_IF([test "${enable_alsa}" != "no"], [
3722   PKG_CHECK_MODULES([ALSA], [alsa >= 1.0.24], [
3723     have_alsa="yes"
3724   ], [
3725     AS_IF([test "x${enable_alsa}" != "x"], [
3726       AC_MSG_ERROR([$ALSA_PKG_ERRORS. alsa-lib 1.0.24 or later required. Pass --disable-alsa to ignore this error.])
3727     ])
3728   ])
3730 AM_CONDITIONAL([HAVE_ALSA], [test "${have_alsa}" = "yes"])
3733 dnl  Open Sound System module
3735 AC_ARG_ENABLE([oss],
3736   AS_HELP_STRING([--enable-oss],
3737     [support the Open Sound System OSS (default enabled on FreeBSD/NetBSD/DragonFlyBSD)]),, [
3738   AS_IF([test "$SYS" = "mingw32" -o "$SYS" = "linux" -o "$SYS" = "openbsd"], [
3739     enable_oss="no"
3740   ])
3742 have_oss="no"
3743 OSS_LIBS=""
3744 AS_IF([test "$enable_oss" != "no"], [
3745   AC_CHECK_HEADERS([soundcard.h sys/soundcard.h], [
3746     have_oss="yes"
3747     AC_CHECK_LIB([ossaudio], [main], [
3748       OSS_LIBS="-lossaudio"
3749     ])
3750   ])
3752 AC_SUBST([OSS_LIBS])
3753 AM_CONDITIONAL([HAVE_OSS], [test "${have_oss}" = "yes"])
3756 dnl  OpenBSD sndio module
3758 AC_ARG_ENABLE([sndio],
3759   AS_HELP_STRING([--disable-sndio],
3760     [support the OpenBSD sndio (default auto)]),, [
3761   AS_IF([test "$SYS" = "openbsd"], [
3762     enable_sndio="yes"
3763   ])
3765 have_sndio="no"
3766 AS_IF([test "$enable_sndio" != "no"], [
3767   AC_CHECK_HEADER([sndio.h], [
3768     have_sndio="yes"
3769   ])
3771 AM_CONDITIONAL([HAVE_SNDIO], [test "${have_sndio}" = "yes"])
3774 dnl  Windows Audio Session plugin
3776 AC_ARG_ENABLE([wasapi],
3777   AS_HELP_STRING([--enable-wasapi],
3778     [use the Windows Audio Session API (default auto)])
3780 have_wasapi="no"
3781 AS_IF([test "$enable_wasapi" != "no"], [
3782   AC_CHECK_HEADER([audioclient.h], [
3783     have_wasapi="yes"
3784   ], [
3785     AS_IF([test "x${enable_wasapi}" != "x"], [
3786       AC_MSG_ERROR([Windows Audio Session API not found.])
3787     ])
3788   ])
3790 AM_CONDITIONAL([HAVE_WASAPI], [test "${have_wasapi}" = "yes"])
3793 dnl  JACK modules
3795 AC_ARG_ENABLE([jack],
3796   AS_HELP_STRING([--disable-jack],
3797     [do not use jack (default auto)]))
3798 have_jack="no"
3799 AS_IF([test "${enable_jack}" != "no"], [
3800     PKG_CHECK_MODULES(JACK, jack >= 1.9.7,
3801       [ have_jack=yes ],
3802       [
3803       AC_MSG_WARN([${JACK_PKG_ERRORS}, trying jack1 instead])
3805       PKG_CHECK_MODULES(JACK, jack >= 0.120.1 jack < 1.0,
3806       [ have_jack=yes ],
3807       [
3808       AS_IF([test -n "${enable_jack}"],
3809          [AC_MSG_ERROR([${JACK_PKG_ERRORS}.])],
3810          [AC_MSG_WARN([${JACK_PKG_ERRORS}.])])
3811       ])
3812     ])
3814 AM_CONDITIONAL([HAVE_JACK], [test "${have_jack}" != "no"])
3817 dnl  OpenSLES Android
3819 AC_ARG_ENABLE([opensles],
3820   AS_HELP_STRING([--enable-opensles], [Android OpenSL ES audio module (default disabled)]))
3821 if test "${HAVE_ANDROID}" = "1"; then
3822   if test "${enable_opensles}" = "yes"; then
3823       AC_CHECK_HEADERS([SLES/OpenSLES.h],
3824         [ VLC_ADD_PLUGIN([opensles_android]) ],
3825         [ AC_MSG_ERROR([cannot find OpenSLES headers])] )
3826   fi
3830 dnl libsamplerate plugin
3832 PKG_ENABLE_MODULES_VLC([SAMPLERATE], [], [samplerate], [Resampler with libsamplerate], [auto])
3835 dnl  soxr module
3837 PKG_ENABLE_MODULES_VLC([SOXR], [], [soxr >= 0.1.2], [SoX Resampler library], [auto])
3840 dnl  OS/2 KAI plugin
3842 AC_ARG_ENABLE([kai],
3843   AS_HELP_STRING([--enable-kai],
3844     [support the K Audio Interface KAI (default enabled on OS/2)]),, [
3845   AS_IF([test "$SYS" = "os2"], [
3846     enable_kai="yes"
3847   ])
3849 have_kai="no"
3850 KAI_LIBS=""
3851 AS_IF([test "$enable_kai" != "no"], [
3852   AC_CHECK_HEADERS([kai.h], [
3853     have_kai="yes"
3854     AC_CHECK_LIB([kai], [main], [
3855       KAI_LIBS="-lkai"
3856     ])
3857   ])
3859 AC_SUBST([KAI_LIBS])
3860 AM_CONDITIONAL([HAVE_KAI], [test "${have_kai}" = "yes"])
3863 dnl  chromaprint audio track fingerprinter
3865 PKG_ENABLE_MODULES_VLC([CHROMAPRINT], [stream_out_chromaprint], [libchromaprint >= 0.6.0], [Chromaprint audio fingeprinter], [auto])
3868 dnl  Chromecast streaming support
3870 m4_pushdef([protobuf_lite_version], 2.5.0)
3871 AC_ARG_VAR(PROTOC, [protobuf compiler])
3872 AC_CHECK_PROGS(PROTOC, protoc, no)
3873 PKG_WITH_MODULES([CHROMECAST],[protobuf-lite >= protobuf_lite_version], [
3874     AS_IF([test "x${PROTOC}" != "xno"], [
3875         build_chromecast="yes"
3876     ], [
3877     AC_MSG_ERROR(protoc compiler needed for [chromecast] was not found)
3878     ])
3879 ], [
3880     AS_IF([test "${enable_chromecast}" = "yes"],
3881         AC_MSG_ERROR(Library [protobuf-lite >= protobuf_lite_version] needed for [chromecast] was not found),
3882         AC_MSG_WARN(Library [protobuf-lite >= protobuf_lite_version] needed for [chromecast] was not found)
3883     )
3884     enable_chromecast="no"
3885 ], [(Chromecast streaming support)], [auto])
3886 AM_CONDITIONAL([BUILD_CHROMECAST], [test "${build_chromecast}" = "yes"])
3887 m4_popdef([protobuf_lite_version])
3890 dnl  Interface plugins
3893 EXTEND_HELP_STRING([Interface plugins:])
3896 dnl QT
3898 AC_ARG_ENABLE([qt],
3899   AS_HELP_STRING([--disable-qt], [Qt UI support (default enabled)]),, [
3900   AS_IF([test "${enable_vlc}" != "no"], [enable_qt="yes"])
3901   AS_IF([test "${SYS}" = "darwin"], [
3902     enable_qt="no"
3903   ])
3905 have_qt5_x11="no"
3906 AS_IF([test "${enable_qt}" != "no"], [
3907   PKG_CHECK_MODULES([QT], [Qt5Core >= 5.11.0 Qt5Widgets Qt5Gui Qt5Quick Qt5QuickWidgets Qt5QuickControls2 Qt5Svg], [
3908       PKG_CHECK_MODULES([QT5_X11], [Qt5X11Extras], [
3909           have_qt5_x11="yes"
3910       ],[
3911           AC_MSG_WARN([Not building Qt Interface with X11 helpers.])
3912       ])
3913       QT_PATH="$(eval $PKG_CONFIG --variable=exec_prefix Qt5Core)"
3914       QT_HOST_PATH="$(eval $PKG_CONFIG --variable=host_bins Qt5Core)"
3915       QT_VERSION="$(eval $PKG_CONFIG --modversion Qt5Gui)"
3916       AC_PATH_PROGS(MOC, [moc-qt5 moc], moc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
3917       AC_PATH_PROGS(RCC, [rcc-qt5 rcc], rcc, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
3918       AC_PATH_PROGS(UIC, [uic-qt5 uic], uic, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
3919       AC_PATH_PROGS(QMLCACHE, [qmlcachegen-qt5 qmlcachegen], no, ["${QT_HOST_PATH}" "${QT_PATH}/bin"])
3920       AS_IF([test "x${QMLCACHE}" = "xno"], [
3921           AC_MSG_WARN([qmlcachegen not found])
3922       ])
3923     ], [
3924       AS_IF([test -n "${enable_qt}"],[
3925         AC_MSG_ERROR([${QT_PKG_ERRORS}. If you want to build VLC without GUI, pass --disable-qt.])
3926       ],[
3927         AC_MSG_WARN([${QT_PKG_ERRORS}.])
3928       ])
3929       enable_qt="no"
3930     ])
3933 AC_ARG_ENABLE([qt-qml-cache],
3934   AS_HELP_STRING([--enable-qt-qml-cache],
3935     [enable qml cache generation]))
3936 AM_CONDITIONAL([HAVE_QMLCACHE], [test "${enable_qt_qml_cache}" = "yes" && test "x$QMLCACHE" != "xno"])
3938 AC_ARG_ENABLE([qt-qml-debug],
3939   AS_HELP_STRING([--enable-qt-qml-debug], [enable qml debuger]))
3940 AM_CONDITIONAL(QT_QML_DEBUG, [test "${enable_qt_qml_debug}" = "yes"])
3942 AS_IF([test "${enable_qt}" != "no"], [
3943   ALIASES="${ALIASES} qvlc"
3945 AC_SUBST([QT_VERSION])
3946 AM_CONDITIONAL([ENABLE_QT], [test "$enable_qt" != "no"])
3947 AM_CONDITIONAL([HAVE_QT5_X11], [test "${have_qt5_x11}" = "yes"])
3950 dnl detect kde4-config patch (used for kde solids).
3952 AC_ARG_VAR([KDE4_CONFIG], [kde4-config utility])
3953 AS_IF([test "x$KDE4_CONFIG" = "x"], [
3954   KDE4_CONFIG="kde4-config"
3958 dnl Simple test for skins2 dependency
3960 AS_IF([test "$enable_qt" = "no"], [
3961   AS_IF([test "${enable_skins2}" = "yes"], [
3962     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.])
3963   ], [
3964     enable_skins2="no"
3965     AC_MSG_WARN([The skins2 module depends on the Qt interface, Qt is not built so skins2 is disabled.])
3966   ])
3970 dnl Skins2 module
3972 AC_ARG_ENABLE([skins2],
3973   AS_HELP_STRING([--enable-skins2], [skins interface module (default auto)]))
3974 AS_IF([test "${enable_skins2}" != "no"], [
3975   have_skins_deps="yes"
3977   dnl Win32
3978   AS_IF([test "${SYS}" = "mingw32"], [
3979     VLC_ADD_CPPFLAGS([skins2],[-U_OFF_T_ -U_off_t -DWIN32_SKINS])
3980     VLC_ADD_LIBS([skins2],[-lgdi32 -lole32 -luuid -lmsimg32])
3981   dnl OS/2
3982   ], [test "${SYS}" = "os2"], [
3983     VLC_ADD_CPPFLAGS([skins2],[ -DOS2_SKINS])
3984   dnl Linux/Unix
3985   ], [
3986     PKG_CHECK_MODULES([XPM], [xpm],, [have_skins_deps="no"])
3987     PKG_CHECK_MODULES([XINERAMA], [xinerama],, [have_skins_deps="no"])
3988     PKG_CHECK_MODULES([XCURSOR], [xcursor],, [have_skins_deps="no"])
3989     PKG_CHECK_MODULES([XEXT], [xext],, [have_skins_deps="no"])
3990     VLC_ADD_CPPFLAGS([skins2],[${X_CFLAGS} ${XEXT_CFLAGS} ${XPM_CFLAGS} -DX11_SKINS])
3991     VLC_ADD_LIBS([skins2],[${X_LIBS} ${X_PRE_LIBS} ${XEXT_LIBS} ${XPM_LIBS} ${XINERAMA_LIBS} ${XCURSOR_LIBS} -lX11])
3992   ])
3994   dnl we need freetype
3995   AS_IF([test "${have_freetype}" != "yes"], [
3996     have_skins_deps="no"
3997   ])
3999   AS_IF([test "${have_skins_deps}" = "no"], [
4000     AS_IF([test "x${enable_skins2}" = "x"], [
4001       AC_MSG_WARN([Skins2 interface disabled due to missing dependencies.])
4002     ], [
4003       AC_MSG_ERROR([Skins2 interface requires FreeType, libxcursor, libxpm, libxext and libxinerama])
4004     ])
4005     enable_skins2="no"
4006   ], [
4007     ALIASES="${ALIASES} svlc"
4008     enable_skins2="yes"
4009   ])
4011 AM_CONDITIONAL([BUILD_SKINS], [test "${enable_skins2}" = "yes"])
4013 AC_ARG_ENABLE([libtar],
4014   AS_HELP_STRING([--enable-libtar], [libtar support for skins2 (default auto)]))
4015 AS_IF([test "${enable_skins2}" = "yes" && test "${enable_libtar}" != "no"], [
4016   AC_CHECK_HEADERS([libtar.h], [
4017     VLC_ADD_LIBS([skins2],[-ltar])
4018   ])
4022 dnl  MacOS X gui module
4024 AC_ARG_ENABLE([macosx],
4025   AS_HELP_STRING([--enable-macosx], [Mac OS X gui support (default enabled on Mac OS X)]))
4026 if test "x${enable_macosx}" != "xno" -a "${SYS}" = "darwin"
4027 then
4029   dnl
4030   dnl If possible, use xcrun to find the right ibtool
4031   dnl
4033   AC_PATH_PROG([XCRUN], [xcrun], [no])
4034   AS_IF([test ! "x${XCRUN}" = "xno"], [
4035     AC_MSG_CHECKING([for ibtool (using xcrun)])
4036     XIB="$(eval $XCRUN -f ibtool 2>/dev/null || echo no)"
4037     AC_MSG_RESULT([${XIB}])
4038   ], [
4039     AC_MSG_WARN([Looking for tools without using xcrun])
4040   ])
4042   AS_IF([test "x${XIB}" = "xno"], [
4043     AC_PATH_PROG(XIB, [ibtool], [no])
4044     AS_IF([test "x${XIB}" = "xno"], [
4045       AC_MSG_ERROR([ibtool was not found, but is required for --enable-macosx])
4046     ])
4047   ])
4049 AM_CONDITIONAL([ENABLE_MACOSX_UI], [test "$enable_macosx" != "no" -a "${SYS}" = "darwin"])
4052 dnl  MacOS X sparkle update support
4054 AC_ARG_ENABLE([sparkle],
4055   AS_HELP_STRING([--enable-sparkle], [Sparkle update support for OS X (default enabled on Mac OS X)]))
4056 if test "x${enable_sparkle}" != "xno" -a "${HAVE_OSX}" = "1"
4057 then
4058   if test ! -d ${CONTRIB_DIR}/Sparkle.framework -a ! -d ${CONTRIB_DIR}/Frameworks/Sparkle.framework
4059   then
4060     AC_MSG_ERROR([Sparkle framework is required and was not found in ${CONTRIB_DIR}])
4061   fi
4063   AC_DEFINE([HAVE_SPARKLE], [1], [Define to 1 if sparkle is enabled.])
4065 AM_CONDITIONAL([HAVE_SPARKLE], [test "$enable_sparkle" != "no"])
4068 dnl  MacOS X breakpad creash reporter support
4070 AC_ARG_WITH([breakpad],
4071   AS_HELP_STRING([--with-breakpad=URL], [Enable Breakpad reporter using given URL]), [], [with_breakpad=no])
4073 AS_IF([test "$with_breakpad" != "no"], [
4075   AS_IF([test "$with_breakpad" = "yes"], [
4076     AC_MSG_ERROR([You need to supply the CrashDragon Server URL as value for --with-breakpad])
4077   ])
4079   AS_IF([test "$HAVE_OSX" = "1"], [
4080     AC_MSG_CHECKING([for Breakpad framework])
4081     AS_IF([test ! -d ${CONTRIB_DIR}/Breakpad.framework -a \
4082                 ! -d ${CONTRIB_DIR}/Frameworks/Breakpad.framework], [
4083       AC_MSG_RESULT([no])
4084       with_breakpad="no"
4085       AC_MSG_ERROR([Breakpad framework is required and was not found in ${CONTRIB_DIR}])
4086     ], [
4087       AC_MSG_RESULT([yes])
4088     ])
4089   ],[
4090     PKG_CHECK_MODULES([BREAKPAD], [breakpad-client], [
4091       LDFLAGS="${LDFLAGS} -Wl,--build-id"
4092     ], [
4093       AC_MSG_ERROR(["breakpad not found"])
4094     ])
4095   ])
4098 AM_CONDITIONAL([HAVE_BREAKPAD], [test "$with_breakpad" != "no"])
4099 AS_IF([test "$with_breakpad" != "no"], [
4100   AC_SUBST([BREAKPAD_URL], ["${with_breakpad}"])
4104 dnl  Minimal Mac OS X module
4106 AC_ARG_ENABLE([minimal-macosx],
4107   AS_HELP_STRING([--enable-minimal-macosx], [Minimal Mac OS X support (default disabled)]))
4108 if test "${enable_minimal_macosx}" = "yes" -a "${SYS}" = "darwin"
4109 then
4110   VLC_ADD_PLUGIN([minimal_macosx])
4114 dnl Mac OS X fancy dmg build tool
4116 if test "${HAVE_OSX}" = "1"
4117 then
4118   AC_PATH_PROG(DMGBUILD, dmgbuild, no)
4119   AS_IF([test "x${DMGBUILD}" = "xno"], [
4120     AC_MSG_WARN([dmgbuild not found -- unable to build fancy DMGs])
4121   ])
4123 AM_CONDITIONAL([HAVE_DMGBUILD], [test "x$DMGBUILD" != "xno" -a "${HAVE_OSX}" = "1"])
4126 dnl  VideoToolbox plugins
4127 AC_CHECK_HEADERS([VideoToolbox/VideoToolbox.h], [
4128     VLC_ADD_PLUGIN([videotoolbox])
4129     VLC_ADD_PLUGIN([cvpx])
4130   ])
4133 dnl  AudioToolbox MIDI plugin
4134 AC_CHECK_HEADERS([AudioToolbox/AudioToolbox.h], [
4135   VLC_ADD_PLUGIN([audiotoolboxmidi])
4139 dnl  ncurses module
4141 AC_ARG_ENABLE([ncurses],
4142 AS_HELP_STRING([--disable-ncurses],[ncurses text-based interface (default auto)]))
4143 have_ncurses="no"
4144 AS_IF([test "${enable_ncurses}" != "no"] ,[
4145   PKG_CHECK_MODULES([NCURSES], [ncursesw], [
4146     have_ncurses="yes"
4147     ALIASES="${ALIASES} nvlc"
4148   ], [
4149     AS_IF([test -n "${enable_ncurses}"], [
4150       AC_MSG_ERROR([${NCURSES_PKG_ERRORS}.])
4151     ])
4152   ])
4154 AM_CONDITIONAL([HAVE_NCURSES], [test "${have_ncurses}" = "yes"])
4157 dnl  Lirc plugin
4159 AC_ARG_ENABLE([lirc],
4160   AS_HELP_STRING([--enable-lirc], [lirc support (default disabled)]))
4161 have_lirc="no"
4162 AS_IF([test "${enable_lirc}" = "yes"], [
4163   AC_CHECK_HEADER(lirc/lirc_client.h, [
4164     AC_CHECK_LIB([lirc_client], [lirc_init], [
4165       have_lirc="yes"
4166     ])
4167   ])
4169 AM_CONDITIONAL([HAVE_LIRC], [test "${have_lirc}" = "yes"])
4172 dnl  Bitstream
4174 PKG_CHECK_MODULES([BITSTREAM], [bitstream > 1.4],[have_bitstream="yes"], [have_bitstream="no"])
4175 AM_CONDITIONAL([HAVE_BITSTREAM], [test "${have_bitstream}" = "yes"])
4178 dnl  SRT plugin
4180 PKG_ENABLE_MODULES_VLC([SRT], [access_srt access_output_srt], [srt >= 1.3.0], [SRT input/output plugin], [auto], [], [], [-DENABLE_SRT])
4182 EXTEND_HELP_STRING([Visualisations and Video filter plugins:])
4184 dnl  goom visualization plugin
4186 PKG_ENABLE_MODULES_VLC([GOOM], [], [libgoom2], [goom visualization plugin], [auto])
4189 dnl libprojectM visualization plugin
4191 AC_ARG_ENABLE([projectm],
4192   AS_HELP_STRING([--enable-projectm], [projectM visualization plugin (default enabled)]))
4193 AS_IF([test "${enable_projectm}" != "no"],
4194   [
4195     PKG_CHECK_MODULES(PROJECTM, libprojectM,
4196     [
4197       VLC_ADD_PLUGIN([projectm])
4198       PKG_CHECK_EXISTS([libprojectM >= 2.0.0],
4199         [ AC_DEFINE([HAVE_PROJECTM2], 1, [Define to 1 if using libprojectM 2.x]) ],
4200         [ AC_MSG_WARN( [Using libprojectM version 1] )
4201       ])
4202     ],[
4203       AC_MSG_WARN([${PROJECTM_PKG_ERRORS}.])
4204     ])
4205   ])
4208 dnl Vovoid VSXu visualization plugin
4210 AC_ARG_ENABLE([vsxu],
4211   AS_HELP_STRING([--enable-vsxu], [Vovoid VSXu visualization plugin (default auto)]))
4212 AS_IF([test "${enable_vsxu}" != "no"],
4213   [
4214     PKG_CHECK_MODULES(VSXU, libvsxu,
4215     [
4216       VLC_ADD_PLUGIN([vsxu])
4217     ],[
4218       AC_MSG_WARN([${VSXU_PKG_ERRORS}.])
4219     ])
4220   ])
4222 EXTEND_HELP_STRING([Service Discovery plugins:])
4224 dnl  Avahi-Zeroconf services discovery
4225 PKG_ENABLE_MODULES_VLC([AVAHI], [], [avahi-client >= 0.6], [Zeroconf services discovery], [auto])
4228 dnl  libudev services discovery
4229 PKG_ENABLE_MODULES_VLC([UDEV], [], [libudev >= 142], [Linux udev services discovery], [auto])
4232 dnl MTP devices services discovery
4233 PKG_ENABLE_MODULES_VLC([MTP], [mtp access_mtp], [libmtp >= 1.0.0], [MTP devices support], [auto])
4236 dnl UPnP Plugin (Intel SDK)
4238 PKG_ENABLE_MODULES_VLC([UPNP], [upnp], [libupnp], [Intel UPNP SDK],[auto])
4241 dnl mDNS using libmicrodns
4243 PKG_ENABLE_MODULES_VLC([MICRODNS], [], [microdns], [mDNS services discovery], [auto])
4246 EXTEND_HELP_STRING([Misc options:])
4249 dnl  libxml2 module
4251 PKG_ENABLE_MODULES_VLC([LIBXML2], [xml], [libxml-2.0 >= 2.5], [libxml2 support],[auto])
4255 dnl libgcrypt
4257 AC_ARG_ENABLE([libgcrypt],
4258   AS_HELP_STRING([--disable-libgcrypt], [gcrypt support (default enabled)]))
4259 AC_ARG_VAR([GCRYPT_CFLAGS], [C compiler flags for gcrypt])
4260 AC_ARG_VAR([GCRYPT_LIBS], [linker flags flags for gcrypt])
4262 # require libgcrypt >= 1.6.0
4263 AS_IF([test "${enable_libgcrypt}" != "no"], [
4264   AC_CACHE_CHECK([for gcrypt 1.6.0 or later], [ac_cv_lib_gcrypt], [
4265     VLC_SAVE_FLAGS
4266     CFLAGS="${CFLAGS} ${GCRYPT_CFLAGS}"
4267     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
4268 [#include <gcrypt.h>
4269 #if GCRYPT_VERSION_NUMBER < 0x010600
4270 #error
4271 #endif]])], [
4272       ac_cv_lib_gcrypt=yes
4273     ], [
4274       ac_cv_lib_gcrypt=no
4275     ])
4276     VLC_RESTORE_FLAGS
4277   ])
4279   AS_IF([test "${ac_cv_lib_gcrypt}" = "yes"], [
4280     AC_DEFINE([HAVE_GCRYPT], 1, [Defined if having gcrypt])
4281   ], [
4282     AS_IF([test "${enable_libgcrypt}" = "yes"], [
4283       AC_MSG_ERROR([libgcrypt version 1.6.0 or higher not found. Install libgcrypt or pass --disable-libgcrypt.])
4284     ])
4285   ])
4288 AS_IF([test -z "$GCRYPT_LIBS"], [
4289   GCRYPT_LIBS="-lgcrypt -lgpg-error"
4292 AC_SUBST([GCRYPT_CFLAGS])
4293 AC_SUBST([GCRYPT_LIBS])
4294 AM_CONDITIONAL([HAVE_GCRYPT], [test "${ac_cv_lib_gcrypt}" = "yes"])
4297 dnl TLS/SSL
4299 AC_ARG_ENABLE([gnutls],
4300   AS_HELP_STRING([--enable-gnutls], [GNU TLS TLS/SSL support (default enabled)]))
4301 AS_IF([test "${enable_gnutls}" != "no"], [
4302   PKG_CHECK_MODULES(GNUTLS, [gnutls >= 3.5.0], [
4303     VLC_ADD_PLUGIN([gnutls])
4304   ], [
4305     AS_IF([test -n "${enable_gnutls}"], [
4306       AC_MSG_ERROR([${GNUTLS_PKG_ERRORS}.)])
4307     ])
4308   ])
4313 dnl Taglib plugin
4315 AC_ARG_ENABLE([taglib],
4316   AS_HELP_STRING([--disable-taglib],
4317     [do not use TagLib (default enabled)]))
4318 AS_IF([test "${enable_taglib}" != "no"], [
4319   PKG_CHECK_MODULES(TAGLIB, taglib >= 1.11, [
4320     VLC_ADD_PLUGIN([taglib])
4321   ], [
4322     AC_MSG_WARN([${TAGLIB_PKG_ERRORS}.])])
4326 dnl  libsecret
4328 PKG_ENABLE_MODULES_VLC([SECRET], [], [libsecret-1 >= 0.18], [use libsecret for keystore], [auto])
4331 dnl  kwallet
4333 AC_ARG_ENABLE([kwallet],
4334   AS_HELP_STRING([--enable-kwallet],
4335     [use kwallet (via D-Bus) for keystore (default enabled)]))
4336 AS_IF([test "${enable_kwallet}" != "no" -a "${have_dbus}" = "yes"], [
4337   VLC_ADD_PLUGIN([kwallet])
4341 dnl update checking system
4343 AC_ARG_ENABLE([update-check],
4344   AS_HELP_STRING([--enable-update-check], [update checking system (default disabled)]))
4345 if test "${enable_update_check}" = "yes"
4346 then
4347  AS_IF([test "${ac_cv_lib_gcrypt}" != "yes"],[
4348     AC_MSG_ERROR([libgcrypt is required for update checking system]) ])
4350 AM_CONDITIONAL([UPDATE_CHECK], [test "${enable_update_check}" = "yes"])
4353 dnl OS X notification plugin
4355 AC_ARG_ENABLE([osx_notifications],
4356   AS_HELP_STRING([--enable-osx-notifications],
4357     [macOS notification plugin (default disabled)]),,
4358   [enable_osx_notifications=no])
4359 AS_IF([test "${enable_osx_notifications}" != "no"], [
4360   VLC_ADD_PLUGIN([osx_notifications])
4364 dnl Libnotify notification plugin
4366 PKG_ENABLE_MODULES_VLC([NOTIFY], [], [libnotify gtk+-3.0], [libnotify notification], [auto])
4368 PKG_ENABLE_MODULES_VLC([MEDIALIBRARY], [medialibrary], [medialibrary >= 0.7.1], (medialibrary support), [auto])
4371 dnl  Endianness check
4373 AC_C_BIGENDIAN
4374 AS_IF([test "${ac_cv_c_bigendian}" = "yes"], [
4375   DEFS_BIGENDIAN="-DWORDS_BIGENDIAN=1"
4376 ], [
4377   DEFS_BIGENDIAN=""
4379 AC_SUBST([DEFS_BIGENDIAN])
4382 dnl Where to install KDE solid .desktop
4384 AC_ARG_WITH(kde-solid,
4385   AS_HELP_STRING([--with-kde-solid=PATH],
4386                  [KDE Solid actions directory (auto)]),, [
4388 if test "${SYS}" != "mingw32" -a "${SYS}" != "darwin" -a "${HAVE_ANDROID}" != "1" ; then
4389   with_kde_solid="yes"
4392 soliddatadir=""
4393 AS_IF([test "${with_kde_solid}" != "no"], [
4394   AS_IF([test "${with_kde_solid}" = "yes"], [
4395     kde4datadir="`${KDE4_CONFIG} --install data`"
4396     AS_IF([test "x$kde4datadir" = "x"], [kde4datadir='${datadir}/kde4/apps'])
4397     soliddatadir="${kde4datadir}/solid/actions"
4398   ], [
4399     soliddatadir="${with_kde_solid}"
4400   ])
4402 AC_SUBST([soliddatadir])
4403 AM_CONDITIONAL([KDE_SOLID], [test "x${soliddatadir}" != "x"])
4406 dnl  Find tools for win32 packaging
4408 AS_IF([test "${SYS}" = "mingw32"], [
4409     dnl
4410     dnl Find makensis required to build the NSIS installer
4411     dnl
4412     nsis_major_required="3"
4413     nsis_version_ok="no"
4414     AC_PATH_PROG([MAKENSIS], [makensis], [no])
4415     AS_IF([test "$MAKENSIS" != "no"], [
4416         # Check version
4417         AC_MSG_CHECKING([makensis version])
4418         nsis_version=$($MAKENSIS -VERSION)
4419         AC_MSG_RESULT([$nsis_version])
4420         nsis_version_major=$(echo "$nsis_version" | awk -F \. '{print $1}' | sed 's/v//')
4421         # Check if major version is a valid number
4422         AS_IF([test -n "$nsis_version_major" && \
4423                test "$nsis_version_major" -eq "$nsis_version_major" 2> /dev/null], [
4424             # Do the version check using major version
4425             AS_IF([test "$nsis_version_major" -lt "$nsis_major_required"], [
4426                 AC_MSG_WARN([makensis too old, (needs ${nsis_major_required}.x, have ${nsis_version_major}.x)])
4427             ], [
4428                 nsis_version_ok="yes"
4429             ])
4430         ], [
4431             AC_MSG_WARN([failed to check the makensis version])
4432         ])
4433     ])
4434     dnl
4435     dnl Find 7zip
4436     dnl
4437     AC_PATH_PROG([SEVENZIP], [7z], [7z])
4439 AM_CONDITIONAL([HAVE_MAKENSIS], [test "x$MAKENSIS" != "xno" && test "$nsis_version_ok" = "yes"])
4442 dnl Check wether we have the PROCESS_MITIGATION_IMAGE_LOAD_POLICY
4443 dnl It should only be available when building for win10, but some SDKs define it unconditionnaly
4445 if test "${SYS}" = "mingw32"; then
4446     AC_CHECK_TYPES([PROCESS_MITIGATION_IMAGE_LOAD_POLICY],,,[#include <windows.h>])
4449 EXTEND_HELP_STRING([Components:])
4452 dnl  the VLC binary
4454 AC_ARG_ENABLE([vlc],
4455   AS_HELP_STRING([--enable-vlc], [build the VLC media player (default enabled)]))
4456 AM_CONDITIONAL([BUILD_VLC], [test "${enable_vlc}" != "no"])
4459 dnl Fuzzer (at the end not to mess dependencies FLAGS)
4461 AS_VAR_IF(with_libfuzzer, no, [], [
4462     LIBS="-lstdc++ ${LIBM}"
4463     AS_IF([test "${with_libfuzzer}" != "yes"], [
4464       LIBS="$LIBS -L${with_libfuzzer}"
4465     ])
4466     LIBS="$LIBS -lFuzzer"
4467     AX_CHECK_COMPILE_FLAG(-fsanitize-coverage=trace-pc-guard, [
4468         AX_APPEND_FLAG([-fsanitize-coverage=trace-pc-guard])
4469         AX_APPEND_FLAG([-fsanitize-coverage=trace-pc-guard], [CXXFLAGS])
4470         AX_APPEND_COMPILE_FLAGS([-fsanitize-coverage=trace-cmp])
4471         AX_APPEND_COMPILE_FLAGS([-fsanitize-coverage=trace-cmp], [CXXFLAGS])
4472     ], [
4473         AX_CHECK_COMPILE_FLAG(-fsanitize-coverage=trace-pc, [
4474             AX_APPEND_FLAG([-fsanitize-coverage=trace-pc])
4475             AX_APPEND_FLAG([-fsanitize-coverage=trace-pc], [CXXFLAGS])
4476         ], [
4477             AC_MSG_ERROR([Sanitizer coverage not supported by your compiler])
4478         ])
4479     ])
4483 dnl  Stuff used by the program
4485 VERSION_MESSAGE="${VERSION} ${CODENAME}"
4486 COPYRIGHT_MESSAGE="Copyright © ${COPYRIGHT_YEARS} the VideoLAN team"
4487 AC_DEFINE_UNQUOTED([VERSION_MESSAGE], "${VERSION_MESSAGE}", [Simple version string])
4488 AC_DEFINE_UNQUOTED([COPYRIGHT_MESSAGE], "${COPYRIGHT_MESSAGE}", [Copyright string])
4489 AC_DEFINE_UNQUOTED([COPYRIGHT_YEARS], "${COPYRIGHT_YEARS}", [The copyright years])
4490 AC_DEFINE_UNQUOTED([CONFIGURE_LINE], "${CONFIGURE_LINE}", [The ./configure command line])
4491 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MAJOR],${VERSION_MAJOR}, [version major number])
4492 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MINOR],${VERSION_MINOR}, [version minor number])
4493 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_REVISION],${VERSION_REVISION}, [version revision number])
4494 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_EXTRA],${VERSION_EXTRA}, [version extra number])
4495 AC_DEFINE_UNQUOTED([PACKAGE_VERSION_DEV],"${VERSION_DEV}", [version development string])
4496 AC_SUBST([COPYRIGHT_MESSAGE])
4497 AC_SUBST([VERSION_MESSAGE])
4498 AC_SUBST([VERSION_MAJOR])
4499 AC_SUBST([VERSION_MINOR])
4500 AC_SUBST([VERSION_REVISION])
4501 AC_SUBST([VERSION_EXTRA])
4502 AC_SUBST([COPYRIGHT_YEARS])
4503 AC_DEFINE_UNQUOTED([VLC_COMPILE_BY], "`whoami|sed -e 's/\\\/\\\\\\\/g'`", [user who ran configure])
4504 AC_DEFINE_UNQUOTED([VLC_COMPILE_HOST], "`hostname -f 2>/dev/null || hostname`", [host which ran configure])
4505 AC_DEFINE_UNQUOTED([VLC_COMPILER], "`$CC -v 2>&1 | tail -n 1 | sed -e 's/ *$//'`", [compiler])
4507 dnl  Handle substvars that use $(top_srcdir)
4509 CPPFLAGS="-I\$(top_srcdir)/include -I\$(top_builddir)/include ${CPPFLAGS}"
4512 dnl  Configuration is finished
4514 AC_SUBST([SYS])
4515 AC_SUBST([ARCH])
4516 AC_SUBST([ALIASES])
4517 AC_SUBST([ASM])
4518 AC_SUBST([MOC])
4519 AC_SUBST([RCC])
4520 AC_SUBST([UIC])
4521 AC_SUBST([WINDRES])
4522 AC_SUBST([WINE_SDK_PATH])
4523 AC_SUBST([LIBEXT])
4524 AC_SUBST([AM_CPPFLAGS])
4525 AC_SUBST([MACOSX_DEPLOYMENT_TARGET])
4526 AC_SUBST([FILE_LIBVLCCORE_DLL])
4527 AC_SUBST([FILE_LIBVLC_DLL])
4529 AC_CONFIG_FILES([
4530   Makefile
4531   doc/Makefile
4532   modules/Makefile
4533   m4/Makefile
4534   po/Makefile.in
4535   share/Makefile
4536   compat/Makefile
4537   src/Makefile
4538   lib/Makefile
4539   bin/Makefile
4540   test/Makefile
4541   modules/hw/mmal/Makefile
4542   share/vlc.appdata.xml.in
4545 AM_COND_IF([HAVE_WIN32], [
4546   AC_CONFIG_FILES([
4547     extras/package/win32/NSIS/spad.nsi
4548     extras/package/win32/NSIS/vlc.win32.nsi
4549     extras/package/win32/msi/config.wxi
4550   ])
4553 AM_COND_IF([HAVE_DARWIN], [
4554   AC_CONFIG_FILES([
4555     modules/gui/macosx/UI/InfoPlist.strings:modules/gui/macosx/Resources/InfoPlist.strings.in
4556     share/macosx/Info.plist:share/Info.plist.in
4557   ])
4560 dnl Generate makefiles
4561 AC_OUTPUT
4563 dnl Do we have to use make or gmake ?
4564 if make --version 2>&1|grep -q GNU
4565 then
4566     # GNU make, all seems good
4567     MAKE=make
4568 else
4569     # Known GNU make alias (on BSD)
4570     MAKE=gmake
4572 dnl Shortcut to nice compile message
4573 if test -n $SHELL; then
4574   SHELL=${CONFIG_SHELL-/bin/sh}
4576 rm -f compile
4577 compile_top_srcdir=`sed -ne "s/^top_srcdir *= *//p" < Makefile`
4578 echo "#! $SHELL
4579 rm -f .error\$\$
4580 ERROR=0
4581 export PATH=\"$PATH\" LANG=C
4582 ($MAKE V=1 \$@ 2>&1 || touch .error\$\$)| $compile_top_srcdir/extras/buildsystem/make.pl
4583 test -f .error\$\$ && ERROR=1
4584 rm -f .error\$\$
4585 exit \$ERROR" >compile
4586 chmod a+x compile
4588 echo "
4589 libvlc configuration
4590 --------------------
4591 version               : ${VERSION}
4592 system                : ${SYS}
4593 architecture          : ${ARCH}
4594 optimizations         : ${enable_optimizations}"
4595 if test "${enable_vlc}" != "no"; then
4596 echo "vlc aliases           :${ALIASES}"
4597 else
4598 echo "build vlc executable  : no"
4600 echo "
4601 To build vlc and its plugins, type \`$MAKE', or \`./compile' if you like nice colors."