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