Skip to content
Snippets Groups Projects
configure.ac 132 KiB
Newer Older
Samuel Hocevar's avatar
 
Samuel Hocevar committed
dnl Autoconf settings for vlc
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
AC_COPYRIGHT([Copyright 1999-2019 VLC authors and VideoLAN])
AC_INIT([vlc], [4.0.0-dev])
VERSION_MINOR=0
VERSION_REVISION=0
VERSION_EXTRA=0
AC_SUBST([PKGDIR])
CONFIGURE_LINE="`echo "$0 $ac_configure_args" | sed -e 's/\\\/\\\\\\\/g'`"
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
COPYRIGHT_YEARS="1996-2019"
AC_CONFIG_SRCDIR([src/libvlc.c])
AC_CONFIG_AUX_DIR([autotools])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_LIBOBJ_DIR([compat])
AC_CANONICAL_BUILD
AC_PRESERVE_HELP_ORDER
AM_INIT_AUTOMAKE([tar-ustar color-tests foreign])
AC_CONFIG_HEADERS([config.h])
AM_SILENT_RULES([yes])
Samuel Hocevar's avatar
Samuel Hocevar committed
dnl
dnl Check for tools
Samuel Hocevar's avatar
Samuel Hocevar committed
dnl
AC_PROG_CC
AC_USE_SYSTEM_EXTENSIONS
AH_VERBATIM([FORTIFY_SOURCE],
  [/* Enable compile-time and run-time bounds-checking, and some warnings,
   without upsetting glibc 2.15+ or toolchains predefining _FORTIFY_SOURCE */
#if !defined _FORTIFY_SOURCE && defined __OPTIMIZE__ && __OPTIMIZE__
# define _FORTIFY_SOURCE 2
#endif])
AC_DEFINE([_FILE_OFFSET_BITS], 64, [Define to 64 for large files support.])
AC_DEFINE([__LIBVLC__],, [Define within the LibVLC source code tree.])
AC_DEFINE([WIN32_LEAN_AND_MEAN],, [Define to limit the scope of <windows.h>.])
AC_PROG_OBJC
AC_PROG_EGREP
AC_PROG_LEX
AC_PROG_YACC
AC_ARG_VAR([DESKTOP_FILE_VALIDATE], [Validator for desktop entry files])
AC_CHECK_PROGS([DESKTOP_FILE_VALIDATE], [${DESKTOP_FILE_VALIDATE} desktop-file-validate], :)
AC_ARG_VAR([BUILDCC], [Build system C11 or C99 compiler command])
AC_CHECK_PROGS([BUILDCC], [c11-gcc c11 c99-gcc c99], [false])
AS_IF([test "$BUILDCC" = "false"], [
  AC_MSG_ERROR([Cannot find native C99 compiler: please define BUILDCC.])
])
dnl Check for compiler properties
AC_C_CONST
AC_C_INLINE
AX_CXX_COMPILE_STDCXX_11([noext], [mandatory])
dnl Extend the --help string at the current spot.
AC_DEFUN([EXTEND_HELP_STRING], [m4_divert_once([HELP_ENABLE], [$1])])

dnl Allow binary package maintainer to pass a custom string to avoid
AC_ARG_WITH([binary-version],
    AS_HELP_STRING([--with-binary-version=STRING],
         [To avoid plugins cache problem between binary version]),[],[])
AS_IF([test -n "${with_binary_version}"],[
    AC_DEFINE_UNQUOTED([DISTRO_VERSION],["${with_binary_version}"],
         [Binary specific version])
])
dnl Prevent clang from accepting unknown flags with a mere warning
AX_APPEND_COMPILE_FLAGS([-Werror=unknown-warning-option -Werror=invalid-command-line-argument], [CFLAGS])
AX_APPEND_COMPILE_FLAGS([-Werror=unknown-warning-option -Werror=invalid-command-line-argument], [CXXFLAGS])

gbazin's avatar
 
gbazin committed
dnl
dnl  Check the operating system
dnl
HAVE_TVOS="0"
dnl  Set x86 asm flags and defines
X86ASMFLAGS=""
case "${host_cpu}" in
    i?86)
    X86ASMFLAGS="-f elf32"
    X86ASMDEFS="-DARCH_X86_32=1 -DARCH_X86_64=0"
        ;;
    x86_64)
    X86ASMFLAGS="-f elf64"
    X86ASMDEFS="-DARCH_X86_32=0 -DARCH_X86_64=1"
        ;;
esac

case "${host_os}" in
  linux*)
    CFLAGS="${CFLAGS} -pthread"
  bsdi*)
  freebsd*)
    SYS=freebsd
    CPPFLAGS="${CPPFLAGS} -I/usr/local/include"
    LDFLAGS="${LDFLAGS} -L/usr/local/lib"
    ;;
  openbsd*)
    SYS=openbsd
    CPPFLAGS="${CPPFLAGS} -I/usr/local/include -I/usr/X11R6/include"
    LDFLAGS="${LDFLAGS} -L/usr/local/lib -L/usr/X11R6/lib/"
    ;;
  netbsd*)
    SYS=netbsd
    ;;
  dragonfly*)
    SYS=dragonfly
    case "${host_cpu}" in
      i?86)
        X86ASMFLAGS="-f macho32"
        X86ASMDEFS="${X86ASMDEFS} -DPREFIX"
      ;;
      ppc64*)
        ARCH_flag="-arch ppc64"
      ;;
      ppc*)
        ARCH_flag="-arch ppc"
      ;;
        X86ASMFLAGS="-f macho64"
        X86ASMDEFS="${X86ASMDEFS} -DPREFIX"
        ac_cv_c_attribute_packed="no"
    CFLAGS="${CFLAGS} -D_INTL_REDIRECT_MACROS -std=gnu11 ${ARCH_flag}"
    CXX="${CXX} -stdlib=libc++ -std=c++11"
    CXXFLAGS="${CXXFLAGS} -D_INTL_REDIRECT_MACROS ${ARCH_flag}"
    CPPFLAGS="${CPPFLAGS} ${ARCH_flag}"
    OBJCFLAGS="${OBJCFLAGS} -D_INTL_REDIRECT_MACROS -std=gnu11 ${ARCH_flag} -Werror=partial-availability"
    LDFLAGS="${LDFLAGS} -Wl,-headerpad_max_install_names ${ARCH_flag}"
    VLC_ADD_LIBS([libvlc vlc],[-Wl,-undefined,dynamic_lookup,-framework,AppKit])
    VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreFoundation,-framework,CoreServices])
    AC_EGREP_CPP(yes,
            [#import <TargetConditionals.h>
             #if TARGET_OS_IPHONE
             yes
             #endif],
             [HAVE_IOS="1"],
             [HAVE_OSX="1"])

    AC_EGREP_CPP(yes,
            [#import <TargetConditionals.h>
             #if TARGET_OS_TV
             yes
             #endif],
             [HAVE_TVOS="1"
             HAVE_IOS="0"
             HAVE_OSX="0"
             ],)

      AS_HELP_STRING([--with-macosx-sdk=DIR],
        [compile using the SDK in DIR]))
    if test "${with_macosx_sdk}" != "" ; then
        test ! -d "${with_macosx_sdk}" && AC_MSG_ERROR([SDK "${with_macosx_sdk}" not found])
        CPP="${CPP} -isysroot ${with_macosx_sdk}"
        CC="${CC} -isysroot ${with_macosx_sdk}"
        CXX="${CXX} -isysroot ${with_macosx_sdk}"
        OBJC="${OBJC} -isysroot ${with_macosx_sdk}"
        LD="${LD} -syslibroot ${with_macosx_sdk}"
    fi
      AS_HELP_STRING([--with-macosx-version-min=VERSION],
        [compile for Mac OS X VERSION and above]))
    if test "${with_macosx_version_min}" != "" ; then
        CPP="${CPP} -mmacosx-version-min=${with_macosx_version_min}"
        CC="${CC} -mmacosx-version-min=${with_macosx_version_min}"
        CXX="${CXX} -mmacosx-version-min=${with_macosx_version_min}"
        OBJC="${OBJC} -mmacosx-version-min=${with_macosx_version_min}"
        LD="${LD} -mmacosx_version_min=${with_macosx_version_min}"
  *mingw32* | *cygwin* | *wince* | *mingwce*)
    dnl Force libtool to not link to (shared) libgcc_s when detecting C++ dependencies
    dnl When doing this test with -static-libgcc it will link on (static) libgcc_eh
    CXXFLAGS="${CXXFLAGS} -static-libgcc"
    AC_CHECK_TOOL(OBJCOPY, objcopy, :)
    AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
      [[#ifdef _WIN32_WINNT
       # error _WIN32_WINNT already defined
       #endif
      ]],[[;]])
    ],[
      AC_DEFINE([_WIN32_WINNT], 0x0601, [Define to '0x0601' for Windows 7 APIs.])
    ])
    AC_DEFINE([_WIN32_IE], 0x0600, [Define to '0x0600' for IE 6.0 (and shell) APIs.])
    AC_DEFINE([_UNICODE], [1], [Define to 1 for Unicode (Wide Chars) APIs.])
    AC_DEFINE([UNICODE], [1], [Define to 1 for Unicode (Wide Chars) APIs.])
    AC_DEFINE([_ISOC99_SOURCE], [1], [Extensions to ISO C89 from ISO C99.])
    AC_DEFINE([_ISOC11_SOURCE], [1], [Extensions to ISO C99 from ISO C11.])
    AC_DEFINE([_POSIX_SOURCE], [1], [IEEE Std 1003.1.])
    AC_DEFINE([_POSIX_C_SOURCE], [200809L], [IEEE Std 1003.1.])
    AC_DEFINE([_XOPEN_SOURCE], [700], [POSIX and XPG 7th edition])
    AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [XPG things and X/Open Unix extensions.])
    AC_DEFINE([_BSD_SOURCE], [1], [ISO C, POSIX, and 4.3BSD things.])
    AC_DEFINE([_SVID_SOURCE], [1], [ISO C, POSIX, and SVID things.])
gbazin's avatar
 
gbazin committed

    case "${host_os}" in
      *mingw32*)
gbazin's avatar
 
gbazin committed
        SYS=mingw32
        ;;
      *cygwin*)
gbazin's avatar
 
gbazin committed
        dnl Check if we are using the mno-cygwin mode in which case we are
        dnl actually dealing with a mingw32 compiler.
        AC_EGREP_CPP(yes,
gbazin's avatar
 
gbazin committed
             yes
             #endif],
            SYS=mingw32, AC_MSG_ERROR([VLC requires -mno-cygwin]))
gbazin's avatar
 
gbazin committed
        ;;
    esac

    if test "${SYS}" = "mingw32"; then
        # DEP, ASLR, NO SEH
        LDFLAGS="${LDFLAGS} -Wl,--nxcompat -Wl,--no-seh -Wl,--dynamicbase"

        AC_CHECK_PROGS(U2D, [unix2dos todos], unix2dos)
        ac_default_prefix="`pwd`/_win32"
        DESTDIR="`pwd`/_win32/"
Ludovic Fauvet's avatar
Ludovic Fauvet committed
        dnl NSIS/MSI Installer prefix and WIN64
        case "${host_cpu}" in
Ludovic Fauvet's avatar
Ludovic Fauvet committed
                WINDOWS_ARCH="x64"
                PROGRAMFILES="PROGRAMFILES64"
                LDFLAGS="${LDFLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x140000000"
Ludovic Fauvet's avatar
Ludovic Fauvet committed
                WINDOWS_ARCH="x86"
                PROGRAMFILES="PROGRAMFILES"
                X86ASMFLAGS="-f win32"
                X86ASMDEFS="${X86ASMDEFS} -DPREFIX"
        AC_SUBST([WINDOWS_ARCH])
        AC_SUBST([PROGRAMFILES])
gbazin's avatar
 
gbazin committed
    fi
  *nto*)
  solaris*)
  hpux*)
  *os2*)
    SYS=os2
    LDFLAGS="${LDFLAGS} -Zomf -Zbin-files -Zargs-wild -Zhigh-mem"
    AC_LIBOBJ([freeaddrinfo])
    AC_LIBOBJ([gai_strerror])
    AC_CHECK_FUNCS([if_nametoindex])
  *nacl*)
    SYS=nacl
    AC_DEFINE([_XOPEN_SOURCE], [700], [POSIX and XPG 7th edition])
    AC_LIBOBJ([sigwait])
    AC_LIBOBJ([recvmsg])
    AC_LIBOBJ([sendmsg])
    SYS="${host_os}"
gbazin's avatar
 
gbazin committed
esac
AC_ARG_ENABLE([winstore_app],
     AS_HELP_STRING([--enable-winstore-app],
                    [Build targetted for Windows Store apps (default disabled)]))

vlc_winstore_app=0
AS_IF([test "${SYS}" = "mingw32"],[
  AS_IF([test "${enable_winstore_app}" = "yes"], [
    vlc_winstore_app=1
     VLC_ADD_LIBS([libvlccore], [-lruntimeobject])
  AC_SUBST([LIBCOM])
  ])
AC_DEFINE_UNQUOTED(VLC_WINSTORE_APP, ${vlc_winstore_app}, [Define to 1 if you want to build for Windows Store apps])

AM_CONDITIONAL([HAVE_LINUX],   [test "${SYS}" = "linux"])
AM_CONDITIONAL([HAVE_OS2],     [test "${SYS}" = "os2"])
AM_CONDITIONAL([HAVE_DARWIN],  [test "${SYS}" = "darwin"])
AM_CONDITIONAL([HAVE_IOS],     [test "${HAVE_IOS}" = "1"])
AM_CONDITIONAL([HAVE_OSX],     [test "${HAVE_OSX}" = "1"])
AM_CONDITIONAL([HAVE_TVOS],    [test "${HAVE_TVOS}" = "1"])
AM_CONDITIONAL([HAVE_NACL],    [test "${SYS}" = "nacl"])
AM_CONDITIONAL([HAVE_LIBANL],  [test "${HAVE_LIBANL}" = "1"])
AM_CONDITIONAL([HAVE_WIN32],   [test "${SYS}" = "mingw32"])
AM_CONDITIONAL([HAVE_WIN64],   [test "${HAVE_WIN64}" = "1"]) dnl Only used for the packaging
AM_CONDITIONAL([HAVE_WINSTORE], [test "$vlc_winstore_app" = "1"])
AM_CONDITIONAL([HAVE_WIN32_DESKTOP], [test "${SYS}" = "mingw32" -a "$vlc_winstore_app" = "0"])
dnl Use nasm/yasm only on x86
AC_CHECK_PROGS(X86ASM, [nasm yasm])
AM_CONDITIONAL([HAVE_X86ASM], [test -n "${X86ASM}" && test -n "${X86ASMFLAGS}"])
AM_COND_IF([HAVE_X86ASM], [
  AC_DEFINE([HAVE_X86ASM], [1], [Use external asm on x86.])
])
AC_SUBST([X86ASMFLAGS])
AC_SUBST([X86ASMDEFS])

dnl
dnl Sadly autoconf does not think about testing foo.exe when ask to test
dnl for program foo on win32
case "${build_os}" in
    cygwin|msys|mingw32)
        ac_executable_extensions=".exe"
    os2*)
        BUILDEXEEXT=".exe"
    ;;
AC_SUBST([BUILDEXEEXT])

dnl Android is linux, but a bit different
AS_IF([test "$SYS" = linux],[
    AC_MSG_CHECKING([for an Android system])
    AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
        [[#ifndef __ANDROID__
         # error Not Android
         #endif
        ]],[[;]])
    ],[
      HAVE_ANDROID="1"
      AC_MSG_RESULT([yes])
    ],[
      AC_MSG_RESULT([no])
    ])
])
AM_CONDITIONAL([HAVE_ANDROID], [test "${HAVE_ANDROID}" = "1"])
dnl Tizen (minimum SDK version: 2.3)
AS_IF([test "$SYS" = linux],[
    AC_MSG_CHECKING([for Tizen])
    AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
        [[#include <tizen.h>
        ]],[[;]])
    ],[
      HAVE_TIZEN="1"
      AC_DEFINE([HAVE_TIZEN_SDK], [1], [Define to 1 if vlc is built against Tizen SDK])
      AC_MSG_RESULT([yes])
    ],[
      AC_MSG_RESULT([no])
    ])
])
AM_CONDITIONAL([HAVE_TIZEN], [test "${HAVE_TIZEN}" = "1"])
dnl
dnl  Check for the contrib directory
dnl
AC_ARG_WITH(contrib,
  AS_HELP_STRING([--with-contrib[=DIR]],
    [search for 3rd party libraries in DIR/include and DIR/lib])
AC_MSG_CHECKING([for 3rd party libraries path])
AS_IF([test -z "${with_contrib}" || test "${with_contrib}" = "yes"], [
  CONTRIB_DIR="${srcdir}/contrib/${host}"
  AS_IF([test ! -d "${CONTRIB_DIR}"], [
    echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
    CONTRIB_DIR="${srcdir}/contrib/`$CC -dumpmachine`"
    AS_IF([test ! -d "${CONTRIB_DIR}"], [
      echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
      CONTRIB_DIR=""
      AC_MSG_RESULT([not found])
    ])
  ])
], [
  AS_IF([test "${with_contrib}" != "no"], [
    CONTRIB_DIR="${with_contrib}"
  ], [
    CONTRIB_DIR=""
    AC_MSG_RESULT([disabled])
  ])
])
AS_IF([test -n "${CONTRIB_DIR}"], [
  AS_IF([test -d "${CONTRIB_DIR}/lib"],[
    CONTRIB_DIR=`cd "${CONTRIB_DIR}" && pwd`
  ], [
    echo "${CONTRIB_DIR}/lib not found" >&AS_MESSAGE_LOG_FD
    CONTRIB_DIR=""
    AC_MSG_RESULT([not usable])
  ])

])
AS_IF([test -n "${CONTRIB_DIR}"], [
  AC_MSG_RESULT([${CONTRIB_DIR}])
  CPPFLAGS="${CPPFLAGS} -I${CONTRIB_DIR}/include"
  CFLAGS="${CFLAGS} -I${CONTRIB_DIR}/include"
  CXXFLAGS="${CXXFLAGS} -I${CONTRIB_DIR}/include"
  OBJCFLAGS="${OBJCFLAGS} -I${CONTRIB_DIR}/include -F${CONTRIB_DIR} -F${CONTRIB_DIR}/Frameworks"
  export PKG_CONFIG_PATH="${CONTRIB_DIR}/lib/pkgconfig:${CONTRIB_DIR}/share/pkgconfig:$PKG_CONFIG_PATH"
  LDFLAGS="${LDFLAGS} -L${CONTRIB_DIR}/lib"
  AS_IF([test -z "$LUAC"], [
    dnl Old contribs mixed cross-tools and cross-compiled executables
    AS_IF([test -x "${CONTRIB_DIR}/bin/luac${BUILDEXEEXT}"], [
      LUAC="${CONTRIB_DIR}/bin/luac${BUILDEXEEXT}"
    ])

    dnl Newer contribs follow usual name space rules
    AS_IF([test -x "${CONTRIB_DIR}/../bin/${host_alias}-luac${BUILDEXEEXT}"], [
      LUAC="${CONTRIB_DIR}/../bin/${host_alias}-luac${BUILDEXEEXT}"
  AS_IF([test "${SYS}" = "darwin"], [
    export LD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$LD_LIBRARY_PATH"
    export DYLD_LIBRARY_PATH="${CONTRIB_DIR}/lib:$DYLD_LIBRARY_PATH"
  ])
], [
  AS_IF([test -n "${with_contrib}" && test "${with_contrib}" != "no"], [
    AC_MSG_ERROR([Third party libraries not found!])
  ])
])
AC_SUBST([CONTRIB_DIR])
dnl Add extras/tools to the PATH
TOOLS_DIR="${srcdir}/extras/tools/build/bin"
AS_IF([test -d "${TOOLS_DIR}"], [
    TOOLS_DIR=`cd "${TOOLS_DIR}" && pwd`
    export PATH="${TOOLS_DIR}":$PATH
dnl  Libtool
dnl  It's very bad, but our former custom system was worst
dnl  -- Courmisch
dnl
damienf's avatar
damienf committed

dnl override platform specific check for dependent libraries
dnl otherwise libtool linking of shared libraries will
dnl fail on anything other than pass_all.
damienf's avatar
damienf committed
AC_CACHE_VAL(lt_cv_deplibs_check_method,
    [lt_cv_deplibs_check_method=pass_all])
LT_INIT([dlopen win32-dll shared disable-static])
LT_LANG([C++])
LT_LANG([Windows Resource])
Luca Barbato's avatar
Luca Barbato committed
DOLT

damienf's avatar
damienf committed
lt_cv_deplibs_check_method=pass_all

AS_IF([test "${enable_shared}" = "no" -a "${enable_vlc}" != "no"], [
  AC_MSG_ERROR([VLC is based on plugins. Shared libraries cannot be disabled.])
])

AM_GNU_GETTEXT_VERSION([0.19.8])
AM_GNU_GETTEXT([external], [need-formatstring-macros])
gbazin's avatar
gbazin committed
dnl
dnl Iconv stuff
dnl
dnl
dnl checks for mingw
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
AS_IF([test "${SYS}" = "mingw32"], [
AC_PREPROC_IFELSE([AC_LANG_SOURCE([
#if !defined(__MINGW32__)
# error Not compiling with mingw
#endif
    ])], [

dnl Check for broken versions of mingw-runtime compatability library
    AC_MSG_CHECKING(for broken mingw-runtime)
    AC_PREPROC_IFELSE([AC_LANG_SOURCE([
#if defined(__MINGW64_VERSION_MAJOR)
# if __MINGW64_VERSION_MAJOR < 5
#  error Update your mingw-w64! This one is too old.
#else
# error You cannot compile with Mingw. Use Mingw-w64!
        AC_MSG_ERROR([LibVLC requires Mingw-w64 version 5.0 or higher!])
    dnl force use of mingw provided c99 *printf over msvcrt
    CPPFLAGS="${CPPFLAGS} -D__USE_MINGW_ANSI_STDIO=1"

    dnl Check for the need to include the mingwex lib for mingw32
    VLC_SAVE_FLAGS
    AC_CHECK_LIB([mingwex], [opendir],
        AC_CHECK_LIB([mingw32], [opendir],,
            [VLC_ADD_LIBS([libvlccore],[-lmingwex])])
gbazin's avatar
 
gbazin committed
    )
    VLC_RESTORE_FLAGS
    ], [
        AC_MSG_RESULT([Not compiling with mingw])
    ])
gbazin's avatar
 
gbazin committed

    dnl Check for fnative-struct or mms-bitfields support for mingw32
    AX_CHECK_COMPILE_FLAG([-mms-bitfields], [
        AX_APPEND_FLAG([-mms-bitfields], [CFLAGS])
        AX_APPEND_FLAG([-mms-bitfields], [CXXFLAGS])
        # Check for the warning flag without "-Wno-", GCC accepts
        # -Wno-<anything> for unsupported warnings, which can trigger
        # other warnings instead.
        AX_CHECK_COMPILE_FLAG([-Wincompatible-ms-struct], [
            AX_APPEND_FLAG([-Wno-incompatible-ms-struct], [CFLAGS])
            AX_APPEND_FLAG([-Wno-incompatible-ms-struct], [CXXFLAGS])
        ])
    ], [
        AX_CHECK_COMPILE_FLAG([-fnative-struct], [
            AX_APPEND_FLAG([-fnative-struct], [CFLAGS])
            AX_APPEND_FLAG([-fnative-struct], [CXXFLAGS])
        ])
    ])
gbazin's avatar
 
gbazin committed

dnl
dnl Buggy glibc prevention. Purposedly not cached.
dnl See sourceware.org bugs 5058 and 5443.
dnl Ubuntu alone has 20 bug numbers for this...
dnl
AC_MSG_CHECKING(for buggy GNU/libc versions)
AC_PREPROC_IFELSE([AC_LANG_SOURCE([
#include <limits.h>
#if defined (__GLIBC__) && (__GLIBC__ == 2) \
  && (__GLIBC_MINOR__ >= 5) && (__GLIBC_MINOR__ <= 7)
# error GNU/libc with dcgettext killer bug!
#endif
  AC_MSG_RESULT([not present])
], [
  AC_MSG_RESULT([found])
  AS_IF([test "x${enable_nls}" != "xno"], [
    AC_MSG_ERROR([Buggy GNU/libc (version 2.5 - 2.7) present. VLC would crash; there is no viable
work-around for this. Check with your distribution vendor on how to update the
glibc run-time. Alternatively, build with --disable-nls.])
dnl Plugin compilation stuff

VLC_LIBRARY_SUFFIX

dnl Check for system libs needed
AC_CHECK_FUNCS([accept4 daemon fcntl flock fstatvfs fork getenv getpwuid_r isatty memalign mkostemp mmap open_memstream newlocale openat pipe2 pread posix_fadvise posix_madvise posix_memalign setlocale stricmp strnicmp strptime uselocale])
Thomas Guillem's avatar
Thomas Guillem committed
AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir flockfile fsync getdelim getpid lfind lldiv memrchr nrand48 poll recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy tfind timegm timespec_get strverscmp pathconf])
AC_REPLACE_FUNCS([gettimeofday])
AC_CHECK_FUNC(fdatasync,,
  [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
])
Samuel Hocevar's avatar
 
Samuel Hocevar committed

VLC_REPLACE_DECL([realpath], [#include <stdlib.h>])

dnl mingw64 implements those as static inline, not functions with C linkage
VLC_REPLACE_DECL([asprintf], [#include <stdio.h>])
VLC_REPLACE_DECL([vasprintf], [#include <stdio.h>])
VLC_REPLACE_DECL([gmtime_r], [#include <time.h>])
VLC_REPLACE_DECL([localtime_r], [#include <time.h>])
dnl C11 static_assert()
AC_MSG_CHECKING([for static_assert in assert.h])
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <assert.h>], [
static_assert(1, "The impossible happened.");
])], [
  AC_MSG_RESULT([yes])
  AC_DEFINE([HAVE_STATIC_ASSERT], [1], [Define to 1 if <assert.h> defines static_assert.])
], [
  AC_MSG_RESULT([no])
])

Rafaël Carré's avatar
Rafaël Carré committed
# Windows CE does not have strcoll()
AC_FUNC_STRCOLL

dnl Check for non-standard system calls
    AC_CHECK_FUNCS([eventfd vmsplice sched_getaffinity recvmmsg memfd_create])
  "mingw32")
    AC_CHECK_FUNCS([_lock_file])
    ;;
dnl Check for struct pollfd
AC_CHECK_TYPES([struct pollfd],,,
[#include <sys/types.h>
#if HAVE_POLL
# include <poll.h>
#elif defined (_WIN32)
dnl Check for struct timespec
AC_CHECK_TYPES([struct timespec],,,
[#include <time.h>])

dnl Check for max_align_t
AC_CHECK_TYPES([max_align_t],,,
[#include <stddef.h>])

dnl Checks for socket stuff
SOCKET_LIBS=""
AC_SEARCH_LIBS(connect, [socket], [
  AS_IF([test "$ac_cv_search_connect" != "none required"], [
    SOCKET_LIBS="$ac_cv_search_connect"
  ])
], [
  AS_IF([test "${SYS}" = "mingw32"], [
    SOCKET_LIBS="-lws2_32 -liphlpapi"
AC_SEARCH_LIBS([inet_pton], [nsl], [
Fabrizio Ge's avatar
Fabrizio Ge committed
 AS_IF([test "$ac_cv_search_inet_pton" != "none required"], [
    SOCKET_LIBS="$ac_cv_search_inet_pton $SOCKET_LIBS"
  ])
],, [${SOCKET_LIBS}])

LIBS="${LIBS} ${SOCKET_LIBS}"
AC_LINK_IFELSE([
    AC_LANG_PROGRAM([#ifdef _WIN32
        #include <ws2tcpip.h>
        #include <windows.h>
        # if _WIN32_WINNT < 0x600
        #  error Needs vista+
        # endif
        #include <arpa/inet.h>
        #endif], [
        char dst[[sizeof(struct in_addr)]];
        inet_pton(AF_INET, "127.0.0.1", dst);
    ])],[AC_DEFINE([HAVE_INET_PTON],[1],[Define to 1 if you have inet_pton function])],[AC_LIBOBJ([inet_pton])])
AC_CHECK_TYPES([struct if_nameindex],,,[#include <net/if.h>])
AC_CHECK_FUNCS([if_nameindex])
AC_SUBST([SOCKET_LIBS])
dnl Check for socklen_t
AH_TEMPLATE(socklen_t, [Define to `int' if <sys/socket.h> does not define.])
Rafaël Carré's avatar
Rafaël Carré committed
AC_CACHE_CHECK([for socklen_t in sys/socket.h], dnl ` (fix VIM syntax highlight
ac_cv_type_socklen_t,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
# include <winsock2.h>
# include <ws2tcpip.h>
#endif]], [[socklen_t len; len = 0;]])],
ac_cv_type_socklen_t=yes,
ac_cv_type_socklen_t=no)])
AS_IF([test "$ac_cv_type_socklen_t" = no],
 [AC_DEFINE(socklen_t, int)])
dnl Check for struct sockaddr_storage
Rafaël Carré's avatar
Rafaël Carré committed
AH_TEMPLATE(sockaddr_storage, [Define to `sockaddr' if <sys/socket.h> does not define.]) dnl ` (fix VIM syntax highlight
AH_TEMPLATE(ss_family, [Define to `sa_family' if <sys/socket.h> does not define.]) dnl ` (fix VIM syntax highlight
AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_struct_sockaddr_storage,
  [AC_TRY_COMPILE(
    [#include <sys/types.h>
     #if defined( _WIN32 )
     # include <winsock2.h>
     #else
     # include <sys/socket.h>
     #endif], [struct sockaddr_storage addr;],
     ac_cv_struct_sockaddr_storage=yes,
     ac_cv_struct_sockaddr_storage=no)])
AS_IF([test "${ac_cv_struct_sockaddr_storage}" = no], [
  AC_DEFINE(sockaddr_storage, sockaddr)
  AC_DEFINE(ss_family, sa_family)
dnl FreeBSD has a gnugetopt library for this:
GNUGETOPT_LIBS=""
AC_CHECK_FUNC(getopt_long,, [
  AC_CHECK_LIB([gnugetopt],[getopt_long], [
    GNUGETOPT_LIBS="-lgnugetopt"
  ])
])
AC_SUBST([GNUGETOPT_LIBS])
Samuel Hocevar's avatar
 
Samuel Hocevar committed

AC_CHECK_LIB([m], [cos], [
  LIBM="-lm"
], [
  LIBM=""
AC_SUBST([LIBM])
Samuel Hocevar's avatar
 
Samuel Hocevar committed

AC_CHECK_LIB([m], [lrintf], [
  AC_DEFINE(HAVE_LRINTF, 1, [Define to 1 if you have the lrintf function])
  VLC_ADD_LIBS([skins2],[-lm])
])
AC_CHECK_LIB([m], [nanf],
  AC_DEFINE(HAVE_NANF, 1, [Define to 1 if you have the NANF function])
)
AC_CHECK_LIB([m], [sincos], [
  AC_DEFINE(HAVE_SINCOS, 1, [Define to 1 if you have the sincos function.])
], [
  AC_LIBOBJ([sincos])
])
AC_MSG_CHECKING([broken qsort_r prototype])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <stdlib.h>

_Static_assert(_Generic((qsort_r),
    void (*)(void *, size_t, size_t, void *,
             int (*)(void *, const void *, const void *)) : 1, default: 0),
    "Bad prototype not matched");
])], [
  AC_MSG_RESULT([broken])
  AC_DEFINE([HAVE_BROKEN_QSORT_R], 1, [Defined to 1 if the qsort_r() prototype contradicts the upcoming POSIX standard.])
], [
  AC_MSG_RESULT([no])
])

AC_MSG_CHECKING([_Thread_local support])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([_Thread_local int foo = 0;
                   int main() {}])], [
    AC_MSG_RESULT([ok])
    AC_DEFINE(HAVE_THREAD_LOCAL, 1, [Defined to 1 if C11 _Thread_local storage qualifier is supported])
],[ AC_MSG_RESULT([no])])

dnl __STDC_NO_THREADS__ can't be trusted on some platforms.
dnl check for its availability explicitely
AC_CHECK_HEADERS([threads.h])

AC_CHECK_LIB([anl],[getaddrinfo_a],[
  AC_DEFINE(HAVE_LIBANL, 1, [Define to 1 if you have the anl library])
])

Samuel Hocevar's avatar
Samuel Hocevar committed
dnl Check for dynamic plugins
LIBDL=""
have_dynamic_objects="no"
AC_SEARCH_LIBS(dlsym, [dl svld], [
  AS_IF([test "$ac_cv_search_dlsym" != "none required"], [
    LIBDL="$ac_cv_search_dlsym"
  have_dynamic_objects="yes"
Samuel Hocevar's avatar
Samuel Hocevar committed

# Windows
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
AS_IF([test "${SYS}" = "mingw32"], [
  LIBDL=""
  have_dynamic_objects="yes" #assume we can use shared objects
AC_ARG_WITH([libfuzzer],
    AS_HELP_STRING([--with-libfuzzer=DIR],
        [use libFuzzer library from DIR and triggers sanitize coverage (default disabled)]),
     [],
     [with_libfuzzer=no])
AS_VAR_IF(with_libfuzzer, no, [], [
    enable_shared=no
    enable_static=yes
    enable_vlc=no
])
AM_CONDITIONAL([HAVE_LIBFUZZER], [test "${with_libfuzzer}" != "no"])
AS_IF([test "${enable_shared}" = "no"], [
  have_dynamic_objects=no
AM_CONDITIONAL([HAVE_DYNAMIC_PLUGINS], [test "${have_dynamic_objects}" != "no"])
Rafaël Carré's avatar
Rafaël Carré committed

AC_SUBST([LIBDL])
Samuel Hocevar's avatar
Samuel Hocevar committed

AS_IF([test "${SYS}" != "mingw32"], [
  AC_SEARCH_LIBS([clock_nanosleep], [rt pthread], [
    AS_IF([test "$ac_cv_search_clock_nanosleep" != "none required"], [
      LIBRT="$ac_cv_search_clock_nanosleep"
    ])
  ], [
    AC_SEARCH_LIBS([nanosleep], [rt pthread posix4], [
      AS_IF([test "$ac_cv_search_nanosleep" != "none required"], [
        LIBRT="$ac_cv_search_nanosleep"
      ])
AC_SUBST([LIBRT])
gbazin's avatar
 
gbazin committed

Samuel Hocevar's avatar
 
Samuel Hocevar committed
dnl Check for headers
AC_CHECK_HEADERS([arpa/inet.h pthread.h search.h sys/shm.h sys/socket.h sys/uio.h])
AC_CHECK_HEADERS([net/if.h], [], [],
[
#include <sys/types.h>
#include <sys/socket.h>
])
AC_CHECK_HEADER([syslog.h], [have_syslog="yes"], [have_syslog="no"])
AM_CONDITIONAL([HAVE_SYSLOG], [test "$have_syslog" = "yes"])

AC_CHECK_HEADERS([netinet/tcp.h netinet/udplite.h sys/param.h sys/mount.h])
dnl  GNU/Linux
AC_CHECK_HEADERS([features.h getopt.h linux/dccp.h linux/magic.h mntent.h sys/eventfd.h])
dnl  MacOS
AC_CHECK_HEADERS([xlocale.h])
Samuel Hocevar's avatar
 
Samuel Hocevar committed

dnl Check if C++ headers define locale_t
AC_LANG_PUSH(C++)
AC_CACHE_CHECK([if C++ headers define locale_t],
  [ac_cv_cxx_locale_t],
  [ac_cv_cxx_locale_t=no
   AC_TRY_COMPILE([#include <locale>], [locale_t loc;],
                    [ac_cv_cxx_locale_t=yes])])
if test "${ac_cv_cxx_locale_t}" != "no"; then
  AC_DEFINE(HAVE_CXX_LOCALE_T, 1, Define to 1 if C++ headers define locale_t)
fi
AC_LANG_POP(C++)

dnl LP64 and LLP64 architectures had better define ssize_t by themselves...
Rafaël Carré's avatar
Rafaël Carré committed
AH_TEMPLATE(ssize_t, [Define to `int' if <stddef.h> does not define.]) dnl ` (fix VIM syntax highlight
AC_CHECK_TYPE(ssize_t,, [
  AC_DEFINE(ssize_t, int)
])

Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
dnl It seems that autoconf detects pkg-config only during the first
dnl PKG_CHECK_MODULES from configure.ac - which makes sense. But in our case,
dnl it is nested within a conditional block, so it was not working right.
dnl Make PKG_CONFIG_PATH precious so that it appears in the help and get saved
AC_ARG_VAR(PKG_CONFIG_PATH,
       [Paths where to find .pc not at the default location])
PKG_PROG_PKG_CONFIG()

dnl On some OS we need static linking
AS_IF([test -n "${PKG_CONFIG}" ],[
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
    AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "darwin" -o "${SYS}" = "os2" ],[
        PKG_CONFIG="${PKG_CONFIG} --static"
    ])
])
dnl Check for zlib.h and -lz if available
AC_CHECK_HEADERS([zlib.h], [ have_zlib=yes ], [ have_zlib=no ])
AM_CONDITIONAL([HAVE_ZLIB], [ test "${have_zlib}" = "yes" ])
if test "${have_zlib}" = "yes"
then
  VLC_ADD_LIBS([sap],[-lz])
dnl
dnl Domain name i18n support via GNU libidn
dnl
PKG_CHECK_MODULES([IDN], [libidn], [
  have_libidn="yes"
  AC_DEFINE([HAVE_IDN], 1, [Define to 1 if you have GNU libidn.])
], [
  have_libidn="no"
])


  AS_HELP_STRING([--enable-dbus],
    [compile D-Bus message bus support (default enabled)]))
have_dbus="no"
AS_IF([test "${enable_dbus}" != "no"], [
  PKG_CHECK_MODULES(DBUS, [dbus-1 >= 1.6.0], [
    have_dbus="yes"
  ], [
    AS_IF([test -n "${enable_dbus}"], [
      AC_MSG_ERROR([${DBUS_PKG_ERRORS}.])
    ], [
      AC_MSG_WARN([${DBUS_PKG_ERRORS}.])
    ])
  ])
])
AM_CONDITIONAL([HAVE_DBUS], [test "${have_dbus}" = "yes"])

dnl Check for systemd
PKG_CHECK_MODULES([SYSTEMD], [libsystemd], [
  have_systemd="yes"
], [
  AC_MSG_WARN([${SYSTEMD_PKG_ERRORS}.])
])
AM_CONDITIONAL([HAVE_SYSTEMD], [test "${have_systemd}" = "yes"])


EXTEND_HELP_STRING([Optimization options:])
dnl
dnl  Compiler warnings
dnl
Samuel Hocevar's avatar
 
Samuel Hocevar committed

AX_APPEND_COMPILE_FLAGS([-Wall -Wextra -Wsign-compare -Wundef -Wpointer-arith -Wvolatile-register-var -Wformat -Wformat-security -Wduplicated-branches -Wduplicated-cond], [CFLAGS])
AX_APPEND_COMPILE_FLAGS([-Wall -Wextra -Wsign-compare -Wundef -Wpointer-arith -Wvolatile-register-var -Wformat -Wformat-security -Wduplicated-branches -Wduplicated-cond], [CXXFLAGS])
AX_APPEND_COMPILE_FLAGS([-Wbad-function-cast -Wwrite-strings -Wmissing-prototypes -Werror-implicit-function-declaration -Winit-self -Wlogical-op -Wshadow=local -Wmultistatement-macros], [CFLAGS])
AX_APPEND_COMPILE_FLAGS([-pipe], [CFLAGS])
Samuel Hocevar's avatar
 
Samuel Hocevar committed

AC_ARG_ENABLE([debug],
  AS_HELP_STRING([--enable-debug],
    [build with run-time assertions (default disabled)]),,
  [enable_debug="no"])
AH_TEMPLATE(NDEBUG,
            [Define to 1 if debug code should NOT be compiled])
AS_IF([test "${enable_debug}" != "no"], [
  AC_CHECK_HEADERS([valgrind/valgrind.h])
], [
  AC_DEFINE(NDEBUG)
])

dnl
dnl  Profiling
dnl
AC_ARG_ENABLE([gprof],
  AS_HELP_STRING([--enable-gprof],[profile with gprof (default disabled)]),,
  [enable_gprof="no"])
AS_IF([test "${enable_gprof}" != "no"], [
  CFLAGS="${CFLAGS} -pg"