configure 157.4 KB
Newer Older
1
#!/bin/sh
2
#
J
Janne Grunau 已提交
3
# Libav configure script
4
#
D
Diego Biurrun 已提交
5 6 7
# Copyright (c) 2000-2002 Fabrice Bellard
# Copyright (c) 2005-2008 Diego Biurrun
# Copyright (c) 2005-2008 Mans Rullgard
8
#
9

10
# Prevent locale nonsense from breaking basic text processing.
11 12
LC_ALL=C
export LC_ALL
13

14
# make sure we are running under a compatible shell
15 16 17
# try to make this part work with most shells

try_exec(){
18
    echo "Trying shell $1"
19
    type "$1" > /dev/null 2>&1 && exec "$@"
20 21
}

M
Måns Rullgård 已提交
22
unset foo
23
(: ${foo%%bar}) 2> /dev/null
24 25
E1="$?"

26
(: ${foo?}) 2> /dev/null
27 28 29 30
E2="$?"

if test "$E1" != 0 || test "$E2" = 0; then
    echo "Broken shell detected.  Trying alternatives."
31 32 33 34 35 36 37 38 39 40 41 42
    export FF_CONF_EXEC
    if test "0$FF_CONF_EXEC" -lt 1; then
        FF_CONF_EXEC=1
        try_exec bash "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 2; then
        FF_CONF_EXEC=2
        try_exec ksh "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 3; then
        FF_CONF_EXEC=3
        try_exec /usr/xpg4/bin/sh "$0" "$@"
43 44
    fi
    echo "No compatible shell script interpreter found."
D
typo  
Diego Biurrun 已提交
45
    echo "This configure script requires a POSIX-compatible shell"
46
    echo "such as bash or ksh."
J
Janne Grunau 已提交
47
    echo "THIS IS NOT A BUG IN LIBAV, DO NOT REPORT IT AS SUCH."
D
Diego Biurrun 已提交
48
    echo "Instead, install a working POSIX-compatible shell."
J
Janne Grunau 已提交
49
    echo "Disabling this configure test will create a broken Libav."
50 51 52 53
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
        echo "This bash version ($BASH_VERSION) is broken on your platform."
        echo "Upgrade to a later version if available."
    fi
54 55 56
    exit 1
fi

57 58
test -d /usr/xpg4/bin && PATH=/usr/xpg4/bin:$PATH

59
show_help(){
D
Diego Biurrun 已提交
60
    cat <<EOF
61 62 63
Usage: configure [options]
Options: [defaults in brackets after descriptions]

64
Help options:
65
  --help                   print this message
66 67 68 69 70 71 72 73 74 75 76 77 78
  --list-decoders          show all available decoders
  --list-encoders          show all available encoders
  --list-hwaccels          show all available hardware accelerators
  --list-demuxers          show all available demuxers
  --list-muxers            show all available muxers
  --list-parsers           show all available parsers
  --list-protocols         show all available protocols
  --list-bsfs              show all available bitstream filters
  --list-indevs            show all available input devices
  --list-outdevs           show all available output devices
  --list-filters           show all available filters

Standard options:
79
  --logfile=FILE           log tests and output to FILE [config.log]
80 81 82
  --disable-logging        do not log configure debug information
  --prefix=PREFIX          install in PREFIX [$prefix]
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
83
  --datadir=DIR            install data files in DIR [PREFIX/share/avconv]
84
  --docdir=DIR             install documentation in DIR [PREFIX/share/doc/libav]
85 86 87 88
  --libdir=DIR             install libs in DIR [PREFIX/lib]
  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
  --incdir=DIR             install includes in DIR [PREFIX/include]
  --mandir=DIR             install man page in DIR [PREFIX/share/man]
R
Reinhard Tartler 已提交
89
  --enable-rpath           use rpath when linking programs [USE WITH CARE]
90

91
Licensing options:
92 93 94 95 96
  --enable-gpl             allow use of GPL code, the resulting libs
                           and binaries will be under GPL [no]
  --enable-version3        upgrade (L)GPL to version 3 [no]
  --enable-nonfree         allow use of nonfree code, the resulting libs
                           and binaries will be unredistributable [no]
97 98 99 100 101 102 103 104

Configuration options:
  --disable-static         do not build static libraries [no]
  --enable-shared          build shared libraries [no]
  --enable-small           optimize for size instead of speed
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
  --enable-gray            enable full grayscale support (slower color)
  --disable-swscale-alpha  disable alpha channel support in swscale
105
  --disable-all            disable building components, libraries and programs
106

107 108
Program options:
  --disable-programs       do not build command line programs
109
  --disable-avconv         disable avconv build
A
Anton Khirnov 已提交
110
  --disable-avplay         disable avplay build
A
Anton Khirnov 已提交
111
  --disable-avprobe        disable avprobe build
A
Anton Khirnov 已提交
112
  --disable-avserver       deprecated, does nothing
113 114 115

Component options:
  --disable-doc            do not build documentation
116 117 118
  --disable-avdevice       disable libavdevice build
  --disable-avcodec        disable libavcodec build
  --disable-avformat       disable libavformat build
119
  --disable-avutil         disable libavutil build
120
  --disable-swscale        disable libswscale build
121
  --disable-avfilter       disable video filter support [no]
J
Justin Ruggles 已提交
122
  --disable-avresample     disable libavresample build [no]
123
  --disable-pthreads       disable pthreads [auto]
124
  --disable-w32threads     disable Win32 threads [auto]
125
  --disable-network        disable network support [no]
126
  --disable-dct            disable DCT code
127
  --disable-error-resilience disable error resilience code
128
  --disable-lsp            disable LSP code
129
  --disable-lzo            disable LZO decoder code
130 131
  --disable-mdct           disable MDCT code
  --disable-rdft           disable RDFT code
132
  --disable-fft            disable FFT code
133
  --disable-faan           disable floating point AAN (I)DCT code
134 135

Hardware accelerators:
136
  --enable-d3d11va         enable D3D11VA code
137
  --enable-dxva2           enable DXVA2 code
138
  --enable-vaapi           enable VAAPI code
139
  --enable-vda             enable VDA code
140
  --enable-vdpau           enable VDPAU code
141 142

Individual component options:
143
  --disable-everything     disable all components listed below
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
  --disable-encoder=NAME   disable encoder NAME
  --enable-encoder=NAME    enable encoder NAME
  --disable-encoders       disable all encoders
  --disable-decoder=NAME   disable decoder NAME
  --enable-decoder=NAME    enable decoder NAME
  --disable-decoders       disable all decoders
  --disable-hwaccel=NAME   disable hwaccel NAME
  --enable-hwaccel=NAME    enable hwaccel NAME
  --disable-hwaccels       disable all hwaccels
  --disable-muxer=NAME     disable muxer NAME
  --enable-muxer=NAME      enable muxer NAME
  --disable-muxers         disable all muxers
  --disable-demuxer=NAME   disable demuxer NAME
  --enable-demuxer=NAME    enable demuxer NAME
  --disable-demuxers       disable all demuxers
  --enable-parser=NAME     enable parser NAME
  --disable-parser=NAME    disable parser NAME
  --disable-parsers        disable all parsers
  --enable-bsf=NAME        enable bitstream filter NAME
  --disable-bsf=NAME       disable bitstream filter NAME
  --disable-bsfs           disable all bitstream filters
  --enable-protocol=NAME   enable protocol NAME
  --disable-protocol=NAME  disable protocol NAME
  --disable-protocols      disable all protocols
168
  --enable-indev=NAME      enable input device NAME
169 170
  --disable-indev=NAME     disable input device NAME
  --disable-indevs         disable input devices
171 172
  --enable-outdev=NAME     enable output device NAME
  --disable-outdev=NAME    disable output device NAME
173 174 175 176 177 178 179
  --disable-outdevs        disable output devices
  --disable-devices        disable all devices
  --enable-filter=NAME     enable filter NAME
  --disable-filter=NAME    disable filter NAME
  --disable-filters        disable all filters

External library support:
D
Diego Biurrun 已提交
180
  --enable-avisynth        enable reading of AviSynth script files [no]
181
  --enable-bzlib           enable bzlib [autodetect]
182
  --enable-cuda            enable dynamically linked CUDA [no]
S
Stefano Sabatini 已提交
183
  --enable-frei0r          enable frei0r video filtering
184
  --enable-gnutls          enable gnutls [no]
185
  --enable-libbs2b         enable bs2b DSP library [no]
186
  --enable-libcdio         enable audio CD grabbing with libcdio
187 188
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                           and libraw1394 [no]
H
Hendrik Leppkes 已提交
189
  --enable-libdcadec       enable DCA decoding via libdcadec [no]
190
  --enable-libfaac         enable AAC encoding via libfaac [no]
M
Martin Storsjö 已提交
191
  --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
192
  --enable-libfreetype     enable libfreetype [no]
193
  --enable-libgsm          enable GSM de/encoding via libgsm [no]
194
  --enable-libilbc         enable iLBC de/encoding via libilbc [no]
195
  --enable-libkvazaar      enable HEVC encoding via libkvazaar [no]
196
  --enable-libmfx          enable HW acceleration through libmfx
197
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
198 199 200
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
  --enable-libopencv       enable video filtering via libopencv [no]
201
  --enable-libopenh264     enable H.264 encoding via OpenH264 [no]
202
  --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
203
  --enable-libopus         enable Opus de/encoding via libopus [no]
204
  --enable-libpulse        enable Pulseaudio input via libpulse [no]
205
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
206
  --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
V
Vittorio Giovara 已提交
207
  --enable-libsnappy       enable Snappy compression [no]
208
  --enable-libspeex        enable Speex de/encoding via libspeex [no]
209
  --enable-libtheora       enable Theora encoding via libtheora [no]
P
Paul B Mahol 已提交
210
  --enable-libtwolame      enable MP2 encoding via libtwolame [no]
211
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
212
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
213
  --enable-libvorbis       enable Vorbis encoding via libvorbis [no]
214
  --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
215
  --enable-libwavpack      enable wavpack encoding via libwavpack [no]
J
Justin Ruggles 已提交
216
  --enable-libwebp         enable WebP encoding via libwebp [no]
217
  --enable-libx264         enable H.264 encoding via x264 [no]
D
Derek Buitenhuis 已提交
218
  --enable-libx265         enable HEVC encoding via x265 [no]
219
  --enable-libxavs         enable AVS encoding via xavs [no]
L
Luca Barbato 已提交
220 221 222
  --enable-libxcb          enable X11 grabbing using XCB [no]
  --enable-libxcb-shm      enable X11 grabbing shm communication [auto]
  --enable-libxcb-xfixes   enable X11 grabbing mouse rendering [auto]
223 224
  --enable-libxvid         enable Xvid encoding via xvidcore,
                           native MPEG-4/Xvid encoder exists [no]
W
wm4 已提交
225
  --enable-mmal            enable decoding via MMAL [no]
L
Luca Barbato 已提交
226
  --enable-nvenc           enable encoding via NVENC [no]
227
  --enable-openssl         enable openssl [no]
L
Luca Barbato 已提交
228
  --enable-x11grab         enable X11 grabbing (legacy) [no]
229 230
  --enable-zlib            enable zlib [autodetect]

231 232 233 234
Toolchain options:
  --arch=ARCH              select architecture [$arch]
  --cpu=CPU                select the minimum required CPU (affects
                           instruction selection, may crash on older CPUs)
235 236 237 238 239 240 241
  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]
  --enable-cross-compile   assume a cross-compiler is used
  --sysroot=PATH           root of cross-build tree
  --sysinclude=PATH        location of cross-build system headers
  --target-os=OS           compiler targets OS [$target_os]
  --target-exec=CMD        command to run executables on target
  --target-path=DIR        path to view of build directory on target
242
  --target-samples=DIR     path to samples directory on target
243
  --toolchain=NAME         set tool defaults according to NAME
244
  --nm=NM                  use nm tool
245
  --ar=AR                  use archive tool AR [$ar_default]
246 247
  --as=AS                  use assembler AS [$as_default]
  --cc=CC                  use C compiler CC [$cc_default]
L
Luca Barbato 已提交
248
  --objcc=OCC              use ObjC compiler OCC [$cc_default]
249
  --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
250
  --ld=LD                  use linker LD
251
  --pkg-config=PKGCONFIG   use pkg-config tool PKGCONFIG [$pkg_config_default]
252
  --pkg-config-flags=FLAGS pass additional flags to pkgconf []
253 254
  --host-cc=HOSTCC         use host C compiler HOSTCC
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
255
  --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
256
  --host-ld=HOSTLD         use host linker HOSTLD
257 258
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
  --host-libs=HLIBS        use libs HLIBS when linking for host
259
  --host-os=OS             compiler host OS [$target_os]
260
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
L
Luca Barbato 已提交
261
  --extra-objcflags=FLAGS  add FLAGS to OBJCFLAGS [$CFLAGS]
262
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
263
  --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS]
264 265
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
  --extra-version=STRING   version string suffix []
266
  --optflags=OPTFLAGS      override optimization-related compiler flags
267
  --build-suffix=SUFFIX    library name suffix []
268
  --enable-pic             build position-independent code
269
  --enable-thumb           compile for Thumb instruction set
270
  --enable-lto             use link-time optimization
271
  --env="ENV=override"     override the environment variables
272 273 274

Advanced options (experts only):
  --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
275
  --custom-allocator=NAME  use a supported custom allocator
276 277 278 279 280 281
  --disable-symver         disable symbol versioning
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
  --disable-safe-bitstream-reader
                           disable buffer boundary checking in bitreaders
                           (faster, but may crash)
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
282
  --enable-sram            allow use of on-chip SRAM
283 284

Optimization options (experts only):
285
  --disable-asm            disable all assembly optimizations
286
  --disable-altivec        disable AltiVec optimizations
287 288
  --disable-vsx            disable VSX optimizations
  --disable-power8         disable POWER8 optimizations
289 290 291
  --disable-amd3dnow       disable 3DNow! optimizations
  --disable-amd3dnowext    disable 3DNow! extended optimizations
  --disable-mmx            disable MMX optimizations
292
  --disable-mmxext         disable MMXEXT optimizations
293
  --disable-sse            disable SSE optimizations
294 295
  --disable-sse2           disable SSE2 optimizations
  --disable-sse3           disable SSE3 optimizations
296
  --disable-ssse3          disable SSSE3 optimizations
297 298
  --disable-sse4           disable SSE4 optimizations
  --disable-sse42          disable SSE4.2 optimizations
M
Mans Rullgard 已提交
299
  --disable-avx            disable AVX optimizations
300
  --disable-xop            disable XOP optimizations
301
  --disable-fma3           disable FMA3 optimizations
302
  --disable-fma4           disable FMA4 optimizations
303
  --disable-avx2           disable AVX2 optimizations
304 305 306
  --disable-armv5te        disable armv5te optimizations
  --disable-armv6          disable armv6 optimizations
  --disable-armv6t2        disable armv6t2 optimizations
307
  --disable-vfp            disable VFP optimizations
308
  --disable-neon           disable NEON optimizations
309 310
  --disable-inline-asm     disable use of inline assembly
  --disable-yasm           disable use of nasm/yasm assembly
311

J
Janne Grunau 已提交
312
Developer options (useful when working on Libav itself):
313 314 315 316
  --disable-debug          disable debugging symbols
  --enable-debug=LEVEL     set the debug level [$debuglevel]
  --disable-optimizations  disable compiler optimizations
  --enable-extra-warnings  enable more compiler warnings
317
  --samples=PATH           location of test samples for FATE, if not set use
318
                           \$LIBAV_SAMPLES at make invocation time.
319 320
  --enable-neon-clobber-test check NEON registers for clobbering (should be
                           used only for debugging purposes)
321 322
  --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
                           should be used only for debugging purposes)
323 324 325 326 327 328 329 330
  --enable-random          randomly enable/disable components
  --disable-random
  --enable-random=LIST     randomly enable/disable specific components or
  --disable-random=LIST    component groups. LIST is a comma-separated list
                           of NAME[:PROB] entries where NAME is a component
                           (group) and PROB the probability associated with
                           NAME (default 0.5).
  --random-seed=VALUE      seed value for --enable/disable-random
331 332
  --disable-valgrind-backtrace do not print a backtrace under Valgrind
                           (only applies to --disable-optimizations builds)
333 334 335

NOTE: Object files are built at the place where configure is launched.
EOF
S
Stefano Sabatini 已提交
336
  exit 0
337
}
338

339 340
quotes='""'

341
log(){
342
    echo "$@" >> $logfile
343 344
}

345
log_file(){
M
Måns Rullgård 已提交
346
    log BEGIN $1
347 348 349 350 351
    i=1
    while read line; do
        printf '%5s   %s\n' "${i}" "${line}"
        i=$(($i+1))
    done < $1 >> $logfile
M
Måns Rullgård 已提交
352 353 354
    log END $1
}

355
echolog(){
M
Måns Rullgård 已提交
356
    log "$@"
357
    echo "$@"
358 359
}

M
Måns Rullgård 已提交
360 361 362 363 364
warn(){
    log "WARNING: $*"
    WARNINGS="${WARNINGS}WARNING: $*\n"
}

365 366 367
die(){
    echolog "$@"
    cat <<EOF
368

369
If you think configure made a mistake, make sure you are using the latest
L
Lou Logan 已提交
370
version from Git.  If the latest version fails, report the problem to the
371
libav-tools@libav.org mailing list or IRC #libav on irc.freenode.net.
372
EOF
373
    if disabled logging; then
374
        cat <<EOF
375 376
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
377 378
EOF
    else
D
Diego Biurrun 已提交
379
        cat <<EOF
380 381
Include the log file "$logfile" produced by configure as this will help
solving the problem.
382 383
EOF
    fi
384 385 386
    exit 1
}

387
# Avoid locale weirdness, besides we really just want to translate ASCII.
388
toupper(){
389
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
390 391
}

M
Måns Rullgård 已提交
392
tolower(){
393
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
M
Måns Rullgård 已提交
394 395
}

396 397 398 399
c_escape(){
    echo "$*" | sed 's/["\\]/\\\0/g'
}

400 401
sh_quote(){
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
402
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
403 404 405
    echo "$v"
}

406 407 408 409
cleanws(){
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
}

410 411 412 413
filter(){
    pat=$1
    shift
    for v; do
414
        eval "case $v in $pat) echo $v ;; esac"
415 416 417
    done
}

418 419 420 421 422 423 424 425
filter_out(){
    pat=$1
    shift
    for v; do
        eval "case $v in $pat) ;; *) echo $v ;; esac"
    done
}

426 427 428
map(){
    m=$1
    shift
M
Måns Rullgård 已提交
429
    for v; do eval $m; done
430 431
}

432 433 434 435 436 437
add_suffix(){
    suffix=$1
    shift
    for v; do echo ${v}${suffix}; done
}

438 439 440 441 442 443 444 445
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

446 447 448 449 450 451 452 453
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

454 455 456 457
sanitize_var_name(){
    echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
}

458 459 460
set_safe(){
    var=$1
    shift
461
    eval $(sanitize_var_name "$var")='$*'
462 463 464
}

get_safe(){
465
    eval echo \$$(sanitize_var_name "$1")
466 467
}

468
pushvar(){
469 470 471 472
    for pvar in $*; do
        eval level=\${${pvar}_level:=0}
        eval ${pvar}_${level}="\$$pvar"
        eval ${pvar}_level=$(($level+1))
473 474 475 476
    done
}

popvar(){
477 478
    for pvar in $*; do
        eval level=\${${pvar}_level:-0}
479 480
        test $level = 0 && continue
        eval level=$(($level-1))
481 482 483
        eval $pvar="\${${pvar}_${level}}"
        eval ${pvar}_level=$level
        eval unset ${pvar}_${level}
484 485 486
    done
}

487 488 489 490 491 492 493 494
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

495 496 497 498 499 500 501 502
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

503
enable_safe(){
504 505 506
    for var; do
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
507 508 509
}

disable_safe(){
510 511 512
    for var; do
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
513 514
}

515 516 517
do_enable_deep(){
    for var; do
        enabled $var && continue
518
        eval sel="\$${var}_select"
519 520
        eval sgs="\$${var}_suggest"
        pushvar var sgs
521
        enable_deep $sel
522 523
        popvar sgs
        enable_deep_weak $sgs
524 525 526 527 528 529 530 531 532
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

533
enable_deep_weak(){
534 535 536 537 538 539 540
    for var; do
        disabled $var && continue
        pushvar var
        do_enable_deep $var
        popvar var
        enable_weak $var
    done
541 542
}

543
enabled(){
544 545
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
546 547
}

548
disabled(){
549 550
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
551 552
}

553 554 555 556 557 558
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

559 560 561 562 563 564
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

565 566 567 568 569 570
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

571 572 573 574
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
575
    return 1
576 577
}

578 579
set_default(){
    for opt; do
580
        eval : \${$opt:=\$${opt}_default}
581 582 583
    done
}

584 585 586 587 588 589 590 591 592
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

593
do_check_deps(){
594
    for cfg; do
595
        cfg="${cfg#!}"
596 597 598
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking
599
        append allopts $cfg
600

601
        eval dep_all="\$${cfg}_deps"
602
        eval dep_any="\$${cfg}_deps_any"
603
        eval dep_sel="\$${cfg}_select"
604
        eval dep_sgs="\$${cfg}_suggest"
605 606
        eval dep_ifa="\$${cfg}_if"
        eval dep_ifn="\$${cfg}_if_any"
607

608
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
609
        do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
610
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
611

612 613
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
M
Måns Rullgård 已提交
614 615
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
616
        disabled_any $dep_sel && disable $cfg
617

618
        if enabled $cfg; then
619
            enable_deep $dep_sel
620
            enable_deep_weak $dep_sgs
621 622
        fi

623
        disable ${cfg}_checking
624 625 626
    done
}

627 628 629 630 631 632 633 634 635 636 637 638
check_deps(){
    unset allopts

    do_check_deps "$@"

    for cfg in $allopts; do
        enabled $cfg || continue
        eval dep_extralibs="\$${cfg}_extralibs"
        test -n "$dep_extralibs" && add_extralibs $dep_extralibs
    done
}

639 640
print_config(){
    pfx=$1
641 642
    files=$2
    shift 2
643 644 645 646 647 648 649 650 651 652 653 654 655 656
    map 'eval echo "$v \${$v:-no}"' "$@" |
    awk "BEGIN { split(\"$files\", files) }
        {
            c = \"$pfx\" toupper(\$1);
            v = \$2;
            sub(/yes/, 1, v);
            sub(/no/,  0, v);
            for (f in files) {
                file = files[f];
                if (file ~ /\\.h\$/) {
                    printf(\"#define %s %d\\n\", c, v) >>file;
                } else if (file ~ /\\.asm\$/) {
                    printf(\"%%define %s %d\\n\", c, v) >>file;
                } else if (file ~ /\\.mak\$/) {
657
                    n = -v ? \"\" : \"!\";
658 659 660 661
                    printf(\"%s%s=yes\\n\", n, c) >>file;
                }
            }
        }"
662 663
}

664 665 666 667
print_enabled(){
    suf=$1
    shift
    for v; do
668
        enabled $v && printf "%s\n" ${v%$suf};
669 670 671
    done
}

672 673 674 675 676 677
append(){
    var=$1
    shift
    eval "$var=\"\$$var $*\""
}

678 679 680 681 682 683
prepend(){
    var=$1
    shift
    eval "$var=\"$* \$$var\""
}

684 685 686 687 688 689 690 691 692
unique(){
    var=$1
    uniq_list=""
    for tok in $(eval echo \$$var); do
        uniq_list="$(filter_out $tok $uniq_list) $tok"
    done
    eval "$var=\"${uniq_list}\""
}

693
add_cppflags(){
694
    append CPPFLAGS "$@"
695 696
}

697
add_cflags(){
698
    append CFLAGS $($cflags_filter "$@")
699 700
}

701
add_asflags(){
702
    append ASFLAGS $($asflags_filter "$@")
703 704
}

L
Luca Barbato 已提交
705 706 707 708
add_objcflags(){
    append OBJCFLAGS $($objcflags_filter "$@")
}

709
add_ldflags(){
710
    append LDFLAGS $($ldflags_filter "$@")
711 712
}

713 714 715 716
add_ldexeflags(){
    append LDEXEFLAGS $($ldflags_filter "$@")
}

717 718 719 720
add_stripflags(){
    append STRIPFLAGS "$@"
}

721
add_extralibs(){
722
    prepend extralibs $($ldflags_filter "$@")
723 724
}

725 726 727 728
add_host_cppflags(){
    append host_cppflags "$@"
}

729 730 731 732 733 734 735 736
add_host_cflags(){
    append host_cflags $($host_cflags_filter "$@")
}

add_host_ldflags(){
    append host_ldflags $($host_ldflags_filter "$@")
}

737 738 739 740 741 742
add_compat(){
    append compat_objs $1
    shift
    map 'add_cppflags -D$v' "$@"
}

743
check_cmd(){
M
Måns Rullgård 已提交
744
    log "$@"
745
    "$@" >> $logfile 2>&1
746 747
}

748 749 750 751
cc_o(){
    eval printf '%s\\n' $CC_O
}

752 753 754 755
cc_e(){
    eval printf '%s\\n' $CC_E
}

756
check_cc(){
757
    log check_cc "$@"
758
    cat > $TMPC
759
    log_file $TMPC
760
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
761 762
}

L
Luca Barbato 已提交
763 764 765 766 767 768 769
check_objcc(){
    log check_objcc "$@"
    cat > $TMPC
    log_file $TMPC
    check_cmd $objcc $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPC
}

770 771
check_cpp(){
    log check_cpp "$@"
772
    cat > $TMPC
773
    log_file $TMPC
774
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
775 776
}

777 778 779 780
as_o(){
    eval printf '%s\\n' $AS_O
}

781 782
check_as(){
    log check_as "$@"
783 784 785
    cat > $TMPS
    log_file $TMPS
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
786 787
}

788 789
check_inline_asm(){
    log check_inline_asm "$@"
790
    name="$1"
791
    code="$2"
792
    shift 2
793
    disable $name
794
    check_cc "$@" <<EOF && enable $name
795
void foo(void){ __asm__ volatile($code); }
796 797 798
EOF
}

M
Mans Rullgard 已提交
799 800 801 802 803 804
check_insn(){
    log check_insn "$@"
    check_inline_asm ${1}_inline "\"$2\""
    echo "$2" | check_as && enable ${1}_external || disable ${1}_external
}

L
Loren Merritt 已提交
805 806 807 808 809 810 811 812
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

813 814 815 816
ld_o(){
    eval printf '%s\\n' $LD_O
}

817
check_ld(){
818
    log check_ld "$@"
819 820
    flags=$(filter_out '-l*' "$@")
    libs=$(filter '-l*' "$@")
821
    check_cc $($cflags_filter $flags) || return
822 823
    flags=$($ldflags_filter $flags)
    libs=$($ldflags_filter $libs)
824
    check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
825 826
}

827 828 829 830 831 832 833
print_include(){
    hdr=$1
    test "${hdr%.h}" = "${hdr}" &&
        echo "#include $hdr"    ||
        echo "#include <$hdr>"
}

834 835 836 837 838 839 840 841
check_code(){
    log check_code "$@"
    check=$1
    headers=$2
    code=$3
    shift 3
    {
        for hdr in $headers; do
842
            print_include $hdr
843 844 845 846 847
        done
        echo "int main(void) { $code; return 0; }"
    } | check_$check "$@"
}

848 849
check_cppflags(){
    log check_cppflags "$@"
850
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
851 852 853 854
int x;
EOF
}

855 856
test_cflags(){
    log test_cflags "$@"
857
    set -- $($cflags_filter "$@")
858
    check_cc "$@" <<EOF
859 860 861 862
int x;
EOF
}

863 864 865 866 867
check_cflags(){
    log check_cflags "$@"
    test_cflags "$@" && add_cflags "$@"
}

L
Luca Barbato 已提交
868 869 870 871 872 873 874 875 876 877 878 879 880
test_objcflags(){
    log test_cflags "$@"
    set -- $($cflags_filter "$@")
    check_objcc "$@" <<EOF
int x;
EOF
}

check_objcflags(){
    log check_cflags "$@"
    test_objcflags "$@" && add_objcflags "$@"
}

881 882 883
test_ldflags(){
    log test_ldflags "$@"
    check_ld "$@" <<EOF
884
int main(void){ return 0; }
885 886 887
EOF
}

888 889 890 891 892
check_ldflags(){
    log check_ldflags "$@"
    test_ldflags "$@" && add_ldflags "$@"
}

893 894 895 896 897 898 899 900 901 902 903 904 905 906
test_stripflags(){
    log test_stripflags "$@"
    # call check_cc to get a fresh TMPO
    check_cc <<EOF
int main(void) { return 0; }
EOF
    check_cmd $strip $STRIPFLAGS "$@" $TMPO
}

check_stripflags(){
    log check_stripflags "$@"
    test_stripflags "$@" && add_stripflags "$@"
}

907
check_header(){
908
    log check_header "$@"
909 910
    header=$1
    shift
911 912
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
913 914 915 916 917 918
#include <$header>
int x;
EOF
}

check_func(){
919
    log check_func "$@"
920 921
    func=$1
    shift
M
Måns Rullgård 已提交
922 923
    disable $func
    check_ld "$@" <<EOF && enable $func
924
extern int $func();
925
int main(void){ $func(); }
926 927 928
EOF
}

929
check_mathfunc(){
930
    log check_mathfunc "$@"
931
    func=$1
932 933 934
    narg=$2
    shift 2
    test $narg = 2 && args="f, g" || args="f"
935 936 937
    disable $func
    check_ld "$@" <<EOF && enable $func
#include <math.h>
938
float foo(float f, float g) { return $func($args); }
939
int main(void){ return 0; }
940 941 942
EOF
}

943 944
check_func_headers(){
    log check_func_headers "$@"
945
    headers=$1
946
    funcs=$2
947
    shift 2
948 949
    {
        for hdr in $headers; do
950
            print_include $hdr
951 952 953 954 955 956
        done
        for func in $funcs; do
            echo "long check_$func(void) { return (long) $func; }"
        done
        echo "int main(void) { return 0; }"
    } | check_ld "$@" && enable $funcs && enable_safe $headers
957 958
}

959 960 961 962
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
963
    shift 2
964
    check_cpp "$@" <<EOF
965 966 967 968 969 970 971
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

972 973 974 975 976
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
977
    check_header $header && check_func $func "$@" && add_extralibs "$@"
978 979
}

980 981 982
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
983
    funcs="$2"
984
    shift 2
985
    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
986 987
}

988 989 990 991 992 993
check_pkg_config(){
    log check_pkg_config "$@"
    pkg="$1"
    headers="$2"
    funcs="$3"
    shift 3
994
    check_cmd $pkg_config --exists --print-errors $pkg || return
995 996
    pkg_cflags=$($pkg_config --cflags $pkg_config_flags $pkg)
    pkg_libs=$($pkg_config --libs $pkg_config_flags $pkg)
997
    check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
998 999
        set_safe "${pkg}_cflags" $pkg_cflags   &&
        set_safe "${pkg}_libs"   $pkg_libs
1000 1001
}

1002
check_exec(){
1003
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1004 1005
}

1006
check_exec_crash(){
1007
    code=$(cat)
1008 1009 1010 1011 1012 1013 1014

    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
    # are safe but may not be available everywhere.  Thus we use
    # raise(SIGTERM) instead.  The check is run in a subshell so we
    # can redirect the "Terminated" message from the shell.  SIGBUS
    # is not defined by standard C so it is used conditionally.

1015
    (check_exec "$@") >> $logfile 2>&1 <<EOF
1016 1017 1018 1019
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
1020 1021 1022
int foo(void){
    $code
}
1023
int (*func_ptr)(void) = foo;
D
Diego Biurrun 已提交
1024
int main(void){
1025 1026 1027 1028 1029 1030
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
1031
    return func_ptr();
1032 1033 1034 1035
}
EOF
}

1036 1037 1038 1039 1040
check_type(){
    log check_type "$@"
    headers=$1
    type=$2
    shift 2
1041
    disable_safe "$type"
1042
    check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1043 1044
}

1045
check_struct(){
1046
    log check_struct "$@"
1047 1048 1049 1050 1051
    headers=$1
    struct=$2
    member=$3
    shift 3
    disable_safe "${struct}_${member}"
1052 1053
    check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
        enable_safe "${struct}_${member}"
1054 1055
}

1056 1057 1058 1059 1060 1061 1062 1063 1064 1065
check_builtin(){
    log check_builtin "$@"
    name=$1
    headers=$2
    builtin=$3
    shift 3
    disable "$name"
    check_code ld "$headers" "$builtin" "$@" && enable "$name"
}

1066 1067 1068 1069 1070 1071 1072 1073 1074 1075
check_compile_assert(){
    log check_compile_assert "$@"
    name=$1
    headers=$2
    condition=$3
    shift 3
    disable "$name"
    check_code cc "$headers" "char c[2 * !!($condition) - 1]" "$@" && enable "$name"
}

1076 1077 1078 1079 1080 1081
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
1082 1083
}

1084 1085 1086 1087 1088 1089 1090 1091
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

1092 1093 1094
require_pkg_config(){
    pkg="$1"
    check_pkg_config "$@" || die "ERROR: $pkg not found"
1095 1096
    add_cflags    $(get_safe "${pkg}_cflags")
    add_extralibs $(get_safe "${pkg}_libs")
1097 1098
}

1099 1100 1101 1102
hostcc_e(){
    eval printf '%s\\n' $HOSTCC_E
}

1103 1104 1105 1106
hostcc_o(){
    eval printf '%s\\n' $HOSTCC_O
}

1107 1108 1109 1110
check_host_cc(){
    log check_host_cc "$@"
    cat > $TMPC
    log_file $TMPC
1111
    check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1112 1113
}

1114 1115 1116 1117
check_host_cpp(){
    log check_host_cpp "$@"
    cat > $TMPC
    log_file $TMPC
1118
    check_cmd $host_cc $host_cppflags $host_cflags "$@" $(hostcc_e $TMPO) $TMPC
1119 1120
}

1121 1122 1123 1124 1125 1126 1127
check_host_cppflags(){
    log check_host_cppflags "$@"
    check_host_cc "$@" <<EOF && append host_cppflags "$@"
int x;
EOF
}

1128 1129
check_host_cflags(){
    log check_host_cflags "$@"
1130
    set -- $($host_cflags_filter "$@")
1131 1132 1133 1134 1135
    check_host_cc "$@" <<EOF && append host_cflags "$@"
int x;
EOF
}

1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148
check_host_cpp_condition(){
    log check_host_cpp_condition "$@"
    header=$1
    condition=$2
    shift 2
    check_host_cpp "$@" <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

1149 1150 1151 1152 1153 1154
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

1155
cp_if_changed(){
1156 1157
    cmp -s "$1" "$2" && echo "$2 is unchanged" && return
    mkdir -p "$(dirname $2)"
M
Mans Rullgard 已提交
1158
    $cp_f "$1" "$2"
1159 1160
}

1161 1162 1163
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

1164
AVCODEC_COMPONENTS="
1165 1166 1167
    bsfs
    decoders
    encoders
1168
    hwaccels
1169 1170 1171 1172
    parsers
"

AVDEVICE_COMPONENTS="
1173 1174
    indevs
    outdevs
1175 1176 1177 1178 1179 1180 1181
"
AVFILTER_COMPONENTS="
    filters
"
AVFORMAT_COMPONENTS="
    demuxers
    muxers
1182 1183 1184
    protocols
"

1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196
AVRESAMPLE_COMPONENTS=""
AVUTIL_COMPONENTS=""

COMPONENT_LIST="
    $AVCODEC_COMPONENTS
    $AVDEVICE_COMPONENTS
    $AVFILTER_COMPONENTS
    $AVFORMAT_COMPONENTS
    $AVRESAMPLE_COMPONENTS
    $AVUTIL_COMPONENTS
"

1197
EXAMPLE_LIST="
1198
    avcodec_example
1199
    filter_audio_example
1200
    metadata_example
1201
    output_example
A
Anton Khirnov 已提交
1202
    qsvdec_example
1203
    transcode_aac_example
1204 1205
"

1206 1207 1208
EXTERNAL_LIBRARY_LIST="
    avisynth
    bzlib
1209
    cuda
1210 1211
    frei0r
    gnutls
1212
    libbs2b
1213 1214
    libcdio
    libdc1394
H
Hendrik Leppkes 已提交
1215
    libdcadec
1216 1217
    libfaac
    libfdk_aac
L
Luca Barbato 已提交
1218
    libfontconfig
1219 1220 1221
    libfreetype
    libgsm
    libilbc
1222
    libkvazaar
1223
    libmfx
1224 1225 1226 1227
    libmp3lame
    libopencore_amrnb
    libopencore_amrwb
    libopencv
1228
    libopenh264
1229 1230 1231 1232 1233
    libopenjpeg
    libopus
    libpulse
    librtmp
    libschroedinger
V
Vittorio Giovara 已提交
1234
    libsnappy
1235 1236
    libspeex
    libtheora
P
Paul B Mahol 已提交
1237
    libtwolame
1238 1239 1240 1241
    libvo_aacenc
    libvo_amrwbenc
    libvorbis
    libvpx
1242
    libwavpack
J
Justin Ruggles 已提交
1243
    libwebp
1244
    libx264
D
Derek Buitenhuis 已提交
1245
    libx265
1246
    libxavs
L
Luca Barbato 已提交
1247 1248 1249
    libxcb
    libxcb_shm
    libxcb_xfixes
1250
    libxvid
W
wm4 已提交
1251
    mmal
L
Luca Barbato 已提交
1252
    nvenc
1253 1254 1255 1256 1257
    openssl
    x11grab
    zlib
"

1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269
FEATURE_LIST="
    gray
    hardcoded_tables
    runtime_cpudetect
    safe_bitstream_reader
    shared
    small
    sram
    static
    swscale_alpha
"

1270
HWACCEL_LIST="
1271
    d3d11va
1272 1273 1274 1275 1276
    dxva2
    vaapi
    vda
    vdpau
"
1277

1278 1279 1280 1281 1282 1283 1284 1285 1286 1287
LIBRARY_LIST="
    avcodec
    avdevice
    avfilter
    avformat
    avresample
    avutil
    swscale
"

1288 1289 1290 1291 1292 1293
LICENSE_LIST="
    gpl
    nonfree
    version3
"

1294 1295 1296 1297 1298 1299
PROGRAM_LIST="
    avconv
    avplay
    avprobe
"

1300
SUBSYSTEM_LIST="
1301
    dct
1302
    doc
1303
    error_resilience
1304
    faan
1305
    fft
1306
    lsp
1307
    lzo
1308
    mdct
1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322
    network
    rdft
"

CONFIG_LIST="
    $COMPONENT_LIST
    $EXAMPLE_LIST
    $EXTERNAL_LIBRARY_LIST
    $FEATURE_LIST
    $HWACCEL_LIST
    $LICENSE_LIST
    $LIBRARY_LIST
    $PROGRAM_LIST
    $SUBSYSTEM_LIST
1323
    memalign_hack
1324
    neon_clobber_test
1325
    pic
1326
    pod2man
1327
    texi2html
1328
    thumb
1329
    valgrind_backtrace
1330
    xmm_clobber_test
1331
"
1332

1333
THREADS_LIST="
1334 1335
    pthreads
    w32threads
1336
"
1337

1338
ATOMICS_LIST="
1339 1340
    atomics_gcc
    atomics_suncc
1341
    atomics_win32
1342
"
1343

1344
ARCH_LIST="
1345
    aarch64
1346
    alpha
M
Måns Rullgård 已提交
1347
    arm
1348 1349 1350
    avr32
    avr32_ap
    avr32_uc
1351 1352 1353 1354
    bfin
    ia64
    m68k
    mips
1355
    mips64
1356
    parisc
1357
    ppc
1358
    ppc64
1359 1360 1361 1362
    s390
    sh4
    sparc
    sparc64
1363 1364
    tilegx
    tilepro
M
Måns Rullgård 已提交
1365
    tomi
1366 1367 1368
    x86
    x86_32
    x86_64
1369
"
1370

1371
ARCH_EXT_LIST_ARM="
1372 1373 1374
    armv5te
    armv6
    armv6t2
J
Janne Grunau 已提交
1375
    armv8
1376
    neon
1377
    vfp
1378
    vfpv3
1379
"
1380

1381
ARCH_EXT_LIST_X86_SIMD="
1382
    amd3dnow
1383
    amd3dnowext
1384
    avx
1385
    avx2
1386
    fma3
1387 1388 1389 1390 1391 1392 1393 1394 1395
    fma4
    mmx
    mmxext
    sse
    sse2
    sse3
    sse4
    sse42
    ssse3
1396 1397
    xop
"
1398

1399 1400 1401 1402
ARCH_EXT_LIST_PPC="
    altivec
    dcbzl
    ldbrx
1403
    power8
1404
    ppc4xx
1405
    vsx
1406 1407
"

1408 1409 1410 1411 1412 1413
ARCH_EXT_LIST_X86="
    $ARCH_EXT_LIST_X86_SIMD
    cpunop
    i686
"

1414 1415 1416 1417 1418 1419 1420 1421 1422 1423
ARCH_EXT_LIST_MIPS="
    loongson
    mips32r1
    mips64r1
    mips32r2
    mips64r2
    mips32r6
    mips64r6
"

1424
ARCH_EXT_LIST="
1425
    $ARCH_EXT_LIST_ARM
1426
    $ARCH_EXT_LIST_MIPS
1427
    $ARCH_EXT_LIST_PPC
1428
    $ARCH_EXT_LIST_X86
1429
    vis
1430
"
1431

1432 1433 1434 1435 1436 1437 1438
ARCH_FEATURES="
    aligned_stack
    fast_64bit
    fast_clz
    fast_cmov
    local_aligned_8
    local_aligned_16
1439
    simd_align_16
1440 1441 1442 1443 1444 1445 1446 1447 1448 1449
"

BUILTIN_LIST="
    atomic_cas_ptr
    machine_rw_barrier
    MemoryBarrier
    mm_empty
    rdtsc
    sync_val_compare_and_swap
"
1450
HAVE_LIST_CMDLINE="
1451 1452 1453
    inline_asm
    symver
    yasm
1454
"
1455

1456
HAVE_LIST_PUB="
1457
    bigendian
1458
    fast_unaligned
1459
"
1460

1461
HEADERS_LIST="
A
Alexandre Lision 已提交
1462
    AVFoundation_AVFoundation_h
1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474
    alsa_asoundlib_h
    altivec_h
    arpa_inet_h
    cdio_paranoia_h
    cdio_paranoia_paranoia_h
    dev_bktr_ioctl_bt848_h
    dev_bktr_ioctl_meteor_h
    dev_ic_bt8xx_h
    dev_video_bktr_ioctl_bt848_h
    dev_video_meteor_ioctl_meteor_h
    direct_h
    dlfcn_h
1475
    d3d11_h
1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494
    dxva_h
    gsm_h
    io_h
    mach_mach_time_h
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
    malloc_h
    poll_h
    sndio_h
    soundcard_h
    sys_mman_h
    sys_param_h
    sys_resource_h
    sys_select_h
    sys_soundcard_h
    sys_time_h
    sys_un_h
    sys_videoio_h
    unistd_h
1495
    valgrind_valgrind_h
1496 1497 1498 1499
    windows_h
    winsock2_h
"

1500 1501 1502 1503
INTRINSICS_LIST="
    intrinsics_neon
"

1504
MATH_FUNCS="
1505 1506
    atanf
    atan2f
1507
    cbrtf
1508
    cosf
1509 1510
    exp2
    exp2f
1511
    expf
1512 1513
    isinf
    isnan
1514
    ldexpf
1515 1516 1517 1518
    llrint
    llrintf
    log2
    log2f
1519
    log10f
1520 1521
    lrint
    lrintf
1522
    powf
1523 1524 1525
    rint
    round
    roundf
1526
    sinf
1527 1528 1529 1530
    trunc
    truncf
"

1531
SYSTEM_FUNCS="
1532
    aligned_malloc
1533
    clock_gettime
A
Alex Beregszaszi 已提交
1534
    closesocket
1535
    CommandLineToArgvW
1536
    CoTaskMemFree
1537
    CryptGenRandom
1538
    dlopen
M
Måns Rullgård 已提交
1539
    fcntl
1540
    flt_lim
M
Måns Rullgård 已提交
1541
    fork
1542
    getaddrinfo
1543
    gethrtime
1544
    getopt
1545
    GetProcessAffinityMask
1546
    GetProcessMemoryInfo
1547
    GetProcessTimes
R
Ramiro Polla 已提交
1548
    getrusage
1549
    GetSystemTimeAsFileTime
1550
    gettimeofday
1551
    gmtime_r
M
Måns Rullgård 已提交
1552
    inet_aton
M
Martin Storsjö 已提交
1553
    isatty
1554
    jack_port_get_latency_range
L
Luca Barbato 已提交
1555
    LoadLibrary
1556
    localtime_r
1557
    mach_absolute_time
D
Daniel Verkamp 已提交
1558
    MapViewOfFile
1559
    memalign
R
Ramiro Polla 已提交
1560
    mkstemp
1561
    mmap
M
Mans Rullgard 已提交
1562
    mprotect
M
Mans Rullgard 已提交
1563
    nanosleep
1564
    posix_memalign
1565
    sched_getaffinity
1566
    SetConsoleTextAttribute
1567
    setmode
1568
    setrlimit
M
Mans Rullgard 已提交
1569
    Sleep
S
Stefano Sabatini 已提交
1570
    strerror_r
1571 1572 1573 1574 1575 1576 1577
    sysconf
    sysctl
    usleep
    VirtualAlloc
"

TOOLCHAIN_FEATURES="
J
Janne Grunau 已提交
1578
    as_dn_directive
1579
    as_func
1580
    as_object_arch
1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597
    asm_mod_q
    attribute_may_alias
    attribute_packed
    ebp_available
    ebx_available
    gnu_as
    ibm_asm
    inline_asm_labels
    pragma_deprecated
    symver_asm_label
    symver_gnu_asm
    vfp_args
    xform_asm
    xmm_clobbers
"

TYPES_LIST="
1598
    CONDITION_VARIABLE_Ptr
1599
    socklen_t
1600
    struct_addrinfo
1601 1602
    struct_group_source_req
    struct_ip_mreq_source
1603
    struct_ipv6_mreq
1604
    struct_pollfd
1605
    struct_rusage_ru_maxrss
1606
    struct_sockaddr_in6
1607
    struct_sockaddr_sa_len
1608
    struct_sockaddr_storage
L
Luca Barbato 已提交
1609
    struct_v4l2_frmivalenum_discrete
1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621
"

HAVE_LIST="
    $ARCH_EXT_LIST
    $(add_suffix _external $ARCH_EXT_LIST)
    $(add_suffix _inline   $ARCH_EXT_LIST)
    $ARCH_FEATURES
    $ATOMICS_LIST
    $BUILTIN_LIST
    $HAVE_LIST_CMDLINE
    $HAVE_LIST_PUB
    $HEADERS_LIST
1622
    $INTRINSICS_LIST
1623 1624 1625 1626 1627 1628 1629
    $MATH_FUNCS
    $SYSTEM_FUNCS
    $THREADS_LIST
    $TOOLCHAIN_FEATURES
    $TYPES_LIST
    atomics_native
    dos_paths
1630
    dxva2_lib
1631 1632 1633 1634
    libc_msvcrt
    libdc1394_1
    libdc1394_2
    sdl
1635
    section_data_rel_ro
1636
    threads
A
Anton Khirnov 已提交
1637
    vaapi_x11
1638 1639
    vdpau_x11
    xlib
1640
"
1641

D
Diego Biurrun 已提交
1642
# options emitted with CONFIG_ prefix but not available on the command line
1643
CONFIG_EXTRA="
1644
    aandcttables
1645
    ac3dsp
1646
    audio_frame_queue
1647
    audiodsp
1648
    blockdsp
1649
    bswapdsp
1650
    cabac
1651
    dirac_parse
1652
    dvprofile
1653 1654
    faandct
    faanidct
1655
    fdctdsp
1656
    flacdsp
1657
    fmtconvert
1658
    g722dsp
1659
    gcrypt
1660
    gmp
1661
    golomb
1662
    gplv3
1663
    h263dsp
1664 1665 1666
    h264chroma
    h264dsp
    h264pred
1667
    h264qpel
1668
    hpeldsp
1669
    huffman
1670
    huffyuvdsp
1671
    huffyuvencdsp
1672
    idctdsp
1673
    iirfilter
1674
    imdct15
1675
    intrax8
1676
    iso_media
1677
    ividsp
1678
    jpegtables
1679
    libx262
1680
    lgplv3
1681
    lpc
L
Luca Barbato 已提交
1682
    lzf
1683
    me_cmp
1684
    mpeg_er
1685
    mpegaudio
1686
    mpegaudiodsp
1687
    mpegvideo
1688
    mpegvideoenc
1689
    mss34dsp
1690
    pixblockdsp
1691
    qpeldsp
1692
    qsv
A
Anton Khirnov 已提交
1693
    qsvdec
1694
    qsvenc
1695
    rangecoder
1696
    riffdec
1697
    riffenc
1698
    rtpdec
1699
    rtpenc_chain
1700
    rv34dsp
1701
    sinewin
L
Luca Barbato 已提交
1702
    snappy
1703
    startcode
V
Vittorio Giovara 已提交
1704 1705
    texturedsp
    texturedspenc
1706
    tpeldsp
1707
    vc1dsp
R
Ronald S. Bultje 已提交
1708
    videodsp
1709
    vp3dsp
1710
    vp56dsp
1711
    vp8dsp
1712
    wma_freqs
1713
    wmv2dsp
1714 1715
"

1716
CMDLINE_SELECT="
1717
    $ARCH_EXT_LIST
1718
    $CONFIG_LIST
1719
    $HAVE_LIST_CMDLINE
1720
    $THREADS_LIST
1721
    asm
1722
    cross_compile
1723 1724
    debug
    extra_warnings
1725
    logging
M
Mans Rullgard 已提交
1726
    lto
1727
    optimizations
R
Reinhard Tartler 已提交
1728
    rpath
1729
"
1730

1731
PATHS_LIST="
1732
    bindir
1733
    datadir
1734
    docdir
1735 1736 1737 1738 1739
    incdir
    libdir
    mandir
    prefix
    shlibdir
1740
"
1741 1742 1743

CMDLINE_SET="
    $PATHS_LIST
1744
    ar
1745
    arch
1746
    as
1747 1748
    build_suffix
    cc
L
Luca Barbato 已提交
1749
    objcc
1750 1751
    cpu
    cross_prefix
1752
    custom_allocator
1753
    dep_cc
1754
    env
1755
    extra_version
1756 1757
    host_cc
    host_cflags
1758
    host_ld
1759 1760
    host_ldflags
    host_libs
1761
    host_os
1762
    ld
1763
    logfile
1764
    malloc_prefix
1765
    nm
M
Mans Rullgard 已提交
1766
    optflags
1767
    pkg_config
1768
    pkg_config_flags
1769
    random_seed
M
Måns Rullgård 已提交
1770
    samples
1771 1772
    sysinclude
    sysroot
1773
    target_exec
1774
    target_os
1775
    target_path
1776
    target_samples
1777
    toolchain
1778
"
1779

1780 1781
CMDLINE_APPEND="
    extra_cflags
L
Luca Barbato 已提交
1782
    extra_objcflags
1783
    host_cppflags
1784 1785
"

D
Diego Biurrun 已提交
1786 1787
# code dependency declarations

1788
# architecture extensions
1789

M
Måns Rullgård 已提交
1790 1791
armv5te_deps="arm"
armv6_deps="arm"
1792
armv6t2_deps="arm"
J
Janne Grunau 已提交
1793
armv8_deps="aarch64"
1794
neon_deps_any="aarch64 arm"
1795
intrinsics_neon_deps="neon"
1796
vfp_deps_any="aarch64 arm"
1797
vfpv3_deps="vfp"
1798

1799 1800
map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM

1801 1802
altivec_deps="ppc"
ppc4xx_deps="ppc"
1803 1804
vsx_deps="altivec"
power8_deps="vsx"
1805

1806 1807 1808
cpunop_deps="i686"
x86_64_select="i686"
x86_64_suggest="fast_cmov"
1809

1810 1811
amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
1812
i686_deps="x86"
1813
mmx_deps="x86"
1814
mmxext_deps="mmx"
1815 1816 1817 1818 1819 1820 1821
sse_deps="mmxext"
sse2_deps="sse"
sse3_deps="sse2"
ssse3_deps="sse3"
sse4_deps="ssse3"
sse42_deps="sse4"
avx_deps="sse42"
1822
xop_deps="avx"
1823
fma3_deps="avx"
1824
fma4_deps="avx"
1825
avx2_deps="avx"
1826

1827 1828 1829 1830
mmx_external_deps="yasm"
mmx_inline_deps="inline_asm"
mmx_suggest="mmx_external mmx_inline"

1831
for ext in $(filter_out mmx $ARCH_EXT_LIST_X86_SIMD); do
1832 1833 1834 1835 1836 1837
    eval dep=\$${ext}_deps
    eval ${ext}_external_deps='"${dep}_external"'
    eval ${ext}_inline_deps='"${dep}_inline"'
    eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
done

1838 1839 1840 1841
aligned_stack_if_any="aarch64 ppc x86"
fast_64bit_if_any="aarch64 alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
fast_clz_if_any="aarch64 alpha avr32 mips ppc x86"
fast_unaligned_if_any="aarch64 ppc x86"
1842
simd_align_16_if_any="altivec neon sse"
1843

1844
# system capabilities
1845
symver_if_any="symver_asm_label symver_gnu_asm"
1846
valgrind_backtrace_deps="!optimizations valgrind_valgrind_h"
1847

1848 1849 1850 1851 1852
# threading support
atomics_gcc_if="sync_val_compare_and_swap"
atomics_suncc_if="atomic_cas_ptr machine_rw_barrier"
atomics_win32_if="MemoryBarrier"
atomics_native_if_any="$ATOMICS_LIST"
1853
w32threads_deps="atomics_native"
1854 1855
threads_if_any="$THREADS_LIST"

1856
# subsystems
V
Vitor Sessak 已提交
1857
dct_select="rdft"
1858
dirac_parse_select="golomb"
1859
error_resilience_select="me_cmp"
1860 1861
faandct_deps="faan fdctdsp"
faanidct_deps="faan idctdsp"
1862
h264dsp_select="startcode"
1863
intrax8_select="error_resilience"
1864 1865
mdct_select="fft"
rdft_select="fft"
1866
me_cmp_select="fdctdsp idctdsp pixblockdsp"
1867
mpeg_er_select="error_resilience"
1868
mpegaudio_select="mpegaudiodsp"
1869
mpegaudiodsp_select="dct"
1870
mpegvideo_select="blockdsp hpeldsp idctdsp me_cmp mpeg_er videodsp"
1871
mpegvideoenc_select="me_cmp mpegvideo pixblockdsp qpeldsp"
L
Luca Barbato 已提交
1872 1873
nvenc_deps_any="dlopen LoadLibrary"
nvenc_extralibs='$ldl'
1874
qsvdec_select="qsv"
1875
qsvenc_select="qsv"
1876
vc1dsp_select="h264chroma qpeldsp startcode"
1877

1878
# decoders / encoders
1879
aac_decoder_select="imdct15 mdct sinewin"
1880
aac_encoder_select="audio_frame_queue iirfilter mdct sinewin"
J
Janne Grunau 已提交
1881
aac_latm_decoder_select="aac_decoder aac_latm_parser"
1882
ac3_decoder_select="ac3_parser ac3dsp bswapdsp fmtconvert mdct"
1883 1884
ac3_encoder_select="ac3dsp audiodsp mdct me_cmp"
ac3_fixed_encoder_select="ac3dsp audiodsp mdct me_cmp"
1885 1886
adpcm_g722_decoder_select="g722dsp"
adpcm_g722_encoder_select="g722dsp"
1887
aic_decoder_select="golomb idctdsp"
1888
alac_encoder_select="lpc"
1889
als_decoder_select="bswapdsp"
1890
amrnb_decoder_select="lsp"
1891
amrwb_decoder_select="lsp"
1892
amv_decoder_select="sp5x_decoder"
1893
ape_decoder_select="bswapdsp"
1894
asv1_decoder_select="blockdsp bswapdsp idctdsp"
1895
asv1_encoder_select="bswapdsp fdctdsp pixblockdsp"
1896
asv2_decoder_select="blockdsp bswapdsp idctdsp"
1897
asv2_encoder_select="bswapdsp fdctdsp pixblockdsp"
1898
atrac1_decoder_select="mdct sinewin"
1899
atrac3_decoder_select="mdct"
M
Maxim Polijakowski 已提交
1900
atrac3p_decoder_select="mdct sinewin"
1901
bink_decoder_select="blockdsp hpeldsp"
1902 1903
binkaudio_dct_decoder_select="mdct rdft dct sinewin wma_freqs"
binkaudio_rdft_decoder_select="mdct rdft sinewin wma_freqs"
1904
cavs_decoder_select="blockdsp golomb h264chroma idctdsp qpeldsp videodsp"
1905
cllc_decoder_select="bswapdsp"
1906
comfortnoise_encoder_select="lpc"
1907
cook_decoder_select="audiodsp mdct sinewin"
1908
cscd_decoder_select="lzo"
1909
cscd_decoder_suggest="zlib"
1910
dca_decoder_select="fmtconvert mdct"
1911
dds_decoder_select="texturedsp"
1912
dnxhd_decoder_select="blockdsp idctdsp"
1913
dnxhd_encoder_select="aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
1914
dvvideo_decoder_select="dvprofile idctdsp"
1915
dvvideo_encoder_select="dvprofile fdctdsp me_cmp pixblockdsp"
1916
dxa_decoder_deps="zlib"
V
Vittorio Giovara 已提交
1917
dxv_decoder_select="lzf texturedsp"
1918
eac3_decoder_select="ac3_decoder"
1919
eac3_encoder_select="ac3_encoder"
1920 1921
eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo"
eatgq_decoder_select="aandcttables idctdsp"
1922
eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp"
J
Jimmy Christensen 已提交
1923
exr_decoder_deps="zlib"
1924 1925
ffv1_decoder_select="golomb rangecoder"
ffv1_encoder_select="rangecoder"
1926 1927
ffvhuff_decoder_select="huffyuv_decoder"
ffvhuff_encoder_select="huffyuv_encoder"
K
Kostya Shishkov 已提交
1928
fic_decoder_select="golomb"
1929 1930
flac_decoder_select="flacdsp golomb"
flac_encoder_select="bswapdsp flacdsp golomb lpc"
1931 1932 1933
flashsv_decoder_deps="zlib"
flashsv_encoder_deps="zlib"
flashsv2_decoder_deps="zlib"
1934
flv_decoder_select="h263_decoder"
1935
flv_encoder_select="h263_encoder"
1936 1937
fourxm_decoder_select="blockdsp bswapdsp"
fraps_decoder_select="bswapdsp huffman"
1938
g2m_decoder_deps="zlib"
1939
g2m_decoder_select="blockdsp idctdsp jpegtables"
1940
h261_decoder_select="mpeg_er mpegvideo"
1941
h261_encoder_select="aandcttables mpegvideoenc"
1942
h263_decoder_select="error_resilience h263_parser h263dsp mpeg_er mpegvideo qpeldsp"
1943
h263_encoder_select="aandcttables h263dsp mpegvideoenc"
1944
h263i_decoder_select="h263_decoder"
1945
h263p_encoder_select="h263_encoder"
1946
h264_decoder_select="cabac golomb h264chroma h264dsp h264pred h264qpel videodsp"
1947
h264_decoder_suggest="error_resilience"
L
Luca Barbato 已提交
1948
h264_nvenc_encoder_deps="nvenc"
1949
h264_qsv_decoder_deps="libmfx"
A
Anton Khirnov 已提交
1950
h264_qsv_decoder_select="h264_mp4toannexb_bsf h264_parser qsvdec h264_qsv_hwaccel"
1951 1952
h264_qsv_encoder_deps="libmfx"
h264_qsv_encoder_select="qsvenc"
V
Vittorio Giovara 已提交
1953 1954 1955
hap_decoder_select="snappy texturedsp"
hap_encoder_deps="libsnappy"
hap_encoder_select="texturedspenc"
1956
hevc_decoder_select="bswapdsp cabac golomb videodsp"
L
Luca Barbato 已提交
1957
hevc_nvenc_encoder_deps="nvenc"
1958
hevc_qsv_encoder_deps="libmfx"
1959 1960
hevc_qsv_decoder_deps="libmfx"
hevc_qsv_decoder_select="hevc_mp4toannexb_bsf hevc_parser qsvdec hevc_qsv_hwaccel"
1961
hevc_qsv_encoder_select="qsvenc"
1962 1963
huffyuv_decoder_select="bswapdsp huffyuvdsp"
huffyuv_encoder_select="bswapdsp huffman huffyuvencdsp"
1964
iac_decoder_select="imc_decoder"
1965
imc_decoder_select="bswapdsp fft mdct sinewin"
1966
indeo3_decoder_select="hpeldsp"
1967 1968
indeo4_decoder_select="ividsp"
indeo5_decoder_select="ividsp"
1969
interplay_video_decoder_select="hpeldsp"
1970
jpegls_decoder_select="golomb mjpeg_decoder"
1971
jpegls_encoder_select="golomb"
1972
jv_decoder_select="blockdsp"
1973
lagarith_decoder_select="huffyuvdsp"
1974
ljpeg_encoder_select="aandcttables idctdsp jpegtables"
1975
loco_decoder_select="golomb"
1976
mdec_decoder_select="blockdsp idctdsp mpegvideo"
K
Kostya Shishkov 已提交
1977
metasound_decoder_select="lsp mdct sinewin"
1978
mimic_decoder_select="blockdsp bswapdsp hpeldsp idctdsp"
1979 1980
mjpeg_decoder_select="blockdsp hpeldsp idctdsp jpegtables"
mjpeg_encoder_select="aandcttables jpegtables mpegvideoenc"
1981
mjpegb_decoder_select="mjpeg_decoder"
1982
mlp_decoder_select="mlp_parser"
1983
motionpixels_decoder_select="bswapdsp"
1984 1985 1986 1987 1988 1989 1990 1991 1992 1993
mp1_decoder_select="mpegaudio"
mp1float_decoder_select="mpegaudio"
mp2_decoder_select="mpegaudio"
mp2float_decoder_select="mpegaudio"
mp3_decoder_select="mpegaudio"
mp3adu_decoder_select="mpegaudio"
mp3adufloat_decoder_select="mpegaudio"
mp3float_decoder_select="mpegaudio"
mp3on4_decoder_select="mpegaudio"
mp3on4float_decoder_select="mpegaudio"
1994
mpc7_decoder_select="bswapdsp mpegaudiodsp"
1995
mpc8_decoder_select="mpegaudiodsp"
1996
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1997
mpeg_xvmc_decoder_select="mpeg2video_decoder"
1998
mpeg1video_decoder_select="error_resilience mpeg_er mpegvideo"
1999
mpeg1video_encoder_select="aandcttables mpegvideoenc"
2000
mpeg2video_decoder_select="error_resilience mpeg_er mpegvideo"
2001
mpeg2video_encoder_select="aandcttables mpegvideoenc"
2002 2003
mpeg2_qsv_decoder_deps="libmfx"
mpeg2_qsv_decoder_select="qsvdec mpeg2_qsv_hwaccel mpegvideo_parser"
2004
mpeg2_qsv_encoder_deps="libmfx"
2005
mpeg2_qsv_encoder_select="qsvenc"
2006 2007
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
mpeg4_encoder_select="h263_encoder"
2008
msa1_decoder_select="mss34dsp"
2009 2010
msmpeg4v1_decoder_select="h263_decoder"
msmpeg4v2_decoder_select="h263_decoder"
2011
msmpeg4v2_encoder_select="h263_encoder"
2012
msmpeg4v3_decoder_select="h263_decoder"
2013
msmpeg4v3_encoder_select="h263_encoder"
2014
mss2_decoder_select="error_resilience mpeg_er mpegvideo vc1_decoder"
2015
mts2_decoder_select="mss34dsp"
2016
mxpeg_decoder_select="mjpeg_decoder"
2017
nellymoser_decoder_select="mdct sinewin"
2018
nellymoser_encoder_select="audio_frame_queue mdct sinewin"
2019
nuv_decoder_select="idctdsp lzo"
A
Anton Khirnov 已提交
2020 2021
nvenc_h264_encoder_deps="nvenc"
nvenc_hevc_encoder_deps="nvenc"
K
Kostya Shishkov 已提交
2022
on2avc_decoder_select="mdct"
A
Anton Khirnov 已提交
2023
opus_decoder_deps="avresample"
2024
opus_decoder_select="imdct15"
2025 2026
png_decoder_deps="zlib"
png_encoder_deps="zlib"
2027
png_encoder_select="huffyuvencdsp"
2028
prores_decoder_select="idctdsp"
2029
prores_encoder_select="fdctdsp"
2030
qcelp_decoder_select="lsp"
2031
qdm2_decoder_select="mdct rdft mpegaudiodsp"
2032
ra_144_encoder_select="audio_frame_queue lpc"
2033
ralf_decoder_select="golomb"
2034
rscc_decoder_deps="zlib"
2035
rv10_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2036
rv10_encoder_select="h263_encoder"
2037
rv20_decoder_select="error_resilience h263_decoder h263dsp mpeg_er"
2038
rv20_encoder_select="h263_encoder"
2039 2040
rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpeg_er mpegvideo rv34dsp videodsp"
V
Vittorio Giovara 已提交
2041
screenpresso_decoder_deps="zlib"
2042
shorten_decoder_select="golomb"
2043
sipr_decoder_select="lsp"
2044
sp5x_decoder_select="mjpeg_decoder"
2045
svq1_decoder_select="hpeldsp"
2046
svq1_encoder_select="aandcttables hpeldsp me_cmp mpegvideoenc"
2047
svq3_decoder_select="h264_decoder hpeldsp tpeldsp"
2048
svq3_decoder_suggest="zlib"
2049
tak_decoder_select="audiodsp"
V
Vittorio Giovara 已提交
2050 2051
tdsc_decoder_deps="zlib"
tdsc_decoder_select="mjpeg_decoder"
2052
theora_decoder_select="vp3_decoder"
2053
thp_decoder_select="mjpeg_decoder"
2054 2055
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
2056
truehd_decoder_select="mlp_decoder"
2057 2058
truemotion2_decoder_select="bswapdsp"
truespeech_decoder_select="bswapdsp"
2059
tscc_decoder_deps="zlib"
2060
txd_decoder_select="texturedsp"
2061
twinvq_decoder_select="mdct lsp sinewin"
2062 2063
utvideo_decoder_select="bswapdsp"
utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
2064
vble_decoder_select="huffyuvdsp"
2065
vc1_decoder_select="blockdsp error_resilience h263_decoder h264qpel intrax8 mpeg_er mpegvideo vc1dsp"
2066
vc1image_decoder_select="vc1_decoder"
2067 2068
vorbis_decoder_select="mdct"
vorbis_encoder_select="mdct"
2069
vp3_decoder_select="hpeldsp vp3dsp videodsp"
2070 2071
vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp vp56dsp"
vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp vp56dsp"
2072 2073
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
2074 2075
vp7_decoder_select="h264pred videodsp vp8dsp"
vp8_decoder_select="h264pred videodsp vp8dsp"
R
Ronald S. Bultje 已提交
2076
vp9_decoder_select="videodsp"
J
Justin Ruggles 已提交
2077
webp_decoder_select="vp8_decoder"
2078 2079 2080 2081 2082
wmapro_decoder_select="mdct sinewin wma_freqs"
wmav1_decoder_select="mdct sinewin wma_freqs"
wmav1_encoder_select="mdct sinewin wma_freqs"
wmav2_decoder_select="mdct sinewin wma_freqs"
wmav2_encoder_select="mdct sinewin wma_freqs"
2083
wmavoice_decoder_select="lsp rdft dct mdct sinewin"
2084
wmv1_decoder_select="h263_decoder"
2085
wmv1_encoder_select="h263_encoder"
2086 2087
wmv2_decoder_select="blockdsp h263_decoder idctdsp intrax8 videodsp wmv2dsp"
wmv2_encoder_select="h263_encoder wmv2dsp"
2088
wmv3_decoder_select="vc1_decoder"
2089
wmv3image_decoder_select="wmv3_decoder"
2090 2091 2092 2093 2094
zerocodec_decoder_deps="zlib"
zlib_decoder_deps="zlib"
zlib_encoder_deps="zlib"
zmbv_decoder_deps="zlib"
zmbv_encoder_deps="zlib"
2095

2096
# hardware accelerators
2097
d3d11va_deps="d3d11_h dxva_h ID3D11VideoDecoder"
2098
dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode"
2099
vaapi_deps="va_va_h"
2100
vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
2101
vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
2102 2103
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"

2104 2105
h263_vaapi_hwaccel_deps="vaapi"
h263_vaapi_hwaccel_select="h263_decoder"
2106 2107
h264_d3d11va_hwaccel_deps="d3d11va"
h264_d3d11va_hwaccel_select="h264_decoder"
2108 2109
h264_dxva2_hwaccel_deps="dxva2"
h264_dxva2_hwaccel_select="h264_decoder"
W
wm4 已提交
2110 2111 2112 2113
h264_mmal_decoder_deps="mmal"
h264_mmal_hwaccel_deps="mmal"
h264_mmal_decoder_select="h264_decoder"
h264_mmal_encoder_deps="mmal"
2114
h264_qsv_hwaccel_deps="libmfx"
2115 2116 2117 2118
h264_vaapi_hwaccel_deps="vaapi"
h264_vaapi_hwaccel_select="h264_decoder"
h264_vda_hwaccel_deps="vda"
h264_vda_hwaccel_select="h264_decoder"
A
Anton Khirnov 已提交
2119 2120
h264_vda_old_hwaccel_deps="vda"
h264_vda_old_hwaccel_select="h264_decoder"
2121 2122
h264_vdpau_hwaccel_deps="vdpau"
h264_vdpau_hwaccel_select="h264_decoder"
2123 2124
hevc_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_HEVC"
hevc_d3d11va_hwaccel_select="hevc_decoder"
H
Hendrik Leppkes 已提交
2125 2126
hevc_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_HEVC"
hevc_dxva2_hwaccel_select="hevc_decoder"
2127
hevc_qsv_hwaccel_deps="libmfx"
2128
hevc_vdpau_hwaccel_deps="vdpau VdpPictureInfoHEVC"
2129
hevc_vdpau_hwaccel_select="hevc_decoder"
2130 2131
mpeg1_vdpau_hwaccel_deps="vdpau"
mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
2132 2133
mpeg2_d3d11va_hwaccel_deps="d3d11va"
mpeg2_d3d11va_hwaccel_select="mpeg2video_decoder"
2134 2135
mpeg2_dxva2_hwaccel_deps="dxva2"
mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
2136
mpeg2_qsv_hwaccel_deps="libmfx"
2137 2138 2139 2140 2141 2142 2143 2144
mpeg2_vaapi_hwaccel_deps="vaapi"
mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
mpeg2_vdpau_hwaccel_deps="vdpau"
mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
mpeg4_vaapi_hwaccel_deps="vaapi"
mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
mpeg4_vdpau_hwaccel_deps="vdpau"
mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
2145 2146
vc1_d3d11va_hwaccel_deps="d3d11va"
vc1_d3d11va_hwaccel_select="vc1_decoder"
2147 2148
vc1_dxva2_hwaccel_deps="dxva2"
vc1_dxva2_hwaccel_select="vc1_decoder"
2149 2150 2151 2152
vc1_vaapi_hwaccel_deps="vaapi"
vc1_vaapi_hwaccel_select="vc1_decoder"
vc1_vdpau_hwaccel_deps="vdpau"
vc1_vdpau_hwaccel_select="vc1_decoder"
2153
wmv3_d3d11va_hwaccel_select="vc1_d3d11va_hwaccel"
2154 2155
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
2156
wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
2157

2158
# parsers
2159
h264_parser_select="h264_decoder"
2160
hevc_parser_select="golomb"
2161
mpegvideo_parser_select="mpegvideo"
2162
mpeg4video_parser_select="error_resilience h263dsp mpegvideo qpeldsp"
2163
vc1_parser_select="vc1dsp"
2164

2165 2166 2167
# bitstream_filters
mjpeg2jpeg_bsf_select="jpegtables"

D
Diego Biurrun 已提交
2168
# external libraries
H
Hendrik Leppkes 已提交
2169
libdcadec_decoder_deps="libdcadec"
2170
libfaac_encoder_deps="libfaac"
2171
libfaac_encoder_select="audio_frame_queue"
M
Martin Storsjö 已提交
2172
libfdk_aac_decoder_deps="libfdk_aac"
2173
libfdk_aac_encoder_deps="libfdk_aac"
2174
libfdk_aac_encoder_select="audio_frame_queue"
2175 2176
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
2177 2178
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
2179 2180
libilbc_decoder_deps="libilbc"
libilbc_encoder_deps="libilbc"
2181
libkvazaar_encoder_deps="libkvazaar"
2182
libmp3lame_encoder_deps="libmp3lame"
2183
libmp3lame_encoder_select="audio_frame_queue"
2184 2185
libopencore_amrnb_decoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_deps="libopencore_amrnb"
2186
libopencore_amrnb_encoder_select="audio_frame_queue"
2187
libopencore_amrwb_decoder_deps="libopencore_amrwb"
2188
libopenh264_encoder_deps="libopenh264"
J
Jai Menon 已提交
2189
libopenjpeg_decoder_deps="libopenjpeg"
2190
libopenjpeg_encoder_deps="libopenjpeg"
N
Nicolas George 已提交
2191
libopus_decoder_deps="libopus"
N
Nathan Caldwell 已提交
2192
libopus_encoder_deps="libopus"
2193
libopus_encoder_select="audio_frame_queue"
2194 2195
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
D
David Conrad 已提交
2196
libspeex_decoder_deps="libspeex"
J
Justin Ruggles 已提交
2197
libspeex_encoder_deps="libspeex"
2198
libspeex_encoder_select="audio_frame_queue"
D
Diego Biurrun 已提交
2199
libtheora_encoder_deps="libtheora"
P
Paul B Mahol 已提交
2200
libtwolame_encoder_deps="libtwolame"
2201
libvo_aacenc_encoder_deps="libvo_aacenc"
2202
libvo_aacenc_encoder_select="audio_frame_queue"
2203
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2204
libvorbis_encoder_deps="libvorbis"
2205
libvorbis_encoder_select="audio_frame_queue"
2206 2207 2208 2209
libvpx_vp8_decoder_deps="libvpx"
libvpx_vp8_encoder_deps="libvpx"
libvpx_vp9_decoder_deps="libvpx"
libvpx_vp9_encoder_deps="libvpx"
2210
libwavpack_encoder_deps="libwavpack"
J
Justin Ruggles 已提交
2211
libwebp_encoder_deps="libwebp"
2212
libx262_encoder_deps="libx262"
2213
libx264_encoder_deps="libx264"
D
Derek Buitenhuis 已提交
2214
libx265_encoder_deps="libx265"
2215
libxavs_encoder_deps="libxavs"
2216
libxvid_encoder_deps="libxvid"
2217

D
Diego Biurrun 已提交
2218
# demuxers / muxers
2219
ac3_demuxer_select="ac3_parser"
2220
asf_demuxer_select="riffdec"
2221
asf_muxer_select="riffenc"
2222
asf_stream_muxer_select="asf_muxer"
2223
avi_demuxer_select="iso_media riffdec"
2224
avi_muxer_select="riffenc"
2225
avisynth_demuxer_deps="avisynth"
2226
avisynth_demuxer_select="riffdec"
2227
caf_demuxer_select="iso_media riffdec"
2228
dash_muxer_select="mp4_muxer"
2229
dirac_demuxer_select="dirac_parser"
2230 2231
dv_demuxer_select="dvprofile"
dv_muxer_select="dvprofile"
2232
dxa_demuxer_select="riffdec"
2233
eac3_demuxer_select="ac3_parser"
C
Clément Bœsch 已提交
2234
f4v_muxer_select="mov_muxer"
2235
flac_demuxer_select="flac_parser"
2236
hds_muxer_select="flv_muxer"
2237
hls_muxer_select="mpegts_muxer"
2238
ipod_muxer_select="mov_muxer"
2239
ismv_muxer_select="mov_muxer"
2240
matroska_audio_muxer_select="matroska_muxer"
2241
matroska_demuxer_select="iso_media riffdec"
2242
matroska_demuxer_suggest="bzlib lzo zlib"
2243
matroska_muxer_select="iso_media riffenc"
2244
mmf_muxer_select="riffenc"
2245
mov_demuxer_select="iso_media riffdec"
2246
mov_demuxer_suggest="zlib"
2247
mov_muxer_select="iso_media riffenc rtpenc_chain"
2248
mp3_demuxer_select="mpegaudio_parser"
2249
mp4_muxer_select="mov_muxer"
2250
mpegts_demuxer_select="iso_media"
2251
mpegts_muxer_select="adts_muxer latm_muxer"
2252 2253
mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_d10_muxer_select="mxf_muxer"
2254
nut_muxer_select="riffenc"
2255
nuv_demuxer_select="riffdec"
2256
oga_muxer_select="ogg_muxer"
2257
ogg_demuxer_select="dirac_parse"
2258
opus_muxer_select="ogg_muxer"
2259
psp_muxer_select="mov_muxer"
2260
rtp_demuxer_select="sdp_demuxer"
2261
rtpdec_select="asf_demuxer jpegtables mov_demuxer mpegts_demuxer rm_demuxer rtp_protocol"
2262
rtsp_demuxer_select="http_protocol rtpdec"
2263
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
M
Martin Storsjö 已提交
2264
sap_demuxer_select="sdp_demuxer"
2265
sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2266
sdp_demuxer_select="rtpdec"
2267
smoothstreaming_muxer_select="ismv_muxer"
2268
spdif_muxer_select="aac_parser"
2269
spx_muxer_select="ogg_muxer"
C
Clément Bœsch 已提交
2270
swf_demuxer_suggest="zlib"
P
Paul B Mahol 已提交
2271
tak_demuxer_select="tak_parser"
2272 2273
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
2274
w64_demuxer_select="wav_demuxer"
2275
wav_demuxer_select="riffdec"
2276
wav_muxer_select="riffenc"
2277
webm_muxer_select="iso_media riffenc"
2278
webm_muxer_suggest="libopus_encoder libvorbis_encoder libvpx_vp8_encoder libvpx_vp9_encoder"
2279
wtv_demuxer_select="mpegts_demuxer riffdec"
2280 2281
xmv_demuxer_select="riffdec"
xwma_demuxer_select="riffdec"
2282 2283

# indevs / outdevs
2284 2285
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
alsa_outdev_deps="alsa_asoundlib_h"
A
Alexandre Lision 已提交
2286
avfoundation_indev_deps="AVFoundation_AVFoundation_h"
2287
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
2288 2289
dv1394_indev_deps="dv1394"
dv1394_indev_select="dv_demuxer"
S
Stefano Sabatini 已提交
2290
fbdev_indev_deps="linux_fb_h"
2291
jack_indev_deps="jack_jack_h pthreads"
2292
libcdio_indev_deps="libcdio"
2293 2294 2295
libdc1394_indev_deps="libdc1394"
oss_indev_deps_any="soundcard_h sys_soundcard_h"
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
L
Luca Barbato 已提交
2296
pulse_indev_deps="libpulse"
B
Brad 已提交
2297 2298
sndio_indev_deps="sndio_h"
sndio_outdev_deps="sndio_h"
2299
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
2300
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2301
vfwcap_indev_extralibs="-lavicap32"
L
Luca Barbato 已提交
2302 2303
x11grab_indev_deps="x11grab"
x11grab_xcb_indev_deps="libxcb"
2304

D
Diego Biurrun 已提交
2305
# protocols
S
Samuel Pitoiset 已提交
2306
ffrtmpcrypt_protocol_deps="!librtmp_protocol"
2307
ffrtmpcrypt_protocol_deps_any="gcrypt gmp openssl"
S
Samuel Pitoiset 已提交
2308
ffrtmpcrypt_protocol_select="tcp_protocol"
2309 2310
ffrtmphttp_protocol_deps="!librtmp_protocol"
ffrtmphttp_protocol_select="http_protocol"
2311
gopher_protocol_select="network"
2312
http_protocol_select="tcp_protocol"
2313
httpproxy_protocol_select="tcp_protocol"
M
Martin Storsjö 已提交
2314
https_protocol_select="tls_protocol"
M
Marvin Scholz 已提交
2315
icecast_protocol_select="http_protocol"
2316 2317 2318 2319 2320
librtmp_protocol_deps="librtmp"
librtmpe_protocol_deps="librtmp"
librtmps_protocol_deps="librtmp"
librtmpt_protocol_deps="librtmp"
librtmpte_protocol_deps="librtmp"
M
Måns Rullgård 已提交
2321
mmsh_protocol_select="http_protocol"
2322
mmst_protocol_select="network"
2323
rtmp_protocol_deps="!librtmp_protocol"
2324
rtmp_protocol_select="tcp_protocol"
S
Samuel Pitoiset 已提交
2325
rtmpe_protocol_select="ffrtmpcrypt_protocol"
S
Samuel Pitoiset 已提交
2326 2327
rtmps_protocol_deps="!librtmp_protocol"
rtmps_protocol_select="tls_protocol"
2328
rtmpt_protocol_select="ffrtmphttp_protocol"
S
Samuel Pitoiset 已提交
2329
rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2330
rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2331
rtp_protocol_select="udp_protocol"
2332 2333
sctp_protocol_deps="struct_sctp_event_subscribe"
sctp_protocol_select="network"
2334
srtp_protocol_select="rtp_protocol"
2335
tcp_protocol_select="network"
W
wm4 已提交
2336
tls_gnutls_protocol_deps="gnutls"
2337
tls_gnutls_protocol_select="tcp_protocol"
W
wm4 已提交
2338
tls_openssl_protocol_deps="openssl !tls_gnutls_protocol"
2339
tls_openssl_protocol_select="tcp_protocol"
2340
tls_protocol_deps_any="tls_gnutls_protocol tls_openssl_protocol"
2341
udp_protocol_select="network"
L
Luca Barbato 已提交
2342 2343
unix_protocol_deps="sys_un_h"
unix_protocol_select="network"
2344

2345
# filters
2346
blackframe_filter_deps="gpl"
2347
boxblur_filter_deps="gpl"
2348
bs2b_filter_deps="libbs2b"
S
Stefano Sabatini 已提交
2349
cropdetect_filter_deps="gpl"
2350
delogo_filter_deps="gpl"
2351
drawtext_filter_deps="libfreetype"
2352
frei0r_filter_deps="frei0r dlopen"
2353
frei0r_filter_extralibs='$ldl'
2354
frei0r_src_filter_deps="frei0r dlopen"
2355
frei0r_src_filter_extralibs='$ldl'
2356
hqdn3d_filter_deps="gpl"
2357
hwupload_cuda_filter_deps="cuda"
V
Vittorio Giovara 已提交
2358
interlace_filter_deps="gpl"
2359
ocv_filter_deps="libopencv"
2360
resample_filter_deps="avresample"
2361
scale_filter_deps="swscale"
2362

2363
# examples
2364
avcodec_example_deps="avcodec avutil"
2365
filter_audio_example_deps="avfilter avutil"
2366
metadata_example_deps="avformat avutil"
2367
output_example_deps="avcodec avformat avutil swscale"
A
Anton Khirnov 已提交
2368
qsvdec_example_deps="avcodec avutil libmfx h264_qsv_decoder vaapi_x11"
2369
transcode_aac_example_deps="avcodec avformat avresample"
2370

2371
# libraries, in linking order
2372
avcodec_deps="avutil"
2373
avdevice_deps="avformat avcodec avutil"
2374
avfilter_deps="avutil"
2375
avformat_deps="avcodec avutil"
2376 2377
avresample_deps="avutil"
swscale_deps="avutil"
2378

D
Diego Biurrun 已提交
2379
# programs
2380
avconv_deps="avcodec avfilter avformat avresample swscale"
2381
avconv_select="aformat_filter anull_filter asyncts_filter atrim_filter format_filter
2382
               fps_filter null_filter resample_filter scale_filter
2383
               setpts_filter trim_filter"
2384
avplay_deps="avcodec avfilter avformat avresample sdl"
2385
avplay_libs='$sdl_libs'
2386
avplay_select="rdft format_filter transpose_filter hflip_filter vflip_filter"
A
Anton Khirnov 已提交
2387
avprobe_deps="avcodec avformat"
M
Måns Rullgård 已提交
2388

2389
# documentation
2390
pod2man_deps="doc"
2391 2392
texi2html_deps="doc"

F
Fabrice Bellard 已提交
2393
# default parameters
2394

2395
logfile="config.log"
2396 2397

# installation paths
2398 2399
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
2400
datadir_default='${prefix}/share/avconv'
2401
docdir_default='${prefix}/share/doc/libav'
2402 2403 2404 2405
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
2406 2407

# toolchain
2408
ar_default="ar"
2409
cc_default="gcc"
2410
host_cc_default="gcc"
M
Mans Rullgard 已提交
2411
cp_f="cp -f"
2412
ln_s="ln -s -f"
2413
nm_default="nm -g"
D
Diego Biurrun 已提交
2414
objformat="elf"
2415
pkg_config_default=pkg-config
M
Michael Niedermayer 已提交
2416
ranlib="ranlib"
L
Loren Merritt 已提交
2417
strip="strip"
D
Diego Biurrun 已提交
2418
yasmexe="yasm"
2419 2420

# machine
2421
arch_default=$(uname -m)
2422
cpu="generic"
2423
intrinsics="none"
2424 2425

# OS
2426 2427
target_os_default=$(tolower $(uname -s))
host_os=$target_os_default
2428 2429

# configurable options
2430 2431
enable $EXAMPLE_LIST $LIBRARY_LIST $PROGRAM_LIST

2432 2433 2434
enable asm
enable debug
enable doc
2435
enable faan faandct faanidct
2436
enable optimizations
2437
enable safe_bitstream_reader
D
Diego Biurrun 已提交
2438
enable static
2439
enable swscale_alpha
2440
enable valgrind_backtrace
2441

2442
# By default, enable only those hwaccels that have no external dependencies.
2443
enable d3d11va dxva2 vda vdpau
2444

2445
# build settings
M
Måns Rullgård 已提交
2446
SHFLAGS='-shared -Wl,-soname,$$(@F)'
2447 2448
LIBPREF="lib"
LIBSUF=".a"
2449 2450
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2451 2452
SLIBPREF="lib"
SLIBSUF=".so"
2453
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2454 2455
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
M
Måns Rullgård 已提交
2456
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2457 2458
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2459

2460 2461
asflags_filter=echo
cflags_filter=echo
2462 2463
ldflags_filter=echo

2464
AS_C='-c'
2465
AS_O='-o $@'
2466
CC_C='-c'
2467
CC_E='-E -o $@'
2468
CC_O='-o $@'
L
Luca Barbato 已提交
2469 2470 2471
OBJCC_C='-c'
OBJCC_E='-E -o $@'
OBJCC_O='-o $@'
2472
LD_O='-o $@'
2473 2474
LD_LIB='-l%'
LD_PATH='-L'
2475
HOSTCC_C='-c'
2476
HOSTCC_E='-E -o $@'
2477
HOSTCC_O='-o $@'
2478
HOSTLD_O='-o $@'
2479

2480
host_libs='-lm'
2481 2482
host_cflags_filter=echo
host_ldflags_filter=echo
2483

M
Måns Rullgård 已提交
2484
target_path='$(CURDIR)'
2485

2486 2487
# since the object filename is not given with the -MM flag, the compiler
# is only able to print the basename, and we must add the path ourselves
2488 2489
DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
DEPFLAGS='-MM'
2490

2491
# find source path
2492
if test -f configure; then
2493
    source_path=.
2494
else
2495
    source_path=$(cd $(dirname "$0"); pwd)
2496
    echo "$source_path" | grep -q '[[:blank:]]' &&
2497
        die "Out of tree builds are impossible with whitespace in source path."
2498 2499
    test -e "$source_path/config.h" &&
        die "Out of tree builds are impossible with config.h in source dir."
2500 2501
fi

2502
for v in "$@"; do
2503 2504 2505
    r=${v#*=}
    l=${v%"$r"}
    r=$(sh_quote "$r")
2506
    LIBAV_CONFIGURATION="${LIBAV_CONFIGURATION# } ${l}${r}"
2507
done
2508

2509 2510 2511 2512
find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
M
Måns Rullgård 已提交
2513
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2514 2515 2516 2517
}

ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2518
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2519 2520 2521 2522
PARSER_LIST=$(find_things   parser   PARSER   libavcodec/allcodecs.c)
BSF_LIST=$(find_things      bsf      BSF      libavcodec/allcodecs.c)
MUXER_LIST=$(find_things    muxer    _MUX     libavformat/allformats.c)
DEMUXER_LIST=$(find_things  demuxer  DEMUX    libavformat/allformats.c)
2523 2524
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2525
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2526

A
Anton Khirnov 已提交
2527 2528 2529 2530 2531 2532 2533 2534 2535
find_things_extern(){
    thing=$1
    pattern=$2
    file=$source_path/$3
    sed -n "s/^[^#]*extern.*$pattern *ff_\([^ ]*\)_$thing;/\1_$thing/p" "$file"
}

PROTOCOL_LIST=$(find_things_extern protocol URLProtocol libavformat/protocols.c)

2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549
ALL_COMPONENTS="
    $BSF_LIST
    $DECODER_LIST
    $DEMUXER_LIST
    $ENCODER_LIST
    $FILTER_LIST
    $HWACCEL_LIST
    $INDEV_LIST
    $MUXER_LIST
    $OUTDEV_LIST
    $PARSER_LIST
    $PROTOCOL_LIST
"

2550 2551 2552 2553 2554 2555
for n in $COMPONENT_LIST; do
    v=$(toupper ${n%s})_LIST
    eval enable \$$v
    eval ${n}_if_any="\$$v"
done

2556
enable $ARCH_EXT_LIST
2557 2558 2559 2560 2561 2562 2563

die_unknown(){
    echo "Unknown option \"$1\"."
    echo "See $0 --help for available options."
    exit 1
}

2564
print_3_columns() {
2565
    printf "%-25s %-25s %-25s\n" $(cat | tr ' ' '\n' | sort)
2566 2567
}

2568
show_list() {
R
Ramiro Polla 已提交
2569 2570
    suffix=_$1
    shift
2571
    echo $* | sed s/$suffix//g | print_3_columns
2572 2573 2574
    exit 0
}

2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595
rand_list(){
    IFS=', '
    set -- $*
    unset IFS
    for thing; do
        comp=${thing%:*}
        prob=${thing#$comp}
        prob=${prob#:}
        is_in ${comp} $COMPONENT_LIST && eval comp=\$$(toupper ${comp%s})_LIST
        echo "prob ${prob:-0.5}"
        printf '%s\n' $comp
    done
}

do_random(){
    action=$1
    shift
    random_seed=$(awk "BEGIN { srand($random_seed); print srand() }")
    $action $(rand_list "$@" | awk "BEGIN { srand($random_seed) } \$1 == \"prob\" { prob = \$2; next } rand() < prob { print }")
}

2596
for opt do
2597 2598
    optval="${opt#*=}"
    case "$opt" in
D
Diego Biurrun 已提交
2599 2600
        --extra-ldflags=*)
            add_ldflags $optval
2601
        ;;
2602 2603 2604
        --extra-ldexeflags=*)
            add_ldexeflags $optval
        ;;
D
Diego Biurrun 已提交
2605 2606
        --extra-libs=*)
            add_extralibs $optval
2607
        ;;
D
Diego Biurrun 已提交
2608 2609
        --disable-devices)
            disable $INDEV_LIST $OUTDEV_LIST
2610
        ;;
D
Diego Biurrun 已提交
2611 2612
        --enable-debug=*)
            debuglevel="$optval"
2613 2614 2615 2616 2617
        ;;
        --disable-programs)
            disable $PROGRAM_LIST
        ;;
        --disable-everything)
2618
            map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2619
        ;;
2620
        --disable-all)
2621
            map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
2622 2623
            disable $LIBRARY_LIST $PROGRAM_LIST doc
        ;;
2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638
        --enable-random|--disable-random)
            action=${opt%%-random}
            do_random ${action#--} $COMPONENT_LIST
        ;;
        --enable-random=*|--disable-random=*)
            action=${opt%%-random=*}
            do_random ${action#--} $optval
        ;;
        --enable-*=*|--disable-*=*)
            eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
            is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
            eval list=\$$(toupper $thing)_LIST
            name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
            $action $(filter "$name" $list)
        ;;
A
Anton Khirnov 已提交
2639 2640 2641 2642
        --enable-avserver|--disable-avserver*)
            warn "avserver has been removed, the ${opt} option is only"\
                 "provided for compatibility and will be removed in the future"
        ;;
2643 2644 2645
        --enable-?*|--disable-?*)
            eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
            if is_in $option $COMPONENT_LIST; then
2646
                test $action = disable && action=unset
2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673
                eval $action \$$(toupper ${option%s})_LIST
            elif is_in $option $CMDLINE_SELECT; then
                $action $option
            else
                die_unknown $opt
            fi
        ;;
        --list-*)
            NAME="${opt#--list-}"
            is_in $NAME $COMPONENT_LIST || die_unknown $opt
            NAME=${NAME%s}
            eval show_list $NAME \$$(toupper $NAME)_LIST
        ;;
        --help|-h) show_help
        ;;
        *)
            optname="${opt%%=*}"
            optname="${optname#--}"
            optname=$(echo "$optname" | sed 's/-/_/g')
            if is_in $optname $CMDLINE_SET; then
                eval $optname='$optval'
            elif is_in $optname $CMDLINE_APPEND; then
                append $optname "$optval"
            else
                die_unknown $opt
            fi
        ;;
2674
    esac
2675
done
2676

2677
for e in $env; do
2678 2679
    eval "export $e"
done
2680

M
Måns Rullgård 已提交
2681 2682
disabled logging && logfile=/dev/null

2683 2684 2685 2686
# Disable all the library-specific components if the library itself
# is disabled, see AVCODEC_LIST and following _LIST variables.

disable_components(){
2687
    disabled ${1} && disable $(
2688 2689 2690 2691 2692 2693 2694
        eval components="\$$(toupper ${1})_COMPONENTS"
        map 'eval echo \${$(toupper ${v%s})_LIST}' $components
    )
}

map 'disable_components $v' $LIBRARY_LIST

2695
echo "# $0 $LIBAV_CONFIGURATION" > $logfile
M
Måns Rullgård 已提交
2696 2697
set >> $logfile

2698
case "$toolchain" in
2699 2700
    *-asan)
        cc_default="${toolchain%-asan}"
2701 2702
        add_cflags  -fsanitize=address
        add_ldflags -fsanitize=address
2703
    ;;
2704 2705
    *-tsan)
        cc_default="${toolchain%-tsan}"
2706 2707
        add_cflags  -fsanitize=thread -pie
        add_ldflags -fsanitize=thread -pie
2708 2709 2710 2711 2712 2713
        case "$toolchain" in
            gcc-tsan)
                add_cflags  -fPIC
                add_ldflags -fPIC
                ;;
        esac
2714
    ;;
2715 2716
    *-usan)
        cc_default="${toolchain%-usan}"
2717 2718
        add_cflags  -fsanitize=undefined
        add_ldflags -fsanitize=undefined
2719 2720 2721 2722 2723
        case "$toolchain" in
            clang-usan)
                add_cflags -O1
                ;;
        esac
2724
    ;;
2725
    valgrind-*)
2726
        target_exec_default="valgrind"
2727 2728 2729 2730 2731 2732 2733 2734
        case "$toolchain" in
            valgrind-massif)
                target_exec_args="--alloc-fn=av_malloc --alloc-fn=av_mallocz"
                ;;
            valgrind-memcheck)
                target_exec_args="--track-origins=yes --leak-check=full"
                ;;
        esac
2735
    ;;
2736
    msvc)
2737 2738
        # Check whether the current MSVC version needs the C99 converter.
        # From MSVC 2013 (compiler major version 18) onwards, it does actually
2739
        # support enough of C99 to build libav. Default to the new
2740 2741 2742 2743 2744
        # behaviour if the regexp was unable to match anything, since this
        # successfully parses the version number of existing supported
        # versions that require the converter (MSVC 2010 and 2012).
        cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
        if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
2745
            cc_default="cl"
2746 2747 2748
        else
            cc_default="c99wrap cl"
        fi
2749
        ld_default="$source_path/compat/windows/mslink"
2750
        nm_default="dumpbin -symbols"
2751
        ar_default="lib"
2752 2753 2754 2755 2756
        case "$arch" in
        arm*)
            as_default="armasm"
            ;;
        esac
2757
        target_os_default="win32"
2758 2759 2760 2761 2762
        # Use a relative path for TMPDIR. This makes sure all the
        # ffconf temp files are written with a relative path, avoiding
        # issues with msys/win32 path conversion for MSVC parameters
        # such as -Fo<file> or -out:<file>.
        TMPDIR=.
2763
    ;;
2764
    icl)
2765 2766
        cc_default="icl"
        ld_default="xilink"
2767 2768 2769
        nm_default="dumpbin -symbols"
        ar_default="xilib"
        target_os_default="win32"
2770
        TMPDIR=.
2771
    ;;
2772 2773 2774 2775
    gcov)
        add_cflags  -fprofile-arcs -ftest-coverage
        add_ldflags -fprofile-arcs -ftest-coverage
    ;;
2776
    hardened)
2777 2778 2779
        add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2
        add_cflags   -fno-strict-overflow -fstack-protector-all
        add_ldflags  -Wl,-z,relro -Wl,-z,now
2780
    ;;
2781 2782 2783 2784 2785
    ?*)
        die "Unknown toolchain $toolchain"
    ;;
esac

2786 2787 2788 2789 2790 2791 2792
test -n "$cross_prefix" && enable cross_compile

if enabled cross_compile; then
    test -n "$arch" && test -n "$target_os" ||
        die "Must specify target arch and OS when cross-compiling"
fi

2793 2794
ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}"
L
Luca Barbato 已提交
2795
occ_default="${cross_prefix}${occ_default}"
2796 2797 2798 2799 2800 2801 2802
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

sysinclude_default="${sysroot}/usr/include"

2803
set_default arch cc pkg_config sysinclude target_exec target_os
2804 2805
enabled cross_compile || host_cc_default=$cc
set_default host_cc
2806

2807 2808 2809 2810 2811
if ! $pkg_config --version >/dev/null 2>&1; then
    warn "$pkg_config not found, library detection may fail."
    pkg_config=false
fi

2812 2813
exesuf() {
    case $1 in
2814
        mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2815 2816 2817 2818 2819
    esac
}

EXESUF=$(exesuf $target_os)
HOSTEXESUF=$(exesuf $host_os)
2820

2821
# set temporary file name
2822
: ${TMPDIR:=$TEMPDIR}
2823
: ${TMPDIR:=$TMP}
2824
: ${TMPDIR:=/tmp}
2825

2826
if ! check_cmd mktemp -u XXXXXX; then
2827 2828 2829
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
2830
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2831 2832 2833 2834 2835 2836
    }
fi

tmpfile(){
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
        (set -C; exec > $tmp) 2>/dev/null ||
2837
        die "Unable to create temporary file in $TMPDIR."
2838 2839 2840 2841 2842 2843
    append TMPFILES $tmp
    eval $1=$tmp
}

trap 'rm -f -- $TMPFILES' EXIT

2844
tmpfile TMPASM .asm
2845 2846 2847 2848 2849 2850 2851
tmpfile TMPC   .c
tmpfile TMPE   $EXESUF
tmpfile TMPH   .h
tmpfile TMPO   .o
tmpfile TMPS   .S
tmpfile TMPSH  .sh
tmpfile TMPV   .ver
2852 2853

unset -f mktemp
2854

M
Mans Rullgard 已提交
2855 2856
chmod +x $TMPE

2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869
# make sure we can execute files in $TMPDIR
cat > $TMPSH 2>> $logfile <<EOF
#! /bin/sh
EOF
chmod +x $TMPSH >> $logfile 2>&1
if ! $TMPSH >> $logfile 2>&1; then
    cat <<EOF
Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
variable to another directory and make sure that it is not mounted noexec.
EOF
    die "Sanity test failed."
fi

2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880
armasm_flags(){
    for flag; do
        case $flag in
            # Filter out MSVC cl.exe options from cflags that shouldn't
            # be passed to gas-preprocessor
            -M[TD]*)                                            ;;
            *)                  echo $flag                      ;;
        esac
   done
}

2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898
ccc_flags(){
    for flag; do
        case $flag in
            -std=c99)           echo -c99                       ;;
            -mcpu=*)            echo -arch ${flag#*=}           ;;
            -mieee)             echo -ieee                      ;;
            -O*|-fast)          echo $flag                      ;;
            -fno-math-errno)    echo -assume nomath_errno       ;;
            -g)                 echo -g3                        ;;
            -Wall)              echo -msg_enable level2         ;;
            -Wno-pointer-sign)  echo -msg_disable ptrmismatch1  ;;
            -Wl,*)              echo $flag                      ;;
            -f*|-W*)                                            ;;
            *)                  echo $flag                      ;;
        esac
   done
}

L
Luca Barbato 已提交
2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910
cparser_flags(){
    for flag; do
        case $flag in
            -Wno-switch)             echo -Wno-switch-enum ;;
            -Wno-format-zero-length) ;;
            -Wdisabled-optimization) ;;
            -Wno-pointer-sign)       echo -Wno-other ;;
            *)                       echo $flag ;;
        esac
    done
}

2911
msvc_common_flags(){
2912 2913
    for flag; do
        case $flag in
2914 2915 2916 2917 2918 2919
            # In addition to specifying certain flags under the compiler
            # specific filters, they must be specified here as well or else the
            # generic catch all at the bottom will print the original flag.
            -Wall)                ;;
            -std=c99)             ;;
            # Common flags
2920
            -fomit-frame-pointer) ;;
2921 2922 2923 2924
            -g)                   echo -Z7 ;;
            -fno-math-errno)      ;;
            -fno-common)          ;;
            -fno-signed-zeros)    ;;
2925
            -fPIC)                ;;
2926 2927
            -mthumb)              ;;
            -march=*)             ;;
2928
            -lz)                  echo zlib.lib ;;
2929 2930
            -lavifil32)           echo vfw32.lib ;;
            -lavicap32)           echo vfw32.lib user32.lib ;;
H
Henrik Gramner 已提交
2931
            -lx264)               echo libx264.lib ;;
2932
            -l*)                  echo ${flag#-l}.lib ;;
2933
            -L*)                  echo -libpath:${flag#-L} ;;
2934 2935 2936 2937 2938
            *)                    echo $flag ;;
        esac
    done
}

2939 2940 2941 2942
msvc_flags(){
    msvc_common_flags "$@"
    for flag; do
        case $flag in
D
Diego Biurrun 已提交
2943
            -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2944 2945
                                       -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
                                       -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2946
                                       -wd4273 -wd4554 -wd4701 ;;
2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962
        esac
    done
}

icl_flags(){
    msvc_common_flags "$@"
    for flag; do
        case $flag in
            # Despite what Intel's documentation says -Wall, which is supported
            # on Windows, does enable remarks so disable them here.
            -Wall)                echo $flag -Qdiag-disable:remark ;;
            -std=c99)             echo -Qstd=c99 ;;
        esac
    done
}

2963 2964 2965
pgi_flags(){
    for flag; do
        case $flag in
2966
            -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990
            -fomit-frame-pointer) echo -Mnoframe ;;
            -g)                   echo -gopt ;;
            *)                    echo $flag ;;
        esac
    done
}

suncc_flags(){
    for flag; do
        case $flag in
            -march=*|-mcpu=*)
                case "${flag#*=}" in
                    native)                   echo -xtarget=native       ;;
                    v9|niagara)               echo -xarch=sparc          ;;
                    ultrasparc)               echo -xarch=sparcvis       ;;
                    ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
                    i586|pentium)             echo -xchip=pentium        ;;
                    i686|pentiumpro|pentium2) echo -xtarget=pentium_pro  ;;
                    pentium3*|c3-2)           echo -xtarget=pentium3     ;;
                    pentium-m)          echo -xarch=sse2 -xchip=pentium3 ;;
                    pentium4*)          echo -xtarget=pentium4           ;;
                    prescott|nocona)    echo -xarch=sse3 -xchip=pentium4 ;;
                    *-sse3)             echo -xarch=sse3                 ;;
                    core2)              echo -xarch=ssse3 -xchip=core2   ;;
2991 2992
                    corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
                    corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2993
                    amdfam10|barcelona|bdver*) echo -xarch=sse4_1        ;;
D
Diego Biurrun 已提交
2994
                    athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2995
                    k8|opteron|athlon64|athlon-fx)
D
Diego Biurrun 已提交
2996 2997
                                               echo -xarch=sse2a         ;;
                    athlon*)                   echo -xarch=pentium_proa  ;;
2998 2999 3000 3001 3002 3003
                esac
                ;;
            -std=c99)             echo -xc99              ;;
            -fomit-frame-pointer) echo -xregs=frameptr    ;;
            -fPIC)                echo -KPIC -xcode=pic32 ;;
            -W*,*)                echo $flag              ;;
3004 3005
            -f*-*|-W*|-mimpure-text)                      ;;
            -shared)              echo -G                 ;;
3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027
            *)                    echo $flag              ;;
        esac
    done
}

tms470_flags(){
    for flag; do
        case $flag in
            -march=*|-mcpu=*)
                case "${flag#*=}" in
                    armv7-a|cortex-a*)      echo -mv=7a8 ;;
                    armv7-r|cortex-r*)      echo -mv=7r4 ;;
                    armv7-m|cortex-m*)      echo -mv=7m3 ;;
                    armv6*|arm11*)          echo -mv=6   ;;
                    armv5*e|arm[79]*e*|arm9[24]6*|arm96*|arm102[26])
                                            echo -mv=5e  ;;
                    armv4*|arm7*|arm9[24]*) echo -mv=4   ;;
                esac
                ;;
            -mfpu=neon)     echo --float_support=vfpv3 --neon ;;
            -mfpu=vfp)      echo --float_support=vfpv2        ;;
            -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
3028
            -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
3029 3030 3031 3032
            -msoft-float)   echo --float_support=vfplib       ;;
            -O[0-3]|-mf=*)  echo $flag                        ;;
            -g)             echo -g -mn                       ;;
            -pds=*)         echo $flag                        ;;
3033 3034 3035
            -D*|-I*)        echo $flag                        ;;
            --gcc|--abi=*)  echo $flag                        ;;
            -me)            echo $flag                        ;;
3036 3037 3038 3039
        esac
    done
}

3040 3041 3042 3043
probe_cc(){
    pfx=$1
    _cc=$2

3044 3045
    unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
    unset _ld_o _ldflags _ld_lib _ld_path
3046
    unset _depflags _DEPCMD _DEPFLAGS
3047 3048 3049 3050
    _flags_filter=echo

    if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
        _type=llvm_gcc
3051 3052
        gcc_extra_ver=$(expr "$($_cc --version 2>/dev/null | head -n1)" : '.*\((.*)\)')
        _ident="llvm-gcc $($_cc -dumpversion 2>/dev/null) $gcc_extra_ver"
3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067
        _depflags='-MMD -MF $(@:.o=.d) -MT $@'
        _cflags_speed='-O3'
        _cflags_size='-Os'
    elif $_cc -v 2>&1 | grep -qi ^gcc; then
        _type=gcc
        gcc_version=$($_cc --version | head -n1)
        gcc_basever=$($_cc -dumpversion)
        gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
        gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
        _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
        if ! $_cc -dumpversion | grep -q '^2\.'; then
            _depflags='-MMD -MF $(@:.o=.d) -MT $@'
        fi
        _cflags_speed='-O3'
        _cflags_size='-Os'
3068
    elif $_cc --version 2>/dev/null | grep -q ^icc; then
3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085
        _type=icc
        _ident=$($_cc --version | head -n1)
        _depflags='-MMD'
        _cflags_speed='-O3'
        _cflags_size='-Os'
        _cflags_noopt='-O1'
    elif $_cc -v 2>&1 | grep -q xlc; then
        _type=xlc
        _ident=$($_cc -qversion 2>/dev/null | head -n1)
        _cflags_speed='-O5'
        _cflags_size='-O5 -qcompact'
    elif $_cc -V 2>/dev/null | grep -q Compaq; then
        _type=ccc
        _ident=$($_cc -V | head -n1 | cut -d' ' -f1-3)
        _DEPFLAGS='-M'
        _cflags_speed='-fast'
        _cflags_size='-O1'
3086
        _flags_filter=ccc_flags
M
Martin Storsjö 已提交
3087
    elif $_cc --vsn 2>/dev/null | grep -Eq "ARM (C/C\+\+ )?Compiler"; then
3088 3089
        test -d "$sysroot" || die "No valid sysroot specified."
        _type=armcc
3090
        _ident=$($_cc --vsn | grep -i build | head -n1 | sed 's/.*: //')
3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102
        armcc_conf="$PWD/armcc.conf"
        $_cc --arm_linux_configure                 \
             --arm_linux_config_file="$armcc_conf" \
             --configure_sysroot="$sysroot"        \
             --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
             die "Error creating armcc configuration file."
        $_cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
        _flags="--arm_linux_config_file=$armcc_conf --translate_gcc"
        as_default="${cross_prefix}gcc"
        _depflags='-MMD'
        _cflags_speed='-O3'
        _cflags_size='-Os'
3103
    elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
3104 3105 3106
        _type=tms470
        _ident=$($_cc -version | head -n1 | tr -s ' ')
        _flags='--gcc --abi=eabi -me'
3107
        _cc_e='-ppl -fe=$@'
3108 3109 3110 3111 3112 3113 3114
        _cc_o='-fe=$@'
        _depflags='-ppa -ppd=$(@:.o=.d)'
        _cflags_speed='-O3 -mf=5'
        _cflags_size='-O3 -mf=2'
        _flags_filter=tms470_flags
    elif $_cc -v 2>&1 | grep -q clang; then
        _type=clang
3115
        _ident=$($_cc --version 2>/dev/null | head -n1)
3116
        _depflags='-MMD -MF $(@:.o=.d) -MT $@'
3117 3118 3119 3120 3121 3122
        _cflags_speed='-O3'
        _cflags_size='-Os'
    elif $_cc -V 2>&1 | grep -q Sun; then
        _type=suncc
        _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
        _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
3123
        _DEPFLAGS='-xM1 -xc99'
3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144
        _ldflags='-std=c99'
        _cflags_speed='-O5'
        _cflags_size='-O5 -xspace'
        _flags_filter=suncc_flags
    elif $_cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
        _type=pathscale
        _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
        _depflags='-MMD -MF $(@:.o=.d) -MT $@'
        _cflags_speed='-O2'
        _cflags_size='-Os'
        _flags_filter='filter_out -Wdisabled-optimization'
    elif $_cc -v 2>&1 | grep -q Open64; then
        _type=open64
        _ident=$($_cc -v 2>&1 | head -n1 | tr -d :)
        _depflags='-MMD -MF $(@:.o=.d) -MT $@'
        _cflags_speed='-O2'
        _cflags_size='-Os'
        _flags_filter='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
    elif $_cc -V 2>&1 | grep -q Portland; then
        _type=pgi
        _ident="PGI $($_cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
3145
        opt_common='-alias=ansi -Mdse -Mlre -Mpre'
3146 3147 3148 3149
        _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
        _cflags_size="-O2 -Munroll=c:1 $opt_common"
        _cflags_noopt="-O1"
        _flags_filter=pgi_flags
3150 3151 3152 3153 3154
    elif $_cc 2>&1 | grep -q 'Microsoft.*ARM.*Assembler'; then
        _type=armasm
        _ident=$($_cc | head -n1)
        # 4509: "This form of conditional instruction is deprecated"
        _flags="-nologo -ignore 4509"
3155
        _flags_filter=armasm_flags
3156
    elif $_cc -nologo- 2>&1 | grep -q Microsoft; then
3157
        _type=msvc
3158
        _ident=$($_cc 2>&1 | head -n1)
3159 3160 3161 3162
        _DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< 2>&1 | awk '\''/including/ { sub(/^.*file: */, ""); gsub(/\\/, "/"); if (!match($$0, / /)) print "$@:", $$0 }'\'' > $(@:.o=.d)'
        _DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -showIncludes -Zs'
        _cflags_speed="-O2"
        _cflags_size="-O1"
3163
        if $_cc -nologo- 2>&1 | grep -q Linker; then
3164
            _ld_o='-out:$@'
3165 3166 3167
        else
            _ld_o='-Fe$@'
        fi
3168 3169
        _cc_o='-Fo$@'
        _cc_e='-P -Fi$@'
3170 3171 3172 3173
        _flags_filter=msvc_flags
        _ld_lib='lib%.a'
        _ld_path='-libpath:'
        _flags='-nologo'
3174
        _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS'
3175 3176
    elif $_cc 2>&1 | grep -q Intel; then
        _type=icl
3177
        _ident=$($_cc 2>&1 | head -n1)
3178
        _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
D
Diego Biurrun 已提交
3179 3180
        # Not only is O3 broken on 13.x+ but it is slower on all previous
        # versions (tested) as well.
3181 3182 3183
        _cflags_speed="-O2"
        _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
        if $_cc 2>&1 | grep -q Linker; then
3184
            _ld_o='-out:$@'
3185 3186 3187
        else
            _ld_o='-Fe$@'
        fi
3188
        _cc_o='-Fo$@'
3189
        _cc_e='-P'
3190
        _flags_filter=icl_flags
3191 3192
        _ld_lib='lib%.a'
        _ld_path='-libpath:'
D
Diego Biurrun 已提交
3193
        # -Qdiag-error to make icl error when seeing certain unknown arguments
3194
        _flags='-nologo -Qdiag-error:4044,10157'
D
Diego Biurrun 已提交
3195 3196
        # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
        # with MSVC which enables it by default.
3197
        _cflags='-D_USE_MATH_DEFINES -Qms0 -Qvec- -Qsimd- -GS'
L
Luca Barbato 已提交
3198 3199 3200 3201 3202 3203 3204
    elif $_cc --version 2>/dev/null | grep -q ^cparser; then
        _type=cparser
        _ident=$($_cc --version | head -n1)
        _depflags='-MMD'
        _cflags_speed='-O4'
        _cflags_size='-O2'
        _flags_filter=cparser_flags
3205
    fi
3206 3207 3208 3209 3210 3211

    eval ${pfx}_type=\$_type
    eval ${pfx}_ident=\$_ident
}

set_ccvars(){
3212
    eval ${1}_C=\${_cc_c-\${${1}_C}}
3213
    eval ${1}_E=\${_cc_e-\${${1}_E}}
3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237
    eval ${1}_O=\${_cc_o-\${${1}_O}}

    if [ -n "$_depflags" ]; then
        eval ${1}_DEPFLAGS=\$_depflags
    else
        eval ${1}DEP=\${_DEPCMD:-\$DEPCMD}
        eval ${1}DEP_FLAGS=\${_DEPFLAGS:-\$DEPFLAGS}
        eval DEP${1}FLAGS=\$_flags
    fi
}

probe_cc cc "$cc"
cflags_filter=$_flags_filter
cflags_speed=$_cflags_speed
cflags_size=$_cflags_size
cflags_noopt=$_cflags_noopt
add_cflags $_flags $_cflags
cc_ldflags=$_ldflags
set_ccvars CC

probe_cc hostcc "$host_cc"
host_cflags_filter=$_flags_filter
add_host_cflags  $_flags $_cflags
set_ccvars HOSTCC
3238

3239 3240
test -n "$cc_type" && enable $cc_type ||
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3241

3242
: ${as_default:=$cc}
L
Luca Barbato 已提交
3243
: ${objcc_default:=$cc}
3244
: ${dep_cc_default:=$cc}
3245
: ${ld_default:=$cc}
3246
: ${host_ld_default:=$host_cc}
L
Luca Barbato 已提交
3247
set_default ar as objcc dep_cc ld host_ld
3248

3249 3250 3251 3252 3253
probe_cc as "$as"
asflags_filter=$_flags_filter
add_asflags $_flags $_cflags
set_ccvars AS

L
Luca Barbato 已提交
3254 3255 3256 3257 3258
probe_cc objcc "$objcc"
objcflags_filter=$_flags_filter
add_objcflags $_flags $_cflags
set_ccvars OBJC

3259 3260 3261 3262
probe_cc ld "$ld"
ldflags_filter=$_flags_filter
add_ldflags $_flags $_ldflags
test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3263
LD_O=${_ld_o-$LD_O}
3264 3265
LD_LIB=${_ld_lib-$LD_LIB}
LD_PATH=${_ld_path-$LD_PATH}
3266

3267 3268 3269 3270 3271
probe_cc hostld "$host_ld"
host_ldflags_filter=$_flags_filter
add_host_ldflags $_flags $_ldflags
HOSTLD_O=${_ld_o-$HOSTLD_O}

3272 3273 3274 3275 3276 3277
if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
    probe_cc depcc "$dep_cc"
    CCDEP=${_DEPCMD:-$DEPCMD}
    CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
    DEPCCFLAGS=$_flags
fi
3278

3279 3280 3281 3282 3283 3284
if $ar 2>&1 | grep -q Microsoft; then
    arflags="-nologo"
    ar_o='-out:$@'
elif $ar 2>&1 | grep -q 'Texas Instruments'; then
    arflags="rq"
    ar_o='$@'
3285 3286 3287
elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
    arflags='-Xany -r -c'
    ar_o='$@'
3288 3289 3290 3291 3292
else
    arflags="rc"
    ar_o='$@'
fi

3293
add_cflags $extra_cflags
L
Luca Barbato 已提交
3294
add_objcflags $extra_objcflags
3295
add_asflags $extra_cflags
3296

M
Måns Rullgård 已提交
3297 3298
if test -n "$sysroot"; then
    case "$cc_type" in
M
Mans Rullgard 已提交
3299
        gcc|llvm_gcc|clang)
3300
            add_cppflags --sysroot="$sysroot"
M
Måns Rullgård 已提交
3301 3302
            add_ldflags --sysroot="$sysroot"
        ;;
3303 3304 3305 3306
        tms470)
            add_cppflags -I"$sysinclude"
            add_ldflags  --sysroot="$sysroot"
        ;;
M
Måns Rullgård 已提交
3307 3308 3309
    esac
fi

3310
if test "$cpu" = host; then
D
Diego Biurrun 已提交
3311 3312
    enabled cross_compile &&
        die "--cpu=host makes no sense when cross-compiling."
3313 3314

    case "$cc_type" in
3315
        gcc|llvm_gcc)
3316 3317
            check_native(){
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3318
                sed -n "/cc1.*$1=/{
M
Måns Rullgård 已提交
3319 3320 3321 3322
                            s/.*$1=\\([^ ]*\\).*/\\1/
                            p
                            q
                        }" $TMPE
3323 3324 3325 3326 3327
            }
            cpu=$(check_native -march || check_native -mcpu)
        ;;
    esac

D
Diego Biurrun 已提交
3328 3329
    test "${cpu:-host}" = host &&
        die "--cpu=host not supported with compiler $cc"
3330 3331
fi

3332 3333
# Deal with common $arch aliases
case "$arch" in
3334 3335 3336
    aarch64|arm64)
        arch="aarch64"
    ;;
3337 3338 3339
    arm*)
        arch="arm"
    ;;
3340
    mips*|IP*)
3341 3342 3343 3344 3345 3346 3347 3348 3349 3350
        case "$arch" in
        *el)
            add_cppflags -EL
            add_ldflags -EL
        ;;
        *eb)
            add_cppflags -EB
            add_ldflags -EB
        ;;
        esac
3351 3352
        arch="mips"
    ;;
3353
    parisc*|hppa*)
3354 3355
        arch="parisc"
    ;;
3356
    "Power Macintosh"|ppc*|powerpc*)
3357 3358 3359 3360 3361 3362 3363 3364
        arch="ppc"
    ;;
    s390|s390x)
        arch="s390"
    ;;
    sh4|sh)
        arch="sh4"
    ;;
3365
    sun4u|sparc*)
3366 3367
        arch="sparc"
    ;;
3368 3369 3370
    tilegx|tile-gx)
        arch="tilegx"
    ;;
M
Mans Rullgard 已提交
3371
    i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
3372 3373 3374 3375
        arch="x86"
    ;;
esac

3376
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3377
enable $arch
3378

3379
# Add processor-specific flags
3380
if enabled aarch64; then
3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396

    case $cpu in
        armv*)
            cpuflags="-march=$cpu"
        ;;
        *)
            cpuflags="-mcpu=$cpu"
        ;;
    esac

elif enabled alpha; then

    cpuflags="-mcpu=$cpu"

elif enabled arm; then

3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418
    check_arm_arch() {
        check_cpp_condition stddef.h \
            "defined __ARM_ARCH_${1}__ || defined __TARGET_ARCH_${2:-$1}" \
            $cpuflags
    }

    probe_arm_arch() {
        if   check_arm_arch 4;        then echo armv4;
        elif check_arm_arch 4T;       then echo armv4t;
        elif check_arm_arch 5;        then echo armv5;
        elif check_arm_arch 5E;       then echo armv5e;
        elif check_arm_arch 5T;       then echo armv5t;
        elif check_arm_arch 5TE;      then echo armv5te;
        elif check_arm_arch 5TEJ;     then echo armv5te;
        elif check_arm_arch 6;        then echo armv6;
        elif check_arm_arch 6J;       then echo armv6j;
        elif check_arm_arch 6K;       then echo armv6k;
        elif check_arm_arch 6Z;       then echo armv6z;
        elif check_arm_arch 6ZK;      then echo armv6zk;
        elif check_arm_arch 6T2;      then echo armv6t2;
        elif check_arm_arch 7;        then echo armv7;
        elif check_arm_arch 7A  7_A;  then echo armv7-a;
3419
        elif check_arm_arch 7S;       then echo armv7-a;
3420 3421 3422 3423 3424 3425 3426 3427 3428
        elif check_arm_arch 7R  7_R;  then echo armv7-r;
        elif check_arm_arch 7M  7_M;  then echo armv7-m;
        elif check_arm_arch 7EM 7E_M; then echo armv7-m;
        elif check_arm_arch 8A  8_A;  then echo armv8-a;
        fi
    }

    [ "$cpu" = generic ] && cpu=$(probe_arm_arch)

3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442
    case $cpu in
        armv*)
            cpuflags="-march=$cpu"
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
        ;;
        *)
            cpuflags="-mcpu=$cpu"
            case $cpu in
                cortex-a*)                               subarch=armv7a  ;;
                cortex-r*)                               subarch=armv7r  ;;
                cortex-m*)                 enable thumb; subarch=armv7m  ;;
                arm11*)                                  subarch=armv6   ;;
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3443
                *)                             subarch=$(probe_arm_arch) ;;
3444 3445 3446 3447
            esac
        ;;
    esac

3448 3449 3450 3451 3452
    case "$subarch" in
        armv5t*)    enable fast_clz                ;;
        armv[6-8]*) enable fast_clz fast_unaligned ;;
    esac

3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481
elif enabled avr32; then

    case $cpu in
        ap7[02]0[0-2])
            subarch="avr32_ap"
            cpuflags="-mpart=$cpu"
        ;;
        ap)
            subarch="avr32_ap"
            cpuflags="-march=$cpu"
        ;;
        uc3[ab]*)
            subarch="avr32_uc"
            cpuflags="-mcpu=$cpu"
        ;;
        uc)
            subarch="avr32_uc"
            cpuflags="-march=$cpu"
        ;;
    esac

elif enabled bfin; then

    cpuflags="-mcpu=$cpu"

elif enabled mips; then

    cpuflags="-march=$cpu"

3482
elif enabled ppc; then
3483

3484 3485
    disable ldbrx

3486 3487
    case $(tolower $cpu) in
        601|ppc601|powerpc601)
M
Måns Rullgård 已提交
3488
            cpuflags="-mcpu=601"
3489
            disable altivec
M
Måns Rullgård 已提交
3490
        ;;
3491
        603*|ppc603*|powerpc603*)
M
Måns Rullgård 已提交
3492
            cpuflags="-mcpu=603"
3493
            disable altivec
M
Måns Rullgård 已提交
3494
        ;;
3495
        604*|ppc604*|powerpc604*)
M
Måns Rullgård 已提交
3496
            cpuflags="-mcpu=604"
3497
            disable altivec
M
Måns Rullgård 已提交
3498
        ;;
3499
        g3|75*|ppc75*|powerpc75*)
3500
            cpuflags="-mcpu=750"
3501
            disable altivec
M
Måns Rullgård 已提交
3502
        ;;
3503
        g4|745*|ppc745*|powerpc745*)
3504
            cpuflags="-mcpu=7450"
3505
            disable vsx
M
Måns Rullgård 已提交
3506
        ;;
3507
        74*|ppc74*|powerpc74*)
3508
            cpuflags="-mcpu=7400"
3509
            disable vsx
M
Måns Rullgård 已提交
3510
        ;;
3511
        g5|970|ppc970|powerpc970)
3512
            cpuflags="-mcpu=970"
3513
            disable vsx
M
Måns Rullgård 已提交
3514
        ;;
3515
        power[3-6]*)
3516
            cpuflags="-mcpu=$cpu"
3517 3518 3519 3520 3521
            disable vsx
        ;;
        power[7-8]*)
            cpuflags="-mcpu=$cpu"
            enable ldbrx
3522
        ;;
3523
        cell)
M
Måns Rullgård 已提交
3524 3525
            cpuflags="-mcpu=cell"
            enable ldbrx
3526
            disable vsx
M
Måns Rullgård 已提交
3527
        ;;
3528 3529 3530 3531
        e500mc)
            cpuflags="-mcpu=e500mc"
            disable altivec
        ;;
A
Ancoron Luciferis 已提交
3532 3533 3534
        e500v2)
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
            disable altivec
3535
            disable dcbzl
A
Ancoron Luciferis 已提交
3536 3537 3538 3539
        ;;
        e500)
            cpuflags="-mcpu=8540 -mhard-float"
            disable altivec
3540
            disable dcbzl
A
Ancoron Luciferis 已提交
3541
        ;;
M
Måns Rullgård 已提交
3542
    esac
3543

3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554
elif enabled sparc; then

    case $cpu in
        cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
            cpuflags="-mcpu=$cpu"
        ;;
        ultrasparc*|niagara[234])
            cpuflags="-mcpu=$cpu"
        ;;
    esac

3555 3556
elif enabled x86; then

M
Måns Rullgård 已提交
3557 3558 3559
    case $cpu in
        i[345]86|pentium)
            cpuflags="-march=$cpu"
3560
            disable i686
M
Måns Rullgård 已提交
3561 3562
            disable mmx
        ;;
3563
        # targets that do NOT support nopl and conditional mov (cmov)
M
Måns Rullgård 已提交
3564 3565
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
            cpuflags="-march=$cpu"
3566
            disable i686
M
Måns Rullgård 已提交
3567
        ;;
3568
        # targets that do support nopl and conditional mov (cmov)
3569
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|corei7*|amdfam10|barcelona|atom|bdver*)
M
Måns Rullgård 已提交
3570
            cpuflags="-march=$cpu"
3571
            enable i686
M
Måns Rullgård 已提交
3572 3573 3574 3575 3576
            enable fast_cmov
        ;;
        # targets that do support conditional mov but on which it's slow
        pentium4|pentium4m|prescott|nocona)
            cpuflags="-march=$cpu"
3577
            enable i686
M
Måns Rullgård 已提交
3578 3579 3580
            disable fast_cmov
        ;;
    esac
3581 3582 3583

fi

3584 3585 3586
if [ "$cpu" != generic ]; then
    add_cflags  $cpuflags
    add_asflags $cpuflags
3587
    test "$cc_type" = "$ld_type" && add_ldflags $cpuflags
3588
fi
3589

3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602
# compiler sanity check
check_exec <<EOF
int main(void){ return 0; }
EOF
if test "$?" != 0; then
    echo "$cc is unable to create an executable file."
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
        echo "Only do this if you know what cross compiling means."
    fi
    die "C compiler test failed."
fi

3603
add_cppflags -D_ISOC99_SOURCE
3604
check_cflags -std=c99
3605
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3606 3607
#include <stdlib.h>
EOF
3608
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3609 3610
#include <stdlib.h>
EOF
3611

3612
add_host_cppflags -D_ISOC99_SOURCE
3613
check_host_cflags -std=c99
3614
check_host_cflags -Wall
3615
check_host_cflags -O3
3616

M
Mans Rullgard 已提交
3617 3618 3619 3620 3621 3622 3623 3624
check_64bit(){
    arch32=$1
    arch64=$2
    expr=$3
    check_code cc "" "int test[2*($expr) - 1]" &&
        subarch=$arch64 || subarch=$arch32
}

R
Ramiro Polla 已提交
3625
case "$arch" in
3626
    aarch64|alpha|ia64)
3627 3628 3629 3630
        spic=$shared
    ;;
    mips)
        check_64bit mips mips64 '_MIPS_SIM > 1'
3631
        spic=$shared
R
Ramiro Polla 已提交
3632
    ;;
3633 3634 3635 3636
    parisc)
        check_64bit parisc parisc64 'sizeof(void *) > 4'
        spic=$shared
    ;;
3637 3638
    ppc)
        check_64bit ppc ppc64 'sizeof(void *) > 4'
3639
        spic=$shared
3640
    ;;
3641 3642 3643 3644
    s390)
        check_64bit s390 s390x 'sizeof(void *) > 4'
        spic=$shared
    ;;
3645 3646 3647 3648
    sparc)
        check_64bit sparc sparc64 'sizeof(void *) > 4'
        spic=$shared
    ;;
3649
    x86)
M
Mans Rullgard 已提交
3650
        check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3651
        if test "$subarch" = "x86_64"; then
3652
            spic=$shared
3653
        fi
R
Ramiro Polla 已提交
3654 3655 3656
    ;;
esac

3657
enable $subarch
3658
enabled spic && enable_weak pic
R
Ramiro Polla 已提交
3659

3660
# OS specific
3661
case $target_os in
3662
    aix)
3663
        SHFLAGS=-shared
3664
        add_cppflags '-I\$(SRC_PATH)/compat/aix'
3665
        enabled shared && add_ldflags -Wl,-brtl
3666
        ;;
3667 3668
    android)
        disable symver
3669
        enable section_data_rel_ro
3670 3671
        SLIB_INSTALL_NAME='$(SLIBNAME)'
        SLIB_INSTALL_LINKS=
3672
        SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)'
3673
        ;;
3674
    haiku)
3675
        prefix_default="/boot/common"
3676
        network_extralibs="-lnetwork"
F
François Revol 已提交
3677
        host_libs=
3678
        ;;
3679
    sunos)
M
Måns Rullgård 已提交
3680
        SHFLAGS='-shared -Wl,-h,$$(@F)'
3681
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3682
        network_extralibs="-lsocket -lnsl"
3683 3684 3685 3686 3687
        # When using suncc to build, the Solaris linker will mark
        # an executable with each instruction set encountered by
        # the Solaris assembler.  As our libraries contain their own
        # guards for processor-specific code, instead suppress
        # generation of the HWCAPS ELF section on Solaris x86 only.
D
Diego Biurrun 已提交
3688 3689 3690
        enabled_all suncc x86 &&
            echo "hwcap_1 = OVERRIDE;" > mapfile &&
            add_ldflags -Wl,-M,mapfile
3691
        nm_default='nm -P -g'
3692
        SLIB_CREATE_DEF_CMD='$(Q)perl $(SRC_PATH)/compat/solaris/make_sunver.pl $$(filter %.ver,$$^) $(OBJS) | grep -v @ > $(SUBDIR)lib$(NAME).ver-sol2'
3693 3694
        ;;
    netbsd)
3695
        disable symver
M
Måns Rullgård 已提交
3696 3697
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
3698
        ;;
B
Brad Smith 已提交
3699
    openbsd|bitrig)
3700
        disable symver
3701
        SHFLAGS='-shared'
3702
        SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3703
        SLIB_INSTALL_LINKS=
M
Måns Rullgård 已提交
3704 3705
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
3706
        ;;
3707 3708 3709 3710
    dragonfly)
        disable symver
        ;;
    freebsd)
3711 3712
        ;;
    bsd/os)
3713
        add_extralibs -lpoll -lgnugetopt
3714 3715
        ;;
    darwin)
3716
        enabled ppc && add_asflags -force_cpusubtype_ALL
3717
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3718
        enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3719
        add_ldflags -Wl,-dynamic,-search_paths_first
3720 3721 3722
        SLIBSUF=".dylib"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
L
Loren Merritt 已提交
3723
        objformat="macho"
3724
        enabled x86_64 && objformat="macho64"
3725
        enabled_any pic shared ||
3726
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3727
        ;;
3728 3729 3730
    msys*)
        die "Native MSYS builds are discouraged, please use the MINGW environment.";
        ;;
3731
    mingw32*|mingw64*)
3732
        if test $target_os = "mingw32ce"; then
3733 3734 3735 3736
            disable network
        else
            target_os=mingw32
        fi
R
Ramiro Polla 已提交
3737
        LIBTARGET=i386
3738
        if enabled x86_64; then
3739
            LIBTARGET="i386:x86-64"
3740
        elif enabled arm; then
3741
            LIBTARGET=arm-wince
R
Ramiro Polla 已提交
3742
        fi
3743 3744
        check_ldflags -Wl,--nxcompat
        check_ldflags -Wl,--dynamicbase
3745
        shlibdir_default="$bindir_default"
3746 3747 3748 3749
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3750
        SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); $(DLLTOOL) -m $(LIBTARGET) -d $$(@:$(SLIBSUF)=.def) -l $(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib) -D $(SLIBNAME_WITH_MAJOR)'
3751 3752 3753 3754
        SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
        SLIB_INSTALL_LINKS=
        SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
        SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
3755
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
L
Loren Merritt 已提交
3756
        objformat="win32"
3757
        dlltool="${cross_prefix}dlltool"
M
Mans Rullgard 已提交
3758
        ranlib=:
3759
        enable dos_paths
3760
        ;;
3761
    win32|win64)
3762
        disable symver
3763 3764 3765 3766
        if enabled shared; then
            # Link to the import library instead of the normal static library
            # for shared libs.
            LD_LIB='%.lib'
3767
            # Cannot build both shared and static libs with MSVC or icl.
3768 3769 3770 3771 3772 3773 3774
            disable static
        fi
        shlibdir_default="$bindir_default"
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3775
        SLIB_CREATE_DEF_CMD='$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
3776 3777 3778 3779 3780
        SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
        SLIB_INSTALL_LINKS=
        SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
        SLIB_INSTALL_EXTRA_LIB='$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
        SHFLAGS='-dll -def:$$(@:$(SLIBSUF)=.def) -implib:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3781 3782 3783 3784
        objformat="win32"
        ranlib=:
        enable dos_paths
        ;;
3785
    cygwin*)
3786
        target_os=cygwin
3787
        shlibdir_default="$bindir_default"
3788 3789 3790 3791
        SLIBPREF="cyg"
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3792 3793 3794 3795
        SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
        SLIB_INSTALL_LINKS=
        SLIB_INSTALL_EXTRA_LIB='lib$(FULLNAME).dll.a'
        SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(FULLNAME).dll.a'
L
Loren Merritt 已提交
3796
        objformat="win32"
3797
        enable dos_paths
3798
        ;;
M
Michael Kostylev 已提交
3799 3800
    *-dos|freedos|opendos)
        network_extralibs="-lsocket"
3801
        objformat="coff"
3802
        enable dos_paths
3803
        add_cppflags -U__STRICT_ANSI__
M
Michael Kostylev 已提交
3804
        ;;
3805 3806
    linux)
        enable dv1394
3807
        enable section_data_rel_ro
3808 3809
        ;;
    irix*)
3810
        target_os=irix
3811 3812
        ranlib="echo ignoring ranlib"
        ;;
D
Dave Yeo 已提交
3813 3814
    os/2*)
        ln_s="cp -f"
3815
        objformat="aout"
3816
        add_cppflags -D_GNU_SOURCE
3817
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
M
Måns Rullgård 已提交
3818
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3819
        LIBSUF="_s.a"
D
Dave Yeo 已提交
3820 3821 3822 3823
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
M
Måns Rullgård 已提交
3824
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
D
Diego Biurrun 已提交
3825 3826 3827
            echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
            echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
            echo EXPORTS >> $(SUBDIR)$(NAME).def; \
D
Dave Yeo 已提交
3828
            emxexp $(OBJS) >> $(SUBDIR)$(NAME).def'
M
Måns Rullgård 已提交
3829
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
D
Diego Biurrun 已提交
3830
            emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3831
        SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3832
        enable dos_paths
D
Dave Yeo 已提交
3833
        ;;
3834
    gnu/kfreebsd)
3835
        add_cppflags -D_BSD_SOURCE
3836
        ;;
3837 3838
    gnu)
        ;;
M
Mans Rullgard 已提交
3839 3840 3841 3842
    qnx)
        add_cppflags -D_QNX_SOURCE
        network_extralibs="-lsocket"
        ;;
3843 3844 3845
    symbian)
        SLIBSUF=".dll"
        enable dos_paths
3846 3847 3848 3849 3850 3851 3852 3853
        add_cflags --include=$sysinclude/gcce/gcce.h -fvisibility=default
        add_cppflags -D__GCCE__ -D__SYMBIAN32__ -DSYMBIAN_OE_POSIX_SIGNALS
        add_ldflags -Wl,--target1-abs,--no-undefined \
                    -Wl,-Ttext,0x80000,-Tdata,0x1000000 -shared \
                    -Wl,--entry=_E32Startup -Wl,-u,_E32Startup
        add_extralibs -l:eexe.lib -l:usrt2_2.lib -l:dfpaeabi.dso \
                      -l:drtaeabi.dso -l:scppnwdl.dso -lsupc++ -lgcc \
                      -l:libc.dso -l:libm.dso -l:euser.dso -l:libcrt0.lib
3854
        ;;
3855 3856 3857
    osf1)
        add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
        ;;
M
Mans Rullgard 已提交
3858 3859
    minix)
        ;;
M
Mans Rullgard 已提交
3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870
    plan9)
        add_cppflags -D_C99_SNPRINTF_EXTENSION  \
                     -D_REENTRANT_SOURCE        \
                     -D_RESEARCH_SOURCE         \
                     -DFD_SETSIZE=96            \
                     -DHAVE_SOCK_OPTS
        add_compat strtod.o strtod=avpriv_strtod
        network_extralibs='-lbsd'
        exeobjs=compat/plan9/main.o
        cp_f='cp'
        ;;
3871 3872
    none)
        ;;
3873
    *)
3874
        die "Unknown OS '$target_os'."
3875 3876 3877
        ;;
esac

3878 3879
# determine libc flavour

3880 3881
probe_libc(){
    pfx=$1
3882
    pfx_no_=${pfx%_}
3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896
    # uclibc defines __GLIBC__, so it needs to be checked before glibc.
    if check_${pfx}cpp_condition features.h "defined __UCLIBC__"; then
        eval ${pfx}libc_type=uclibc
        add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
    elif check_${pfx}cpp_condition features.h "defined __GLIBC__"; then
        eval ${pfx}libc_type=glibc
        add_${pfx}cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
    # MinGW headers can be installed on Cygwin, so check for newlib first.
    elif check_${pfx}cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
        eval ${pfx}libc_type=newlib
        add_${pfx}cppflags -U__STRICT_ANSI__
    # MinGW64 is backwards compatible with MinGW32, so check for it first.
    elif check_${pfx}cpp_condition _mingw.h "defined __MINGW64_VERSION_MAJOR"; then
        eval ${pfx}libc_type=mingw64
3897
        add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3898 3899
        eval test \$${pfx_no_}cc_type = "gcc" &&
            add_${pfx}cppflags -D__printf__=__gnu_printf__
3900 3901
    elif check_${pfx}cpp_condition _mingw.h "defined __MINGW_VERSION"  ||
         check_${pfx}cpp_condition _mingw.h "defined __MINGW32_VERSION"; then
3902 3903 3904 3905
        eval ${pfx}libc_type=mingw32
        check_${pfx}cpp_condition _mingw.h "__MINGW32_MAJOR_VERSION > 3 || \
            (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
            die "ERROR: MinGW32 runtime version must be >= 3.15."
3906
        add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
3907 3908
        eval test \$${pfx_no_}cc_type = "gcc" &&
            add_${pfx}cppflags -D__printf__=__gnu_printf__
3909 3910
    elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
        eval ${pfx}libc_type=msvcrt
L
Luca Barbato 已提交
3911 3912 3913 3914 3915 3916 3917 3918 3919 3920
        if check_${pfx}cpp_condition crtversion.h "_VC_CRT_MAJOR_VERSION < 14"; then
            if [ "$pfx" = host_ ]; then
                add_host_cppflags -Dsnprintf=_snprintf
            else
                add_compat strtod.o strtod=avpriv_strtod
                add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
                                             _snprintf=avpriv_snprintf  \
                                             vsnprintf=avpriv_vsnprintf
            fi
        fi
3921 3922 3923 3924 3925 3926
        # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to
        # 0x601 by default unless something else is set by the user.
        # This can easily lead to us detecting functions only present
        # in such new versions and producing binaries requiring windows 7.0.
        # Therefore explicitly set the default to XP unless the user has
        # set something else on the command line.
3927 3928 3929 3930
        # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
        # family. For these cases, configure is free to use any functions
        # found in the SDK headers by default. (Alternatively, we could force
        # _WIN32_WINNT to 0x0602 in that case.)
3931
        check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
3932 3933 3934 3935 3936 3937 3938 3939
            { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
#ifdef WINAPI_FAMILY
#include <winapifamily.h>
#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#error not desktop
#endif
#endif
EOF
3940 3941 3942 3943
    elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then
        eval ${pfx}libc_type=klibc
    elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then
        eval ${pfx}libc_type=bionic
3944
    elif check_${pfx}cpp_condition sys/brand.h "defined LABELED_BRAND_NAME"; then
3945 3946
        eval ${pfx}libc_type=solaris
        add_${pfx}cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3947
    else
3948 3949
        eval ${pfx}libc_type=default
        add_${pfx}cppflags -D_DEFAULT_SOURCE
3950 3951
    fi
}
3952

3953
probe_libc
3954
test -n "$libc_type" && enable libc_$libc_type
3955 3956
probe_libc host_
test -n "$host_libc_type" && enable host_libc_$host_libc_type
3957

3958 3959 3960 3961 3962 3963
case $libc_type in
    bionic)
        add_compat strtod.o strtod=avpriv_strtod
        ;;
esac

3964 3965
# hacks for compiler/libc/os combinations

3966
if enabled_all tms470 libc_glibc; then
3967
    CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3968 3969 3970 3971 3972 3973
    add_cppflags -D__USER_LABEL_PREFIX__=
    add_cppflags -D__builtin_memset=memset
    add_cppflags -D__gnuc_va_list=va_list -D_VA_LIST_DEFINED
    add_cflags   -pds=48    # incompatible redefinition of macro
fi

3974
if enabled_all ccc libc_glibc; then
3975 3976 3977
    add_ldflags -Wl,-z,now  # calls to libots crash without this
fi

3978 3979 3980
check_compile_assert flt_lim "float.h limits.h" "DBL_MAX == (double)DBL_MAX" ||
    add_cppflags '-I\$(SRC_PATH)/compat/float'

3981 3982 3983 3984 3985
esc(){
    echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
}

echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $LIBAV_CONFIGURATION)" >config.fate
3986

3987
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3988

3989
set_default $PATHS_LIST
3990
set_default nm
3991

3992
# we need to build at least one lib type
3993
if ! enabled_any static shared; then
3994 3995 3996 3997 3998 3999 4000 4001 4002
    cat <<EOF
At least one library type must be built.
Specify --enable-static to build the static libraries or --enable-shared to
build the shared libraries as well. To only build the shared libraries specify
--disable-static in addition to --enable-shared.
EOF
    exit 1;
fi

4003
die_license_disabled() {
4004
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
4005 4006
}

4007
die_license_disabled gpl libcdio
4008
die_license_disabled gpl libx264
D
Derek Buitenhuis 已提交
4009
die_license_disabled gpl libx265
4010
die_license_disabled gpl libxavs
4011 4012 4013
die_license_disabled gpl libxvid
die_license_disabled gpl x11grab

4014
die_license_disabled nonfree cuda
4015
die_license_disabled nonfree libfaac
4016
die_license_disabled nonfree libfdk_aac
L
Luca Barbato 已提交
4017
die_license_disabled nonfree nvenc
4018
die_license_disabled nonfree openssl
4019

4020 4021
die_license_disabled version3 libopencore_amrnb
die_license_disabled version3 libopencore_amrwb
4022
die_license_disabled version3 libvo_aacenc
4023
die_license_disabled version3 libvo_amrwbenc
4024

4025
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
4026

4027
disabled optimizations || check_cflags -fomit-frame-pointer
4028

4029 4030
enable_weak_pic() {
    disabled pic && return
4031
    enable pic
4032
    add_cppflags -DPIC
4033 4034 4035 4036 4037 4038 4039
    case "$target_os" in
    mingw*|cygwin*)
        ;;
    *)
        add_cflags -fPIC
        ;;
    esac
4040
    add_asflags  -fPIC
4041 4042
}

4043
enabled pic && enable_weak_pic
4044

4045 4046 4047
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
4048
sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
4049 4050
extern_prefix=${sym%%ff_extern*}

4051
check_cc <<EOF && enable_weak inline_asm
4052 4053
void foo(void) { __asm__ volatile ("" ::); }
EOF
M
Måns Rullgård 已提交
4054

4055 4056 4057 4058 4059 4060 4061
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
    check_cc <<EOF && _restrict=$restrict_keyword && break
void foo(char * $restrict_keyword p);
EOF
done

4062
check_cc <<EOF && enable pragma_deprecated
4063
void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
4064 4065
EOF

4066 4067 4068 4069
check_cc <<EOF && enable attribute_packed
struct { int x; } __attribute__((packed)) x;
EOF

4070 4071 4072 4073
check_cc <<EOF && enable attribute_may_alias
union { int x; } __attribute__((may_alias)) x;
EOF

4074 4075 4076
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
M
Måns Rullgård 已提交
4077
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
4078

4079 4080 4081 4082 4083 4084
check_gas() {
    log "check_gas using '$as' as AS"
    # :vararg is used on aarch64, arm and ppc altivec
    check_as <<EOF || return 1
.macro m n, y:vararg=0
\n: .int \y
J
Janne Grunau 已提交
4085 4086
.endm
m x
4087
EOF
4088 4089
    # .altmacro is only used in arm asm
    ! enabled arm || check_as <<EOF || return 1
4090
.altmacro
4091
EOF
4092 4093 4094 4095
    enable gnu_as
    return 0
}

4096
if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
4097
    nogas=:
4098
    enabled_any arm aarch64 && nogas=die
4099
    enabled_all ppc altivec && nogas=warn
4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111
    as_noop=-v

    case $as_type in
        arm*) gaspp_as_type=armasm; as_noop=-h ;;
        gcc)  gaspp_as_type=gas ;;
        *)    gaspp_as_type=$as_type ;;
    esac

    [ $target_os = "darwin" ] && gaspp_as_type="apple-$gaspp_as_type"

    check_cmd gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as $as_noop &&
        gas="gas-preprocessor.pl -arch $arch -as-type $gaspp_as_type -- $as"
4112 4113 4114 4115

    if ! check_gas ; then
        as=${gas:=$as}
        check_gas || \
4116
            $nogas "GNU assembler not found, install/update gas-preprocessor"
4117
    fi
4118 4119 4120 4121

    check_as <<EOF && enable as_func
.func test
.endfunc
J
Janne Grunau 已提交
4122 4123 4124
EOF
fi

4125 4126
check_inline_asm inline_asm_labels '"1:\n"'

4127
if enabled aarch64; then
J
Janne Grunau 已提交
4128
    enabled armv8 && check_insn armv8 'prfm   pldl1strm, [x0]'
4129 4130 4131 4132 4133 4134 4135
    # internal assembler in clang 3.3 does not support this instruction
    enabled neon && check_insn neon 'ext   v0.8B, v0.8B, v1.8B, #1'
    enabled vfp  && check_insn vfp  'fmadd d0,    d0,    d1,    d2'

    map 'enabled_any ${v}_external ${v}_inline || disable $v' $ARCH_EXT_LIST_ARM

elif enabled alpha; then
4136 4137 4138 4139

    check_cflags -mieee

elif enabled arm; then
4140

4141
    enabled msvc && check_cpp_condition stddef.h "defined _M_ARMT" && enable thumb
4142
    check_cpp_condition stddef.h "defined __thumb__" && enable_weak thumb
4143
    enabled thumb && check_cflags -mthumb || check_cflags -marm
4144

M
Mans Rullgard 已提交
4145 4146
    if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
        enable vfp_args
4147 4148
    elif check_cpp_condition stddef.h "defined _M_ARM_FP && _M_ARM_FP >= 30"; then
        enable vfp_args
4149
    elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__" && [ $target_os != darwin ]; then
M
Mans Rullgard 已提交
4150 4151 4152
        case "${cross_prefix:-$cc}" in
            *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
            *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
4153 4154 4155
__asm__ (".eabi_attribute 28, 1");
int main(void) { return 0; }
EOF
M
Mans Rullgard 已提交
4156 4157 4158
        esac
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
    fi
4159

4160 4161 4162 4163
    enabled armv5te && check_insn armv5te 'qadd r0, r0, r0'
    enabled armv6   && check_insn armv6   'sadd16 r0, r0, r0'
    enabled armv6t2 && check_insn armv6t2 'movt r0, #0'
    enabled neon    && check_insn neon    'vadd.i16 q0, q0, q0'
4164
    enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
4165 4166
    enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'

4167
    [ $target_os = linux ] || [ $target_os = android ] ||
4168 4169
        map 'enabled_any ${v}_external ${v}_inline || disable $v' \
            $ARCH_EXT_LIST_ARM
4170

4171
    check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
4172

J
Janne Grunau 已提交
4173 4174 4175
    check_as <<EOF && enable as_dn_directive
ra .dn d0.i16
.unreq ra
4176 4177 4178 4179 4180
EOF

    # llvm's integrated assembler supports .object_arch from llvm 3.5
    [ "$objformat" = elf ] && check_as <<EOF && enable as_object_arch
.object_arch armv4
J
Janne Grunau 已提交
4181 4182
EOF

4183
    [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
4184

4185
elif enabled mips; then
4186

4187
    check_inline_asm loongson '"dmult.g $1, $2, $3"'
4188

4189 4190 4191 4192 4193 4194 4195 4196 4197 4198
    # make sure that only an instruction set is enabled
    disable mips64r6 mips32r6 mips64r2 mips32r2 mips64r1 mips32r1

    if enabled mips64; then
        check_inline_asm mips64r6 '"dlsa $0, $0, $0, 1"' ||
            check_inline_asm mips64r2 '"dext $0, $0, 0, 1"' ||
                check_inline_asm mips64r1 '"daddi $0, $0, 0"'
    else
        check_inline_asm mips32r6 '"aui $0, $0, 0"' ||
            check_inline_asm mips32r2 '"ext $0, $0, 0, 1"' ||
4199
                check_inline_asm mips32r1 '"addi $0, $0, 0"'
4200 4201
    fi

4202 4203 4204 4205 4206 4207 4208 4209
elif enabled parisc; then

    if enabled gcc; then
        case $($cc -dumpversion) in
            4.[3-8].*) check_cflags -fno-optimize-sibling-calls ;;
        esac
    fi

4210
elif enabled ppc; then
4211

4212 4213
    enable local_aligned_8 local_aligned_16

4214 4215 4216 4217
    check_inline_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
    check_inline_asm ibm_asm   '"add 0, 0, 0"'
    check_inline_asm ppc4xx    '"maclhw r10, r11, r12"'
    check_inline_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228

    # AltiVec flags: The FSF version of GCC differs from the Apple version
    if enabled altivec; then
        check_cflags -maltivec -mabi=altivec &&
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
        check_cflags -faltivec

        # check if our compiler supports Motorola AltiVec C API
        check_cc <<EOF || disable altivec
$inc_altivec_h
int main(void) {
4229 4230 4231
    vector signed int v1 = (vector signed int) { 0 };
    vector signed int v2 = (vector signed int) { 1 };
    v1 = vec_add(v1, v2);
4232 4233 4234 4235
    return 0;
}
EOF

4236
        enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
4237
    fi
4238

4239 4240 4241 4242 4243 4244 4245 4246 4247
    if enabled vsx; then
        check_cflags -mvsx &&
        check_builtin vec_vsx_ld "altivec.h" "__builtin_vec_vsx_ld" || disable vsx
    fi

    if enabled power8; then
        check_cpp_condition "altivec.h" "defined(_ARCH_PWR8)" || disable power8
    fi

4248
elif enabled x86; then
4249

4250 4251
    check_builtin rdtsc    intrin.h   "__rdtsc()"
    check_builtin mm_empty mmintrin.h "_mm_empty()"
4252

4253 4254
    enable local_aligned_8 local_aligned_16

4255 4256 4257 4258
    # check whether EBP is available on x86
    # As 'i' is stored on the stack, this program will crash
    # if the base pointer is used to access it because the
    # base pointer is cleared in the inline assembly code.
4259
    check_exec_crash <<EOF && enable ebp_available
D
Diego Biurrun 已提交
4260 4261 4262
volatile int i=0;
__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
return i;
4263 4264
EOF

R
Reimar Döffinger 已提交
4265
    # check whether EBX is available on x86
4266 4267
    check_inline_asm ebx_available '""::"b"(0)' &&
        check_inline_asm ebx_available '"":::"%ebx"'
4268

4269
    # check whether xmm clobbers are supported
4270
    check_inline_asm xmm_clobbers '"":::"%xmm0"'
4271

4272
    # check whether binutils is new enough to compile SSSE3/MMXEXT
4273 4274
    enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
    enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4275

4276
    if ! disabled_any asm mmx yasm; then
4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292
        if check_cmd $yasmexe --version; then
            enabled x86_64 && yasm_extra="-m amd64"
            yasm_debug="-g dwarf2"
        elif check_cmd nasm -v; then
            yasmexe=nasm
            yasm_debug="-g -F dwarf"
            enabled x86_64 && test "$objformat" = elf && objformat=elf64
        fi

        YASMFLAGS="-f $objformat $yasm_extra"
        enabled pic               && append YASMFLAGS "-DPIC"
        test -n "$extern_prefix"  && append YASMFLAGS "-DPREFIX"
        case "$objformat" in
            elf*) enabled debug && append YASMFLAGS $yasm_debug ;;
        esac

4293 4294
        check_yasm "movbe ecx, [5]" && enable yasm ||
            die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4295
        check_yasm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
4296
        check_yasm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
4297
        check_yasm "vfmadd132ps ymm0, ymm1, ymm2"    || disable fma3_external
4298
        check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4299
        check_yasm "CPU amdnop" || disable cpunop
4300
    fi
4301

4302 4303 4304 4305 4306 4307
    case "$cpu" in
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
            disable fast_clz
        ;;
    esac

4308 4309
fi

4310
check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_neon
4311

4312 4313
check_ldflags -Wl,--as-needed

4314 4315 4316 4317
if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
4318 4319
fi

4320
if ! disabled network; then
4321 4322 4323
    check_func getaddrinfo $network_extralibs
    check_func inet_aton $network_extralibs

4324
    check_type netdb.h "struct addrinfo"
4325 4326
    check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
    check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4327
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
4328
    check_type poll.h "struct pollfd"
4329
    check_type netinet/sctp.h "struct sctp_event_subscribe"
4330 4331 4332 4333 4334
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
    check_type netinet/in.h "struct sockaddr_in6"
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
    check_type "sys/types.h sys/socket.h" socklen_t

4335 4336 4337 4338
    # Prefer arpa/inet.h over winsock2
    if check_header arpa/inet.h ; then
        check_func closesocket
    elif check_header winsock2.h ; then
4339 4340 4341
        check_func_headers winsock2.h closesocket -lws2 &&
            network_extralibs="-lws2" ||
        { check_func_headers winsock2.h closesocket -lws2_32 &&
4342
            network_extralibs="-lws2_32"; } || disable winsock2_h network
4343
        check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4344

4345 4346
        check_type ws2tcpip.h socklen_t
        check_type ws2tcpip.h "struct addrinfo"
4347 4348
        check_type ws2tcpip.h "struct group_source_req"
        check_type ws2tcpip.h "struct ip_mreq_source"
4349
        check_type ws2tcpip.h "struct ipv6_mreq"
4350
        check_type winsock2.h "struct pollfd"
4351
        check_struct winsock2.h "struct sockaddr" sa_len
4352 4353 4354 4355 4356 4357 4358
        check_type ws2tcpip.h "struct sockaddr_in6"
        check_type ws2tcpip.h "struct sockaddr_storage"
    else
        disable network
    fi
fi

4359 4360 4361 4362 4363
check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
check_builtin MemoryBarrier windows.h "MemoryBarrier()"
check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"

4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374
case "$custom_allocator" in
    jemalloc)
        # jemalloc by default does not use a prefix
        require libjemalloc jemalloc/jemalloc.h malloc -ljemalloc
    ;;
    tcmalloc)
        require_pkg_config libtcmalloc gperftools/tcmalloc.h tc_malloc
        malloc_prefix=tc_
    ;;
esac

4375 4376 4377
check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
check_func  ${malloc_prefix}memalign            && enable memalign
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4378

4379
check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
4380
    check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt && LIBRT="-lrt"; }
4381

M
Måns Rullgård 已提交
4382
check_func  fcntl
4383 4384
check_func  fork
check_func  gethrtime
4385
check_func  getopt
4386
check_func  getrusage
4387
check_func  gettimeofday
4388
check_func  gmtime_r
M
Martin Storsjö 已提交
4389
check_func  isatty
4390
check_func  localtime_r
4391
check_func  mach_absolute_time
4392
check_func  mkstemp
4393
check_func  mmap
M
Mans Rullgard 已提交
4394
check_func  mprotect
4395
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
4396
check_func_headers time.h nanosleep || { check_func_headers time.h nanosleep -lrt && add_extralibs -lrt; }
4397
check_func  sched_getaffinity
M
Måns Rullgård 已提交
4398
check_func  setrlimit
S
Stefano Sabatini 已提交
4399
check_func  strerror_r
4400
check_func  sysconf
4401
check_func  sysctl
M
Mans Rullgard 已提交
4402
check_func  usleep
4403

4404
check_func_headers io.h setmode
4405 4406
check_func_headers stdlib.h getenv

4407
check_func_headers windows.h CoTaskMemFree -lole32
4408
check_func_headers windows.h GetProcessAffinityMask
4409
check_func_headers windows.h GetProcessTimes
4410
check_func_headers windows.h GetSystemTimeAsFileTime
L
Luca Barbato 已提交
4411
check_func_headers windows.h LoadLibrary
D
Daniel Verkamp 已提交
4412
check_func_headers windows.h MapViewOfFile
4413
check_func_headers windows.h SetConsoleTextAttribute
M
Mans Rullgard 已提交
4414
check_func_headers windows.h Sleep
4415
check_func_headers windows.h VirtualAlloc
4416
check_struct windows.h "CONDITION_VARIABLE" Ptr
R
Ramiro Polla 已提交
4417

4418
check_header direct.h
4419
check_header dlfcn.h
4420
check_header d3d11.h
4421
check_header dxva.h
L
Laurent Aimar 已提交
4422
check_header dxva2api.h
4423
check_header io.h
4424
check_header mach/mach_time.h
4425
check_header malloc.h
4426
check_header poll.h
4427
check_header sys/mman.h
4428
check_header sys/param.h
4429
check_header sys/resource.h
4430
check_header sys/select.h
4431
check_header sys/time.h
L
Luca Barbato 已提交
4432
check_header sys/un.h
M
Mans Rullgard 已提交
4433
check_header unistd.h
4434
check_header valgrind/valgrind.h
4435 4436
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
4437
check_header VideoDecodeAcceleration/VDADecoder.h
M
Mans Rullgard 已提交
4438
check_header windows.h
D
Diego Biurrun 已提交
4439
check_header X11/extensions/XvMClib.h
4440

4441 4442 4443 4444 4445 4446
check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi

check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss

4447
check_type "windows.h dxva.h" "DXVA_PicParams_HEVC" -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0
4448
check_type "windows.h d3d11.h" "ID3D11VideoDecoder"
4449
check_type "d3d9.h dxva2api.h" DXVA2_ConfigPictureDecode -D_WIN32_WINNT=0x0602
H
Hendrik Leppkes 已提交
4450

4451 4452
check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"

4453
if ! disabled w32threads && ! enabled pthreads; then
4454 4455
    check_func_headers "windows.h process.h" _beginthreadex &&
        enable w32threads || disable w32threads
4456 4457
fi

4458 4459
# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
4460 4461
if ! disabled pthreads && ! enabled w32threads; then
    enable pthreads
L
Luca Barbato 已提交
4462
    if check_func pthread_join -pthread; then
M
Måns Rullgård 已提交
4463
        add_cflags -pthread
4464
        add_extralibs -pthread
4465
    elif check_func pthread_join -pthreads; then
M
Måns Rullgård 已提交
4466
        add_cflags -pthreads
4467
        add_extralibs -pthreads
4468
    elif check_func pthread_join -lpthreadGC2; then
G
Gianluigi Tiesi 已提交
4469
        add_extralibs -lpthreadGC2
L
Luca Barbato 已提交
4470 4471 4472
    elif check_lib pthread.h pthread_join -lpthread; then
        :
    elif ! check_func pthread_join; then
4473
        disable pthreads
M
Måns Rullgård 已提交
4474
    fi
4475 4476
fi

4477 4478 4479
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib

4480
check_lib math.h sin -lm && LIBM="-lm"
L
Luca Barbato 已提交
4481
enabled vaapi && require vaapi va/va.h vaInitialize -lva
M
Måns Rullgård 已提交
4482

4483 4484 4485 4486
atan2f_args=2
ldexpf_args=2
powf_args=2

4487
for func in $MATH_FUNCS; do
4488
    eval check_mathfunc $func \${${func}_args:-1}
4489
done
4490

4491
# these are off by default, so fail if requested and not available
4492 4493
enabled avisynth          && { check_lib2 "avisynth/avisynth_c.h windows.h" LoadLibrary ||
                               check_lib2 "avxsynth/avxsynth_c.h dlfcn.h" dlopen -ldl   ||
D
d s 已提交
4494
                               die "ERROR: LoadLibrary/dlopen not found, or avisynth header not found"; }
4495
enabled cuda              && check_lib cuda.h cuInit -lcuda
D
Diego Biurrun 已提交
4496 4497
enabled frei0r            && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
enabled gnutls            && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4498
enabled libbs2b           && require_pkg_config libbs2b bs2b.h bs2b_open
H
Hendrik Leppkes 已提交
4499
enabled libdcadec         && require libdcadec libdcadec/dca_context.h dcadec_context_create -ldcadec
D
Diego Biurrun 已提交
4500
enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4501
enabled libfdk_aac        && require_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen
L
Luca Barbato 已提交
4502
enabled libfontconfig     && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4503
enabled libfreetype       && require_pkg_config freetype2 "ft2build.h FT_FREETYPE_H" FT_Init_FreeType
D
Diego Biurrun 已提交
4504 4505 4506 4507
enabled libgsm            && { for gsm_hdr in "gsm.h" "gsm/gsm.h"; do
                                   check_lib "${gsm_hdr}" gsm_create -lgsm && break;
                               done || die "ERROR: libgsm not found"; }
enabled libilbc           && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4508
enabled libkvazaar        && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get
4509
enabled libmfx            && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
D
Diego Biurrun 已提交
4510 4511 4512 4513
enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb
enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb
enabled libopencv         && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
4514
enabled libopenh264       && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion
4515 4516
enabled libopenjpeg       && { { check_header openjpeg.h && check_lib2 openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC; } ||
                               { require_pkg_config libopenjpeg1 openjpeg.h opj_version -DOPJ_STATIC; } }
D
Diego Biurrun 已提交
4517 4518 4519 4520
enabled libopus           && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
enabled libpulse          && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
V
Vittorio Giovara 已提交
4521
enabled libsnappy         && require snappy snappy-c.h snappy_compress -lsnappy
4522
enabled libspeex          && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex
D
Diego Biurrun 已提交
4523
enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
P
Paul B Mahol 已提交
4524
enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame
D
Diego Biurrun 已提交
4525 4526 4527
enabled libvo_aacenc      && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
enabled libvo_amrwbenc    && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
enabled libvorbis         && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548
enabled libvpx            && require_pkg_config "vpx >= 1.3.0" vpx/vpx_codec.h vpx_codec_version && {
    enabled libvpx_vp8_decoder && {
        check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
            disable libvpx_vp8_decoder;
    }
    enabled libvpx_vp8_encoder && {
        check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
            disable libvpx_vp8_encoder;
    }
    enabled libvpx_vp9_decoder && {
        check_pkg_config vpx "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
            disable libvpx_vp9_decoder;
    }
    enabled libvpx_vp9_encoder && {
        check_pkg_config vpx "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
            disable libvpx_vp9_encoder;
    }
    if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
        die "libvpx enabled but no supported decoders found"
    fi
}
D
Diego Biurrun 已提交
4549
enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
J
Justin Ruggles 已提交
4550
enabled libwebp           && require_pkg_config libwebp webp/encode.h WebPGetEncoderVersion
4551
enabled libx264           && require_pkg_config x264 "stdint.h x264.h" x264_encoder_encode &&
D
Diego Biurrun 已提交
4552
                             { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4553 4554 4555
                               die "ERROR: libx264 version must be >= 0.118."; } &&
                             { check_cpp_condition x264.h "X264_MPEG2" &&
                               enable libx262; }
4556
enabled libx265           && require_pkg_config x265 x265.h x265_api_get &&
4557 4558
                             { check_cpp_condition x265.h "X265_BUILD >= 57" ||
                               die "ERROR: libx265 version must be >= 57."; }
D
Diego Biurrun 已提交
4559 4560
enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
W
wm4 已提交
4561 4562 4563 4564 4565 4566 4567
enabled mmal              && { check_lib 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_extralibs -L/opt/vc/lib/ -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host ;
                                    check_lib interface/mmal/mmal.h mmal_port_connect ; }
                                check_lib interface/mmal/mmal.h mmal_port_connect ; } ||
                               die "ERROR: mmal not found"; }
4568 4569
enabled openssl           && { check_pkg_config openssl openssl/ssl.h SSL_library_init && {
                               add_cflags $openssl_cflags && add_extralibs $openssl_libs; }||
4570
                               check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
D
Diego Biurrun 已提交
4571 4572 4573
                               check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 ||
                               check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 ||
                               die "ERROR: openssl not found"; }
4574

S
Samuel Pitoiset 已提交
4575
if enabled gnutls; then
4576
    { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } ||
S
Samuel Pitoiset 已提交
4577 4578 4579
    { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
fi

4580 4581
# libdc1394 check
if enabled libdc1394; then
4582
    { require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new &&
4583 4584 4585 4586 4587 4588
        enable libdc1394_2; } ||
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
        enable libdc1394_1; } ||
    die "ERROR: No version of libdc1394 found "
fi

L
Luca Barbato 已提交
4589
if enabled nvenc; then
4590
    enabled cuda || check_header cuda.h || die "ERROR: cuda.h not found.";
L
Luca Barbato 已提交
4591 4592 4593 4594 4595
    check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found.";
    check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" ||
        die "ERROR: NVENC API version 4 or older is not supported";
fi

4596
if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4597
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4598 4599
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
    enable sdl
M
Michael Niedermayer 已提交
4600
fi
4601

4602
pod2man --help     > /dev/null 2>&1 && enable pod2man   || disable pod2man
4603
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
4604

S
Stefano Sabatini 已提交
4605
check_header linux/fb.h
4606
check_header linux/videodev2.h
L
Luca Barbato 已提交
4607 4608
check_struct linux/videodev2.h "struct v4l2_frmivalenum" discrete

A
Alexandre Lision 已提交
4609 4610
check_header AVFoundation/AVFoundation.h &&
    check_objcflags -fobjc-arc &&
4611
    add_extralibs -framework Foundation -framework AVFoundation -framework CoreVideo -framework CoreMedia ||
A
Alexandre Lision 已提交
4612 4613
    disable AVFoundation_AVFoundation_h

4614
check_header sys/videoio.h
4615

4616
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4617 4618 4619
# 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
R
Ramiro Polla 已提交
4620

4621
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
R
Indent  
Ramiro Polla 已提交
4622 4623 4624 4625 4626 4627 4628
{ 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
4629

B
Brad 已提交
4630
check_header sndio.h
4631 4632
check_header sys/soundcard.h
check_header soundcard.h
M
Måns Rullgård 已提交
4633

D
Diego Biurrun 已提交
4634 4635
enabled_any alsa_indev alsa_outdev &&
    check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4636

4637 4638
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
    check_func jack_port_get_latency_range -ljack
O
Olivier Guilyardi 已提交
4639

B
Brad 已提交
4640 4641
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio

4642
if enabled libcdio; then
D
Diego Biurrun 已提交
4643
    check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
4644 4645
    check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
    die "ERROR: No usable libcdio/cdparanoia found"
4646
fi
4647

4648 4649
check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib

L
Luca Barbato 已提交
4650
if enabled libxcb || enabled x11grab && ! disabled libxcb; then
L
Luca Barbato 已提交
4651
    check_pkg_config xcb-shape xcb/shape.h xcb_shape_rectangles || {
L
Luca Barbato 已提交
4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673
        enabled libxcb && die "ERROR: libxcb not found";
    } && disable x11grab && enable libxcb

    disabled libxcb_shm ||
        check_pkg_config xcb-shm xcb/shm.h xcb_shm_attach || {
            enabled libxcb_shm && die "ERROR: libxcb_shm not found";
        } && check_header sys/shm.h && enable libxcb_shm

    disabled libxcb_xfixes ||
        check_pkg_config xcb-xfixes xcb/xfixes.h xcb_xfixes_get_cursor_image || {
            enabled libxcb_xfixes && die "ERROR: libxcb_xfixes not found";
        } && enable libxcb_xfixes

    add_cflags "$xcb_event_cflags $xcb_shm_cflags $xcb_xfixes_cflags"
    add_extralibs "$xcb_event_libs $xcb_shm_libs $xcb_xfixes_libs"
fi

if enabled x11grab; then
    enabled xlib || die "ERROR: Xlib not found"
    require Xext X11/extensions/XShm.h XShmCreateImage -lXext
    require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
fi
4674

A
Anton Khirnov 已提交
4675 4676 4677 4678
enabled vaapi && enabled xlib &&
    check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 &&
    enable vaapi_x11

4679
enabled vdpau &&
D
Diego Biurrun 已提交
4680
    check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4681
    disable vdpau
4682

4683
enabled vdpau && enabled xlib &&
4684 4685
    check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau &&
    prepend avconv_libs $($ldflags_filter "-lvdpau") &&
4686 4687
    enable vdpau_x11

4688
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4689 4690 4691

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
4692
check_cflags -Wall
M
Michael Niedermayer 已提交
4693 4694 4695
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
4696
check_cflags -Wwrite-strings
4697
check_cflags -Wtype-limits
4698
check_cflags -Wundef
4699
check_cflags -Wmissing-prototypes
4700
check_cflags -Wstrict-prototypes
4701
enabled extra_warnings && check_cflags -Winline
4702
enabled extra_warnings && check_cflags -Wcast-qual
4703

4704 4705 4706 4707 4708 4709 4710 4711 4712 4713
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

4714
# add some linker flags
4715
check_ldflags -Wl,--warn-common
4716
check_ldflags -Wl,-rpath-link=libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
R
Reinhard Tartler 已提交
4717
enabled rpath && add_ldexeflags -Wl,-rpath,$libdir
4718
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
F
Fabrice Bellard 已提交
4719

4720 4721 4722 4723
# add some strip flags
# -wN '..@*' is more selective than -x, but not available everywhere.
check_stripflags -wN \'..@*\' || check_stripflags -x || strip='true'

4724 4725 4726 4727 4728 4729 4730
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      \
4731 4732
                  -Wl,--wrap,avcodec_encode_subtitle    \
                  -Wl,--wrap,avresample_convert ||
4733 4734
    disable neon_clobber_test

4735
enabled xmm_clobber_test &&
4736 4737 4738 4739 4740
    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      \
4741
                  -Wl,--wrap,avcodec_encode_video2      \
4742
                  -Wl,--wrap,avcodec_encode_subtitle    \
4743
                  -Wl,--wrap,avresample_convert         \
4744
                  -Wl,--wrap,sws_scale ||
4745 4746
    disable xmm_clobber_test

4747
echo "X { local: *; };" > $TMPV
4748
if test_ldflags -Wl,--version-script,$TMPV; then
4749
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4750 4751 4752 4753 4754
elif test_ldflags -Wl,-M,$TMPV; then
    append SHFLAGS '-Wl,-M,\$(SUBDIR)lib\$(NAME).ver-sol2'
fi

check_cc <<EOF && enable symver_asm_label
4755
void ff_foo(void) __asm__ ("av_foo@VERSION");
4756
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4757 4758 4759 4760 4761
EOF
    check_cc <<EOF && enable symver_gnu_asm
__asm__(".symver ff_foo,av_foo@VERSION");
void ff_foo(void) {}
EOF
4762

M
Mans Rullgard 已提交
4763 4764 4765 4766 4767 4768 4769 4770
if [ -z "$optflags" ]; then
    if enabled small; then
        optflags=$cflags_size
    elif enabled optimizations; then
        optflags=$cflags_speed
    else
        optflags=$cflags_noopt
    fi
4771
fi
M
Mans Rullgard 已提交
4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787

check_optflags(){
    check_cflags "$@"
    enabled lto && check_ldflags "$@"
}


if enabled lto; then
    test "$cc_type" != "$ld_type" && die "LTO requires same compiler and linker"
    check_cflags  -flto
    check_ldflags -flto $cpuflags
fi

check_optflags $optflags
check_optflags -fno-math-errno
check_optflags -fno-signed-zeros
4788

4789
if enabled icc; then
M
Måns Rullgård 已提交
4790 4791 4792 4793
    # Just warnings, no remarks
    check_cflags -w1
    # -wd: Disable following warnings
    # 144, 167, 556: -Wno-pointer-sign
4794
    # 1292: attribute "foo" ignored
4795
    # 1419: external declaration in primary source file
M
Måns Rullgård 已提交
4796
    # 10006: ignoring unknown option -fno-signed-zeros
4797
    # 10148: ignoring unknown option -Wno-parentheses
M
Måns Rullgård 已提交
4798
    # 10156: ignoring option '-W'; no argument required
4799
    check_cflags -wd144,167,556,1292,1419,10006,10148,10156
M
Måns Rullgård 已提交
4800 4801 4802
    # 11030: Warning unknown option --as-needed
    # 10156: ignoring option '-export'; no argument required
    check_ldflags -wd10156,11030
C
Carl Eugen Hoyos 已提交
4803 4804
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
    enable ebp_available
4805
    if enabled x86_32; then
4806
        icc_version=$($cc -dumpversion)
4807 4808
        test ${icc_version%%.*} -ge 11 &&
            check_cflags -falign-stack=maintain-16-byte ||
4809 4810
            disable aligned_stack
    fi
4811 4812
elif enabled ccc; then
    # disable some annoying warnings
4813 4814 4815 4816
    add_cflags -msg_disable bitnotint
    add_cflags -msg_disable mixfuncvoid
    add_cflags -msg_disable nonstandcast
    add_cflags -msg_disable unsupieee
M
Måns Rullgård 已提交
4817
elif enabled gcc; then
M
Mans Rullgard 已提交
4818
    check_optflags -fno-tree-vectorize
4819
    check_cflags -Werror=implicit-function-declaration
4820
    check_cflags -Werror=missing-prototypes
4821
    check_cflags -Werror=return-type
4822
    check_cflags -Werror=declaration-after-statement
4823
    check_cflags -Werror=vla
4824
    check_cflags -Werror=format-security
4825
    check_cflags -fdiagnostics-color=auto
4826
    enabled extra_warnings || check_disable_warning -Wno-maybe-uninitialized
4827 4828
elif enabled llvm_gcc; then
    check_cflags -mllvm -stack-alignment=16
D
David Conrad 已提交
4829
elif enabled clang; then
4830
    check_cflags -mllvm -stack-alignment=16
D
David Conrad 已提交
4831
    check_cflags -Qunused-arguments
4832 4833
    check_cflags -Werror=implicit-function-declaration
    check_cflags -Werror=missing-prototypes
4834
    check_cflags -Werror=return-type
L
Luca Barbato 已提交
4835 4836 4837
elif enabled cparser; then
    add_cflags -Wno-missing-variable-declarations
    add_cflags -Wno-empty-statement
M
Måns Rullgård 已提交
4838
elif enabled armcc; then
M
Martin Storsjö 已提交
4839 4840
    add_cflags -W${armcc_opt},--diag_suppress=4343 # hardfp compat
    add_cflags -W${armcc_opt},--diag_suppress=3036 # using . as system include dir
4841
    # 2523: use of inline assembly is deprecated
4842 4843
    add_cflags -W${armcc_opt},--diag_suppress=2523
    add_cflags -W${armcc_opt},--diag_suppress=1207
4844
    add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4845
    add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4846 4847
    add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
    add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4848 4849
elif enabled tms470; then
    add_cflags -pds=824 -pds=837
4850
    disable inline_asm
4851 4852
elif enabled pathscale; then
    add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
A
Alex Smith 已提交
4853
elif enabled_any msvc icl; then
4854
    enabled x86_32 && disable aligned_stack
4855
    enabled_all x86_32 debug && add_cflags -Oy-
4856
    enabled debug && add_ldflags -debug
4857
    enable pragma_deprecated
A
Alex Smith 已提交
4858
    if enabled icl; then
4859 4860 4861 4862
        # -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
D
Diego Biurrun 已提交
4863 4864
        # icl will pass the inline asm tests but inline asm is currently
        # not supported (build will fail)
A
Alex Smith 已提交
4865 4866
        disable inline_asm
    fi
4867 4868
    # 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
4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879
    # 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
4880
    check_func strtoll || add_cflags -Dstrtoll=_strtoi64
C
Carl Eugen Hoyos 已提交
4881 4882
fi

4883
for pfx in "" host_; do
4884
    varname=${pfx%_}cc_type
4885 4886 4887 4888 4889 4890 4891 4892
    eval "type=\$$varname"
    if [ $type = "msvc" ]; then
        check_${pfx}cc <<EOF || add_${pfx}cflags -Dinline=__inline
static inline int foo(int a) { return a; }
EOF
    fi
done

4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904
case $as_type in
    clang)
        add_asflags -Qunused-arguments
    ;;
esac

case $ld_type in
    clang)
        check_ldflags -Qunused-arguments
    ;;
esac

M
Mans Rullgard 已提交
4905
case $target_os in
4906 4907 4908
    osf1)
        enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
    ;;
M
Mans Rullgard 已提交
4909 4910 4911 4912 4913
    plan9)
        add_cppflags -Dmain=plan9_main
    ;;
esac

4914 4915
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }

4916
check_deps $CONFIG_LIST       \
4917
           $CONFIG_EXTRA      \
4918
           $HAVE_LIST         \
4919
           $ALL_COMPONENTS    \
4920

4921 4922 4923 4924
enabled_all dxva2 CoTaskMemFree &&
    prepend avconv_libs $($ldflags_filter "-lole32") &&
    enable dxva2_lib

4925
! enabled_any memalign posix_memalign aligned_malloc &&
4926
    enabled simd_align_16 && enable memalign_hack
4927

4928 4929
map 'enabled $v && intrinsics=${v#intrinsics_}' $INTRINSICS_LIST

4930 4931 4932 4933 4934 4935 4936 4937
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

4938 4939
enabled zlib && add_cppflags -DZLIB_CONST

4940 4941 4942 4943 4944
# conditional library dependencies, in linking order
enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
enabled resample_filter && prepend avfilter_deps "avresample"
enabled scale_filter    && prepend avfilter_deps "swscale"

A
Anton Khirnov 已提交
4945 4946
enabled opus_decoder    && prepend avcodec_deps "avresample"

4947 4948 4949 4950 4951 4952 4953 4954 4955
expand_deps(){
    lib_deps=${1}_deps
    eval "deps=\$$lib_deps"
    append $lib_deps $(map 'eval echo \$${v}_deps' $deps)
    unique $lib_deps
}

map 'expand_deps $v' $LIBRARY_LIST

4956
echo "install prefix            $prefix"
D
Diego Biurrun 已提交
4957 4958
echo "source path               $source_path"
echo "C compiler                $cc"
4959
echo "C library                 $libc_type"
4960 4961
if test "$host_cc" != "$cc"; then
    echo "host C compiler           $host_cc"
4962
    echo "host C library            $host_libc_type"
4963
fi
D
Diego Biurrun 已提交
4964
echo "ARCH                      $arch ($cpu)"
4965 4966
if test "$build_suffix" != ""; then
    echo "build suffix              $build_suffix"
4967
fi
4968 4969 4970
if test "$extra_version" != ""; then
    echo "version string suffix     $extra_version"
fi
M
Måns Rullgård 已提交
4971
echo "big-endian                ${bigendian-no}"
4972
echo "runtime cpu detection     ${runtime_cpudetect-no}"
4973
if enabled x86; then
4974
    echo "${yasmexe}                      ${yasm-no}"
M
Måns Rullgård 已提交
4975
    echo "MMX enabled               ${mmx-no}"
4976
    echo "MMXEXT enabled            ${mmxext-no}"
4977
    echo "3DNow! enabled            ${amd3dnow-no}"
4978
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
4979
    echo "SSE enabled               ${sse-no}"
4980
    echo "SSSE3 enabled             ${ssse3-no}"
4981
    echo "AVX enabled               ${avx-no}"
4982
    echo "XOP enabled               ${xop-no}"
4983
    echo "FMA3 enabled              ${fma3-no}"
4984
    echo "FMA4 enabled              ${fma4-no}"
4985
    echo "i686 features enabled     ${i686-no}"
M
Måns Rullgård 已提交
4986
    echo "CMOV is fast              ${fast_cmov-no}"
M
Michael Niedermayer 已提交
4987 4988
    echo "EBX available             ${ebx_available-no}"
    echo "EBP available             ${ebp_available-no}"
F
Fabrice Bellard 已提交
4989
fi
4990 4991 4992 4993
if enabled aarch64; then
    echo "NEON enabled              ${neon-no}"
    echo "VFP enabled               ${vfp-no}"
fi
4994
if enabled arm; then
M
Måns Rullgård 已提交
4995 4996
    echo "ARMv5TE enabled           ${armv5te-no}"
    echo "ARMv6 enabled             ${armv6-no}"
4997
    echo "ARMv6T2 enabled           ${armv6t2-no}"
4998
    echo "VFP enabled               ${vfp-no}"
4999
    echo "NEON enabled              ${neon-no}"
5000
fi
5001
if enabled ppc; then
M
Måns Rullgård 已提交
5002
    echo "AltiVec enabled           ${altivec-no}"
5003 5004
    echo "VSX enabled               ${vsx-no}"
    echo "POWER8 enabled            ${power8-no}"
5005
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
M
Måns Rullgård 已提交
5006
    echo "dcbzl available           ${dcbzl-no}"
5007
fi
M
Måns Rullgård 已提交
5008
echo "debug symbols             ${debug-no}"
5009
echo "optimize for size         ${small-no}"
5010
echo "optimizations             ${optimizations-no}"
M
Måns Rullgård 已提交
5011 5012
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
5013
echo "new filter support        ${avfilter-no}"
M
Måns Rullgård 已提交
5014 5015
echo "network support           ${network-no}"
echo "threading support         ${thread_type-no}"
5016
echo "safe bitstream reader     ${safe_bitstream_reader-no}"
M
Måns Rullgård 已提交
5017
echo "SDL support               ${sdl-no}"
5018 5019
test -n "$random_seed" &&
    echo "random seed               ${random_seed}"
5020
echo
F
Fabrice Bellard 已提交
5021

5022 5023 5024 5025
echo "External libraries:"
print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
echo

5026 5027 5028 5029
echo "Libraries:"
print_enabled '' $LIBRARY_LIST | print_3_columns
echo

5030
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
5031
    echo "Enabled ${type}s:"
5032
    eval list=\$$(toupper $type)_LIST
5033
    print_enabled '_*' $list | print_3_columns
5034
    echo
5035 5036
done

5037
license="LGPL version 2.1 or later"
5038
if enabled nonfree; then
5039
    license="nonfree and unredistributable"
5040 5041 5042 5043
elif enabled gplv3; then
    license="GPL version 3 or later"
elif enabled lgplv3; then
    license="LGPL version 3 or later"
5044
elif enabled gpl; then
5045
    license="GPL version 2 or later"
5046 5047 5048
fi

echo "License: $license"
5049

5050 5051
echo "Creating config.mak and config.h..."

5052
test -e Makefile || echo "include $source_path/Makefile" > Makefile
5053

5054 5055
config_files="$TMPH config.mak"

5056 5057
cat > config.mak <<EOF
# Automatically generated by configure - do not modify!
5058
LIBAV_CONFIGURATION=$LIBAV_CONFIGURATION
5059 5060 5061 5062 5063 5064
prefix=$prefix
LIBDIR=\$(DESTDIR)$libdir
SHLIBDIR=\$(DESTDIR)$shlibdir
INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir
5065
DOCDIR=\$(DESTDIR)$docdir
5066
MANDIR=\$(DESTDIR)$mandir
5067
SRC_PATH=$source_path
5068
CC_IDENT=$cc_ident
5069
ARCH=$arch
5070
INTRINSICS=$intrinsics
5071
CC=$cc
L
Luca Barbato 已提交
5072
OBJCC=$cc
5073
AS=$as
L
Luca Barbato 已提交
5074
OBJCC=$objcc
5075 5076
LD=$ld
DEPCC=$dep_cc
5077 5078 5079
DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
DEPAS=$as
DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
5080
YASM=$yasmexe
5081
DEPYASM=$yasmexe
5082
AR=$ar
5083 5084
ARFLAGS=$arflags
AR_O=$ar_o
5085
RANLIB=$ranlib
L
Loren Merritt 已提交
5086
STRIP=$strip
5087 5088 5089
LN_S=$ln_s
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
L
Luca Barbato 已提交
5090
OBJCFLAGS=$OBJCFLAGS
5091
ASFLAGS=$ASFLAGS
5092
AS_C=$AS_C
5093
AS_O=$AS_O
L
Luca Barbato 已提交
5094 5095 5096
OBJCC_C=$OBJCC_C
OBJCC_E=$OBJCC_E
OBJCC_O=$OBJCC_O
5097
CC_C=$CC_C
5098
CC_E=$CC_E
5099
CC_O=$CC_O
5100
LD_O=$LD_O
5101 5102
LD_LIB=$LD_LIB
LD_PATH=$LD_PATH
5103
DLLTOOL=$dlltool
5104
LDFLAGS=$LDFLAGS
5105
LDEXEFLAGS=$LDEXEFLAGS
5106
SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
5107
STRIPFLAGS=$STRIPFLAGS
5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118
YASMFLAGS=$YASMFLAGS
BUILDSUF=$build_suffix
FULLNAME=$FULLNAME
LIBPREF=$LIBPREF
LIBSUF=$LIBSUF
LIBNAME=$LIBNAME
SLIBPREF=$SLIBPREF
SLIBSUF=$SLIBSUF
EXESUF=$EXESUF
EXTRA_VERSION=$extra_version
CCDEP=$CCDEP
5119
CCDEP_FLAGS=$CCDEP_FLAGS
5120
ASDEP=$ASDEP
5121
ASDEP_FLAGS=$ASDEP_FLAGS
5122 5123 5124
CC_DEPFLAGS=$CC_DEPFLAGS
AS_DEPFLAGS=$AS_DEPFLAGS
HOSTCC=$host_cc
5125
HOSTLD=$host_ld
5126
HOSTCFLAGS=$host_cflags
5127
HOSTCPPFLAGS=$host_cppflags
5128 5129 5130
HOSTEXESUF=$HOSTEXESUF
HOSTLDFLAGS=$host_ldflags
HOSTLIBS=$host_libs
5131 5132 5133 5134 5135
DEPHOSTCC=$host_cc
DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
HOSTCCDEP=$HOSTCCDEP
HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
5136
HOSTCC_C=$HOSTCC_C
5137
HOSTCC_O=$HOSTCC_O
5138
HOSTLD_O=$HOSTLD_O
5139
TARGET_EXEC=$target_exec $target_exec_args
5140
TARGET_PATH=$target_path
5141
TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
5142
CFLAGS-avplay=$sdl_cflags
5143
ZLIB=$($ldflags_filter -lz)
5144 5145
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
EXTRALIBS=$extralibs
5146
COMPAT_OBJS=$compat_objs
5147
EXEOBJS=$exeobjs
M
Måns Rullgård 已提交
5148
INSTALL=install
5149 5150 5151 5152 5153 5154
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}
5155 5156 5157 5158
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}
5159
SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
5160
EOF
L
Luca Barbato 已提交
5161

5162
get_version(){
5163
    lcname=lib${1}
5164 5165
    name=$(toupper $lcname)
    file=$source_path/$lcname/version.h
5166
    eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5167
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5168 5169
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
5170
    eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
5171 5172
}

5173
map 'get_version $v' $LIBRARY_LIST
L
Luca Barbato 已提交
5174

5175
map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> config.mak' $LIBRARY_LIST
5176

5177 5178 5179 5180 5181 5182 5183
print_program_libs(){
    eval "program_libs=\$${1}_libs"
    eval echo "LIBS-${1}=${program_libs}" >> config.mak
}

map 'print_program_libs $v' $PROGRAM_LIST

5184 5185
cat > $TMPH <<EOF
/* Automatically generated by configure - do not modify! */
5186 5187 5188
#ifndef LIBAV_CONFIG_H
#define LIBAV_CONFIG_H
#define LIBAV_CONFIGURATION "$(c_escape $LIBAV_CONFIGURATION)"
5189
#define LIBAV_LICENSE "$(c_escape $license)"
5190
#define AVCONV_DATADIR "$(eval c_escape $datadir)"
5191
#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
5192 5193 5194
#define restrict $_restrict
#define EXTERN_PREFIX "${extern_prefix}"
#define EXTERN_ASM ${extern_prefix}
5195
#define SLIBSUF "$SLIBSUF"
5196
EOF
5197

5198 5199 5200
test -n "$malloc_prefix" &&
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH

5201 5202 5203 5204 5205
if enabled yasm; then
    append config_files $TMPASM
    printf '' >$TMPASM
fi

M
Martin Storsjö 已提交
5206 5207
enabled getenv || echo "#define getenv(x) NULL" >> $TMPH

5208 5209 5210
print_config ARCH_   "$config_files" $ARCH_LIST
print_config HAVE_   "$config_files" $HAVE_LIST
print_config CONFIG_ "$config_files" $CONFIG_LIST       \
M
Måns Rullgård 已提交
5211
                                     $CONFIG_EXTRA      \
5212
                                     $ALL_COMPONENTS    \
5213

5214
echo "#endif /* LIBAV_CONFIG_H */" >> $TMPH
5215

D
Diego Biurrun 已提交
5216
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
5217
cp_if_changed $TMPH config.h
5218
touch .config
N
Nick Kurshev 已提交
5219

5220 5221
enabled yasm && cp_if_changed $TMPASM config.asm

5222 5223 5224 5225 5226 5227
cat > $TMPH <<EOF
/* Generated by ffconf */
#ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H
EOF

5228
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
5229 5230 5231 5232 5233

echo "#endif /* AVUTIL_AVCONFIG_H */" >> $TMPH

cp_if_changed $TMPH libavutil/avconfig.h

M
Måns Rullgård 已提交
5234 5235
test -n "$WARNINGS" && printf "\n$WARNINGS"

5236
# build pkg-config files
5237

5238 5239 5240 5241
lib_version(){
    eval printf "\"lib${1} >= \$LIB$(toupper ${1})_VERSION, \""
}

5242
pkgconfig_generate(){
D
Diego Biurrun 已提交
5243 5244 5245 5246 5247
    name=$1
    shortname=${name#lib}${build_suffix}
    comment=$2
    version=$3
    libs=$4
5248 5249
    requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps))
    requires=${requires%, }
D
Diego Biurrun 已提交
5250 5251 5252
    enabled ${name#lib} || return 0
    mkdir -p $name
    cat <<EOF > $name/$name.pc
5253
prefix=$prefix
5254
exec_prefix=\${prefix}
5255
libdir=$libdir
5256
includedir=$incdir
5257

5258 5259 5260
Name: $name
Description: $comment
Version: $version
5261
Requires: $(enabled shared || echo $requires)
5262
Requires.private: $(enabled shared && echo $requires)
5263
Conflicts:
5264
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
5265
Libs.private: $(enabled shared && echo $libs)
5266
Cflags: -I\${includedir}
5267
EOF
D
Diego Biurrun 已提交
5268
    cat <<EOF > $name/$name-uninstalled.pc
5269 5270
prefix=
exec_prefix=
5271
libdir=\${pcfiledir}
5272
includedir=${source_path}
5273

5274 5275 5276 5277
Name: $name
Description: $comment
Version: $version
Requires: $requires
5278
Conflicts:
5279
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
5280 5281
Cflags: -I\${includedir}
EOF
5282
}
5283

5284
pkgconfig_generate libavutil     "Libav utility library"          "$LIBAVUTIL_VERSION"     "$LIBRT $LIBM"
5285 5286 5287 5288
pkgconfig_generate libavcodec    "Libav codec library"            "$LIBAVCODEC_VERSION"    "$extralibs"
pkgconfig_generate libavformat   "Libav container format library" "$LIBAVFORMAT_VERSION"   "$extralibs"
pkgconfig_generate libavdevice   "Libav device handling library"  "$LIBAVDEVICE_VERSION"   "$extralibs"
pkgconfig_generate libavfilter   "Libav video filtering library"  "$LIBAVFILTER_VERSION"   "$extralibs"
5289
pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM"
5290
pkgconfig_generate libswscale    "Libav image rescaling library"  "$LIBSWSCALE_VERSION"    "$LIBM"