configure.ac 125 KB
Newer Older
1
dnl Autoconf settings for vlc
2

Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
3
AC_COPYRIGHT([Copyright 1999-2016 VLC authors and VideoLAN])
4

5 6 7
AC_INIT(vlc, 3.0.0-git)
VERSION_MAJOR=3
VERSION_MINOR=0
8 9
VERSION_REVISION=0
VERSION_EXTRA=0
10
VERSION_DEV=git
11

12 13
PKGDIR="vlc"
AC_SUBST(PKGDIR)
14

15
CONFIGURE_LINE="`echo "$0 $ac_configure_args" | sed -e 's/\\\/\\\\\\\/g'`"
16
CODENAME="Vetinari"
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
17
COPYRIGHT_YEARS="1996-2016"
18

19
AC_CONFIG_SRCDIR(src/libvlc.c)
20
AC_CONFIG_AUX_DIR(autotools)
21
AC_CONFIG_MACRO_DIR(m4)
22
AC_CONFIG_LIBOBJ_DIR(compat)
23
AC_CANONICAL_BUILD
24
AC_CANONICAL_HOST
25
AC_PRESERVE_HELP_ORDER
26

27
AM_INIT_AUTOMAKE(tar-ustar color-tests foreign)
28
AC_CONFIG_HEADERS([config.h])
29

30
AM_SILENT_RULES([yes])
31
AM_MAINTAINER_MODE([enable])
32

33 34 35 36 37 38 39 40 41 42
dnl
dnl Directories
dnl
dnl vlcincludedir="\${includedir}/\${PKGDIR}"
dnl AC_SUBST(vlcincludedir)
vlcdatadir="\${datadir}/\${PKGDIR}"
AC_SUBST(vlcdatadir)
vlclibdir="\${libdir}/\${PKGDIR}"
AC_SUBST(vlclibdir)

Sam Hocevar's avatar
Sam Hocevar committed
43
dnl
44
dnl Check for tools
Sam Hocevar's avatar
Sam Hocevar committed
45
dnl
46
AC_PROG_CC_C99
47
AC_USE_SYSTEM_EXTENSIONS
48
VLC_PROG_CC_C11
49 50
AC_DEFINE([_FORTIFY_SOURCE], 2, [Define to 2 to get glibc warnings.])
AC_DEFINE([_FILE_OFFSET_BITS], 64, [Define to 64 for large files support.])
51 52 53 54 55
AH_TOP([
#ifndef _REENTRANT
# define _REENTRANT
#endif
])
56 57
AC_DEFINE([_THREAD_SAFE],, [Same as _REENTANT for some other OSes.])
AC_DEFINE([__LIBVLC__],, [Define within the LibVLC source code tree.])
58
AC_DEFINE([WIN32_LEAN_AND_MEAN],, [Define to limit the scope of <windows.h>.])
59

60 61
AM_PROG_CC_C_O
AC_PROG_CXX
62
AC_PROG_CPP
63 64 65
AC_PROG_OBJC
_AM_DEPENDENCIES([OBJC])
AC_PROG_EGREP
66 67
AC_PROG_MAKE_SET
AC_PROG_INSTALL
68
AM_PROG_AS
69

70 71
AC_ARG_VAR([DESKTOP_FILE_VALIDATE], [Validator for desktop entry files])
AC_CHECK_PROGS(DESKTOP_FILE_VALIDATE, [${DESKTOP_FILE_VALIDATE} desktop-file-validate], :)
72
AC_ARG_VAR([BUILDCC], [Build system C11 or C99 compiler command])
73
AC_CHECK_PROGS(BUILDCC, [c11-gcc c11 c99-gcc c99], [false])
74
AS_IF([test "$BUILDCC" = "false"], [
75 76
  AC_MSG_ERROR([Cannot find native C99 compiler: please define BUILDCC.])
])
77

78 79 80
dnl Check for compiler properties
AC_C_CONST
AC_C_INLINE
81
AC_C_RESTRICT
82
AX_CXX_COMPILE_STDCXX_11(noext, mandatory)
83

84 85 86
dnl Extend the --help string at the current spot.
AC_DEFUN([EXTEND_HELP_STRING], [m4_divert_once([HELP_ENABLE], [$1])])

87
dnl Allow binary package maintainer to pass a custom string to avoid
88
dnl cache problem
89
AC_ARG_WITH(binary-version,
90 91
    AS_HELP_STRING([--with-binary-version=STRING],
         [To avoid plugins cache problem between binary version]),[],[])
92
AS_IF([test -n "${with_binary_version}"],[
93 94 95
    AC_DEFINE_UNQUOTED([DISTRO_VERSION],["${with_binary_version}"],
         [Binary specific version])
])
96

97 98 99
dnl
dnl  Check the operating system
dnl
100
HAVE_WIN64="0"
101 102
HAVE_IOS="0"
HAVE_OSX="0"
103
HAVE_TVOS="0"
104

105
case "${host_os}" in
106
  "")
107 108
    SYS=unknown
    ;;
109
  linux*)
110 111
    SYS=linux
    ;;
112
  bsdi*)
113
    SYS=bsdi
114
    CFLAGS="${CFLAGS} -pthread"
115
    ;;
116 117
  freebsd*)
    SYS=freebsd
118
    CFLAGS="${CFLAGS} -pthread"
119 120 121 122 123 124 125 126 127 128 129 130 131
    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
132
    ;;
133
  darwin*)
134 135 136 137

    dnl Force gcc "-arch" flag
    ARCH_flag=""
    case "${host}" in
138
      i?86*)
139 140 141 142 143 144 145 146 147 148 149
        ARCH_flag="-arch i386"
      ;;
      ppc64*)
        ARCH_flag="-arch ppc64"
      ;;
      ppc*)
        ARCH_flag="-arch ppc"
      ;;
      x86_64*)
        ARCH_flag="-arch x86_64"
      ;;
150 151
      arm*)
        ac_cv_c_bigendian="no"
152
        ac_cv_c_attribute_packed="no"
153
      ;;
154 155
    esac

156
    SYS=darwin
157
    CFLAGS="${CFLAGS} -D_INTL_REDIRECT_MACROS -std=gnu11 ${ARCH_flag}"
158 159
    CXX="${CXX} -stdlib=libc++ -std=c++11"
    CXXFLAGS="${CXXFLAGS} -D_INTL_REDIRECT_MACROS ${ARCH_flag}"
160
    CPPFLAGS="${CPPFLAGS} ${ARCH_flag}"
161
    OBJCFLAGS="${OBJCFLAGS} -D_INTL_REDIRECT_MACROS -std=gnu11 ${ARCH_flag}"
162
    LDFLAGS="${LDFLAGS} -Wl,-headerpad_max_install_names ${ARCH_flag}"
163
    VLC_ADD_LIBS([libvlc vlc],[-Wl,-undefined,dynamic_lookup,-framework,AppKit])
164
    VLC_ADD_LIBS([libvlccore],[-Wl,-framework,CoreFoundation,-framework,CoreServices])
165

166 167 168 169 170 171 172 173
    AC_EGREP_CPP(yes,
            [#import <TargetConditionals.h>
             #if TARGET_OS_IPHONE
             yes
             #endif],
             [HAVE_IOS="1"],
             [HAVE_OSX="1"])

174 175 176 177 178 179 180 181 182 183
    AC_EGREP_CPP(yes,
            [#import <TargetConditionals.h>
             #if TARGET_OS_TV
             yes
             #endif],
             [HAVE_TVOS="1"
             HAVE_IOS="0"
             HAVE_OSX="0"
             ],)

184
    dnl Allow binaries created on Lion to run on earlier releases
185 186 187 188 189 190
    AC_EGREP_CPP(yes,
           [#import <Cocoa/Cocoa.h>
            #ifdef MAC_OS_X_VERSION_10_7
            yes
            #endif],
            [AC_MSG_RESULT([yes])
191 192 193
            AC_LIBOBJ([getdelim])
            AC_LIBOBJ([strndup])
            AC_LIBOBJ([strnlen])],)
194

195
    dnl
196
    dnl  Handle Mac OS X SDK flags
197 198
    dnl
    AC_ARG_WITH(macosx-sdk,
199 200
      [AS_HELP_STRING([--with-macosx-sdk=DIR],
        [compile using the SDK in DIR])])
201 202 203 204 205 206 207 208
    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
209
    AC_ARG_WITH(macosx-version-min,
210
      [AS_HELP_STRING([--with-macosx-version-min=VERSION],
211 212 213 214 215 216 217
        [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}"
218
    fi
219
    ;;
220
  *mingw32* | *cygwin* | *wince* | *mingwce*)
221 222 223
    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"
224
    AC_CHECK_TOOL(WINDRES, windres, :)
225
    AC_CHECK_TOOL(OBJCOPY, objcopy, :)
226
    AH_TOP([#if defined(_WIN32) && !defined(_WIN32_WINNT)])
227 228
    AH_TOP([# define _WIN32_WINNT 0x0502 /* Windows XP SP2 */])
    AH_TOP([#endif])
229
    AC_DEFINE([_WIN32_IE], 0x0600, [Define to '0x0600' for IE 6.0 (and shell) APIs.])
230 231
    AC_DEFINE([_UNICODE], [1], [Define to 1 for Unicode (Wide Chars) APIs.])
    AC_DEFINE([UNICODE], [1], [Define to 1 for Unicode (Wide Chars) APIs.])
232 233 234 235 236 237 238 239
    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.])
240

241
    case "${host_os}" in
242
      *mingw32*)
243 244
        SYS=mingw32
        ;;
245
      *cygwin*)
246 247 248
        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,
249
            [#ifdef _WIN32
250 251
             yes
             #endif],
252
            SYS=mingw32, AC_MSG_ERROR([VLC requires -mno-cygwin]))
253 254 255
        ;;
    esac

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

260
        AC_CHECK_PROGS(U2D, [unix2dos todos], unix2dos)
261 262
        ac_default_prefix="`pwd`/_win32"
        DESTDIR="`pwd`/_win32/"
263 264

        dnl
Ludovic Fauvet's avatar
Ludovic Fauvet committed
265
        dnl NSIS/MSI Installer prefix and WIN64
266 267
        dnl
        case "${host}" in
268
            amd64*|x86_64*)
269
                HAVE_WIN64="1"
Ludovic Fauvet's avatar
Ludovic Fauvet committed
270
                WINDOWS_ARCH="x64"
271
                PROGRAMFILES="PROGRAMFILES64"
272
                LDFLAGS="${LDFLAGS} -Wl,--high-entropy-va -Wl,--image-base,0x140000000"
273 274
            ;;
            *)
Ludovic Fauvet's avatar
Ludovic Fauvet committed
275
                WINDOWS_ARCH="x86"
276 277 278
                PROGRAMFILES="PROGRAMFILES"
            ;;
        esac
Ludovic Fauvet's avatar
Ludovic Fauvet committed
279
        AC_SUBST(WINDOWS_ARCH)
280 281
        AC_SUBST(PROGRAMFILES)

282
    fi
283
    ;;
284
  *nto*)
285 286
    SYS=nto
    ;;
287
  solaris*)
288 289
    SYS=solaris
    ;;
290
  hpux*)
291 292
    SYS=hpux
    ;;
293 294
  *os2*)
    SYS=os2
295
    LDFLAGS="${LDFLAGS} -Zomf -Zbin-files -Zargs-wild -Zhigh-mem"
296
    AC_LIBOBJ([freeaddrinfo])
297
    AC_LIBOBJ([gai_strerror])
298
    ;;
299
  *)
300
    SYS="${host_os}"
301
    ;;
302
esac
303 304 305 306 307 308 309 310

dnl WinRT
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"],[
311
  LIBCOM="-lole32"
312 313
  AS_IF([test "${enable_winstore_app}" = "yes"], [
    vlc_winstore_app=1
314
    LIBCOM=""
315
     VLC_ADD_LIBS([libvlccore], [-lruntimeobject])
316 317 318 319
     AC_LIBOBJ([gai_strerror])
    ],[
     VLC_ADD_LIBS([libvlccore],[-lwinmm])
    ])
320
  AC_SUBST(LIBCOM)
321 322 323
  ])
AC_DEFINE_UNQUOTED(VLC_WINSTORE_APP, ${vlc_winstore_app}, [Define to 1 if you want to build for Windows Store apps])

Rémi Duraffort's avatar
Rémi Duraffort committed
324 325
AM_CONDITIONAL(HAVE_LINUX,   test "${SYS}" = "linux")
AM_CONDITIONAL(HAVE_OS2,     test "${SYS}" = "os2")
326 327

AM_CONDITIONAL(HAVE_DARWIN,  test "${SYS}" = "darwin")
328 329 330
AM_CONDITIONAL(HAVE_IOS,     test "${HAVE_IOS}" = "1")
AM_CONDITIONAL(HAVE_OSX,     test "${HAVE_OSX}" = "1")
AM_CONDITIONAL(HAVE_TVOS,    test "${HAVE_TVOS}" = "1")
331

332 333 334
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"])
335
AM_CONDITIONAL([HAVE_WIN32_DESKTOP], [test "${SYS}" = "mingw32" -a "$vlc_winstore_app" = "0"])
336

337 338 339 340
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
341
    cygwin|msys|mingw32)
342 343
        ac_executable_extensions=".exe"
    ;;
344 345 346
    os2*)
        BUILDEXEEXT=".exe"
    ;;
347 348 349
    *)
    ;;
esac
350
AC_SUBST(BUILDEXEEXT)
351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368

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")

369 370 371
dnl Tizen (minimum SDK version: 2.3)
AS_IF([test "$SYS" = linux],[
    AC_MSG_CHECKING([for Tizen])
372 373 374 375
    AC_PREPROC_IFELSE([AC_LANG_PROGRAM(
        [[#include <tizen.h>
        ]],[[;]])
    ],[
376
      HAVE_TIZEN="1"
377
      AC_DEFINE([HAVE_TIZEN_SDK], [1], [Define to 1 if vlc is built against Tizen SDK])
378 379 380 381 382 383
      AC_MSG_RESULT([yes])
    ],[
      AC_MSG_RESULT([no])
    ])
])
AM_CONDITIONAL(HAVE_TIZEN, test "${HAVE_TIZEN}" = "1")
384

385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405
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="${srcdir}/extras/contrib/hosts/${host}"
      AS_IF([test ! -d "${CONTRIB_DIR}"], [
        echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
        CONTRIB_DIR="${srcdir}/extras/contrib/hosts/`$CC -dumpmachine`"
        AS_IF([test ! -d "${CONTRIB_DIR}"], [
          echo "${CONTRIB_DIR} not found" >&AS_MESSAGE_LOG_FD
406 407
          CONTRIB_DIR=""
          AC_MSG_RESULT([not found])
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435
        ])
      ])
    ])
  ])
], [
  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"
436
  export PKG_CONFIG_PATH="${CONTRIB_DIR}/lib/pkgconfig:$PKG_CONFIG_PATH"
437 438
  LDFLAGS="${LDFLAGS} -L${CONTRIB_DIR}/lib"

439 440 441 442 443 444 445
  AS_IF([test -z "$LUAC"], [
    dnl Old contribs mixed cross-tools and cross-compiled executables
    AS_IF([test -x "${CONTRIB_DIR}/bin/luac"], [
      LUAC="${CONTRIB_DIR}/bin/luac"
    ])

    dnl Newer contribs follow usual name space rules
446 447
    AS_IF([test -x "${CONTRIB_DIR}/../bin/${host_alias}-luac"], [
      LUAC="${CONTRIB_DIR}/../bin/${host_alias}-luac"
448 449
    ])
  ])
450

451 452 453 454 455 456 457 458 459 460 461
  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)

462
dnl Add extras/tools to the PATH
463
TOOLS_DIR="${srcdir}/extras/tools/build/bin"
464 465
AS_IF([test -d "${TOOLS_DIR}"], [
    TOOLS_DIR=`cd "${TOOLS_DIR}" && pwd`
466
    export PATH="${TOOLS_DIR}":$PATH
467 468
])

469
dnl
470 471 472 473
dnl  Libtool
dnl  It's very bad, but our former custom system was worst
dnl  -- Courmisch
dnl
474 475 476 477

dnl override platform specific check for dependent libraries
dnl otherwise libtool linking of shared libraries will
dnl fail on anything other than pass_all.
478 479
AC_CACHE_VAL(lt_cv_deplibs_check_method,
    [lt_cv_deplibs_check_method=pass_all])
480

481 482 483
LT_INIT([dlopen win32-dll shared disable-static])
LT_LANG([C++])
LT_LANG([Windows Resource])
484

Luca Barbato's avatar
Luca Barbato committed
485 486
DOLT

487 488
lt_cv_deplibs_check_method=pass_all

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

493 494 495
dnl
dnl Gettext stuff
dnl
496
AM_GNU_GETTEXT_VERSION([0.19.7])
497
AM_GNU_GETTEXT([external], [need-formatstring-macros])
498

499 500 501
dnl
dnl Iconv stuff
dnl
502
AM_ICONV
503

504 505
dnl
dnl checks for mingw
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
506
AS_IF([test "${SYS}" = "mingw32"], [
507

508 509 510 511 512 513
AC_PREPROC_IFELSE([AC_LANG_SOURCE([
#if !defined(__MINGW32__)
# error Not compiling with mingw
#endif
    ])], [

514
dnl Check for broken versions of mingw-runtime compatability library
515
    AC_MSG_CHECKING(for broken mingw-runtime)
516
    AC_PREPROC_IFELSE([AC_LANG_SOURCE([
517
#include <_mingw.h>
518 519 520 521 522
#if defined(__MINGW64_VERSION_MAJOR)
# if __MINGW64_VERSION_MAJOR < 3
#  error Attempting to use mingw-runtime with broken vsnprintf and direct2d support
# endif
#elif __MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION < 15
523 524
# error Attempting to use mingw-runtime with broken vsnprintf support
#endif
525
    ])], [
526
        AC_MSG_RESULT([ok])
527
    ], [
528
        AC_MSG_RESULT([present])
529
        AC_MSG_ERROR([LibVLC requires mingw-runtime version 3.15 or higher, or mingw-w64 version 3.0 or higher!])
530
    ])
531

532 533 534
    dnl force use of mingw provided c99 *printf over msvcrt
    CPPFLAGS="${CPPFLAGS} -D__USE_MINGW_ANSI_STDIO=1"

535 536 537 538
    dnl Add WinMainCRTStartup entry point to show it's a WinMain application
    VLC_ADD_LDFLAGS([vlc],[-mwindows])

    dnl Check for the need to include the mingwex lib for mingw32
539
    VLC_SAVE_FLAGS
540
    AC_CHECK_LIB(mingwex,opendir,
541
        AC_CHECK_LIB(mingw32,opendir,,
542
            [VLC_ADD_LIBS([libvlccore],[-lmingwex])])
543
    )
544
    VLC_RESTORE_FLAGS
545 546 547
    ], [
        AC_MSG_RESULT([Not compiling with mingw])
    ])
548

549
    dnl Check for fnative-struct or mms-bitfields support for mingw32
550 551 552
    VLC_SAVE_FLAGS
    CFLAGS="${CFLAGS} -mms-bitfields"
    CXXFLAGS="${CXXFLAGS} -mms-bitfields"
553 554
    AC_CACHE_CHECK([if \$CC accepts -mms-bitfields],
        [ac_cv_c_mms_bitfields],
555 556 557 558 559
        [AC_TRY_COMPILE([],,ac_cv_c_mms_bitfields=yes, ac_cv_c_mms_bitfields=no)])
    if test "${ac_cv_c_mms_bitfields}" = "no"; then
        VLC_RESTORE_FLAGS
        CFLAGS="${CFLAGS} -fnative-struct"
        CXXFLAGS="${CXXFLAGS} -fnative-struct"
560 561
        AC_CACHE_CHECK([if \$CC accepts -fnative-struct],
            [ac_cv_c_fnative_struct],
562 563
            [AC_TRY_COMPILE([],,ac_cv_c_fnative_struct=yes, ac_cv_c_fnative_struct=no)])
        "${ac_cv_c_fnative_struct}" = "no" && VLC_RESTORE_FLAGS
564
    fi
565
])
566

567

568 569
dnl
dnl Buggy glibc prevention. Purposedly not cached.
570
dnl See sourceware.org bugs 5058 and 5443.
571 572 573
dnl Ubuntu alone has 20 bug numbers for this...
dnl
AC_MSG_CHECKING(for buggy GNU/libc versions)
574
AC_PREPROC_IFELSE([AC_LANG_SOURCE([
575 576 577 578 579
#include <limits.h>
#if defined (__GLIBC__) && (__GLIBC__ == 2) \
  && (__GLIBC_MINOR__ >= 5) && (__GLIBC_MINOR__ <= 7)
# error GNU/libc with dcgettext killer bug!
#endif
580
])], [
581 582 583
  AC_MSG_RESULT([not present])
], [
  AC_MSG_RESULT([found])
584
  AS_IF([test "x${enable_nls}" != "xno"], [
585 586
    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
587
glibc run-time. Alternatively, build with --disable-nls.])
588
  ])
589 590
])

591 592 593 594
dnl Plugin compilation stuff

VLC_LIBRARY_SUFFIX

595
dnl Check for system libs needed
596
need_libc=false
597

598
dnl Check for usual libc functions
599
AC_CHECK_DECLS([nanosleep],,,[#include <time.h>])
Thomas Guillem's avatar
Thomas Guillem committed
600
AC_CHECK_FUNCS([daemon fcntl flock fstatvfs fork getenv getpwuid_r isatty lstat memalign mkostemp mmap open_memstream openat pread posix_fadvise posix_madvise setlocale stricmp strnicmp strptime uselocale pthread_cond_timedwait_monotonic_np pthread_condattr_setclock])
601
AC_REPLACE_FUNCS([atof atoll dirfd fdopendir ffsll flockfile fsync getdelim getpid lldiv memrchr nrand48 poll posix_memalign recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup strnlen strnstr strsep strtof strtok_r strtoll swab tdestroy timegm timespec_get strverscmp])
602
AC_REPLACE_FUNCS([gettimeofday])
603
AC_CHECK_FUNC(fdatasync,,
604 605
  [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if missing.])
])
606

607
dnl mingw64 implements those as static inline, not functions with C linkage
608 609
VLC_REPLACE_DECL([asprintf], [#include <stdio.h>])
VLC_REPLACE_DECL([vasprintf], [#include <stdio.h>])
610 611
VLC_REPLACE_DECL([gmtime_r], [#include <time.h>])
VLC_REPLACE_DECL([localtime_r], [#include <time.h>])
612

613 614
dnl C11 static_assert()
AC_MSG_CHECKING([for static_assert in assert.h])
615 616
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <assert.h>], [
static_assert(1, "The impossible happened.");
617 618 619 620 621 622 623
])], [
  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
624
# Windows CE does not have strcoll()
625 626
AC_FUNC_STRCOLL

627
dnl Check for non-standard system calls
628 629
case "$SYS" in
  "linux")
630
    AC_CHECK_FUNCS([accept4 pipe2 eventfd vmsplice sched_getaffinity recvmmsg])
631
    ;;
632 633 634
  "mingw32")
    AC_CHECK_FUNCS([_lock_file])
    ;;
635
esac
636

637 638
AH_BOTTOM([#include <vlc_fixups.h>])

639 640 641 642 643
dnl Check for struct pollfd
AC_CHECK_TYPES([struct pollfd],,,
[#include <sys/types.h>
#if HAVE_POLL
# include <poll.h>
644
#elif defined (_WIN32)
645 646 647 648
# include <winsock2.h>
#endif
])

649 650 651 652
dnl Check for struct timespec
AC_CHECK_TYPES([struct timespec],,,
[#include <time.h>])

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

657
dnl Checks for socket stuff
658
VLC_SAVE_FLAGS
659 660 661 662 663 664 665 666 667 668
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"
  ])
])
669

670
AC_SEARCH_LIBS([inet_pton], [nsl], [
Fabrizio Ge's avatar
Fabrizio Ge committed
671 672
 AS_IF([test "$ac_cv_search_inet_pton" != "none required"], [
    SOCKET_LIBS="$ac_cv_search_inet_pton $SOCKET_LIBS"
673 674 675
  ])
],, [${SOCKET_LIBS}])

676 677
LIBS="${LIBS} ${SOCKET_LIBS}"
AC_LINK_IFELSE([
678
    AC_LANG_PROGRAM([#ifdef _WIN32
679 680 681
        # if _WIN32_WINNT < 0x600
        #  error Needs vista+
        # endif
682 683
        #include <ws2tcpip.h>
        #else
684
        #include <sys/socket.h>
685 686 687 688 689
        #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])])
690
AC_CHECK_FUNCS([if_nameindex if_nametoindex])
691
VLC_RESTORE_FLAGS
692
AC_SUBST(SOCKET_LIBS)
693

694
dnl Check for socklen_t
695
AH_TEMPLATE(socklen_t, [Define to `int' if <sys/socket.h> does not define.])
696
AC_CACHE_CHECK([for socklen_t in sys/socket.h], dnl ` (fix VIM syntax highlight
697 698
ac_cv_type_socklen_t,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
699
[#include <sys/types.h>
700
#ifdef _WIN32
701
# include <winsock2.h>
702
# include <ws2tcpip.h>
703 704
#else
# include <sys/socket.h>
705 706 707 708 709
#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)])
710

711
dnl Check for struct sockaddr_storage
Rafaël Carré's avatar
Rafaël Carré committed
712 713
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
714 715 716
AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_struct_sockaddr_storage,
  [AC_TRY_COMPILE(
    [#include <sys/types.h>
717
     #if defined( _WIN32 )
718 719 720 721 722 723
     # 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)])
724
AS_IF([test "${ac_cv_struct_sockaddr_storage}" = no], [
725 726
  AC_DEFINE(sockaddr_storage, sockaddr)
  AC_DEFINE(ss_family, sa_family)
727
])
728

729 730 731 732 733 734 735 736
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)
737

Sam Hocevar's avatar
Sam Hocevar committed
738
AC_CHECK_LIB(m,cos,[
739 740 741
  LIBM="-lm"
], [
  LIBM=""
742
])
743
AC_SUBST(LIBM)
744

745 746 747 748
AC_CHECK_LIB(m,lrintf, [
  AC_DEFINE(HAVE_LRINTF, 1, [Define to 1 if you have the lrintf function])
  VLC_ADD_LIBS([skins2],[-lm])
])
749 750 751
AC_CHECK_LIB(m,nanf,
  AC_DEFINE(HAVE_NANF, 1, [Define to 1 if you have the NANF function])
)
752

Sam Hocevar's avatar
Sam Hocevar committed
753
dnl Check for dynamic plugins
754 755
LIBDL=""
have_dynamic_objects="no"
756
VLC_SAVE_FLAGS
757
AC_SEARCH_LIBS(dlsym, [dl svld], [
758 759
  AS_IF([test "$ac_cv_search_dlsym" != "none required"], [
    LIBDL="$ac_cv_search_dlsym"
760
  ])
761
  have_dynamic_objects="yes"
762
])
763
VLC_RESTORE_FLAGS
Sam Hocevar's avatar
Sam Hocevar committed
764

765
# Windows
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
766
AS_IF([test "${SYS}" = "mingw32"], [
767
  LIBDL=""
768
  have_dynamic_objects="yes" #assume we can use shared objects
769
])
770

771 772
AS_IF([test "${enable_shared}" = "no"], [
  have_dynamic_objects=no
773
])
Rafaël Carré's avatar
Rafaël Carré committed
774 775
AM_CONDITIONAL(HAVE_DYNAMIC_PLUGINS, [test "${have_dynamic_objects}" != "no"])

776
AC_SUBST(LIBDL)
Sam Hocevar's avatar
Sam Hocevar committed
777

778
dnl Check for thread library
779 780
LIBPTHREAD=""
AS_IF([test "${SYS}" != "mingw32"], [
781
  VLC_SAVE_FLAGS
782 783
  LIBS=""
  AC_SEARCH_LIBS(pthread_rwlock_init, pthread pthreads c_r, [
784 785 786
    AS_IF([test "$ac_cv_search_pthread_rwlock_init" != "none required"], [
      LIBPTHREAD="$ac_cv_search_pthread_rwlock_init"
    ])
787 788
  ])
  VLC_RESTORE_FLAGS
789 790
])
AC_SUBST(LIBPTHREAD)
791

792 793 794 795 796 797 798 799
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"
800
    ])
801
  ])
802
])
803
AC_SUBST(LIBRT)
804

805
dnl
806
dnl Check for headers
807 808
dnl

809
dnl  POSIX
810
AC_CHECK_HEADERS([arpa/inet.h pthread.h search.h sys/shm.h sys/socket.h sys/uio.h])
811 812 813 814 815
AC_CHECK_HEADERS([net/if.h], [], [],
[
#include <sys/types.h>
#include <sys/socket.h>
])
816 817 818
AC_CHECK_HEADER([syslog.h], [have_syslog="yes"], [have_syslog="no"])
AM_CONDITIONAL([HAVE_SYSLOG], [test "$have_syslog" = "yes"])

819 820
dnl  BSD
AC_CHECK_HEADERS([netinet/udplite.h sys/param.h sys/mount.h])
821

822
dnl  GNU/Linux
823
AC_CHECK_HEADERS([features.h getopt.h linux/dccp.h linux/magic.h mntent.h sys/eventfd.h])
824

825 826
dnl  MacOS
AC_CHECK_HEADERS([xlocale.h])
827

828
dnl LP64 and LLP64 architectures had better define ssize_t by themselves...
829
AH_TEMPLATE(ssize_t, [Define to `int' if <stddef.h> does not define.]) dnl ` (fix VIM syntax highlight
830 831 832 833
AC_CHECK_TYPE(ssize_t,, [
  AC_DEFINE(ssize_t, int)
])

Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
834 835 836
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.
837
dnl Make PKG_CONFIG_PATH precious so that it appears in the help and get saved
838
AC_ARG_VAR(PKG_CONFIG_PATH,
839
       [Paths where to find .pc not at the default location])
840 841
PKG_PROG_PKG_CONFIG()

842
dnl On some OS we need static linking
843
AS_IF([test -n "${PKG_CONFIG}" ],[
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
844
    AS_IF([test "${SYS}" = "mingw32" -o "${SYS}" = "darwin" -o "${SYS}" = "os2" ],[
845 846 847
        PKG_CONFIG="${PKG_CONFIG} --static"
    ])
])
848 849


850 851
dnl
dnl Check for zlib.h and -lz along with system -lminizip if available
852
dnl
853 854 855 856
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
857
  VLC_ADD_LIBS([skins2 sap unzip zip],[-lz])
858
  PKG_CHECK_MODULES([MINIZIP], [minizip] , [ have_minizip=yes ], [
859
    AC_CHECK_HEADERS([unzip.h], [
860 861 862
      have_minizip=yes
      MINIZIP_LIBS="-lminizip -lz"
    ], [
863
      VLC_ADD_CPPFLAGS([skins2], [-I\\\$(top_srcdir)/modules/access/zip/unzip])
Jean-Baptiste Kempf's avatar
Jean-Baptiste Kempf committed
864
      VLC_ADD_LIBS([skins2], [\\\$(top_builddir)/modules/libunzip.la])
865 866 867 868
      have_minizip=no
    ])
  ])
  VLC_ADD_CPPFLAGS([skins2],[$MINIZIP_CFLAGS])
869
  VLC_ADD_LIBS([skins2],[$MINIZIP_LIBS])
870
fi
871
AM_CONDITIONAL(HAVE_MINIZIP, [ test "${have_minizip}" = "yes" ])
872 873


874 875 876 877 878 879 880 881 882 883 884
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"
])


885 886
dnl Check for dbus
AC_ARG_ENABLE(dbus,
887 888
  [AS_HELP_STRING([--enable-dbus],
    [compile D-Bus message bus support (default enabled)])])
889 890
have_dbus="no"
AS_IF([test "${enable_dbus}" != "no"], [
891
  PKG_CHECK_MODULES(DBUS, [dbus-1 >= 1.6.0], [
892 893 894 895 896 897 898 899 900 901
    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"])
902

903 904 905 906 907 908 909 910 911 912

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"])


913
dnl Check for ntohl, etc.
914 915
VLC_SAVE_FLAGS
CFLAGS="${CFLAGS} -Wall -Werror"
916
AC_CACHE_CHECK([for ntohl in sys/param.h],
917
    [ac_cv_c_ntohl_sys_param_h],
918
    [     AC_TRY_COMPILE([#include <sys/param.h>],
919
        [int meuh; ntohl(meuh);],
920
        ac_cv_c_ntohl_sys_param_h=yes, ac_cv_c_ntohl_sys_param_h=no)])
921
if test "${ac_cv_c_ntohl_sys_param_h}" != "no"; then
922
    AC_DEFINE(NTOHL_IN_SYS_PARAM_H, 1, Define if <sys/param.h> defines ntohl.)
923
fi
924
VLC_RESTORE_FLAGS
925 926 927 928 929

EXTEND_HELP_STRING([Optimization options:])
dnl
dnl  Compiler warnings
dnl
930

931
RDC_PROG_CC_WFLAGS([all extra sign-compare undef pointer-arith bad-function-cast write-strings missing-prototypes volatile-register-var error-implicit-function-declaration init-self logical-op format-security])
932
RDC_PROG_CC_FLAGS([-pipe])
933
AC_LANG_PUSH([C++])
934
RDC_PROG_CXX_WFLAGS([all extra sign-compare undef pointer-arith volatile-register-var format-security])
935
AC_LANG_POP([C++])
936

937 938 939 940 941
dnl
dnl  Debugging mode
dnl
AC_ARG_ENABLE(debug,
  [AS_HELP_STRING([--enable-debug],
942
    [build with run-time assertions (default disabled)])],,
943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987
  [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"
  CXXFLAGS="${CXXFLAGS} -pg"
  OBJCFLAGS="${OBJCFLAGS} -pg"
  LDFLAGS="${LDFLAGS} -pg"
])

AC_ARG_ENABLE(cprof,
  [AS_HELP_STRING([--enable-cprof],[profile with cprof (default disabled)])],,
  [enable_cprof="no"])
AS_IF([test "${enable_gprof}" != "no"], [
  CFLAGS="${CFLAGS} -finstrument-functions"
  CXXFLAGS="${CXXFLAGS} -finstrument-functions"
  OBJCFLAGS="${OBJCFLAGS} -finstrument-functions"
  LDFLAGS="${LDFLAGS} -finstrument-functions"
])

dnl
dnl  Test coverage
dnl
AC_ARG_ENABLE(coverage,
  [AS_HELP_STRING([--enable-coverage],
    [build for test coverage (default disabled)])],,
  [enable_coverage="no"])
AS_IF([test "${enable_coverage}" != "no"], [
  CFLAGS="-fprofile-arcs -ftest-coverage ${CFLAGS}"
  CXXFLAGS="-fprofile-arcs -ftest-coverage ${CXXFLAGS}"
  LDFLAGS="-lgcov ${LDFLAGS}"
])

988
AS_IF([test "${SYS}" != "mingw32" -a "${SYS}" != "os2"], [
989 990 991 992
  VLC_SAVE_FLAGS
  CFLAGS="${CFLAGS} -fvisibility=hidden"
  CXXFLAGS="${CXXFLAGS} -fvisibility=hidden"
  OBJCFLAGS="${OBJCFLAGS} -fvisibility=hidden"
993 994 995 996 997 998 999 1000
  AC_CACHE_CHECK([if $CC accepts -fvisibility=hidden],
                 [ac_cv_c_visibility_hidden], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
      ac_cv_c_visibility_hidden=yes
    ], [
      ac_cv_c_visibility_hidden=no
    ])
  ])
1001
  AS_IF([test "${ac_cv_c_visibility_hidden}" = "no"], [VLC_RESTORE_FLAGS])
1002 1003
])

1004

1005 1006 1007 1008 1009 1010 1011 1012
dnl
dnl  Enable/disable optimizations
dnl
AC_ARG_ENABLE(optimizations,
  [AS_HELP_STRING([--disable-optimizations],
    [disable compiler optimizations (default enabled)])],,
  [enable_optimizations="yes"])

1013
dnl Check for various optimization flags
1014 1015
AS_IF([test "${enable_optimizations}" != "no"], [

1016
  dnl -O3 only in production builds
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
1017
  AS_IF([test "${enable_debug}" = "no"], [
1018
    VLC_SAVE_FLAGS
1019 1020 1021 1022
    CFLAGS="${CFLAGS} -O3"
    CXXFLAGS="${CXXFLAGS} -O3"
    OBJCFLAGS="${OBJCFLAGS} -O3"
    AC_CACHE_CHECK([if $CC accepts -O3],  [ac_cv_c_o3], [
1023
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
1024
        ac_cv_c_o3=yes
1025
      ], [
1026
        ac_cv_c_o3=no
1027 1028
      ])
    ])
1029
    AS_IF([test "${ac_cv_c_o3}" = "no"], [VLC_RESTORE_FLAGS])
1030
  ])
1031

1032 1033 1034 1035 1036 1037 1038
  dnl Check for fast maths
  RDC_PROG_CC_FFLAGS([no-math-errno unsafe-math-optimizations no-rounding-math no-signaling-nans cx-limited-range])
  AC_LANG_PUSH(C++)
  RDC_PROG_CXX_FFLAGS([no-math-errno unsafe-math-optimizations no-rounding-math no-signaling-nans cx-limited-range])
  AC_LANG_POP

AH_BOTTOM([
1039
#if defined(_MSC_VER) && !defined(__clang__)
1040 1041 1042 1043 1044 1045 1046
# pragma fenv_access(off)
# pragma fp_contract(on)
#elif defined(__GNUC__)
/* Not supported so far */
#else
# pragma STDC FENV_ACCESS OFF
# pragma STDC FP_CONTRACT ON
1047 1048
#endif
])
1049

1050
  dnl Check for -funroll-loops
1051 1052 1053 1054
  VLC_SAVE_FLAGS
  CFLAGS="${CFLAGS} -funroll-loops"
  CXXFLAGS="${CXXFLAGS} -funroll-loops"
  OBJCFLAGS="${OBJCFLAGS} -funroll-loops"
1055 1056 1057 1058 1059 1060 1061
  AC_CACHE_CHECK([if $CC accepts -funroll-loops], [ac_cv_c_unroll_loops], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
      ac_cv_c_unroll_loops=yes
    ], [
      ac_cv_c_unroll_loops=no
    ])
  ])
1062
  AS_IF([test "${ac_cv_c_unroll_loops}" = "no"], [VLC_RESTORE_FLAGS])
1063 1064 1065

  AS_IF([test "$enable_debug" = "no"], [
    dnl Check for -fomit-frame-pointer
1066 1067 1068 1069
    VLC_SAVE_FLAGS
    CFLAGS="${CFLAGS} -fomit-frame-pointer"
    CXXFLAGS="${CXXFLAGS} -fomit-frame-pointer"
    OBJCFLAGS="${OBJCFLAGS} -fomit-frame-pointer"
1070 1071 1072 1073 1074 1075 1076 1077
    AC_CACHE_CHECK([if $CC accepts -fomit-frame-pointer],
      [ac_cv_c_omit_frame_pointer], [
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
        ac_cv_c_omit_frame_pointer=yes
      ], [
        ac_cv_c_omit_frame_pointer=no
      ])
    ])
1078
    AS_IF([test "${ac_cv_c_omit_frame_pointer}" = "no"], [VLC_RESTORE_FLAGS])
1079 1080
  ])
])
1081

1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094
VLC_SAVE_FLAGS
LDFLAGS="${LDFLAGS} -Wl,-Bsymbolic"
AC_CACHE_CHECK([if linker supports -Bsymbolic], [ac_cv_ld_bsymbolic], [
  AC_TRY_LINK([],, [
    ac_cv_ld_bsymbolic="-Wl,-Bsymbolic"
  ], [
    ac_cv_ld_bsymbolic=""
  ])
])
VLC_RESTORE_FLAGS
SYMBOLIC_LDFLAGS="${ac_cv_ld_bsymbolic}"
AC_SUBST(SYMBOLIC_LDFLAGS)

1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105
VLC_SAVE_FLAGS
LDFLAGS="${LDFLAGS} -Wl,-z,defs"
AC_CACHE_CHECK([if linker supports -z,defs], [ac_cv_ld_z_defs], [
  AC_TRY_LINK([],, [
    ac_cv_ld_z_defs="yes"
  ], [
    ac_cv_ld_z_defs="no"
  ])
])
AS_IF([test "${ac_cv_ld_z_defs}" = "no"], [VLC_RESTORE_FLAGS])

1106
dnl Checks for __attribute__(aligned()) directive
1107 1108
VLC_SAVE_FLAGS
CFLAGS="${CFLAGS} -Werror"
1109
AC_CACHE_CHECK([__attribute__ ((aligned ())) support],
1110 1111 1112 1113 1114 1115
    [ac_cv_c_attribute_aligned],
    [ac_cv_c_attribute_aligned=0
    for ac_cv_c_attr_align_try in 2 4 8 16 32 64; do
        AC_TRY_COMPILE([],
        [static char c __attribute__ ((aligned(${ac_cv_c_attr_align_try}))) = 0; return c;],
        [ac_cv_c_attribute_aligned="${ac_cv_c_attr_align_try}"])
1116 1117
    done])
VLC_RESTORE_FLAGS
1118
if test "${ac_cv_c_attribute_aligned}" != "0"; then
1119 1120
    AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX],
        [${ac_cv_c_attribute_aligned}],[Maximum supported data alignment])
1121 1122
fi

1123
dnl Check for __attribute__((packed))
1124 1125 1126
AC_CACHE_CHECK([for __attribute__((packed))],
  [ac_cv_c_attribute_packed],
  [ac_cv_c_attribute_packed=no
1127
   AC_TRY_COMPILE(, [struct __attribute__((__packed__)) foo { int a; } b; (void)b;],
1128
                    [ac_cv_c_attribute_packed=yes])])
1129
if test "${ac_cv_c_attribute_packed}" != "no"; then
1130 1131 1132
  AC_DEFINE(HAVE_ATTRIBUTE_PACKED, 1, Support for __attribute__((packed)) for structs)
fi

1133 1134 1135
dnl
dnl  Check the CPU
dnl
1136
case "${host_cpu}" in
1137
  "")
1138 1139 1140
    ARCH=unknown
    ;;
  *)
1141
    ARCH="${host_cpu}"
1142 1143 1144
    ;;
esac

1145 1146 1147 1148
dnl Check for backtrace() support
AC_CHECK_HEADERS(execinfo.h)
AC_CHECK_FUNCS(backtrace)

1149 1150 1151
dnl
dnl  default modules
dnl
1152
ALIASES="${ALIASES} cvlc rvlc"
1153

1154 1155 1156
dnl
dnl  Accelerated modules
dnl
1157 1158

dnl  Check for fully working MMX intrinsics
1159 1160
dnl  We need support for -mmmx, we need <mmintrin.h>, and we also need a
dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1161
AC_ARG_ENABLE(mmx,
1162 1163
  [AS_HELP_STRING([--disable-mmx],
    [disable MMX optimizations (default auto)])],,[
1164 1165 1166 1167 1168 1169 1170 1171 1172
  case "${host_cpu}" in
    i?86|x86_64)
      enable_mmx="yes"
      ;;
    *)
      enable_mmx="no"
      ;;
  esac
])
1173
have_mmx="no"
1174
have_mmxext="no"
1175 1176
AS_IF([test "${enable_mmx}" != "no"], [
  ARCH="${ARCH} mmx"
1177
  VLC_SAVE_FLAGS
1178
  CFLAGS="${CFLAGS} -mmmx"
1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197
  AC_CACHE_CHECK([if $CC groks MMX intrinsics], [ac_cv_c_mmx_intrinsics], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
[#include <mmintrin.h>
#include <stdint.h>
uint64_t frobzor;]], [
[__m64 a, b, c;
a = b = c = (__m64)frobzor;
a = _mm_slli_pi16(a, 3);
a = _mm_adds_pi16(a, b);
c = _mm_srli_pi16(c, 8);
c = _mm_slli_pi16(c, 3);
b = _mm_adds_pi16(b, c);
a = _mm_unpacklo_pi8(a, b);
frobzor = (uint64_t)a;]])], [
      ac_cv_c_mmx_intrinsics=yes
    ], [
      ac_cv_c_mmx_intrinsics=no
    ])
  ])
1198
  VLC_RESTORE_FLAGS
1199
  AS_IF([test "${ac_cv_c_mmx_intrinsics}" != "no"], [
1200
    AC_DEFINE(HAVE_MMX_INTRINSICS, 1, [Define to 1 if MMX intrinsics are available.])
1201 1202
  ])

1203 1204
  VLC_SAVE_FLAGS
  CFLAGS="${CFLAGS} -mmmx"
1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215
  AC_CACHE_CHECK([if $CC groks MMX inline assembly], [ac_cv_mmx_inline], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
void *p;
asm volatile("packuswb %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
]])
    ], [
      ac_cv_mmx_inline=yes
    ], [
      ac_cv_mmx_inline=no
    ])
  ])
1216
  AS_IF([test "${ac_cv_mmx_inline}" != "no"], [
1217
    AC_DEFINE(CAN_COMPILE_MMX, 1, [Define to 1 inline MMX assembly is available.])
1218
    have_mmx="yes"
1219 1220
  ])

1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232
  AC_CACHE_CHECK([if $CC groks MMX EXT inline assembly],
                 [ac_cv_mmxext_inline], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
void *p;
asm volatile("maskmovq %%mm1,%%mm2"::"r"(p):"mm1", "mm2");
]])
    ], [
      ac_cv_mmxext_inline=yes
    ], [
      ac_cv_mmxext_inline=no
    ])
  ])
1233
  VLC_RESTORE_FLAGS
1234 1235 1236 1237
  AS_IF([test "${ac_cv_mmxext_inline}" != "no"], [
    AC_DEFINE(CAN_COMPILE_MMXEXT, 1, [Define to 1 if MMX EXT inline assembly is available.])
    have_mmxext="yes"
  ])
1238
])
1239
AM_CONDITIONAL([HAVE_MMX], [test "${have_mmx}" = "yes"])
1240
AM_CONDITIONAL([HAVE_MMXEXT], [test "${have_mmxext}" = "yes"])
1241

1242 1243 1244
dnl  Check for fully workin SSE2 intrinsics
dnl  We need support for -mmmx, we need <emmintrin.h>, and we also need a
dnl  working compiler (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23963)
1245
AC_ARG_ENABLE(sse,
1246 1247
  [AS_HELP_STRING([--disable-sse],
    [disable SSE (1-4) optimizations (default auto)])],, [
1248
  case "${host_cpu}" in
1249
    i?86|x86_64)
1250 1251 1252 1253 1254 1255 1256
      enable_sse=yes
      ;;
    *)
      enable_sse=no
      ;;
  esac
])
1257
have_sse2="no"
1258 1259 1260
AS_IF([test "${enable_sse}" != "no"], [
  ARCH="${ARCH} sse sse2"

1261
  VLC_SAVE_FLAGS
1262
  CFLAGS="${CFLAGS} -msse2"
1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280
  AC_CACHE_CHECK([if $CC groks SSE2 intrinsics], [ac_cv_c_sse2_intrinsics], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
[#include <emmintrin.h>
#include <stdint.h>
uint64_t frobzor;]], [
[__m128i a, b, c;
a = b = c = _mm_set1_epi64((__m64)frobzor);
a = _mm_slli_epi16(a, 3);
a = _mm_adds_epi16(a, b);
c = _mm_srli_epi16(c, 8);
c = _mm_slli_epi16(c, 3);
b = _mm_adds_epi16(b, c);
a = _mm_unpacklo_epi8(a, b);
frobzor = (uint64_t)_mm_movepi64_pi64(a);]])], [
      ac_cv_c_sse2_intrinsics=yes
    ], [
      ac_cv_c_sse2_intrinsics=no
    ])
1281 1282
  ])
  VLC_RESTORE_FLAGS
1283
  AS_IF([test "${ac_cv_c_sse2_intrinsics}" != "no"], [
1284
    AC_DEFINE(HAVE_SSE2_INTRINSICS, 1, [Define to 1 if SSE2 intrinsics are available.])
1285
  ])
1286

1287 1288
  VLC_SAVE_FLAGS
  CFLAGS="${CFLAGS} -msse"
1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299
  AC_CACHE_CHECK([if $CC groks SSE inline assembly], [ac_cv_sse_inline], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
void *p;
asm volatile("xorps %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
]])
    ], [
      ac_cv_sse_inline=yes
    ], [
      ac_cv_sse_inline=no
    ])
  ])
1300

1301
  AS_IF([test "${ac_cv_sse_inline}" != "no" -a "${SYS}" != "solaris"], [
1302
    AC_DEFINE(CAN_COMPILE_SSE, 1, [Define to 1 if SSE inline assembly is available.])
1303
  ])
1304

1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315
  AC_CACHE_CHECK([if $CC groks SSE2 inline assembly], [ac_cv_sse2_inline], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
void *p;
asm volatile("punpckhqdq %%xmm1,%%xmm2"::"r"(p):"xmm1", "xmm2");
]])
    ], [
      ac_cv_sse2_inline=yes
    ], [
      ac_cv_sse2_inline=no
    ])
  ])
1316
  AS_IF([test "${ac_cv_sse2_inline}" != "no" -a "${SYS}" != "solaris"], [
1317
    AC_DEFINE(CAN_COMPILE_SSE2, 1, [Define to 1 if SSE2 inline assembly is available.])
1318
    have_sse2="yes"
1319
  ])
1320

1321
  # SSE3
1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332
  AC_CACHE_CHECK([if $CC groks SSE3 inline assembly], [ac_cv_sse3_inline], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
void *p;
asm volatile("movsldup %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
]])
    ], [
      ac_cv_sse3_inline=yes
    ], [
      ac_cv_sse3_inline=no
    ])
  ])
1333

1334
  AS_IF([test "${ac_cv_sse3_inline}" != "no"], [
1335
    AC_DEFINE(CAN_COMPILE_SSE3, 1, [Define to 1 if SSE3 inline assembly is available.]) ])
1336
  # SSSE3
1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347
  AC_CACHE_CHECK([if $CC groks SSSE3 inline assembly], [ac_cv_ssse3_inline], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
void *p;
asm volatile("pabsw %%xmm0,%%xmm0"::"r"(p):"xmm0");
]])
    ], [
      ac_cv_ssse3_inline=yes
    ], [
      ac_cv_ssse3_inline=no
    ])
  ])
1348

1349
  AS_IF([test "${ac_cv_ssse3_inline}" != "no"], [
1350
    AC_DEFINE(CAN_COMPILE_SSSE3, 1, [Define to 1 if SSSE3 inline assembly is available.]) ])
1351

1352 1353
  # SSE4.1
  AC_CACHE_CHECK([if $CC groks SSE4.1 inline assembly],
1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364
                 [ac_cv_sse4_1_inline], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
void *p;
asm volatile("pmaxsb %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
]])
    ], [
      ac_cv_sse4_1_inline=yes
    ], [
      ac_cv_sse4_1_inline=no
    ])
  ])
1365

1366
  AS_IF([test "${ac_cv_sse4_1_inline}" != "no"], [
1367
    AC_DEFINE(CAN_COMPILE_SSE4_1, 1, [Define to 1 if SSE4_1 inline assembly is available.]) ])
1368 1369 1370

  # SSE4.2
  AC_CACHE_CHECK([if $CC groks SSE4.2 inline assembly],
1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381
                 [ac_cv_sse4_2_inline], [
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[[
void *p;
asm volatile("pcmpgtq %%xmm1,%%xmm0"::"r"(p):"xmm0", "xmm1");
]])
    ], [
      ac_cv_sse4_2_inline=yes
    ], [
      ac_cv_sse4_2_inline=no
    ])
  ])
1382

1383
  AS_IF([test "${ac_cv_sse4_2_inline}" != "no"], [
1384
    AC_DEFINE(CAN_COMPILE_SSE4_2, 1, [Define to 1 if SSE4_2 inline assembly is available.]) ])
1385 1386

  # SSE4A
1387 1388 1389 1390