Skip to content
Snippets Groups Projects
configure 228 KiB
Newer Older
  • Learn to ignore specific revisions
  •                              { check_cpp_condition x265.h "X265_BUILD >= 68" ||
                                   die "ERROR: libx265 version must be >= 68."; }
    
    enabled libxavs           && require libxavs "stdint.h xavs.h" xavs_encoder_encode -lxavs
    
    enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
    
    enabled libzimg           && require_pkg_config "zimg >= 2.3.0" zimg.h zimg_get_api_version
    
    enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
    
    enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi &&
                                 { check_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" ||
                                   enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; }
    
    enabled libxml2           && require_pkg_config libxml-2.0 libxml2/libxml/xmlversion.h xmlCheckVersion
    
    enabled mediacodec        && { enabled jni || die "ERROR: mediacodec requires --enable-jni"; }
    
    enabled mmal              && { check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ||
    
                                   { ! enabled cross_compile &&
                                     add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline &&
                                     add_ldflags -L/opt/vc/lib/ &&
    
                                     check_lib mmal interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host; } ||
    
                                   die "ERROR: mmal not found" &&
                                   check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"; }
    
    enabled openal            && { { for al_extralibs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
    
                                   check_lib openal 'AL/al.h' alGetError "${al_extralibs}" && break; done } ||
    
                                   die "ERROR: openal not found"; } &&
                                 { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
                                   die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
    
    enabled opencl            && { check_lib opencl OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
                                   check_lib opencl CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
    
                                   die "ERROR: opencl not found"; } &&
                                 { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
                                   check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
                                   die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
    
    enabled opengl            && { check_lib opengl GL/glx.h glXGetProcAddress "-lGL" ||
                                   check_lib opengl windows.h wglGetProcAddress "-lopengl32 -lgdi32" ||
                                   check_lib opengl OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" ||
                                   check_lib opengl ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" ||
    
    Lukasz Marek's avatar
    Lukasz Marek committed
                                   die "ERROR: opengl not found."
                                 }
    
    enabled omx_rpi           && { check_header OMX_Core.h ||
                                   { ! enabled cross_compile && add_cflags -isystem/opt/vc/include/IL && check_header OMX_Core.h ; } ||
    
                                   die "ERROR: OpenMAX IL headers not found"; }
    
    enabled omx               && { check_header OMX_Core.h || die "ERROR: OpenMAX IL headers not found"; }
    
    enabled openssl           && { use_pkg_config openssl openssl/ssl.h OPENSSL_init_ssl ||
                                   use_pkg_config openssl openssl/ssl.h SSL_library_init ||
    
                                   check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto ||
                                   check_lib openssl openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
                                   check_lib openssl openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
    
                                   die "ERROR: openssl not found"; }
    
    if enabled gcrypt; then
        GCRYPT_CONFIG="${cross_prefix}libgcrypt-config"
        if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then
    
            gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags)
    
            gcrypt_extralibs=$("${GCRYPT_CONFIG}" --libs)
            check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_extralibs ||
    
                die "ERROR: gcrypt not found"
    
            add_cflags $gcrypt_cflags && add_extralibs $gcrypt_extralibs
    
            require gcrypt gcrypt.h gcry_mpi_new -lgcrypt
    
        SDL2_CONFIG="${cross_prefix}sdl2-config"
        if check_pkg_config sdl2 SDL_events.h SDL_PollEvent; then
            check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
            check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
    
            check_func SDL_Init $sdl2_extralibs $sdl2_cflags ||
                disable sdl2
        elif "${SDL2_CONFIG}" --version > /dev/null 2>&1; then
    
            sdl2_cflags=$("${SDL2_CONFIG}" --cflags)
    
            sdl2_extralibs=$("${SDL2_CONFIG}" --libs)
    
            check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags &&
            check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags &&
    
            check_func SDL_Init $sdl2_extralibs $sdl2_cflags ||
                disable sdl2
        else
            disable sdl2
    
        fi
        if test $target_os = "mingw32"; then
    
            sdl2_extralibs="$sdl2_extralibs -mconsole"
    
    enabled sdl2 && add_cflags $sdl2_cflags && add_extralibs $sdl2_extralibs
    
    if enabled decklink; then
        case $target_os in
            mingw32*|mingw64*|win32|win64)
                decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32"
                decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32"
                ;;
        esac
    fi
    
    
    enabled securetransport &&
        check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" &&
        check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" ||
            disable securetransport
    
    enabled schannel &&
        check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 &&
        check_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" &&
        add_extralibs -lsecur32 ||
            disable schannel
    
    makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
    
    enabled makeinfo \
        && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \
    
        && enable makeinfo_html || disable makeinfo_html
    disabled makeinfo_html && texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
    
    perl -v            > /dev/null 2>&1 && enable perl      || disable perl
    
    pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
    
    rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
    
    check_header linux/fb.h
    
    check_header linux/videodev2.h
    
    check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
    
    check_header sys/videoio.h
    
    check_code cc sys/videoio.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
    
    check_lib user32 "windows.h winuser.h" GetShellWindow -luser32
    check_lib vfw32 "windows.h vfw.h" capCreateCaptureWindow -lvfw32
    
    # check that WM_CAP_DRIVER_CONNECT is defined to the proper value
    # w32api 3.12 had it defined wrong
    check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
    
    Ramiro Polla's avatar
    Ramiro Polla committed
    
    
    Ramiro Polla's avatar
    Ramiro Polla committed
    check_type "dshow.h" IBaseFilter
    
    
    # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
    
    Ramiro Polla's avatar
    Ramiro Polla committed
    { check_header dev/bktr/ioctl_meteor.h &&
      check_header dev/bktr/ioctl_bt848.h; } ||
    { check_header machine/ioctl_meteor.h &&
      check_header machine/ioctl_bt848.h; } ||
    { check_header dev/video/meteor/ioctl_meteor.h &&
      check_header dev/video/bktr/ioctl_bt848.h; } ||
    check_header dev/ic/bt8xx.h
    
    if check_struct sys/soundcard.h audio_buf_info bytes; then
        enable_safe sys/soundcard.h
    else
        check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
        #include <sys/soundcard.h>
        audio_buf_info abc;
    EOF
    fi
    
    check_header soundcard.h
    
    enabled alsa && check_lib alsa alsa/asoundlib.h snd_pcm_htimestamp -lasound
    
    enabled jack && check_lib jack jack/jack.h jack_client_open -ljack &&
    
        check_func jack_port_get_latency_range -ljack
    
    enabled sndio && check_lib sndio sndio.h sio_open -lsndio
    
    if enabled libcdio; then
    
        check_lib libcdio "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
        check_lib libcdio "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
    
        die "ERROR: No usable libcdio/cdparanoia found"
    
    enabled libxcb && check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || disable libxcb
    
    Carl Eugen Hoyos's avatar
    Carl Eugen Hoyos committed
    if enabled libxcb; then
    
        enabled libxcb_shm    && check_pkg_config xcb-shm    xcb/shm.h    xcb_shm_attach              || disable libxcb_shm
        enabled libxcb_shape  && check_pkg_config xcb-shape  xcb/shape.h  xcb_shape_get_rectangles    || disable libxcb_shape
        enabled libxcb_xfixes && check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || disable libxcb_xfixes
    
    
        add_cflags $xcb_cflags $xcb_shm_cflags $xcb_xfixes_cflags $xcb_shape_cflags
    
        add_extralibs $xcb_extralibs $xcb_shm_extralibs $xcb_xfixes_extralibs $xcb_shape_extralibs
    
    check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs"
    
    
    # d3d11va requires linking directly to dxgi and d3d11 if not building for
    # the desktop api partition
    
    check_cpp <<EOF && enable uwp && d3d11va_extralibs="-ldxgi -ld3d11"
    #ifdef WINAPI_FAMILY
    #include <winapifamily.h>
    #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
    #error desktop, not uwp
    #else
    // WINAPI_FAMILY_APP, WINAPI_FAMILY_PHONE_APP => UWP
    #endif
    #else
    #error no family set
    #endif
    EOF
    
    enabled vaapi &&
    
        check_lib vaapi va/va.h vaInitialize -lva
    
    enabled vaapi &&
        check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" ||
        disable vaapi
    
    
        check_lib vaapi_drm "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm
    
        check_lib vaapi_x11 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 -lX11
    
    enabled vdpau &&
    
        check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
    
        disable vdpau
    
        check_lib vdpau_x11 "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau -lX11
    
    enabled crystalhd && check_lib crystalhd "stdint.h libcrystalhd/libcrystalhd_if.h" DtsCrystalHDVersion -lcrystalhd
    
    
    if enabled x86; then
        case $target_os in
            mingw32*|mingw64*|win32|win64|linux|cygwin*)
                ;;
            *)
    
    enabled nvenc &&
        check_cc -I$source_path <<EOF || disable nvenc
    #include "compat/nvenc/nvEncodeAPI.h"
    NV_ENCODE_API_FUNCTION_LIST flist;
    void f(void) { struct { const GUID guid; } s[] = { { NV_ENC_PRESET_HQ_GUID } }; }
    int main(void) { return 0; }
    EOF
    
    
    # Funny iconv installations are not unusual, so check it after all flags have been set
    
    if enabled libc_iconv; then
        check_func_headers iconv.h iconv
    elif enabled iconv; then
        check_func_headers iconv.h iconv || check_lib iconv iconv.h iconv -liconv
    fi
    
    enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
    
    
    # add some useful compiler flags if supported
    check_cflags -Wdeclaration-after-statement
    
    check_cflags -Wall
    
    Michael Niedermayer's avatar
    Michael Niedermayer committed
    check_cflags -Wdisabled-optimization
    check_cflags -Wpointer-arith
    check_cflags -Wredundant-decls
    
    check_cflags -Wwrite-strings
    
    check_cflags -Wmissing-prototypes
    
    check_cflags -Wstrict-prototypes
    
    check_cflags -Wempty-body
    
    
    if enabled extra_warnings; then
        check_cflags -Wcast-qual
        check_cflags -Wextra
        check_cflags -Wpedantic
    fi
    
    check_disable_warning(){
        warning_flag=-W${1#-Wno-}
        test_cflags $warning_flag && add_cflags $1
    }
    
    check_disable_warning -Wno-parentheses
    check_disable_warning -Wno-switch
    check_disable_warning -Wno-format-zero-length
    check_disable_warning -Wno-pointer-sign
    
    check_disable_warning -Wno-unused-const-variable
    
    check_disable_warning_headers(){
        warning_flag=-W${1#-Wno-}
    
        test_cflags $warning_flag && add_cflags_headers $1
    
    }
    
    check_disable_warning_headers -Wno-deprecated-declarations
    check_disable_warning_headers -Wno-unused-variable
    
    
    check_cc <<EOF && enable blocks_extension
    void (^block)(void);
    EOF
    
    
    check_ldflags -Wl,--warn-common
    
    check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
    
    enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
    
    enabled rpath && add_ldlibflags -Wl,-rpath,$libdir
    
    test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
    
    # add some strip flags
    
    enabled neon_clobber_test &&
        check_ldflags -Wl,--wrap,avcodec_open2              \
                      -Wl,--wrap,avcodec_decode_audio4      \
                      -Wl,--wrap,avcodec_decode_video2      \
                      -Wl,--wrap,avcodec_decode_subtitle2   \
                      -Wl,--wrap,avcodec_encode_audio2      \
                      -Wl,--wrap,avcodec_encode_video2      \
    
                      -Wl,--wrap,avcodec_encode_subtitle    \
    
                      -Wl,--wrap,avcodec_send_frame         \
                      -Wl,--wrap,avcodec_receive_frame      \
    
                      -Wl,--wrap,swr_convert                \
    
                      -Wl,--wrap,avresample_convert ||
    
    enabled xmm_clobber_test &&
    
        check_ldflags -Wl,--wrap,avcodec_open2              \
                      -Wl,--wrap,avcodec_decode_audio4      \
                      -Wl,--wrap,avcodec_decode_video2      \
                      -Wl,--wrap,avcodec_decode_subtitle2   \
                      -Wl,--wrap,avcodec_encode_audio2      \
    
                      -Wl,--wrap,avcodec_encode_video2      \
    
                      -Wl,--wrap,avcodec_encode_subtitle    \
    
                      -Wl,--wrap,avcodec_send_frame         \
                      -Wl,--wrap,avcodec_receive_frame      \
    
                      -Wl,--wrap,swr_convert                \
    
                      -Wl,--wrap,avresample_convert         \
    
    check_ld "cc" <<EOF && enable proper_dce
    
    extern const int array[512];
    static inline int func(void) { return array[0]; }
    int main(void) { return 0; }
    EOF
    
    if enabled proper_dce; then
        echo "X { local: *; };" > $TMPV
        if test_ldflags -Wl,${version_script},$TMPV; then
            append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver'
            check_cc <<EOF && enable symver_asm_label
    
    void ff_foo(void) __asm__ ("av_foo@VERSION");
    
    void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
    
            check_cc <<EOF && enable symver_gnu_asm
    
    __asm__(".symver ff_foo,av_foo@VERSION");
    void ff_foo(void) {}
    EOF
    
    if [ -z "$optflags" ]; then
        if enabled small; then
            optflags=$cflags_size
        elif enabled optimizations; then
            optflags=$cflags_speed
        else
            optflags=$cflags_noopt
        fi
    
    if [ -z "$nvccflags" ]; then
        nvccflags=$nvccflags_default
    fi
    
    if enabled x86_64 || enabled ppc64 || enabled aarch64; then
        nvccflags="$nvccflags -m64"
    else
        nvccflags="$nvccflags -m32"
    fi
    
    
    check_optflags(){
        check_cflags "$@"
        enabled lto && check_ldflags "$@"
    }
    
    
    check_optflags $optflags
    check_optflags -fno-math-errno
    check_optflags -fno-signed-zeros
    
    
    if enabled lto; then
        test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
        check_cflags  -flto
        check_ldflags -flto $cpuflags
    
        disable inline_asm_direct_symbol_refs
    
    enabled ftrapv && check_cflags -ftrapv
    
    
    check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
    int x;
    EOF
    
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        # Just warnings, no remarks
        check_cflags -w1
        # -wd: Disable following warnings
        # 144, 167, 556: -Wno-pointer-sign
    
        # 188: enumerated type mixed with another type
    
        # 1292: attribute "foo" ignored
    
        # 1419: external declaration in primary source file
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        # 10006: ignoring unknown option -fno-signed-zeros
    
        # 10148: ignoring unknown option -Wno-parentheses
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        # 10156: ignoring option '-W'; no argument required
    
        # 13200: No EMMS instruction before call to function
        # 13203: No EMMS instruction before return from function
        check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156,13200,13203
    
    Måns Rullgård's avatar
    Måns Rullgård committed
        # 11030: Warning unknown option --as-needed
        # 10156: ignoring option '-export'; no argument required
        check_ldflags -wd10156,11030
    
        # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
        enable ebp_available
    
        # The test above does not test linking
        enabled lto && disable symver_asm_label
    
        if enabled x86_32; then
    
            icc_version=$($cc -dumpversion)
    
            test ${icc_version%%.*} -ge 11 &&
                check_cflags -falign-stack=maintain-16-byte ||
    
    elif enabled ccc; then
        # disable some annoying warnings
    
        add_cflags -msg_disable bitnotint
        add_cflags -msg_disable mixfuncvoid
        add_cflags -msg_disable nonstandcast
        add_cflags -msg_disable unsupieee
    
    elif enabled gcc; then
    
        check_optflags -fno-tree-vectorize
    
        check_cflags -Werror=format-security
    
        check_cflags -Werror=implicit-function-declaration
    
        check_cflags -Werror=missing-prototypes
    
        check_cflags -Werror=return-type
    
        check_cflags -Werror=vla
    
        check_cflags -fdiagnostics-color=auto
    
        enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
    
    elif enabled llvm_gcc; then
        check_cflags -mllvm -stack-alignment=16
    
    elif enabled clang; then
    
        check_cflags -mllvm -stack-alignment=16
    
        check_cflags -mstack-alignment=16
    
        check_cflags -Qunused-arguments
    
        check_cflags -Werror=implicit-function-declaration
        check_cflags -Werror=missing-prototypes
    
        check_cflags -Werror=return-type
    
    Luca Barbato's avatar
    Luca Barbato committed
    elif enabled cparser; then
        add_cflags -Wno-missing-variable-declarations
        add_cflags -Wno-empty-statement
    
    elif enabled armcc; then
    
        add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
        add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
    
        # 2523: use of inline assembly is deprecated
    
        add_cflags -W${armcc_opt},--diag_suppress=2523
        add_cflags -W${armcc_opt},--diag_suppress=1207
    
        add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
    
        add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
    
        add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
        add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
    
    elif enabled tms470; then
        add_cflags -pds=824 -pds=837
    
    elif enabled pathscale; then
        add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
    
    elif enabled_any msvc icl; then
    
        enabled x86_32 && disable aligned_stack
    
        enabled_all x86_32 debug && add_cflags -Oy-
    
        enabled debug && add_ldflags -debug
    
        enable pragma_deprecated
    
        if enabled icl; then
    
            # -Qansi-alias is basically -fstrict-aliasing, but does not work
            # (correctly) on icl 13.x.
            check_cpp_condition "windows.h" "__ICL < 1300 || __ICL >= 1400" &&
                add_cflags -Qansi-alias
    
            # Some inline asm is not compilable in debug
            if enabled debug; then
                disable ebp_available
                disable ebx_available
            fi
    
        # msvcrt10 x64 incorrectly enables log2, only msvcrt12 (MSVC 2013) onwards actually has log2.
    
        check_cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION >= 12" || disable log2
    
        # The CRT headers contain __declspec(restrict) in a few places, but if redefining
        # restrict, this might break. MSVC 2010 and 2012 fail with __declspec(__restrict)
        # (as it ends up if the restrict redefine is done before including stdlib.h), while
        # MSVC 2013 and newer can handle it fine.
        # If this declspec fails, force including stdlib.h before the restrict redefinition
        # happens in config.h.
        if [ $_restrict != restrict ]; then
            check_cc <<EOF || add_cflags -FIstdlib.h
    __declspec($_restrict) void* foo(int);
    EOF
        fi
    
        # the new SSA optimzer in VS2015 U3 is mis-optimizing some parts of the code
    
        # Issue has been fixed in MSVC v19.00.24218.
        check_cpp_condition windows.h "_MSC_FULL_VER >= 190024218" ||
            check_cflags -d2SSAOptimizer-
    
        # enable utf-8 source processing on VS2015 U2 and newer
        check_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" &&
            add_cflags -utf-8
    
            check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
    static inline int foo(int a) { return a; }
    EOF
        fi
    done
    
    
    case $as_type in
        clang)
            add_asflags -Qunused-arguments
        ;;
    esac
    
    case $ld_type in
        clang)
            check_ldflags -Qunused-arguments
        ;;
    esac
    
    
    Mans Rullgard's avatar
    Mans Rullgard committed
    case $target_os in
    
        osf1)
            enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
        ;;
    
    enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
    
    
    enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"
    
    
    if test $target_os = "haiku"; then
    
    # add_dep lib dep
    # -> enable ${lib}_deps_${dep}
    # -> add $dep to ${lib}_deps only once
    add_dep() {
        lib=$1
        dep=$2
        enabled "${lib}_deps_${dep}" && return 0
        enable  "${lib}_deps_${dep}"
        prepend "${lib}_deps" $dep
    }
    
    # merge deps lib components
    # merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
    merge_deps() {
        lib=$1
        shift
        for comp in $*; do
            enabled $comp || continue
            eval "dep=\"\$${comp}_deps\""
            for d in $dep; do
                add_dep $lib $d
            done
        done
    }
    
    merge_deps libavfilter $FILTER_LIST
    
    
    map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST
    
    
    for thread in $THREADS_LIST; do
        if enabled $thread; then
            test -n "$thread_type" &&
                die "ERROR: Only one thread type must be selected." ||
                thread_type="$thread"
        fi
    done
    
    
    if disabled stdatomic_h; then
        if enabled atomics_gcc; then
            add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc'
    
        elif enabled atomics_win32; then
            add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32'
    
        elif enabled atomics_suncc; then
            add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc'
    
        elif enabled pthreads; then
            add_compat atomics/pthread/stdatomic.o
            add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread'
    
        else
            enabled threads && die "Threading is enabled, but no atomics are available"
            add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy'
    
    # Check if requested libraries were found.
    for lib in $AUTODETECT_LIBS; do
        requested $lib && ! enabled $lib && die "ERROR: $lib requested but not found";
    done
    
    
    enabled zlib && add_cppflags -DZLIB_CONST
    
    
    # conditional library dependencies, in linking order
    
    Paul B Mahol's avatar
    Paul B Mahol committed
    enabled afftfilt_filter     && prepend avfilter_deps "avcodec"
    
    enabled afir_filter         && prepend avfilter_deps "avcodec"
    
    enabled amovie_filter       && prepend avfilter_deps "avformat avcodec"
    enabled aresample_filter    && prepend avfilter_deps "swresample"
    enabled atempo_filter       && prepend avfilter_deps "avcodec"
    
    enabled cover_rect_filter   && prepend avfilter_deps "avformat avcodec"
    
    enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
    
    enabled elbg_filter         && prepend avfilter_deps "avcodec"
    
    enabled fftfilt_filter      && prepend avfilter_deps "avcodec"
    
    enabled find_rect_filter    && prepend avfilter_deps "avformat avcodec"
    
    enabled firequalizer_filter && prepend avfilter_deps "avcodec"
    
    enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
    
    enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
    
    enabled pan_filter          && prepend avfilter_deps "swresample"
    enabled pp_filter           && prepend avfilter_deps "postproc"
    enabled removelogo_filter   && prepend avfilter_deps "avformat avcodec swscale"
    
    enabled resample_filter && prepend avfilter_deps "avresample"
    
    enabled sab_filter          && prepend avfilter_deps "swscale"
    
    enabled scale_filter    && prepend avfilter_deps "swscale"
    
    enabled scale2ref_filter    && prepend avfilter_deps "swscale"
    
    enabled sofalizer_filter    && prepend avfilter_deps "avcodec"
    
    enabled showcqt_filter      && prepend avfilter_deps "avformat avcodec swscale"
    
    enabled showfreqs_filter    && prepend avfilter_deps "avcodec"
    
    enabled showspectrum_filter && prepend avfilter_deps "avcodec"
    
    enabled signature_filter    && prepend avfilter_deps "avcodec avformat"
    
    enabled smartblur_filter    && prepend avfilter_deps "swscale"
    
    enabled spectrumsynth_filter && prepend avfilter_deps "avcodec"
    
    enabled spp_filter          && prepend avfilter_deps "avcodec"
    
    enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
    
    enabled uspp_filter         && prepend avfilter_deps "avcodec"
    
    enabled zoompan_filter      && prepend avfilter_deps "swscale"
    
    
    enabled lavfi_indev         && prepend avdevice_deps "avfilter"
    
    enabled opus_decoder    && prepend avcodec_deps "swresample"
    
    expand_deps(){
        lib_deps=${1}_deps
        eval "deps=\$$lib_deps"
        append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
        unique $lib_deps
    }
    
    
    #we have to remove gpl from the deps here as some code assumes all lib deps are libs
    postproc_deps="$(filter_out 'gpl' $postproc_deps)"
    
    
    map 'expand_deps $v' $LIBRARY_LIST
    
    
    license="LGPL version 2.1 or later"
    if enabled nonfree; then
        license="nonfree and unredistributable"
    elif enabled gplv3; then
        license="GPL version 3 or later"
    elif enabled lgplv3; then
        license="LGPL version 3 or later"
    elif enabled gpl; then
        license="GPL version 2 or later"
    fi
    
    
    echo "install prefix            $prefix"
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    echo "source path               $source_path"
    echo "C compiler                $cc"
    
    echo "C library                 $libc_type"
    
    if test "$host_cc" != "$cc"; then
        echo "host C compiler           $host_cc"
    
        echo "host C library            $host_libc_type"
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    echo "ARCH                      $arch ($cpu)"
    
    if test "$build_suffix" != ""; then
        echo "build suffix              $build_suffix"
    
    if test "$progs_suffix" != ""; then
        echo "progs suffix              $progs_suffix"
    fi
    
    if test "$extra_version" != ""; then
        echo "version string suffix     $extra_version"
    fi
    
    echo "big-endian                ${bigendian-no}"
    
    echo "runtime cpu detection     ${runtime_cpudetect-no}"
    
        echo "standalone assembly       ${x86asm-no}"
    
        echo "x86 assembler             ${x86asmexe}"
    
        echo "MMX enabled               ${mmx-no}"
    
        echo "MMXEXT enabled            ${mmxext-no}"
    
        echo "3DNow! extended enabled   ${amd3dnowext-no}"
    
        echo "SSE enabled               ${sse-no}"
    
        echo "SSSE3 enabled             ${ssse3-no}"
    
    Rodger Combs's avatar
    Rodger Combs committed
        echo "AESNI enabled             ${aesni-no}"
    
        echo "AVX enabled               ${avx-no}"
    
        echo "AVX2 enabled              ${avx2-no}"
    
        echo "XOP enabled               ${xop-no}"
    
        echo "FMA3 enabled              ${fma3-no}"
    
        echo "i686 features enabled     ${i686-no}"
    
        echo "CMOV is fast              ${fast_cmov-no}"
    
        echo "EBX available             ${ebx_available-no}"
        echo "EBP available             ${ebp_available-no}"
    
    if enabled aarch64; then
        echo "NEON enabled              ${neon-no}"
        echo "VFP enabled               ${vfp-no}"
    fi
    
        echo "ARMv5TE enabled           ${armv5te-no}"
        echo "ARMv6 enabled             ${armv6-no}"
    
        echo "ARMv6T2 enabled           ${armv6t2-no}"
    
        echo "VFP enabled               ${vfp-no}"
    
        echo "NEON enabled              ${neon-no}"
    
        echo "THUMB enabled             ${thumb-no}"
    
        echo "MIPS FPU enabled          ${mipsfpu-no}"
    
        echo "MIPS DSP R1 enabled       ${mipsdsp-no}"
    
        echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
    
        echo "MIPS MSA enabled          ${msa-no}"
    
        echo "LOONGSON MMI enabled      ${mmi-no}"
    
        echo "AltiVec enabled           ${altivec-no}"
    
        echo "VSX enabled               ${vsx-no}"
        echo "POWER8 enabled            ${power8-no}"
    
        echo "PPC 4xx optimizations     ${ppc4xx-no}"
    
        echo "dcbzl available           ${dcbzl-no}"
    
    echo "debug symbols             ${debug-no}"
    
    echo "strip symbols             ${stripping-no}"
    
    echo "optimize for size         ${small-no}"
    
    echo "optimizations             ${optimizations-no}"
    
    echo "static                    ${static-no}"
    echo "shared                    ${shared-no}"
    
    echo "postprocessing support    ${postproc-no}"
    
    echo "network support           ${network-no}"
    echo "threading support         ${thread_type-no}"
    
    echo "safe bitstream reader     ${safe_bitstream_reader-no}"
    
    echo "texi2html enabled         ${texi2html-no}"
    
    echo "perl enabled              ${perl-no}"
    
    echo "pod2man enabled           ${pod2man-no}"
    echo "makeinfo enabled          ${makeinfo-no}"
    
    echo "makeinfo supports HTML    ${makeinfo_html-no}"
    
    test -n "$random_seed" &&
        echo "random seed               ${random_seed}"
    
    Fabrice Bellard's avatar
    Fabrice Bellard committed
    
    
    echo "External libraries:"
    
    print_enabled '' $EXTERNAL_LIBRARY_LIST | print_in_columns
    
    echo "External libraries providing hardware acceleration:"
    
    print_enabled '' $HWACCEL_LIBRARY_LIST | print_in_columns
    
    print_enabled '' $LIBRARY_LIST | print_in_columns
    
    echo "Programs:"
    
    print_enabled '' $PROGRAM_LIST | print_in_columns
    
    for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
    
        echo "Enabled ${type}s:"
    
        eval list=\$$(toupper $type)_LIST
    
        print_enabled '_*' $list | print_in_columns
    
    if test -n "$ignore_tests"; then
        ignore_tests=$(echo $ignore_tests | tr ',' ' ')
        echo "Ignored FATE tests:"
    
        echo $ignore_tests | print_in_columns
    
    echo "License: $license"
    
    echo "Creating configuration files ..."
    
    test -e Makefile || echo "include $source_path/Makefile" > Makefile
    
    enabled stripping || strip="echo skipping strip"
    
    
    config_files="$TMPH ffbuild/config.mak doc/config.texi"
    
    cat > ffbuild/config.mak <<EOF
    
    # Automatically generated by configure - do not modify!
    
    ifndef FFMPEG_CONFIG_MAK
    FFMPEG_CONFIG_MAK=1
    
    FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
    
    prefix=$prefix
    LIBDIR=\$(DESTDIR)$libdir
    SHLIBDIR=\$(DESTDIR)$shlibdir
    INCDIR=\$(DESTDIR)$incdir
    BINDIR=\$(DESTDIR)$bindir
    DATADIR=\$(DESTDIR)$datadir
    
    DOCDIR=\$(DESTDIR)$docdir
    
    PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir
    
    INSTALL_NAME_DIR=$install_name_dir
    
    SRC_PATH=$source_path
    
    ifndef MAIN_MAKEFILE
    SRC_PATH:=\$(SRC_PATH:.%=..%)
    endif
    
    INTRINSICS=$intrinsics
    
    Mohamed Naufal's avatar
    Mohamed Naufal committed
    CXX=$cxx
    
    Luca Barbato's avatar
    Luca Barbato committed
    OBJCC=$objcc
    
    DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
    DEPAS=$as
    DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
    
    X86ASM=$x86asmexe
    DEPX86ASM=$x86asmexe
    
    ARFLAGS=$arflags
    AR_O=$ar_o
    
    STRIP=$strip
    
    LN_S=$ln_s
    CPPFLAGS=$CPPFLAGS
    CFLAGS=$CFLAGS
    
    Mohamed Naufal's avatar
    Mohamed Naufal committed
    CXXFLAGS=$CXXFLAGS
    
    Luca Barbato's avatar
    Luca Barbato committed
    OBJCFLAGS=$OBJCFLAGS
    
    Luca Barbato's avatar
    Luca Barbato committed
    OBJCC_C=$OBJCC_C
    OBJCC_E=$OBJCC_E
    OBJCC_O=$OBJCC_O
    
    CXX_C=$CXX_C
    
    Mohamed Naufal's avatar
    Mohamed Naufal committed
    CXX_O=$CXX_O
    
    NVCC_C=$NVCC_C
    NVCC_O=$NVCC_O
    
    LD_LIB=$LD_LIB
    LD_PATH=$LD_PATH
    
    DOXYGEN=$doxygen
    
    LDEXEFLAGS=$LDEXEFLAGS
    
    LDLIBFLAGS=$LDLIBFLAGS
    
    SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
    
    ASMSTRIPFLAGS=$ASMSTRIPFLAGS
    
    X86ASMFLAGS=$X86ASMFLAGS
    
    PROGSSUF=$progs_suffix
    
    FULLNAME=$FULLNAME
    LIBPREF=$LIBPREF
    LIBSUF=$LIBSUF
    LIBNAME=$LIBNAME
    SLIBPREF=$SLIBPREF
    SLIBSUF=$SLIBSUF
    EXESUF=$EXESUF
    EXTRA_VERSION=$extra_version
    CCDEP=$CCDEP
    
    Mohamed Naufal's avatar
    Mohamed Naufal committed
    CXXDEP=$CXXDEP
    
    X86ASMDEP=$X86ASMDEP
    X86ASMDEP_FLAGS=$X86ASMDEP_FLAGS
    
    CC_DEPFLAGS=$CC_DEPFLAGS
    AS_DEPFLAGS=$AS_DEPFLAGS
    
    HOSTEXESUF=$HOSTEXESUF
    HOSTLDFLAGS=$host_ldflags
    
    DEPHOSTCC=$host_cc
    DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
    HOSTCCDEP=$HOSTCCDEP
    HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
    HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
    
    HOSTLD_O=$HOSTLD_O
    
    TARGET_EXEC=$target_exec $target_exec_args
    
    TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
    
    Marton Balint's avatar
    Marton Balint committed
    CFLAGS-ffplay=${sdl2_cflags}
    
    CFLAGS_HEADERS=$CFLAGS_HEADERS
    
    ZLIB=$($ldflags_filter -lz)
    
    LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
    EXTRALIBS=$extralibs
    
    COMPAT_OBJS=$compat_objs
    
    LIBTARGET=${LIBTARGET}
    SLIBNAME=${SLIBNAME}
    SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
    SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
    SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
    SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
    
    SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
    SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
    SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB}
    SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB}
    
    VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
    
    SAMPLES:=${samples:-\$(FATE_SAMPLES)}
    
    NOREDZONE_FLAGS=$noredzone_flags
    
    map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST
    
    print_program_extralibs(){
        eval "program_extralibs=\$${1}_extralibs"
    
        eval echo "EXTRALIBS-${1}=${program_extralibs}" >> ffbuild/config.mak
    
    map 'print_program_extralibs $v' $PROGRAM_LIST
    
    cat > $TMPH <<EOF
    /* Automatically generated by configure - do not modify! */
    
    #ifndef FFMPEG_CONFIG_H
    #define FFMPEG_CONFIG_H
    #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
    
    #define FFMPEG_LICENSE "$(c_escape $license)"
    
    James Almer's avatar
    James Almer committed
    #define CONFIG_THIS_YEAR 2017
    
    #define FFMPEG_DATADIR "$(eval c_escape $datadir)"
    
    #define AVCONV_DATADIR "$(eval c_escape $datadir)"
    
    #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
    
    #define av_restrict $_restrict
    
    #define EXTERN_PREFIX "${extern_prefix}"
    #define EXTERN_ASM ${extern_prefix}
    
    #define BUILDSUF "$build_suffix"
    
    #define HAVE_MMX2 HAVE_MMXEXT
    
    #define SWS_MAX_FILTER_SIZE $sws_max_filter_size
    
    test -n "$assert_level" &&
        echo "#define ASSERT_LEVEL $assert_level" >>$TMPH
    
    
    test -n "$malloc_prefix" &&
        echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH
    
    
    if enabled x86asm; then
    
        append config_files $TMPASM
        printf '' >$TMPASM
    fi
    
    
    enabled getenv || echo "#define getenv(x) NULL" >> $TMPH
    
    
    mkdir -p tests/api
    
    echo "@c auto-generated by configure - do not modify! " > doc/config.texi
    
    print_config ARCH_   "$config_files" $ARCH_LIST
    print_config HAVE_   "$config_files" $HAVE_LIST
    print_config CONFIG_ "$config_files" $CONFIG_LIST       \
    
    Måns Rullgård's avatar
    Måns Rullgård committed
                                         $CONFIG_EXTRA      \
    
    echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
    
    echo "endif # FFMPEG_CONFIG_MAK" >> ffbuild/config.mak
    
    Diego Biurrun's avatar
    Diego Biurrun committed
    # Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
    
    cp_if_changed $TMPH config.h
    
    enabled x86asm && cp_if_changed $TMPASM config.asm
    
    cat > $TMPH <<EOF
    /* Generated by ffconf */
    #ifndef AVUTIL_AVCONFIG_H
    #define AVUTIL_AVCONFIG_H
    EOF
    
    
    print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
    
    
    echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH
    
    cp_if_changed $TMPH libavutil/avconfig.h