configure 154 KB
Newer Older
1
#!/bin/sh
2
#
3
# FFmpeg configure script
4
#
Diego Biurrun's avatar
Diego Biurrun committed
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
}

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."
Diego Biurrun's avatar
Diego Biurrun committed
45
    echo "This configure script requires a POSIX-compatible shell"
46
    echo "such as bash or ksh."
47
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
48
    echo "Instead, install a working POSIX-compatible shell."
49
    echo "Disabling this configure test will create a broken FFmpeg."
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(){
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
  --disable-logging        do not log configure debug information
81
  --fatal-warnings         fail if any configure warning is generated
82 83
  --prefix=PREFIX          install in PREFIX [$prefix]
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
84
  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
85
  --docdir=DIR             install documentation in DIR [PREFIX/share/doc/ffmpeg]
86 87 88 89 90
  --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]

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

Configuration options:
  --disable-static         do not build static libraries [no]
  --enable-shared          build shared libraries [no]
  --enable-small           optimize for size instead of speed
102
  --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary)
103 104
  --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
  --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no]
  --enable-incompatible-fork-abi  enable incompatible Libav fork ABI (deprecated) [no]
108

109 110
Program options:
  --disable-programs       do not build command line programs
111 112 113 114
  --disable-ffmpeg         disable ffmpeg build
  --disable-ffplay         disable ffplay build
  --disable-ffprobe        disable ffprobe build
  --disable-ffserver       disable ffserver build
115

116
Documentation options:
117
  --disable-doc            do not build documentation
118 119 120 121 122 123
  --disable-htmlpages      do not build HTML documentation pages
  --disable-manpages       do not build man documentation pages
  --disable-podpages       do not build POD documentation pages
  --disable-txtpages       do not build text documentation pages

Component options:
124 125 126
  --disable-avdevice       disable libavdevice build
  --disable-avcodec        disable libavcodec build
  --disable-avformat       disable libavformat build
127
  --disable-avutil         disable libavutil build
Michael Niedermayer's avatar
Michael Niedermayer committed
128
  --disable-swresample     disable libswresample build
129
  --disable-swscale        disable libswscale build
130
  --disable-postproc       disable libpostproc build
131
  --disable-avfilter       disable libavfilter build
132
  --enable-avresample      enable libavresample build [no]
133
  --disable-pthreads       disable pthreads [auto]
134
  --disable-w32threads     disable Win32 threads [auto]
135
  --disable-os2threads     disable OS/2 threads [auto]
136
  --disable-network        disable network support [no]
137
  --disable-dct            disable DCT code
138
  --disable-dwt            disable DWT code
139
  --disable-error-resilience disable error resilience code
140
  --disable-lsp            disable LSP code
141
  --disable-lzo            disable LZO decoder code
142 143
  --disable-mdct           disable MDCT code
  --disable-rdft           disable RDFT code
144
  --disable-fft            disable FFT code
145 146

Hardware accelerators:
147
  --disable-dxva2          disable DXVA2 code [autodetect]
148
  --disable-vaapi          disable VAAPI code [autodetect]
149
  --enable-vda             enable VDA code
150
  --disable-vdpau          disable VDPAU code [autodetect]
151 152

Individual component options:
153
  --disable-everything     disable all components listed below
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
  --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
178
  --enable-indev=NAME      enable input device NAME
179 180
  --disable-indev=NAME     disable input device NAME
  --disable-indevs         disable input devices
181 182
  --enable-outdev=NAME     enable output device NAME
  --disable-outdev=NAME    disable output device NAME
183 184 185 186 187 188 189
  --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:
Diego Biurrun's avatar
Diego Biurrun committed
190
  --enable-avisynth        enable reading of AviSynth script files [no]
191
  --disable-bzlib          disable bzlib [autodetect]
192
  --enable-fontconfig      enable fontconfig
Stefano Sabatini's avatar
Stefano Sabatini committed
193
  --enable-frei0r          enable frei0r video filtering
194
  --enable-gnutls          enable gnutls [no]
195
  --disable-iconv          disable iconv [autodetect]
196
  --enable-ladspa          enable LADSPA audio filtering
197
  --enable-libaacplus      enable AAC+ encoding via libaacplus [no]
198
  --enable-libass          enable libass subtitles rendering [no]
Petri Hintukainen's avatar
Petri Hintukainen committed
199
  --enable-libbluray       enable BluRay reading using libbluray [no]
Paul B Mahol's avatar
Paul B Mahol committed
200
  --enable-libcaca         enable textual display using libcaca
201
  --enable-libcelt         enable CELT decoding via libcelt [no]
202
  --enable-libcdio         enable audio CD grabbing with libcdio
203 204
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                           and libraw1394 [no]
205
  --enable-libfaac         enable AAC encoding via libfaac [no]
206
  --enable-libfdk-aac      enable AAC de/encoding via libfdk-aac [no]
207
  --enable-libflite        enable flite (voice synthesis) support via libflite [no]
208
  --enable-libfreetype     enable libfreetype [no]
wm4's avatar
wm4 committed
209
  --enable-libgme          enable Game Music Emu via libgme [no]
210
  --enable-libgsm          enable GSM de/encoding via libgsm [no]
211
  --enable-libiec61883     enable iec61883 via libiec61883 [no]
212
  --enable-libilbc         enable iLBC de/encoding via libilbc [no]
213
  --enable-libmodplug      enable ModPlug via libmodplug [no]
214 215 216
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
  --enable-libnut          enable NUT (de)muxing via libnut,
                           native (de)muxer exists [no]
217 218 219
  --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]
220
  --enable-libopenjpeg     enable JPEG 2000 de/encoding via OpenJPEG [no]
221
  --enable-libopus         enable Opus decoding via libopus [no]
222
  --enable-libpulse        enable Pulseaudio input via libpulse [no]
223
  --enable-libquvi         enable quvi input via libquvi [no]
224
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
225
  --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no]
226
  --enable-libshine        enable fixed-point MP3 encoding via libshine [no]
227
  --enable-libsoxr         enable Include libsoxr resampling [no]
228
  --enable-libspeex        enable Speex de/encoding via libspeex [no]
229
  --enable-libssh          enable SFTP protocol via libssh [no]
Mohamed Naufal's avatar
Mohamed Naufal committed
230
  --enable-libstagefright-h264  enable H.264 decoding via libstagefright [no]
231
  --enable-libtheora       enable Theora encoding via libtheora [no]
232
  --enable-libtwolame      enable MP2 encoding via libtwolame [no]
233
  --enable-libutvideo      enable Ut Video encoding and decoding via libutvideo [no]
234
  --enable-libv4l2         enable libv4l2/v4l-utils [no]
235
  --enable-libvidstab      enable video stabilization using vid.stab [no]
236
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
237
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
238
  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,
239
                           native implementation exists [no]
240
  --enable-libvpx          enable VP8 and VP9 de/encoding via libvpx [no]
241
  --enable-libwavpack      enable wavpack encoding via libwavpack [no]
242
  --enable-libx264         enable H.264 encoding via x264 [no]
243
  --enable-libxavs         enable AVS encoding via xavs [no]
244 245
  --enable-libxvid         enable Xvid encoding via xvidcore,
                           native MPEG-4/Xvid encoder exists [no]
246
  --enable-libzmq          enable message passing via libzmq [no]
247
  --enable-libzvbi         enable teletext support via libzvbi [no]
248
  --enable-openal          enable OpenAL 1.1 capture support [no]
249
  --enable-opencl          enable OpenCL code
250
  --enable-openssl         enable openssl [no]
251
  --enable-x11grab         enable X11 grabbing [no]
252
  --disable-zlib           disable zlib [autodetect]
253 254 255 256 257 258 259 260 261

Advanced options (experts only):
  --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
262
  --target-samples=DIR     path to samples directory on target
263
  --tempprefix=PATH        force fixed dir/prefix instead of mktemp for checks
264
  --toolchain=NAME         set tool defaults according to NAME
265
  --nm=NM                  use nm tool NM [$nm_default]
266
  --ar=AR                  use archive tool AR [$ar_default]
267
  --as=AS                  use assembler AS [$as_default]
268
  --yasmexe=EXE            use yasm-compatible assembler EXE [$yasmexe_default]
269
  --cc=CC                  use C compiler CC [$cc_default]
Mohamed Naufal's avatar
Mohamed Naufal committed
270
  --cxx=CXX                use C compiler CXX [$cxx_default]
271
  --dep-cc=DEPCC           use dependency generator DEPCC [$cc_default]
272
  --ld=LD                  use linker LD [$ld_default]
273 274
  --host-cc=HOSTCC         use host C compiler HOSTCC
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
275
  --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host
276
  --host-ld=HOSTLD         use host linker HOSTLD
277 278
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
  --host-libs=HLIBS        use libs HLIBS when linking for host
279
  --host-os=OS             compiler host OS [$target_os]
280
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
Mohamed Naufal's avatar
Mohamed Naufal committed
281
  --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS]
282 283 284
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
  --extra-version=STRING   version string suffix []
285
  --optflags=OPTFLAGS      override optimization-related compiler flags
286
  --build-suffix=SUFFIX    library name suffix []
287
  --malloc-prefix=PREFIX   prefix malloc and related names with PREFIX
288
  --progs-suffix=SUFFIX    program name suffix []
289 290 291
  --arch=ARCH              select architecture [$arch]
  --cpu=CPU                select the minimum required CPU (affects
                           instruction selection, may crash on older CPUs)
292 293
  --enable-pic             build position-independent code
  --enable-sram            allow use of on-chip SRAM
294
  --enable-thumb           compile for Thumb instruction set
295 296 297 298 299 300
  --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
301
  --enable-lto             use link-time optimization
302 303

Optimization options (experts only):
304
  --disable-asm            disable all assembler optimizations
305 306 307 308
  --disable-altivec        disable AltiVec optimizations
  --disable-amd3dnow       disable 3DNow! optimizations
  --disable-amd3dnowext    disable 3DNow! extended optimizations
  --disable-mmx            disable MMX optimizations
309
  --disable-mmxext         disable MMXEXT optimizations
310
  --disable-sse            disable SSE optimizations
311 312
  --disable-sse2           disable SSE2 optimizations
  --disable-sse3           disable SSE3 optimizations
313
  --disable-ssse3          disable SSSE3 optimizations
314 315
  --disable-sse4           disable SSE4 optimizations
  --disable-sse42          disable SSE4.2 optimizations
316
  --disable-avx            disable AVX optimizations
317
  --disable-fma4           disable FMA4 optimizations
318
  --disable-avx2           disable AVX2 optimizations
319 320 321
  --disable-armv5te        disable armv5te optimizations
  --disable-armv6          disable armv6 optimizations
  --disable-armv6t2        disable armv6t2 optimizations
322
  --disable-vfp            disable VFP optimizations
323
  --disable-neon           disable NEON optimizations
324
  --disable-vis            disable VIS optimizations
325
  --disable-inline-asm     disable use of inline assembler
326
  --disable-yasm           disable use of yasm assembler
327 328 329 330
  --disable-mips32r2       disable MIPS32R2 optimizations
  --disable-mipsdspr1      disable MIPS DSP ASE R1 optimizations
  --disable-mipsdspr2      disable MIPS DSP ASE R2 optimizations
  --disable-mipsfpu        disable floating point MIPS optimizations
331
  --disable-fast-unaligned consider unaligned accesses slow
332

333
Developer options (useful when working on FFmpeg itself):
334 335 336 337
  --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
338
  --disable-stripping      disable stripping of executables and shared libraries
339
  --assert-level=level     0(default), 1 or 2, amount of assertion testing,
340
                           2 causes a slowdown at runtime.
341
  --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
342 343 344
  --valgrind=VALGRIND      run "make fate" tests through valgrind to detect memory
                           leaks and errors, using the specified valgrind binary.
                           Cannot be combined with --target-exec
345
  --enable-ftrapv          Trap arithmetic overflows
346 347
  --samples=PATH           location of test samples for FATE, if not set use
                           \$FATE_SAMPLES at make invocation time.
348 349
  --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
                           should be used only for debugging purposes)
350 351 352 353 354 355 356 357
  --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
358 359 360

NOTE: Object files are built at the place where configure is launched.
EOF
361
  exit 0
362
}
363

364 365
quotes='""'

366
log(){
367
    echo "$@" >> $logfile
368 369
}

370
log_file(){
Måns Rullgård's avatar
Måns Rullgård committed
371
    log BEGIN $1
372
    pr -n -t $1 >> $logfile
Måns Rullgård's avatar
Måns Rullgård committed
373 374 375
    log END $1
}

376
echolog(){
Måns Rullgård's avatar
Måns Rullgård committed
377
    log "$@"
378
    echo "$@"
379 380
}

381 382 383 384 385
warn(){
    log "WARNING: $*"
    WARNINGS="${WARNINGS}WARNING: $*\n"
}

386 387 388
die(){
    echolog "$@"
    cat <<EOF
389

390
If you think configure made a mistake, make sure you are using the latest
391
version from Git.  If the latest version fails, report the problem to the
392
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
393
EOF
394
    if disabled logging; then
395
        cat <<EOF
396 397
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
398 399
EOF
    else
400
        cat <<EOF
401 402
Include the log file "$logfile" produced by configure as this will help
solving the problem.
403 404
EOF
    fi
405 406 407
    exit 1
}

408
# Avoid locale weirdness, besides we really just want to translate ASCII.
409
toupper(){
410
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
411 412
}

413
tolower(){
414
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
415 416
}

417 418 419 420
c_escape(){
    echo "$*" | sed 's/["\\]/\\\0/g'
}

421 422
sh_quote(){
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
423
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
424 425 426
    echo "$v"
}

427
cleanws(){
428
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//;s/\r//g'
429 430
}

431 432 433 434
filter(){
    pat=$1
    shift
    for v; do
435
        eval "case $v in $pat) echo $v ;; esac"
436 437 438
    done
}

439 440 441 442 443 444 445 446
filter_out(){
    pat=$1
    shift
    for v; do
        eval "case $v in $pat) ;; *) echo $v ;; esac"
    done
}

447 448 449
map(){
    m=$1
    shift
450
    for v; do eval $m; done
451 452
}

453 454 455 456 457 458
add_suffix(){
    suffix=$1
    shift
    for v; do echo ${v}${suffix}; done
}

459 460 461 462 463 464 465 466
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

467 468 469 470 471 472 473 474
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

475 476 477 478
sanitize_var_name(){
    echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
}

479 480 481
set_safe(){
    var=$1
    shift
482
    eval $(sanitize_var_name "$var")='$*'
483 484 485
}

get_safe(){
486
    eval echo \$$(sanitize_var_name "$1")
487 488
}

489
pushvar(){
490 491 492 493
    for pvar in $*; do
        eval level=\${${pvar}_level:=0}
        eval ${pvar}_${level}="\$$pvar"
        eval ${pvar}_level=$(($level+1))
494 495 496 497
    done
}

popvar(){
498 499
    for pvar in $*; do
        eval level=\${${pvar}_level:-0}
500 501
        test $level = 0 && continue
        eval level=$(($level-1))
502 503 504
        eval $pvar="\${${pvar}_${level}}"
        eval ${pvar}_level=$level
        eval unset ${pvar}_${level}
505 506 507
    done
}

508 509 510 511 512 513 514 515
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

516 517 518 519 520 521 522 523
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

524
enable_safe(){
525 526 527
    for var; do
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
528 529 530
}

disable_safe(){
531 532 533
    for var; do
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
534 535
}

536 537 538 539
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
540 541
        eval sgs="\$${var}_suggest"
        pushvar var sgs
542
        enable_deep $sel
543 544
        popvar sgs
        enable_deep_weak $sgs
545 546 547 548 549 550 551 552 553
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

554
enable_deep_weak(){
555 556 557 558 559 560 561
    for var; do
        disabled $var && continue
        pushvar var
        do_enable_deep $var
        popvar var
        enable_weak $var
    done
562 563
}

564
enabled(){
565 566
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
567 568
}

569
disabled(){
570 571
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
572 573
}

574 575 576 577 578 579
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

580 581 582 583 584 585
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

586 587 588 589 590 591
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

592 593 594 595
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
596
    return 1
597 598
}

599 600
set_default(){
    for opt; do
601
        eval : \${$opt:=\$${opt}_default}
602 603 604
    done
}

605 606 607 608 609 610 611 612 613
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

614
do_check_deps(){
615
    for cfg; do
616
        cfg="${cfg#!}"
617 618 619
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking
620
        append allopts $cfg
621

622 623
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
624
        eval dep_sel="\$${cfg}_select"
625
        eval dep_sgs="\$${cfg}_suggest"
626 627
        eval dep_ifa="\$${cfg}_if"
        eval dep_ifn="\$${cfg}_if_any"
628

629
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
630
        do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
631
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
632

633 634
        [ -n "$dep_ifa" ] && { enabled_all $dep_ifa && enable_weak $cfg; }
        [ -n "$dep_ifn" ] && { enabled_any $dep_ifn && enable_weak $cfg; }
Måns Rullgård's avatar
Måns Rullgård committed
635 636
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
637
        disabled_any $dep_sel && disable $cfg
638

639
        if enabled $cfg; then
640
            enable_deep $dep_sel
641
            enable_deep_weak $dep_sgs
642 643
        fi

644
        disable ${cfg}_checking
645 646 647
    done
}

648 649 650 651 652 653 654 655 656 657 658 659
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
}

660 661
print_config(){
    pfx=$1
662 663
    files=$2
    shift 2
664 665 666 667 668 669 670 671 672 673 674 675 676 677
    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\$/) {
678
                    n = -v ? \"\" : \"!\";
679
                    printf(\"%s%s=yes\\n\", n, c) >>file;
680 681 682 683 684 685
                } else if (file ~ /\\.texi\$/) {
                    pre = -v ? \"\" : \"@c \";
                    yesno = \$2;
                    c2 = tolower(c);
                    gsub(/_/, \"-\", c2);
                    printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
686 687 688
                }
            }
        }"
689 690
}

691 692 693 694
print_enabled(){
    suf=$1
    shift
    for v; do
695
        enabled $v && printf "%s\n" ${v%$suf};
696 697 698
    done
}

699 700 701 702 703 704
append(){
    var=$1
    shift
    eval "$var=\"\$$var $*\""
}

705 706 707 708 709 710
prepend(){
    var=$1
    shift
    eval "$var=\"$* \$$var\""
}

711
add_cppflags(){
712
    append CPPFLAGS "$@"
713 714
}

715
add_cflags(){
716
    append CFLAGS $($cflags_filter "$@")
717 718
}

Mohamed Naufal's avatar
Mohamed Naufal committed
719
add_cxxflags(){
720
    append CXXFLAGS $($cflags_filter "$@")
Mohamed Naufal's avatar
Mohamed Naufal committed
721 722
}

723
add_asflags(){
724
    append ASFLAGS $($asflags_filter "$@")
725 726
}

727
add_ldflags(){
728
    append LDFLAGS $($ldflags_filter "$@")
729 730 731
}

add_extralibs(){
732
    prepend extralibs $($ldflags_filter "$@")
733 734
}

735 736 737 738
add_host_cppflags(){
    append host_cppflags "$@"
}

739 740 741 742 743 744
add_host_cflags(){
    append host_cflags $($host_cflags_filter "$@")
}

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

747 748 749 750 751 752
add_compat(){
    append compat_objs $1
    shift
    map 'add_cppflags -D$v' "$@"
}

753
check_cmd(){
754
    log "$@"
755
    "$@" >> $logfile 2>&1
756 757
}

758 759 760 761
cc_o(){
    eval printf '%s\\n' $CC_O
}

762 763 764 765
cc_e(){
    eval printf '%s\\n' $CC_E
}

766
check_cc(){
767
    log check_cc "$@"
768
    cat > $TMPC
769
    log_file $TMPC
770
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPC
771 772
}

Mohamed Naufal's avatar
Mohamed Naufal committed
773 774 775 776
check_cxx(){
    log check_cxx "$@"
    cat > $TMPCPP
    log_file $TMPCPP
777
    check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
Mohamed Naufal's avatar
Mohamed Naufal committed
778 779
}

780 781
check_cpp(){
    log check_cpp "$@"
782
    cat > $TMPC
783
    log_file $TMPC
784
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" $(cc_e $TMPO) $TMPC
785 786
}

787 788 789 790
as_o(){
    eval printf '%s\\n' $AS_O
}

791 792
check_as(){
    log check_as "$@"
793 794 795
    cat > $TMPS
    log_file $TMPS
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" $AS_C $(as_o $TMPO) $TMPS
796 797
}

798 799
check_inline_asm(){
    log check_inline_asm "$@"
800
    name="$1"
801
    code="$2"
802
    shift 2
803
    disable $name
804
    check_cc "$@" <<EOF && enable $name
805
void foo(void){ __asm__ volatile($code); }
806 807 808
EOF
}

809 810 811 812 813 814
check_insn(){
    log check_insn "$@"
    check_inline_asm ${1}_inline "\"$2\""
    echo "$2" | check_as && enable ${1}_external || disable ${1}_external
}

Loren Merritt's avatar
Loren Merritt committed
815 816 817 818 819
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
820
    check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
Loren Merritt's avatar
Loren Merritt committed
821 822
}

823 824 825 826
ld_o(){
    eval printf '%s\\n' $LD_O
}

827
check_ld(){
828
    log check_ld "$@"
Mohamed Naufal's avatar
Mohamed Naufal committed
829 830
    type=$1
    shift 1
Jonas Bechtel's avatar
Jonas Bechtel committed
831 832
    flags=$(filter_out '-l*|*.so' $@)
    libs=$(filter '-l*|*.so' $@)
833
    check_$type $($cflags_filter $flags) || return
834 835
    flags=$($ldflags_filter $flags)
    libs=$($ldflags_filter $libs)
836
    check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
837 838
}

839 840 841 842 843 844 845 846 847 848 849 850 851 852
check_code(){
    log check_code "$@"
    check=$1
    headers=$2
    code=$3
    shift 3
    {
        for hdr in $headers; do
            echo "#include <$hdr>"
        done
        echo "int main(void) { $code; return 0; }"
    } | check_$check "$@"
}

853 854
check_cppflags(){
    log check_cppflags "$@"
855
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
856 857 858 859
int x;
EOF
}

860
check_cflags(){
861
    log check_cflags "$@"
862
    set -- $($cflags_filter "$@")
863
    check_cc "$@" <<EOF && append CFLAGS "$@"
864 865 866 867
int x;
EOF
}

Mohamed Naufal's avatar
Mohamed Naufal committed
868 869
check_cxxflags(){
    log check_cxxflags "$@"
870
    set -- $($cflags_filter "$@")
Mohamed Naufal's avatar
Mohamed Naufal committed
871 872 873 874 875
    check_cxx "$@" <<EOF && append CXXFLAGS "$@"
int x;
EOF
}

876 877
test_ldflags(){
    log test_ldflags "$@"
Mohamed Naufal's avatar
Mohamed Naufal committed
878
    check_ld "cc" "$@" <<EOF
879
int main(void){ return 0; }
880 881 882
EOF
}

883 884 885 886 887
check_ldflags(){
    log check_ldflags "$@"
    test_ldflags "$@" && add_ldflags "$@"
}

888
check_header(){
889
    log check_header "$@"
890 891
    header=$1
    shift
892 893
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
894 895 896 897 898 899
#include <$header>
int x;
EOF
}

check_func(){
900
    log check_func "$@"
901 902
    func=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
903
    disable $func
Mohamed Naufal's avatar
Mohamed Naufal committed
904
    check_ld "cc" "$@" <<EOF && enable $func
905
extern int $func();
906
int main(void){ $func(); }
907 908 909
EOF
}

910
check_mathfunc(){
911
    log check_mathfunc "$@"
912
    func=$1
913 914 915
    narg=$2
    shift 2
    test $narg = 2 && args="f, g" || args="f"
916 917 918
    disable $func
    check_ld "cc" "$@" <<EOF && enable $func
#include <math.h>
919
float foo(float f, float g) { return $func($args); }
920 921 922 923
int main(void){ return (int) foo; }
EOF
}

924 925
check_func_headers(){
    log check_func_headers "$@"
926
    headers=$1
927
    funcs=$2
928
    shift 2
929 930 931 932 933 934 935 936
    {
        for hdr in $headers; do
            echo "#include <$hdr>"
        done
        for func in $funcs; do
            echo "long check_$func(void) { return (long) $func; }"
        done
        echo "int main(void) { return 0; }"
Mohamed Naufal's avatar
Mohamed Naufal committed
937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956
    } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers
}

check_class_headers_cpp(){
    log check_class_headers_cpp "$@"
    headers=$1
    classes=$2
    shift 2
    {
        for hdr in $headers; do
            echo "#include <$hdr>"
        done
        echo "int main(void) { "
        i=1
        for class in $classes; do
            echo "$class obj$i;"
            i=$(expr $i + 1)
        done
        echo "return 0; }"
    } | check_ld "cxx" "$@" && 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
}

Mohamed Naufal's avatar
Mohamed Naufal committed
988 989 990 991 992 993 994 995
check_lib_cpp(){
    log check_lib_cpp "$@"
    headers="$1"
    classes="$2"
    shift 2
    check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
}

996 997 998 999 1000 1001
check_pkg_config(){
    log check_pkg_config "$@"
    pkg="$1"
    headers="$2"
    funcs="$3"
    shift 3
1002
    check_cmd $pkg_config --exists --print-errors $pkg || return
1003 1004 1005 1006 1007 1008 1009
    pkg_cflags=$($pkg_config --cflags $pkg)
    pkg_libs=$($pkg_config --libs $pkg)
    check_func_headers "$headers" "$funcs" $pkg_cflags $pkg_libs "$@" &&
        set_safe ${pkg}_cflags $pkg_cflags   &&
        set_safe ${pkg}_libs   $pkg_libs
}

1010
check_exec(){
Mohamed Naufal's avatar
Mohamed Naufal committed
1011
    check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1012 1013
}

1014
check_exec_crash(){
1015
    code=$(cat)
1016 1017 1018 1019 1020 1021 1022

    # 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.

1023
    (check_exec "$@") >> $logfile 2>&1 <<EOF
1024 1025 1026 1027
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
1028
int foo(void){
1029 1030
    $code
}
1031
int (*func_ptr)(void) = foo;
Diego Biurrun's avatar
Diego Biurrun committed
1032
int main(void){
1033 1034 1035 1036 1037 1038
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
1039
    return func_ptr();
1040 1041 1042 1043
}
EOF
}

1044 1045 1046 1047 1048
check_type(){
    log check_type "$@"
    headers=$1
    type=$2
    shift 2
1049
    disable_safe "$type"
1050
    check_code cc "$headers" "$type v" "$@" && enable_safe "$type"
1051 1052
}

1053
check_struct(){
1054
    log check_struct "$@"
1055 1056 1057 1058 1059
    headers=$1
    struct=$2
    member=$3
    shift 3
    disable_safe "${struct}_${member}"
1060 1061
    check_code cc "$headers" "const void *p = &(($struct *)0)->$member" "$@" &&
        enable_safe "${struct}_${member}"
1062 1063
}

1064 1065 1066 1067 1068 1069 1070
check_builtin(){
    log check_builtin "$@"
    name=$1
    headers=$2
    builtin=$3
    shift 3
    disable "$name"
1071
    check_code ld "$headers" "$builtin" "cc" "$@" && enable "$name"
1072 1073
}

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

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

Mohamed Naufal's avatar
Mohamed Naufal committed
1090 1091 1092 1093 1094 1095 1096 1097
require_cpp(){
    name="$1"
    headers="$2"
    classes="$3"
    shift 3
    check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
}

1098 1099 1100 1101 1102 1103 1104
require_pkg_config(){
    pkg="$1"
    check_pkg_config "$@" || die "ERROR: $pkg not found"
    add_cflags    $(get_safe ${pkg}_cflags)
    add_extralibs $(get_safe ${pkg}_libs)
}

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

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

1116 1117 1118 1119 1120 1121 1122
check_host_cppflags(){
    log check_host_cppflags "$@"
    check_host_cc "$@" <<EOF && append host_cppflags "$@"
int x;
EOF
}

1123 1124
check_host_cflags(){
    log check_host_cflags "$@"
1125
    set -- $($host_cflags_filter "$@")
1126 1127 1128 1129 1130
    check_host_cc "$@" <<EOF && append host_cflags "$@"
int x;
EOF
}

1131 1132 1133 1134 1135 1136
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

1137
cp_if_changed(){
1138 1139
    cmp -s "$1" "$2" && echo "$2 is unchanged" && return
    mkdir -p "$(dirname $2)"
Mans Rullgard's avatar
Mans Rullgard committed
1140
    $cp_f "$1" "$2"
1141 1142
}

1143 1144 1145
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

1146 1147 1148 1149 1150
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
Vitor Sessak's avatar
Vitor Sessak committed
1151
    filters
1152
    hwaccels
1153
    indevs
1154
    muxers
1155
    outdevs
1156 1157 1158 1159
    parsers
    protocols
"

1160 1161 1162
EXTERNAL_LIBRARY_LIST="
    avisynth
    bzlib
1163 1164
    crystalhd
    fontconfig
1165 1166
    frei0r
    gnutls
1167
    iconv
1168
    ladspa
1169 1170 1171 1172
    libaacplus
    libass
    libbluray
    libcaca
1173
    libcdio
1174
    libcelt
1175 1176 1177
    libdc1394
    libfaac
    libfdk_aac
1178
    libflite
1179
    libfreetype
wm4's avatar
wm4 committed
1180
    libgme
1181
    libgsm
1182
    libiec61883
1183
    libilbc
1184
    libmodplug
1185
    libmp3lame
1186
    libnut
1187 1188 1189 1190 1191 1192
    libopencore_amrnb
    libopencore_amrwb
    libopencv
    libopenjpeg
    libopus
    libpulse
1193
    libquvi
1194 1195
    librtmp
    libschroedinger
1196
    libshine
1197
    libsoxr
1198
    libspeex
1199
    libssh
1200
    libstagefright_h264
1201
    libtheora
1202 1203 1204
    libtwolame
    libutvideo
    libv4l2
1205
    libvidstab
1206 1207 1208 1209
    libvo_aacenc
    libvo_amrwbenc
    libvorbis
    libvpx
1210
    libwavpack
1211 1212 1213
    libx264
    libxavs
    libxvid
1214
    libzmq
1215
    libzvbi
1216
    openal
1217
    opencl
1218 1219 1220 1221 1222
    openssl
    x11grab
    zlib
"

1223 1224 1225 1226 1227 1228 1229 1230
DOCUMENT_LIST="
    doc
    htmlpages
    manpages
    podpages
    txtpages
"

1231 1232 1233 1234 1235 1236
HWACCEL_LIST="
    dxva2
    vaapi
    vda
    vdpau
"
1237

1238 1239 1240 1241 1242 1243 1244
LIBRARY_LIST="
    avcodec
    avdevice
    avfilter
    avformat
    avresample
    avutil
1245
    postproc
1246
    swresample
1247 1248 1249
    swscale
"

1250
PROGRAM_LIST="
1251 1252 1253
    ffplay
    ffprobe
    ffserver
1254 1255 1256
    ffmpeg
"

1257 1258
CONFIG_LIST="
    $COMPONENT_LIST
1259
    $DOCUMENT_LIST
1260
    $EXTERNAL_LIBRARY_LIST
1261
    $HWACCEL_LIST
1262
    $LIBRARY_LIST
1263
    $PROGRAM_LIST
1264
    dct
1265
    dwt
1266
    error_resilience
1267
    fast_unaligned
1268
    fft
1269
    ftrapv
1270
    gpl
1271
    gray
Aurelien Jacobs's avatar
Aurelien Jacobs committed
1272
    hardcoded_tables
1273
    incompatible_libav_abi
1274
    incompatible_fork_abi
1275
    lsp
1276
    lzo
1277
    mdct
1278
    memalign_hack
1279
    memory_poisoning
1280
    network
1281
    nonfree
1282
    pic
1283
    rdft
1284
    runtime_cpudetect
1285
    safe_bitstream_reader
1286
    shared
1287
    small
1288
    sram
1289
    static
1290
    swscale_alpha
1291
    thumb
1292
    version3
1293
    xmm_clobber_test
1294
"
1295

1296 1297 1298
THREADS_LIST='
    pthreads
    w32threads
1299
    os2threads
1300 1301
'

1302 1303 1304
ATOMICS_LIST='
    atomics_gcc
    atomics_suncc
1305
    atomics_win32
1306 1307
'

1308
ARCH_LIST='
1309
    aarch64
1310
    alpha
1311
    arm
1312 1313 1314
    avr32
    avr32_ap
    avr32_uc
1315 1316 1317 1318
    bfin
    ia64
    m68k
    mips
1319
    mips64
1320
    parisc
1321
    ppc
1322
    ppc64
1323 1324 1325 1326
    s390
    sh4
    sparc
    sparc64
1327 1328
    tilegx
    tilepro
1329
    tomi
1330 1331 1332 1333 1334
    x86
    x86_32
    x86_64
'

1335 1336 1337 1338 1339
ARCH_EXT_LIST_ARM='
    armv5te
    armv6
    armv6t2
    neon
1340
    vfp
1341 1342 1343
    vfpv3
'

1344
ARCH_EXT_LIST_X86='
1345
    amd3dnow
1346
    amd3dnowext
1347
    avx
1348
    avx2
1349
    fma4
1350
    i686
1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361
    mmx
    mmxext
    sse
    sse2
    sse3
    sse4
    sse42
    ssse3
'

ARCH_EXT_LIST="
1362
    $ARCH_EXT_LIST_ARM
1363 1364
    $ARCH_EXT_LIST_X86
    altivec
1365
    ppc4xx
1366
    vis
1367 1368 1369 1370
    mipsfpu
    mips32r2
    mipsdspr1
    mipsdspr2
1371
"
1372

1373 1374 1375 1376 1377 1378
HAVE_LIST_CMDLINE='
    inline_asm
    symver
    yasm
'

1379 1380
HAVE_LIST_PUB='
    bigendian
1381
    fast_unaligned
1382
    incompatible_libav_abi
1383
    incompatible_fork_abi
1384 1385
'

1386
MATH_FUNCS="
1387 1388
    atanf
    atan2f
1389
    cbrt
1390
    cbrtf
1391
    cosf
1392 1393
    exp2
    exp2f
1394
    expf
1395 1396
    isinf
    isnan
1397
    ldexpf
1398 1399 1400 1401
    llrint
    llrintf
    log2
    log2f
1402
    log10f
1403 1404
    lrint
    lrintf
1405
    powf
1406 1407 1408
    rint
    round
    roundf
1409
    sinf
1410 1411 1412 1413
    trunc
    truncf
"

1414 1415
HAVE_LIST="
    $ARCH_EXT_LIST
1416 1417
    $(add_suffix _external $ARCH_EXT_LIST)
    $(add_suffix _inline   $ARCH_EXT_LIST)
1418
    $HAVE_LIST_CMDLINE
1419
    $HAVE_LIST_PUB
1420
    $THREADS_LIST
1421
    $ATOMICS_LIST
1422
    $MATH_FUNCS
1423
    access
1424
    aligned_malloc
1425
    aligned_stack
1426
    alsa_asoundlib_h
1427
    altivec_h
1428
    arpa_inet_h
1429
    asm_mod_q
1430
    asm_mod_y
1431
    asm_types_h
1432
    atomic_cas_ptr
1433
    atomics_native
1434
    attribute_may_alias
1435
    attribute_packed
1436 1437
    cdio_paranoia_h
    cdio_paranoia_paranoia_h
1438
    CL_cl_h
1439
    clock_gettime
Alex Beregszaszi's avatar
Alex Beregszaszi committed
1440
    closesocket
1441
    CommandLineToArgvW
1442
    cpunop
1443
    CryptGenRandom
1444
    dcbzl
1445 1446 1447 1448
    dev_bktr_ioctl_bt848_h
    dev_bktr_ioctl_meteor_h
    dev_ic_bt8xx_h
    dev_video_bktr_ioctl_bt848_h
1449
    dev_video_meteor_ioctl_meteor_h
1450
    direct_h
1451
    dlfcn_h
1452
    dlopen
1453
    dos_paths
1454
    dxva_h
1455 1456
    ebp_available
    ebx_available
1457
    fast_64bit
1458
    fast_clz
1459
    fast_cmov
Måns Rullgård's avatar
Måns Rullgård committed
1460
    fcntl
Måns Rullgård's avatar
Måns Rullgård committed
1461
    fork
1462
    getaddrinfo
1463
    gethrtime
1464
    getopt
1465
    GetProcessAffinityMask
1466
    GetProcessMemoryInfo
1467
    GetProcessTimes
1468
    GetSystemTimeAsFileTime
Ramiro Polla's avatar
Ramiro Polla committed
1469
    getrusage
1470
    getservbyport
1471
    gettimeofday
1472
    glob
1473
    gnu_as
1474
    gsm_h
1475
    ibm_asm
1476
    inet_aton
1477
    io_h
1478
    inline_asm_labels
1479
    isatty
1480
    jack_port_get_latency_range
1481
    kbhit
Måns Rullgård's avatar
Måns Rullgård committed
1482
    ldbrx
1483 1484
    libdc1394_1
    libdc1394_2
1485 1486
    local_aligned_16
    local_aligned_8
1487
    localtime_r
1488
    loongson
1489
    lzo1x_999_compress
1490 1491
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
1492
    machine_rw_barrier
1493
    makeinfo
1494
    malloc_h
1495
    MapViewOfFile
1496
    memalign
1497
    MemoryBarrier
1498
    mkstemp
1499
    mm_empty
1500
    mmap
1501
    mprotect
1502
    msvcrt
1503
    nanosleep
1504
    openjpeg_1_5_openjpeg_h
1505
    PeekNamedPipe
1506
    perl
1507
    pod2man
1508
    poll_h
1509
    posix_memalign
1510
    pragma_deprecated
1511
    pthread_cancel
1512
    rdtsc
1513
    rsync_contimeout
1514
    sarestart
1515
    sched_getaffinity
1516
    sdl
1517
    SetConsoleTextAttribute
1518
    setmode
1519
    setrlimit
1520
    Sleep
1521
    sndio_h
1522
    socklen_t
Måns Rullgård's avatar
Måns Rullgård committed
1523
    soundcard_h
1524
    strerror_r
1525
    struct_addrinfo
1526 1527
    struct_group_source_req
    struct_ip_mreq_source
1528
    struct_ipv6_mreq
1529
    struct_pollfd
1530
    struct_rusage_ru_maxrss
1531
    struct_sctp_event_subscribe
1532
    struct_sockaddr_in6
1533
    struct_sockaddr_sa_len
1534
    struct_sockaddr_storage
1535
    struct_stat_st_mtim_tv_nsec
1536
    struct_v4l2_frmivalenum_discrete
1537
    symver_asm_label
1538
    symver_gnu_asm
1539
    sync_val_compare_and_swap
1540
    sysconf
1541
    sysctl
1542
    sys_mman_h
1543
    sys_param_h
1544
    sys_resource_h
1545
    sys_select_h
Måns Rullgård's avatar
Måns Rullgård committed
1546
    sys_soundcard_h
1547
    sys_time_h
1548
    sys_un_h
1549
    sys_videoio_h
1550
    termios_h
1551
    texi2html
1552
    threads
1553
    unistd_h
1554
    usleep
1555
    vfp_args
1556
    VirtualAlloc
1557
    windows_h
1558
    winsock2_h
1559
    xform_asm
1560
    xmm_clobbers
1561
"
1562

Diego Biurrun's avatar
Diego Biurrun committed
1563
# options emitted with CONFIG_ prefix but not available on the command line
1564
CONFIG_EXTRA="
1565
    aandcttables
1566
    ac3dsp
1567
    audio_frame_queue
1568
    dsputil
1569
    exif
1570
    frame_thread_encoder
1571
    gcrypt
1572
    golomb
1573
    gplv3
1574 1575 1576
    h264chroma
    h264dsp
    h264pred
1577
    h264qpel
1578
    hpeldsp
1579
    huffman
1580
    lgplv3
1581
    lpc
1582
    mpegaudio
1583
    mpegaudiodsp
1584
    mpegvideo
1585
    mpegvideoenc
1586
    nettle
1587
    rangecoder
1588
    riffdec
1589
    riffenc
1590
    rtpdec
1591
    rtpenc_chain
1592
    sinewin
1593
    videodsp
1594
    vp3dsp
1595 1596
"

1597
CMDLINE_SELECT="
1598
    $ARCH_EXT_LIST
1599
    $CONFIG_LIST
1600
    $HAVE_LIST_CMDLINE
1601
    $THREADS_LIST
1602
    asm
1603
    cross_compile
1604 1605
    debug
    extra_warnings
1606
    logging
1607
    lto
1608
    optimizations
1609
    stripping
1610
"
1611 1612

PATHS_LIST='
1613
    bindir
1614
    datadir
1615
    docdir
1616 1617 1618 1619 1620
    incdir
    libdir
    mandir
    prefix
    shlibdir
1621 1622 1623 1624
'

CMDLINE_SET="
    $PATHS_LIST
1625
    ar
1626
    arch
1627
    as
1628
    assert_level
1629 1630 1631 1632
    build_suffix
    cc
    cpu
    cross_prefix
Mohamed Naufal's avatar
Mohamed Naufal committed
1633
    cxx
1634
    dep_cc
1635
    extra_version
1636 1637
    host_cc
    host_cflags
1638
    host_ld
1639 1640
    host_ldflags
    host_libs
1641
    host_os
1642
    install
1643
    ld
1644
    logfile
1645
    malloc_prefix
1646
    nm
1647
    optflags
1648
    pkg_config
1649
    progs_suffix
1650
    random_seed
Måns Rullgård's avatar
Måns Rullgård committed
1651
    samples
1652
    strip
1653 1654
    sysinclude
    sysroot
1655
    target_exec
1656
    target_os
1657
    target_path
1658
    target_samples
1659
    tempprefix
1660
    toolchain
1661
    valgrind
1662
    yasmexe
1663
"
1664

1665 1666
CMDLINE_APPEND="
    extra_cflags
Mohamed Naufal's avatar
Mohamed Naufal committed
1667
    extra_cxxflags
1668
    host_cppflags
1669 1670
"

1671 1672
# code dependency declarations

1673
# architecture extensions
1674

1675 1676
armv5te_deps="arm"
armv6_deps="arm"
1677
armv6t2_deps="arm"
1678
neon_deps="arm"
1679 1680
vfp_deps="arm"
vfpv3_deps="vfp"
1681

1682 1683
map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM

1684 1685 1686 1687
mipsfpu_deps="mips"
mips32r2_deps="mips"
mipsdspr1_deps="mips"
mipsdspr2_deps="mips"
1688 1689 1690 1691 1692 1693

altivec_deps="ppc"
ppc4xx_deps="ppc"

vis_deps="sparc"

1694 1695 1696
cpunop_deps="i686"
x86_64_select="i686"
x86_64_suggest="fast_cmov"
1697

1698 1699
amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
1700
mmx_deps="x86"
1701
mmxext_deps="mmx"
1702 1703 1704 1705 1706 1707 1708
sse_deps="mmxext"
sse2_deps="sse"
sse3_deps="sse2"
ssse3_deps="sse3"
sse4_deps="ssse3"
sse42_deps="sse4"
avx_deps="sse42"
1709
fma4_deps="avx"
1710
avx2_deps="avx"
1711

1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722
mmx_external_deps="yasm"
mmx_inline_deps="inline_asm"
mmx_suggest="mmx_external mmx_inline"

for ext in $(filter_out mmx $ARCH_EXT_LIST_X86); do
    eval dep=\$${ext}_deps
    eval ${ext}_external_deps='"${dep}_external"'
    eval ${ext}_inline_deps='"${dep}_inline"'
    eval ${ext}_suggest='"${ext}_external ${ext}_inline"'
done

1723
aligned_stack_if_any="ppc x86"
1724
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1725 1726
fast_clz_if_any="alpha avr32 mips ppc x86"
fast_unaligned_if_any="ppc x86"
1727

1728
inline_asm_deps="!tms470"
1729
need_memalign="altivec neon sse"
1730

1731 1732
symver_if_any="symver_asm_label symver_gnu_asm"

1733 1734
log2_deps="!msvcrt"

1735
# subsystems
1736
dct_select="rdft"
1737
error_resilience_select="dsputil"
1738
frame_thread_encoder_deps="encoders threads"
1739
lpc_select="dsputil"
1740 1741
mdct_select="fft"
rdft_select="fft"
1742
mpegaudio_select="mpegaudiodsp"
1743
mpegaudiodsp_select="dct"
1744
mpegvideo_select="dsputil h264chroma hpeldsp videodsp"
1745
mpegvideoenc_select="mpegvideo"
1746

1747
# decoders / encoders
1748
aac_decoder_select="mdct sinewin"
1749
aac_encoder_select="audio_frame_queue mdct sinewin"
1750
aac_latm_decoder_select="aac_decoder aac_latm_parser"
1751 1752 1753
ac3_decoder_select="mdct ac3dsp ac3_parser dsputil"
ac3_encoder_select="mdct ac3dsp dsputil"
ac3_fixed_encoder_select="mdct ac3dsp dsputil"
1754
aic_decoder_select="dsputil golomb"
1755
alac_encoder_select="lpc"
1756
als_decoder_select="dsputil"
1757
amrnb_decoder_select="lsp"
1758
amrwb_decoder_select="lsp"
1759
amv_decoder_select="dsputil hpeldsp exif"
1760
amv_encoder_select="aandcttables"
1761
ape_decoder_select="dsputil"
1762 1763 1764 1765
asv1_decoder_select="dsputil"
asv1_encoder_select="dsputil"
asv2_decoder_select="dsputil"
asv2_encoder_select="dsputil"
1766
atrac1_decoder_select="mdct sinewin"
1767
atrac3_decoder_select="mdct"
1768
avrn_decoder_select="exif"
1769
bink_decoder_select="dsputil hpeldsp"
1770 1771
binkaudio_dct_decoder_select="mdct rdft dct sinewin"
binkaudio_rdft_decoder_select="mdct rdft sinewin"
1772
cavs_decoder_select="dsputil golomb h264chroma videodsp"
1773
cllc_decoder_select="dsputil"
1774
comfortnoise_encoder_select="lpc"
1775
cook_decoder_select="dsputil mdct sinewin"
1776
cscd_decoder_select="lzo"
1777
cscd_decoder_suggest="zlib"
1778
dca_decoder_select="mdct"
1779 1780 1781
dirac_decoder_select="dsputil dwt golomb videodsp"
dnxhd_decoder_select="dsputil"
dnxhd_encoder_select="aandcttables dsputil mpegvideoenc"
1782
dvvideo_decoder_select="dsputil"
1783
dvvideo_encoder_select="dsputil"
1784
dxa_decoder_select="zlib"
1785
eac3_decoder_select="ac3_decoder"
1786
eac3_encoder_select="ac3_encoder"
1787
eamad_decoder_select="aandcttables dsputil mpegvideo"
1788
eatgq_decoder_select="aandcttables"
1789
eatqi_decoder_select="aandcttables error_resilience mpegvideo"
1790
exr_decoder_select="zlib"
1791
ffv1_decoder_select="dsputil golomb rangecoder"
1792 1793 1794
ffv1_encoder_select="dsputil rangecoder"
ffvhuff_decoder_select="dsputil"
ffvhuff_encoder_select="dsputil huffman"
1795
flac_decoder_select="golomb"
1796
flac_encoder_select="dsputil golomb lpc"
1797 1798 1799 1800
flashsv_decoder_select="zlib"
flashsv_encoder_select="zlib"
flashsv2_encoder_select="zlib"
flashsv2_decoder_select="zlib"
1801
flv_decoder_select="h263_decoder"
1802
flv_encoder_select="h263_encoder"
1803 1804
fourxm_decoder_select="dsputil"
fraps_decoder_select="dsputil huffman"
1805
g2m_decoder_select="dsputil zlib"
1806
g729_decoder_select="dsputil"
1807
h261_decoder_select="error_resilience mpegvideo"
1808
h261_encoder_select="aandcttables mpegvideoenc"
1809
h263_decoder_select="error_resilience h263_parser mpegvideo"
1810
h263_encoder_select="aandcttables mpegvideoenc"
1811
h263i_decoder_select="h263_decoder"
1812
h263p_encoder_select="h263_encoder"
1813
h264_decoder_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1814
h264_decoder_suggest="error_resilience"
1815
hevc_decoder_select="dsputil golomb videodsp"
1816
huffyuv_decoder_select="dsputil"
1817 1818
huffyuv_encoder_select="dsputil huffman"
iac_decoder_select="dsputil fft mdct sinewin"
1819
imc_decoder_select="dsputil fft mdct sinewin"
1820
indeo3_decoder_select="hpeldsp"
1821
interplay_video_decoder_select="hpeldsp"
1822
jpegls_decoder_select="dsputil golomb hpeldsp exif"
1823
jpegls_encoder_select="golomb"
1824 1825
jv_decoder_select="dsputil"
lagarith_decoder_select="dsputil"
1826
ljpeg_encoder_select="aandcttables mpegvideoenc"
1827
loco_decoder_select="golomb"
1828
mdec_decoder_select="dsputil error_resilience mpegvideo"
1829
metasound_decoder_select="lsp mdct sinewin"
1830
mimic_decoder_select="dsputil hpeldsp"
1831 1832
mjpeg_decoder_select="dsputil hpeldsp exif"
mjpegb_decoder_select="dsputil hpeldsp exif"
1833 1834 1835
mjpeg_encoder_select="aandcttables dsputil mpegvideoenc"
mlp_decoder_select="dsputil mlp_parser"
motionpixels_decoder_select="dsputil"
1836 1837 1838 1839 1840 1841 1842 1843 1844 1845
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"
1846 1847
mpc7_decoder_select="dsputil mpegaudiodsp"
mpc8_decoder_select="dsputil mpegaudiodsp"
1848
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1849
mpeg_xvmc_decoder_select="mpeg2video_decoder"
1850
mpeg1video_decoder_select="error_resilience mpegvideo"
1851
mpeg1video_encoder_select="aandcttables mpegvideoenc"
1852
mpeg2video_decoder_select="error_resilience mpegvideo"
1853
mpeg2video_encoder_select="aandcttables mpegvideoenc"
1854 1855
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
mpeg4_encoder_select="h263_encoder"
1856 1857
msmpeg4v1_decoder_select="h263_decoder"
msmpeg4v2_decoder_select="h263_decoder"
1858
msmpeg4v2_encoder_select="h263_encoder"
1859
msmpeg4v3_decoder_select="h263_decoder"
1860
msmpeg4v3_encoder_select="h263_encoder"
1861
mss2_decoder_select="error_resilience vc1_decoder"
1862
mxpeg_decoder_select="dsputil hpeldsp exif"
1863
nellymoser_decoder_select="mdct sinewin"
1864
nellymoser_encoder_select="audio_frame_queue mdct sinewin"
1865
nuv_decoder_select="dsputil lzo"
1866 1867
png_decoder_select="zlib"
png_encoder_select="dsputil zlib"
1868
prores_decoder_select="dsputil"
1869
prores_encoder_select="dsputil"
1870
qcelp_decoder_select="lsp"
1871
qdm2_decoder_select="mdct rdft mpegaudiodsp"
1872
ra_144_encoder_select="audio_frame_queue lpc"
1873
ralf_decoder_select="golomb"
1874
rtjpeg_decoder_select="dsputil"
1875
rv10_decoder_select="error_resilience h263_decoder"
1876
rv10_encoder_select="h263_encoder"
1877
rv20_decoder_select="error_resilience h263_decoder"
1878
rv20_encoder_select="h263_encoder"
1879 1880
rv30_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
rv40_decoder_select="error_resilience golomb h264chroma h264pred h264qpel mpegvideo videodsp"
1881
shorten_decoder_select="golomb"
1882
sipr_decoder_select="lsp"
1883
snow_decoder_select="dsputil dwt h264qpel hpeldsp rangecoder"
1884
snow_encoder_select="aandcttables dsputil dwt h264qpel hpeldsp mpegvideoenc rangecoder"
1885 1886 1887
sonic_decoder_select="golomb"
sonic_encoder_select="golomb"
sonic_ls_encoder_select="golomb"
1888
sp5x_decoder_select="dsputil hpeldsp exif"
1889
svq1_decoder_select="hpeldsp"
1890
svq1_encoder_select="aandcttables dsputil hpeldsp mpegvideoenc"
1891
svq3_decoder_select="golomb h264chroma h264dsp h264pred h264qpel hpeldsp mpegvideo videodsp"
1892
svq3_decoder_suggest="error_resilience zlib"
1893
tak_decoder_select="dsputil"
1894
theora_decoder_select="vp3_decoder"
1895 1896
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
1897
thp_decoder_select="dsputil hpeldsp exif"
1898
truehd_decoder_select="mlp_parser"
1899
truemotion2_decoder_select="dsputil"
1900
truespeech_decoder_select="dsputil"
1901
tscc_decoder_select="zlib"
1902
twinvq_decoder_select="mdct lsp sinewin"
1903
utvideo_decoder_select="dsputil"
1904
utvideo_encoder_select="dsputil huffman"
1905
vble_decoder_select="dsputil"
1906
vc1_decoder_select="error_resilience h263_decoder h264chroma h264qpel"
1907
vc1image_decoder_select="vc1_decoder"
1908 1909
vorbis_decoder_select="mdct"
vorbis_encoder_select="mdct"
1910
vp3_decoder_select="hpeldsp vp3dsp videodsp"
1911 1912
vp5_decoder_select="h264chroma hpeldsp videodsp vp3dsp"
vp6_decoder_select="h264chroma hpeldsp huffman videodsp vp3dsp"
1913 1914
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
1915
vp8_decoder_select="h264pred videodsp"
Ronald S. Bultje's avatar
Ronald S. Bultje committed
1916
vp9_decoder_select="videodsp"
1917
webp_decoder_select="vp8_decoder"
1918 1919 1920 1921 1922 1923
wmapro_decoder_select="mdct sinewin"
wmav1_decoder_select="mdct sinewin"
wmav1_encoder_select="mdct sinewin"
wmav2_decoder_select="mdct sinewin"
wmav2_encoder_select="mdct sinewin"
wmavoice_decoder_select="lsp rdft dct mdct sinewin"
1924
wmv1_decoder_select="h263_decoder"
1925
wmv1_encoder_select="h263_encoder"
1926
wmv2_decoder_select="h263_decoder videodsp"
1927
wmv2_encoder_select="h263_encoder"
1928
wmv3_decoder_select="vc1_decoder"
1929
wmv3image_decoder_select="wmv3_decoder"
1930 1931 1932 1933 1934
zerocodec_decoder_select="zlib"
zlib_decoder_select="zlib"
zlib_encoder_select="zlib"
zmbv_decoder_select="zlib"
zmbv_encoder_select="zlib"
1935

1936
# hardware accelerators
1937
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1938
dxva2_deps="dxva2api_h"
1939
vaapi_deps="va_va_h"
1940
vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1941
vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1942 1943
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"

1944 1945 1946 1947
h263_vaapi_hwaccel_deps="vaapi"
h263_vaapi_hwaccel_select="h263_decoder"
h263_vdpau_hwaccel_deps="vdpau"
h263_vdpau_hwaccel_select="h263_decoder"
1948
h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1949 1950
h264_dxva2_hwaccel_deps="dxva2"
h264_dxva2_hwaccel_select="h264_decoder"
1951 1952
h264_vaapi_hwaccel_deps="vaapi"
h264_vaapi_hwaccel_select="h264_decoder"
1953 1954
h264_vda_decoder_deps="vda"
h264_vda_decoder_select="h264_decoder"
1955 1956
h264_vda_hwaccel_deps="vda"
h264_vda_hwaccel_select="h264_decoder"
1957 1958
h264_vdpau_decoder_deps="vdpau"
h264_vdpau_decoder_select="h264_decoder"
1959 1960
h264_vdpau_hwaccel_deps="vdpau"
h264_vdpau_hwaccel_select="h264_decoder"
1961 1962 1963 1964
mpeg_vdpau_decoder_deps="vdpau"
mpeg_vdpau_decoder_select="mpeg2video_decoder"
mpeg1_vdpau_decoder_deps="vdpau"
mpeg1_vdpau_decoder_select="mpeg1video_decoder"
1965 1966
mpeg1_vdpau_hwaccel_deps="vdpau"
mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1967
mpeg2_crystalhd_decoder_select="crystalhd"
1968 1969
mpeg2_dxva2_hwaccel_deps="dxva2"
mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1970 1971 1972 1973
mpeg2_vaapi_hwaccel_deps="vaapi"
mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
mpeg2_vdpau_hwaccel_deps="vdpau"
mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1974
mpeg4_crystalhd_decoder_select="crystalhd"
1975 1976
mpeg4_vaapi_hwaccel_deps="vaapi"
mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
1977 1978
mpeg4_vdpau_decoder_deps="vdpau"
mpeg4_vdpau_decoder_select="mpeg4_decoder"
1979 1980
mpeg4_vdpau_hwaccel_deps="vdpau"
mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1981 1982
msmpeg4_crystalhd_decoder_select="crystalhd"
vc1_crystalhd_decoder_select="crystalhd"
1983 1984
vc1_dxva2_hwaccel_deps="dxva2"
vc1_dxva2_hwaccel_select="vc1_decoder"
1985 1986
vc1_vaapi_hwaccel_deps="vaapi"
vc1_vaapi_hwaccel_select="vc1_decoder"
1987 1988
vc1_vdpau_decoder_deps="vdpau"
vc1_vdpau_decoder_select="vc1_decoder"
1989 1990
vc1_vdpau_hwaccel_deps="vdpau"
vc1_vdpau_hwaccel_select="vc1_decoder"
1991
wmv3_crystalhd_decoder_select="crystalhd"
1992 1993
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
1994
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1995
wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1996

1997
# parsers
1998
h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1999 2000
mpeg4video_parser_select="error_resilience mpegvideo"
mpegvideo_parser_select="error_resilience mpegvideo"
2001
vc1_parser_select="mpegvideo"
2002

2003
# external libraries
tipok's avatar
tipok committed
2004
libaacplus_encoder_deps="libaacplus"
2005
libcelt_decoder_deps="libcelt"
2006
libfaac_encoder_deps="libfaac"
2007
libfaac_encoder_select="audio_frame_queue"
2008
libfdk_aac_decoder_deps="libfdk_aac"
2009
libfdk_aac_encoder_deps="libfdk_aac"
2010
libfdk_aac_encoder_select="audio_frame_queue"
wm4's avatar
wm4 committed
2011
libgme_demuxer_deps="libgme"
2012 2013
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
2014 2015
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
2016 2017
libilbc_decoder_deps="libilbc"
libilbc_encoder_deps="libilbc"
2018
libmodplug_demuxer_deps="libmodplug"
2019
libmp3lame_encoder_deps="libmp3lame"
2020
libmp3lame_encoder_select="audio_frame_queue"
2021 2022
libopencore_amrnb_decoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_deps="libopencore_amrnb"
2023
libopencore_amrnb_encoder_select="audio_frame_queue"
2024
libopencore_amrwb_decoder_deps="libopencore_amrwb"
2025
libopenjpeg_decoder_deps="libopenjpeg"
2026
libopenjpeg_encoder_deps="libopenjpeg"
2027
libopus_decoder_deps="libopus"
2028
libopus_encoder_deps="libopus"
2029
libopus_encoder_select="audio_frame_queue"
2030
libquvi_demuxer_deps="libquvi"
2031 2032
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
2033 2034
libshine_encoder_deps="libshine"
libshine_encoder_select="audio_frame_queue"
2035
libspeex_decoder_deps="libspeex"
Art Clarke's avatar
Art Clarke committed
2036
libspeex_encoder_deps="libspeex"
2037
libspeex_encoder_select="audio_frame_queue"
Mohamed Naufal's avatar
Mohamed Naufal committed
2038
libstagefright_h264_decoder_deps="libstagefright_h264"
2039
libtheora_encoder_deps="libtheora"
2040
libtwolame_encoder_deps="libtwolame"
2041
libvo_aacenc_encoder_deps="libvo_aacenc"
2042
libvo_aacenc_encoder_select="audio_frame_queue"
2043
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2044
libvorbis_decoder_deps="libvorbis"
2045
libvorbis_encoder_deps="libvorbis"
2046
libvorbis_encoder_select="audio_frame_queue"
2047 2048 2049 2050
libvpx_vp8_decoder_deps="libvpx"
libvpx_vp8_encoder_deps="libvpx"
libvpx_vp9_decoder_deps="libvpx"
libvpx_vp9_encoder_deps="libvpx"
2051
libwavpack_encoder_deps="libwavpack"
2052
libx264_encoder_deps="libx264"
2053
libx264rgb_encoder_deps="libx264"
2054
libxavs_encoder_deps="libxavs"
2055
libxvid_encoder_deps="libxvid"
2056 2057
libutvideo_decoder_deps="libutvideo"
libutvideo_encoder_deps="libutvideo"
2058
libzvbi_teletext_decoder_deps="libzvbi"
2059

2060
# demuxers / muxers
2061
ac3_demuxer_select="ac3_parser"
2062
asf_demuxer_select="riffdec"
2063
asf_muxer_select="riffenc"
2064
asf_stream_muxer_select="asf_muxer"
2065
avi_demuxer_select="riffdec"
2066
avi_muxer_select="riffenc"
2067
avisynth_demuxer_deps="avisynth"
2068 2069
avisynth_demuxer_select="riffdec"
caf_demuxer_select="riffdec"
2070
dirac_demuxer_select="dirac_parser"
2071
dts_demuxer_select="dca_parser"
Paul B Mahol's avatar
Paul B Mahol committed
2072
dtshd_demuxer_select="dca_parser"
2073
dxa_demuxer_select="riffdec"
2074
eac3_demuxer_select="ac3_parser"
2075
f4v_muxer_select="mov_muxer"
2076
flac_demuxer_select="flac_parser"
2077
hls_muxer_select="mpegts_muxer"
2078
ipod_muxer_select="mov_muxer"
2079
ismv_muxer_select="mov_muxer"
2080 2081
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
2082
matroska_audio_muxer_select="matroska_muxer"
2083
matroska_demuxer_select="riffdec"
2084
matroska_demuxer_suggest="bzlib lzo zlib"
2085 2086
matroska_muxer_select="riffenc"
mmf_muxer_select="riffenc"
2087
mov_demuxer_select="riffdec"
2088
mov_demuxer_suggest="zlib"
2089
mov_muxer_select="riffenc rtpenc_chain"
2090
mp3_demuxer_select="mpegaudio_parser"
2091
mp4_muxer_select="mov_muxer"
2092
mpegts_muxer_select="adts_muxer latm_muxer"
2093 2094
mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_d10_muxer_select="mxf_muxer"
2095
nut_muxer_select="riffenc"
2096
nuv_demuxer_select="riffdec"
2097
ogg_demuxer_select="golomb"
2098
psp_muxer_select="mov_muxer"
2099
rtp_demuxer_select="sdp_demuxer"
2100 2101
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
rtsp_demuxer_select="http_protocol rtpdec"
2102
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
Martin Storsjö's avatar
Martin Storsjö committed
2103
sap_demuxer_select="sdp_demuxer"
2104
sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2105
sdp_demuxer_select="rtpdec"
2106
smoothstreaming_muxer_select="ismv_muxer"
2107
spdif_muxer_select="aac_parser"
2108
tak_demuxer_select="tak_parser"
2109 2110
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
Clément Bœsch's avatar
Clément Bœsch committed
2111
vobsub_demuxer_select="mpegps_demuxer"
2112
w64_demuxer_select="wav_demuxer"
2113
w64_muxer_select="wav_muxer"
2114
wav_demuxer_select="riffdec"
2115 2116
wav_muxer_select="riffenc"
webm_muxer_select="riffenc"
2117 2118 2119
wtv_demuxer_select="riffdec"
xmv_demuxer_select="riffdec"
xwma_demuxer_select="riffdec"
2120 2121

# indevs / outdevs
2122 2123 2124
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
alsa_outdev_deps="alsa_asoundlib_h"
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
Paul B Mahol's avatar
Paul B Mahol committed
2125
caca_outdev_deps="libcaca"
2126 2127
dshow_indev_deps="IBaseFilter"
dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2128 2129
dv1394_indev_deps="dv1394"
dv1394_indev_select="dv_demuxer"
2130
fbdev_indev_deps="linux_fb_h"
2131
fbdev_outdev_deps="linux_fb_h"
2132
iec61883_indev_deps="libiec61883"
2133
jack_indev_deps="jack_jack_h sem_timedwait"
2134
lavfi_indev_deps="avfilter"
2135
libcdio_indev_deps="libcdio"
2136
libdc1394_indev_deps="libdc1394"
2137
libv4l2_indev_deps="libv4l2"
2138
openal_indev_deps="openal"
2139 2140
oss_indev_deps_any="soundcard_h sys_soundcard_h"
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2141
pulse_indev_deps="libpulse"
Lukasz Marek's avatar
Lukasz Marek committed
2142
pulse_outdev_deps="libpulse"
2143
sdl_outdev_deps="sdl"
2144 2145
sndio_indev_deps="sndio_h"
sndio_outdev_deps="sndio_h"
2146 2147
v4l_indev_deps="linux_videodev_h"
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
Clément Bœsch's avatar
Clément Bœsch committed
2148
v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2149
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2150
vfwcap_indev_extralibs="-lavicap32"
2151
xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2152
xv_outdev_extralibs="-lXv -lX11 -lXext"
2153
x11grab_indev_deps="x11grab"
2154

2155
# protocols
Petri Hintukainen's avatar
Petri Hintukainen committed
2156
bluray_protocol_deps="libbluray"
Samuel Pitoiset's avatar
Samuel Pitoiset committed
2157 2158 2159
ffrtmpcrypt_protocol_deps="!librtmp_protocol"
ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
ffrtmpcrypt_protocol_select="tcp_protocol"
2160 2161
ffrtmphttp_protocol_deps="!librtmp_protocol"
ffrtmphttp_protocol_select="http_protocol"
Lukasz Marek's avatar
Lukasz Marek committed
2162
ftp_protocol_select="tcp_protocol"
2163
gopher_protocol_select="network"
2164
httpproxy_protocol_select="tcp_protocol"
2165
http_protocol_select="tcp_protocol"
2166
https_protocol_select="tls_protocol"
2167 2168 2169 2170 2171
librtmp_protocol_deps="librtmp"
librtmpe_protocol_deps="librtmp"
librtmps_protocol_deps="librtmp"
librtmpt_protocol_deps="librtmp"
librtmpte_protocol_deps="librtmp"
2172
libssh_protocol_deps="libssh"
Måns Rullgård's avatar
Måns Rullgård committed
2173
mmsh_protocol_select="http_protocol"
2174
mmst_protocol_select="network"
2175
rtmp_protocol_deps="!librtmp_protocol"
2176
rtmp_protocol_select="tcp_protocol"
Samuel Pitoiset's avatar
Samuel Pitoiset committed
2177
rtmpe_protocol_select="ffrtmpcrypt_protocol"
Samuel Pitoiset's avatar
Samuel Pitoiset committed
2178 2179
rtmps_protocol_deps="!librtmp_protocol"
rtmps_protocol_select="tls_protocol"
2180
rtmpt_protocol_select="ffrtmphttp_protocol"
2181
rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2182
rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2183
rtp_protocol_select="udp_protocol"
2184 2185
sctp_protocol_deps="struct_sctp_event_subscribe"
sctp_protocol_select="network"
2186
srtp_protocol_select="rtp_protocol"
2187
tcp_protocol_select="network"
2188 2189
tls_protocol_deps_any="openssl gnutls"
tls_protocol_select="tcp_protocol"
2190
udp_protocol_select="network"
2191 2192
unix_protocol_deps="sys_un_h"
unix_protocol_select="network"
2193

2194
# filters
2195
aconvert_filter_deps="swresample"
2196
amovie_filter_deps="avcodec avformat"
2197
aresample_filter_deps="swresample"
2198
ass_filter_deps="libass"
2199
asyncts_filter_deps="avresample"
2200 2201
atempo_filter_deps="avcodec"
atempo_filter_select="rdft"
2202
azmq_filter_deps="libzmq"
2203
blackframe_filter_deps="gpl"
2204
boxblur_filter_deps="gpl"
2205
colormatrix_filter_deps="gpl"
2206
cropdetect_filter_deps="gpl"
2207 2208
dctdnoiz_filter_deps="avcodec"
dctdnoiz_filter_select="fft"
2209
delogo_filter_deps="gpl"
2210
deshake_filter_deps="avcodec"
2211
deshake_filter_select="dsputil"
2212
drawtext_filter_deps="libfreetype"
2213
ebur128_filter_deps="gpl"
2214
flite_filter_deps="libflite"
Stefano Sabatini's avatar
Stefano Sabatini committed
2215
frei0r_filter_deps="frei0r dlopen"
2216
frei0r_filter_extralibs='$ldl'
Stefano Sabatini's avatar
Stefano Sabatini committed
2217
frei0r_src_filter_deps="frei0r dlopen"
2218
frei0r_src_filter_extralibs='$ldl'
Clément Bœsch's avatar
Clément Bœsch committed
2219
geq_filter_deps="gpl"
2220
histeq_filter_deps="gpl"
2221
hqdn3d_filter_deps="gpl"
2222
interlace_filter_deps="gpl"
2223
kerndeint_filter_deps="gpl"
2224
ladspa_filter_deps="ladspa dlopen"
2225
mcdeint_filter_deps="avcodec gpl"
2226
movie_filter_deps="avcodec avformat"
2227
mp_filter_deps="gpl avcodec swscale inline_asm"
2228
mpdecimate_filter_deps="gpl avcodec"
2229
mptestsrc_filter_deps="gpl"
2230
negate_filter_deps="lut_filter"
2231
perspective_filter_deps="gpl"
2232
resample_filter_deps="avresample"
2233
ocv_filter_deps="libopencv"
2234
owdenoise_filter_deps="gpl"
2235
pan_filter_deps="swresample"
2236
phase_filter_deps="gpl"
Clément Bœsch's avatar
Clément Bœsch committed
2237
pp_filter_deps="gpl postproc"
2238
pullup_filter_deps="gpl"
2239
removelogo_filter_deps="avcodec avformat swscale"
2240
sab_filter_deps="gpl swscale"
2241
scale_filter_deps="swscale"
2242
smartblur_filter_deps="gpl swscale"
2243 2244 2245 2246
showspectrum_filter_deps="avcodec"
showspectrum_filter_select="rdft"
spp_filter_deps="gpl avcodec"
spp_filter_select="fft"
2247
stereo3d_filter_deps="gpl"
2248
subtitles_filter_deps="avformat avcodec libass"
2249
super2xsai_filter_deps="gpl"
2250
tinterlace_filter_deps="gpl"
2251 2252
vidstabdetect_filter_deps="libvidstab"
vidstabtransform_filter_deps="libvidstab"
2253
yadif_filter_deps="gpl"
2254 2255 2256
pixfmts_super2xsai_test_deps="super2xsai_filter"
tinterlace_merge_test_deps="tinterlace_filter"
tinterlace_pad_test_deps="tinterlace_filter"
2257
zmq_filter_deps="libzmq"
2258

2259
# libraries
2260 2261 2262 2263 2264
avcodec_deps="avutil"
avdevice_deps="avutil avcodec avformat"
avfilter_deps="avutil"
avformat_deps="avutil avcodec"
avresample_deps="avutil"
2265
postproc_deps="avutil gpl"
2266
swscale_deps="avutil"
2267

2268
# programs
2269
ffmpeg_deps="avcodec avfilter avformat swresample"
2270 2271
ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
               null_filter
2272
               setpts_filter trim_filter"
2273
ffplay_deps="avcodec avformat swscale swresample sdl"
2274
ffplay_select="rdft crop_filter"
2275
ffprobe_deps="avcodec avformat"
2276 2277
ffserver_deps="avformat fork sarestart"
ffserver_select="ffm_muxer rtp_protocol rtsp_demuxer"
2278
ffserver_extralibs='$ldl'
Måns Rullgård's avatar
Måns Rullgård committed
2279

2280 2281 2282
# documentation
podpages_deps="perl"
manpages_deps="perl pod2man"
2283 2284
htmlpages_deps="texi2html"
txtpages_deps="makeinfo"
2285
doc_deps_any="manpages htmlpages podpages txtpages"
2286

Fabrice Bellard's avatar
Fabrice Bellard committed
2287
# default parameters
2288

2289
logfile="config.log"
2290 2291

# installation paths
2292 2293
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
2294
datadir_default='${prefix}/share/ffmpeg'
2295
docdir_default='${prefix}/share/doc/ffmpeg'
2296 2297 2298 2299
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
2300 2301

# toolchain
2302
ar_default="ar"
2303
cc_default="gcc"
Mohamed Naufal's avatar
Mohamed Naufal committed
2304
cxx_default="g++"
2305
host_cc_default="gcc"
Mans Rullgard's avatar
Mans Rullgard committed
2306
cp_f="cp -f"
2307
install="install"
2308
ln_s="ln -s -f"
2309
nm_default="nm -g"
2310
objformat="elf"
2311
pkg_config_default=pkg-config
Michael Niedermayer's avatar
Michael Niedermayer committed
2312
ranlib="ranlib"
2313
strip_default="strip"
2314
yasmexe_default="yasm"
2315

2316
nogas=":"
2317

2318
# machine
2319
arch_default=$(uname -m)
2320
cpu="generic"
2321 2322

# OS
2323 2324
target_os_default=$(tolower $(uname -s))
host_os=$target_os_default
2325 2326

# configurable options
2327
enable $PROGRAM_LIST
2328
enable $DOCUMENT_LIST
2329
enable $(filter_out avresample $LIBRARY_LIST)
2330
enable stripping
2331 2332 2333 2334

enable asm
enable debug
enable doc
2335
enable optimizations
2336
enable runtime_cpudetect
2337
enable safe_bitstream_reader
2338
enable static
2339
enable swscale_alpha
2340

2341 2342
# Enable hwaccels by default.
enable dxva2 vaapi vdpau
2343

2344
# build settings
2345
SHFLAGS='-shared -Wl,-soname,$$(@F)'
2346 2347
LIBPREF="lib"
LIBSUF=".a"
2348 2349
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2350 2351
SLIBPREF="lib"
SLIBSUF=".so"
2352
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2353 2354
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
Måns Rullgård's avatar
Måns Rullgård committed
2355
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2356 2357
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2358

2359 2360
asflags_filter=echo
cflags_filter=echo
2361 2362
ldflags_filter=echo

2363
AS_C='-c'
2364
AS_O='-o $@'
2365
CC_C='-c'
2366
CC_E='-E -o $@'
2367
CC_O='-o $@'
2368
CXX_C='-c'
Mohamed Naufal's avatar
Mohamed Naufal committed
2369
CXX_O='-o $@'
2370
LD_O='-o $@'
2371 2372
LD_LIB='-l%'
LD_PATH='-L'
2373
HOSTCC_C='-c'
2374
HOSTCC_O='-o $@'
2375
HOSTLD_O='-o $@'
2376

2377 2378
host_cflags='-O3 -g'
host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
2379
host_libs='-lm'
2380 2381
host_cflags_filter=echo
host_ldflags_filter=echo
2382

2383
target_path='$(CURDIR)'
2384

2385 2386
# 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
2387 2388
DEPCMD='$(DEP$(1)) $(DEP$(1)FLAGS) $($(1)DEP_FLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
DEPFLAGS='-MM'
2389

2390
# find source path
2391
if test -f configure; then
2392
    source_path=.
2393
else
2394
    source_path=$(cd $(dirname "$0"); pwd)
2395
    echo "$source_path" | grep -q '[[:blank:]]' &&
2396
        die "Out of tree builds are impossible with whitespace in source path."
2397 2398
    test -e "$source_path/config.h" &&
        die "Out of tree builds are impossible with config.h in source dir."
2399 2400
fi

2401
for v in "$@"; do
2402 2403 2404
    r=${v#*=}
    l=${v%"$r"}
    r=$(sh_quote "$r")
2405
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2406
done
2407

2408 2409 2410 2411
find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
2412
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2413 2414 2415 2416
}

ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2417
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2418 2419 2420 2421
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)
2422 2423
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2424
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2425
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2426

2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440
ALL_COMPONENTS="
    $BSF_LIST
    $DECODER_LIST
    $DEMUXER_LIST
    $ENCODER_LIST
    $FILTER_LIST
    $HWACCEL_LIST
    $INDEV_LIST
    $MUXER_LIST
    $OUTDEV_LIST
    $PARSER_LIST
    $PROTOCOL_LIST
"

2441 2442 2443 2444 2445 2446
for n in $COMPONENT_LIST; do
    v=$(toupper ${n%s})_LIST
    eval enable \$$v
    eval ${n}_if_any="\$$v"
done

2447
enable $ARCH_EXT_LIST
2448 2449 2450 2451 2452 2453 2454

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

2455 2456 2457 2458
print_3_columns() {
    cat | tr ' ' '\n' | sort | pr -r -3 -t
}

2459
show_list() {
Ramiro Polla's avatar
Ramiro Polla committed
2460 2461
    suffix=_$1
    shift
2462
    echo $* | sed s/$suffix//g | print_3_columns
2463 2464 2465
    exit 0
}

2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486
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 }")
}

2487
for opt do
2488 2489
    optval="${opt#*=}"
    case "$opt" in
2490 2491
        --extra-ldflags=*)
            add_ldflags $optval
2492
        ;;
2493 2494
        --extra-libs=*)
            add_extralibs $optval
2495
        ;;
2496 2497
        --disable-devices)
            disable $INDEV_LIST $OUTDEV_LIST
2498
        ;;
2499 2500
        --enable-debug=*)
            debuglevel="$optval"
2501 2502 2503 2504 2505 2506 2507
        ;;
        --disable-programs)
            disable $PROGRAM_LIST
        ;;
        --disable-everything)
            map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
        ;;
2508 2509 2510 2511
        --disable-all)
            map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
            disable $LIBRARY_LIST $PROGRAM_LIST doc
        ;;
2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524
        --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}
2525 2526 2527
            list=$(filter "$name" $list)
            [ "$list" = "" ] && warn "Option $opt did not match anything"
            $action $list
2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547
        ;;
        --enable-?*|--disable-?*)
            eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
            if is_in $option $COMPONENT_LIST; then
                test $action = disable && action=unset
                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
        ;;
2548 2549
        --fatal-warnings) enable fatal_warnings
        ;;
2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561
        *)
            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
        ;;
2562
    esac
2563 2564
done

2565 2566
disabled logging && logfile=/dev/null

2567
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2568 2569
set >> $logfile

2570 2571
test -n "$cross_prefix" && enable cross_compile

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

2577
ar_default="${cross_prefix}${ar_default}"
2578
cc_default="${cross_prefix}${cc_default}"
Mohamed Naufal's avatar
Mohamed Naufal committed
2579
cxx_default="${cross_prefix}${cxx_default}"
Måns Rullgård's avatar
Måns Rullgård committed
2580
nm_default="${cross_prefix}${nm_default}"
2581
pkg_config_default="${cross_prefix}${pkg_config_default}"
2582
ranlib="${cross_prefix}${ranlib}"
2583
strip_default="${cross_prefix}${strip_default}"
2584

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

2587 2588
test -n "$valgrind" && toolchain="valgrind-memcheck"

2589
case "$toolchain" in
2590 2591
    clang-asan)
        cc_default="clang"
2592 2593
        add_cflags  -fsanitize=address
        add_ldflags -fsanitize=address
2594 2595 2596
    ;;
    clang-tsan)
        cc_default="clang"
2597 2598
        add_cflags  -fsanitize=thread -pie
        add_ldflags -fsanitize=thread -pie
2599
    ;;
2600 2601 2602 2603 2604 2605 2606 2607 2608 2609
    gcc-asan)
        cc_default="gcc"
        add_cflags  -fsanitize=address
        add_ldflags -fsanitize=address
    ;;
    gcc-tsan)
        cc_default="gcc"
        add_cflags  -fsanitize=thread -pie -fPIC
        add_ldflags -fsanitize=thread -pie -fPIC
    ;;
2610
    valgrind-massif)
2611
        target_exec_default=${valgrind:-"valgrind"}
2612
        target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc"
2613
    ;;
2614
    valgrind-memcheck)
2615
        target_exec_default=${valgrind:-"valgrind"}
2616
        target_exec_args="--error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp"
2617
    ;;
2618 2619 2620 2621
    msvc)
        cc_default="c99wrap cl"
        ld_default="c99wrap link"
        nm_default="dumpbin -symbols"
2622
        ar_default="lib"
2623
        target_os_default="win32"
2624
    ;;
2625 2626 2627 2628 2629 2630 2631
    icl)
        cc_default="c99wrap -noconv icl"
        ld_default="c99wrap xilink"
        nm_default="dumpbin -symbols"
        ar_default="xilib"
        target_os_default="win32"
    ;;
2632 2633 2634 2635
    gcov)
        add_cflags  -fprofile-arcs -ftest-coverage
        add_ldflags -fprofile-arcs -ftest-coverage
    ;;
2636 2637 2638 2639
    hardened)
        add_cflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all
        add_ldflags -Wl,-z,relro -Wl,-z,now
    ;;
2640 2641 2642 2643 2644
    ?*)
        die "Unknown toolchain $toolchain"
    ;;
esac

2645
set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2646 2647
enabled cross_compile || host_cc_default=$cc
set_default host_cc
2648

2649 2650 2651 2652 2653
if ! $pkg_config --version >/dev/null 2>&1; then
    warn "$pkg_config not found, library detection may fail."
    pkg_config=false
fi

2654 2655
exesuf() {
    case $1 in
2656
        mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2657 2658 2659 2660 2661
    esac
}

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

2663
# set temporary file name
2664
: ${TMPDIR:=$TEMPDIR}
2665
: ${TMPDIR:=$TMP}
2666
: ${TMPDIR:=/tmp}
2667

2668 2669 2670 2671 2672
if [ -n "$tempprefix" ] ; then
    mktemp(){
        echo $tempprefix.${HOSTNAME}.${UID}
    }
elif ! check_cmd mktemp -u XXXXXX; then
2673 2674 2675
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
2676
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2677 2678 2679 2680 2681 2682
    }
fi

tmpfile(){
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
        (set -C; exec > $tmp) 2>/dev/null ||
2683
        die "Unable to create temporary file in $TMPDIR."
2684 2685 2686 2687 2688 2689
    append TMPFILES $tmp
    eval $1=$tmp
}

trap 'rm -f -- $TMPFILES' EXIT

2690
tmpfile TMPASM .asm
2691
tmpfile TMPC   .c
2692
tmpfile TMPCPP .cpp
2693 2694 2695 2696 2697 2698
tmpfile TMPE   $EXESUF
tmpfile TMPH   .h
tmpfile TMPO   .o
tmpfile TMPS   .S
tmpfile TMPSH  .sh
tmpfile TMPV   .ver
2699 2700

unset -f mktemp
2701

2702 2703
chmod +x $TMPE

2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716
# 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

2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734
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
}

Luca Barbato's avatar
Luca Barbato committed
2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746
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
}

2747
msvc_common_flags(){
2748 2749
    for flag; do
        case $flag in
2750 2751 2752 2753 2754 2755
            # 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
2756
            -fomit-frame-pointer) ;;
2757 2758 2759 2760
            -g)                   echo -Z7 ;;
            -fno-math-errno)      ;;
            -fno-common)          ;;
            -fno-signed-zeros)    ;;
2761
            -fPIC)                ;;
2762 2763
            -mthumb)              ;;
            -march=*)             ;;
2764
            -lz)                  echo zlib.lib ;;
2765 2766
            -lavifil32)           echo vfw32.lib ;;
            -lavicap32)           echo vfw32.lib user32.lib ;;
2767 2768 2769 2770 2771 2772
            -l*)                  echo ${flag#-l}.lib ;;
            *)                    echo $flag ;;
        esac
    done
}

2773 2774 2775 2776
msvc_flags(){
    msvc_common_flags "$@"
    for flag; do
        case $flag in
2777
            -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389     \
2778 2779
                                       -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
                                       -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2780
                                       -wd4554 \
2781
                                       -wd4273 ;;
2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797
        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
}

2798 2799 2800
pgi_flags(){
    for flag; do
        case $flag in
2801
            -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825
            -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   ;;
2826 2827
                    corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
                    corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2828 2829
                    amdfam10|barcelona)        echo -xtarget=barcelona   ;;
                    bdver*)                    echo -xarch=avx           ;;
2830
                    athlon-4|athlon-[mx]p)     echo -xarch=ssea          ;;
2831
                    k8|opteron|athlon64|athlon-fx)
2832 2833
                                               echo -xarch=sse2a         ;;
                    athlon*)                   echo -xarch=pentium_proa  ;;
2834 2835 2836 2837 2838 2839
                esac
                ;;
            -std=c99)             echo -xc99              ;;
            -fomit-frame-pointer) echo -xregs=frameptr    ;;
            -fPIC)                echo -KPIC -xcode=pic32 ;;
            -W*,*)                echo $flag              ;;
2840 2841
            -f*-*|-W*|-mimpure-text)                      ;;
            -shared)              echo -G                 ;;
2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863
            *)                    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        ;;
2864
            -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2865 2866 2867 2868
            -msoft-float)   echo --float_support=vfplib       ;;
            -O[0-3]|-mf=*)  echo $flag                        ;;
            -g)             echo -g -mn                       ;;
            -pds=*)         echo $flag                        ;;
2869 2870 2871
            -D*|-I*)        echo $flag                        ;;
            --gcc|--abi=*)  echo $flag                        ;;
            -me)            echo $flag                        ;;
2872 2873 2874 2875
        esac
    done
}

2876 2877 2878 2879
probe_cc(){
    pfx=$1
    _cc=$2

2880 2881
    unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
    unset _ld_o _ldflags _ld_lib _ld_path
2882
    unset _depflags _DEPCMD _DEPFLAGS
2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903
    _flags_filter=echo

    if $_cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
        _type=llvm_gcc
        gcc_extra_ver=$(expr "$($_cc --version | head -n1)" : '.*\((.*)\)')
        _ident="llvm-gcc $($_cc -dumpversion) $gcc_extra_ver"
        _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'
2904
    elif $_cc --version 2>/dev/null | grep -q ^icc; then
2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921
        _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'
2922
        _flags_filter=ccc_flags
2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938
    elif $_cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
        test -d "$sysroot" || die "No valid sysroot specified."
        _type=armcc
        _ident=$($_cc --vsn | head -n1)
        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'
2939
    elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2940 2941 2942
        _type=tms470
        _ident=$($_cc -version | head -n1 | tr -s ' ')
        _flags='--gcc --abi=eabi -me'
2943
        _cc_e='-ppl -fe=$@'
2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958
        _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
        _ident=$($_cc --version | head -n1)
        _depflags='-MMD'
        _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)'
2959
        _DEPFLAGS='-xM1 -xc99'
2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980
        _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 }')"
2981
        opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2982 2983
        _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
        _cflags_size="-O2 -Munroll=c:1 $opt_common"
2984
        _cflags_noopt="-O"
2985
        _flags_filter=pgi_flags
2986 2987 2988 2989 2990 2991 2992
    elif $_cc 2>&1 | grep -q Microsoft; then
        _type=msvc
        _ident=$($cc 2>&1 | head -n1)
        _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"
2993 2994
        # Nonstandard output options, to avoid msys path conversion issues.
        # Relies on wrapper to remap it.
2995 2996 2997 2998 2999 3000
        if $_cc 2>&1 | grep -q Linker; then
            _ld_o='-out $@'
        else
            _ld_o='-Fe$@'
        fi
        _cc_o='-Fo $@'
3001
        _cc_e='-P -Fi $@'
3002 3003 3004 3005
        _flags_filter=msvc_flags
        _ld_lib='lib%.a'
        _ld_path='-libpath:'
        _flags='-nologo'
3006
        _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
3007
        if [ $pfx = hostcc ]; then
3008
            append _cflags -Dsnprintf=_snprintf
3009
        fi
3010
        disable stripping
3011 3012 3013 3014
    elif $_cc 2>&1 | grep -q Intel; then
        _type=icl
        _ident=$($cc 2>&1 | head -n1)
        _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
3015 3016
        # Not only is O3 broken on 13.x+ but it is slower on all previous
        # versions (tested) as well.
3017 3018
        _cflags_speed="-O2"
        _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
3019 3020
        # Nonstandard output options, to avoid msys path conversion issues.
        # Relies on wrapper to remap it.
3021 3022 3023 3024 3025 3026 3027
        if $_cc 2>&1 | grep -q Linker; then
            _ld_o='-out $@'
        else
            _ld_o='-Fe$@'
        fi
        _cc_o='-Fo $@'
        _cc_e='-P'
3028
        _flags_filter=icl_flags
3029 3030
        _ld_lib='lib%.a'
        _ld_path='-libpath:'
3031
        # -Qdiag-error to make icl error when seeing certain unknown arguments
3032
        _flags='-nologo -Qdiag-error:4044,10157'
3033 3034
        # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency
        # with MSVC which enables it by default.
3035
        _cflags='-D_USE_MATH_DEFINES -FIstdlib.h -Dstrtoll=_strtoi64 -Qms0 -Qvec- -Qsimd- -GS'
3036 3037 3038
        if [ $pfx = hostcc ]; then
            append _cflags -Dsnprintf=_snprintf
        fi
Luca Barbato's avatar
Luca Barbato committed
3039 3040 3041 3042 3043 3044 3045
    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
3046
    fi
3047 3048 3049 3050 3051 3052

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

set_ccvars(){
3053
    eval ${1}_C=\${_cc_c-\${${1}_C}}
3054
    eval ${1}_E=\${_cc_e-\${${1}_E}}
3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078
    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
3079

3080 3081
test -n "$cc_type" && enable $cc_type ||
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
3082

3083
: ${as_default:=$cc}
3084
: ${dep_cc_default:=$cc}
3085
: ${ld_default:=$cc}
3086 3087
: ${host_ld_default:=$host_cc}
set_default ar as dep_cc ld host_ld
3088

3089 3090 3091 3092 3093 3094 3095 3096 3097
probe_cc as "$as"
asflags_filter=$_flags_filter
add_asflags $_flags $_cflags
set_ccvars AS

probe_cc ld "$ld"
ldflags_filter=$_flags_filter
add_ldflags $_flags $_ldflags
test "$cc_type" != "$ld_type" && add_ldflags $cc_ldflags
3098
LD_O=${_ld_o-$LD_O}
3099 3100
LD_LIB=${_ld_lib-$LD_LIB}
LD_PATH=${_ld_path-$LD_PATH}
3101

3102 3103 3104 3105
probe_cc hostld "$host_ld"
host_ldflags_filter=$_flags_filter
add_host_ldflags $_flags $_ldflags
HOSTLD_O=${_ld_o-$HOSTLD_O}
3106 3107 3108 3109 3110 3111 3112

if [ -z "$CC_DEPFLAGS" ] && [ "$dep_cc" != "$cc" ]; then
    probe_cc depcc "$dep_cc"
    CCDEP=${_DEPCMD:-$DEPCMD}
    CCDEP_FLAGS=${_DEPFLAGS:=$DEPFLAGS}
    DEPCCFLAGS=$_flags
fi
3113

3114 3115 3116 3117 3118 3119
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='$@'
3120 3121 3122
elif $ar 2>&1 | grep -q 'Usage: ar.*-X.*any'; then
    arflags='-Xany -r -c'
    ar_o='$@'
3123 3124 3125 3126 3127
else
    arflags="rc"
    ar_o='$@'
fi

3128
add_cflags $extra_cflags
Mohamed Naufal's avatar
Mohamed Naufal committed
3129
add_cxxflags $extra_cxxflags
3130
add_asflags $extra_cflags
3131

3132 3133
if test -n "$sysroot"; then
    case "$cc_type" in
3134
        gcc|llvm_gcc|clang)
3135
            add_cppflags --sysroot="$sysroot"
3136 3137
            add_ldflags --sysroot="$sysroot"
        ;;
3138 3139 3140 3141
        tms470)
            add_cppflags -I"$sysinclude"
            add_ldflags  --sysroot="$sysroot"
        ;;
3142 3143 3144
    esac
fi

3145
if test "$cpu" = host; then
3146 3147
    enabled cross_compile &&
        die "--cpu=host makes no sense when cross-compiling."
3148 3149

    case "$cc_type" in
3150
        gcc|llvm_gcc)
3151 3152
            check_native(){
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3153
                sed -n "/cc1.*$1=/{
3154 3155 3156 3157
                            s/.*$1=\\([^ ]*\\).*/\\1/
                            p
                            q
                        }" $TMPE
3158 3159 3160 3161 3162
            }
            cpu=$(check_native -march || check_native -mcpu)
        ;;
    esac

3163 3164
    test "${cpu:-host}" = host &&
        die "--cpu=host not supported with compiler $cc"
3165 3166
fi

3167 3168
# Deal with common $arch aliases
case "$arch" in
3169 3170 3171
    aarch64|arm64)
        arch="aarch64"
    ;;
3172
    arm*|iPad*|iPhone*)
3173 3174
        arch="arm"
    ;;
3175
    mips*|IP*)
3176 3177
        arch="mips"
    ;;
3178
    parisc*|hppa*)
3179 3180
        arch="parisc"
    ;;
3181
    "Power Macintosh"|ppc*|powerpc*)
3182 3183 3184 3185 3186 3187 3188 3189
        arch="ppc"
    ;;
    s390|s390x)
        arch="s390"
    ;;
    sh4|sh)
        arch="sh4"
    ;;
3190
    sun4u|sparc*)
3191 3192
        arch="sparc"
    ;;
3193 3194 3195
    tilegx|tile-gx)
        arch="tilegx"
    ;;
3196
    i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3197 3198 3199 3200
        arch="x86"
    ;;
esac

3201
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3202
enable $arch
3203

3204
# Add processor-specific flags
3205
if enabled aarch64; then
3206

Måns Rullgård's avatar
Måns Rullgård committed
3207
    case $cpu in
3208
        armv*)
Måns Rullgård's avatar
Måns Rullgård committed
3209 3210
            cpuflags="-march=$cpu"
        ;;
3211 3212
        *)
            cpuflags="-mcpu=$cpu"
Måns Rullgård's avatar
Måns Rullgård committed
3213 3214
        ;;
    esac
3215

3216
elif enabled alpha; then
3217

3218
    cpuflags="-mcpu=$cpu"
3219 3220 3221

elif enabled arm; then

3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252
    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;
        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)

3253 3254 3255
    case $cpu in
        armv*)
            cpuflags="-march=$cpu"
3256
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3257 3258 3259
        ;;
        *)
            cpuflags="-mcpu=$cpu"
3260 3261 3262
            case $cpu in
                cortex-a*)                               subarch=armv7a  ;;
                cortex-r*)                               subarch=armv7r  ;;
3263
                cortex-m*)                 enable thumb; subarch=armv7m  ;;
3264 3265 3266
                arm11*)                                  subarch=armv6   ;;
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3267
                *)                             subarch=$(probe_arm_arch) ;;
3268
            esac
3269 3270
        ;;
    esac
3271

3272 3273 3274 3275 3276
    case "$subarch" in
        armv5t*)    enable fast_clz                ;;
        armv[6-8]*) enable fast_clz fast_unaligned ;;
    esac

3277
elif enabled avr32; then
3278

3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296
    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
3297 3298 3299

elif enabled bfin; then

3300
    cpuflags="-mcpu=$cpu"
3301 3302 3303

elif enabled mips; then

3304
    cpuflags="-march=$cpu"
3305

3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327
    case $cpu in
        24kc)
            disable mipsfpu
            disable mipsdspr1
            disable mipsdspr2
        ;;
        24kf*)
            disable mipsdspr1
            disable mipsdspr2
        ;;
        24kec|34kc|1004kc)
            disable mipsfpu
            disable mipsdspr2
        ;;
        24kef*|34kf*|1004kf*)
            disable mipsdspr2
        ;;
        74kc)
            disable mipsfpu
        ;;
    esac

3328
elif enabled ppc; then
3329

3330 3331
    case $(tolower $cpu) in
        601|ppc601|powerpc601)
Måns Rullgård's avatar
Måns Rullgård committed
3332
            cpuflags="-mcpu=601"
3333
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
3334
        ;;
3335
        603*|ppc603*|powerpc603*)
Måns Rullgård's avatar
Måns Rullgård committed
3336
            cpuflags="-mcpu=603"
3337
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
3338
        ;;
3339
        604*|ppc604*|powerpc604*)
Måns Rullgård's avatar
Måns Rullgård committed
3340
            cpuflags="-mcpu=604"
3341
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
3342
        ;;
3343
        g3|75*|ppc75*|powerpc75*)
3344
            cpuflags="-mcpu=750"
3345
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
3346
        ;;
3347
        g4|745*|ppc745*|powerpc745*)
3348
            cpuflags="-mcpu=7450"
Måns Rullgård's avatar
Måns Rullgård committed
3349
        ;;
3350
        74*|ppc74*|powerpc74*)
3351
            cpuflags="-mcpu=7400"
Måns Rullgård's avatar
Måns Rullgård committed
3352
        ;;
3353
        g5|970|ppc970|powerpc970)
3354
            cpuflags="-mcpu=970"
Måns Rullgård's avatar
Måns Rullgård committed
3355
        ;;
3356
        power[3-7]*)
Måns Rullgård's avatar
Måns Rullgård committed
3357 3358
            cpuflags="-mcpu=$cpu"
        ;;
3359
        cell)
Måns Rullgård's avatar
Måns Rullgård committed
3360 3361 3362
            cpuflags="-mcpu=cell"
            enable ldbrx
        ;;
3363 3364 3365 3366
        e500mc)
            cpuflags="-mcpu=e500mc"
            disable altivec
        ;;
3367 3368 3369 3370 3371 3372 3373
        e500v2)
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
            disable altivec
        ;;
        e500)
            cpuflags="-mcpu=8540 -mhard-float"
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
3374 3375
        ;;
    esac
3376

3377
elif enabled sparc; then
3378 3379

    case $cpu in
3380 3381 3382
        cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
            cpuflags="-mcpu=$cpu"
            disable vis
3383
        ;;
3384
        ultrasparc*|niagara[234])
3385 3386 3387 3388
            cpuflags="-mcpu=$cpu"
        ;;
    esac

3389 3390
elif enabled x86; then

Måns Rullgård's avatar
Måns Rullgård committed
3391 3392 3393 3394 3395
    case $cpu in
        i[345]86|pentium)
            cpuflags="-march=$cpu"
            disable mmx
        ;;
3396
        # targets that do NOT support nopl and conditional mov (cmov)
Måns Rullgård's avatar
Måns Rullgård committed
3397 3398
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
            cpuflags="-march=$cpu"
3399
            disable i686
Måns Rullgård's avatar
Måns Rullgård committed
3400
        ;;
3401
        # targets that do support nopl and conditional mov (cmov)
3402
        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åns Rullgård's avatar
Måns Rullgård committed
3403
            cpuflags="-march=$cpu"
3404
            enable i686
Måns Rullgård's avatar
Måns Rullgård committed
3405 3406 3407 3408 3409
            enable fast_cmov
        ;;
        # targets that do support conditional mov but on which it's slow
        pentium4|pentium4m|prescott|nocona)
            cpuflags="-march=$cpu"
3410
            enable i686
Måns Rullgård's avatar
Måns Rullgård committed
3411 3412 3413
            disable fast_cmov
        ;;
    esac
3414 3415 3416

fi

3417 3418 3419 3420
if [ "$cpu" != generic ]; then
    add_cflags  $cpuflags
    add_asflags $cpuflags
fi
3421

3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434
# 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

3435
add_cppflags -D_ISOC99_SOURCE
Mohamed Naufal's avatar
Mohamed Naufal committed
3436
add_cxxflags -D__STDC_CONSTANT_MACROS
3437
check_cflags -std=c99
3438
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3439 3440
#include <stdlib.h>
EOF
3441
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3442 3443
#include <stdlib.h>
EOF
3444

3445
check_host_cflags -std=c99
3446
check_host_cflags -Wall
3447

3448 3449 3450 3451 3452 3453 3454 3455
check_64bit(){
    arch32=$1
    arch64=$2
    expr=$3
    check_code cc "" "int test[2*($expr) - 1]" &&
        subarch=$arch64 || subarch=$arch32
}

3456
case "$arch" in
3457
    aarch64|alpha|ia64)
3458
        spic=$shared
3459
    ;;
3460 3461
    mips)
        check_64bit mips mips64 '_MIPS_SIM > 1'
3462
        spic=$shared
3463
    ;;
3464 3465 3466 3467
    parisc)
        check_64bit parisc parisc64 'sizeof(void *) > 4'
        spic=$shared
    ;;
3468 3469
    ppc)
        check_64bit ppc ppc64 'sizeof(void *) > 4'
3470
        spic=$shared
3471
    ;;
3472 3473 3474 3475
    sparc)
        check_64bit sparc sparc64 'sizeof(void *) > 4'
        spic=$shared
    ;;
3476
    x86)
3477
        check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3478
        if test "$subarch" = "x86_64"; then
3479
            spic=$shared
3480
        fi
3481
    ;;
3482 3483 3484 3485 3486
    ppc)
        check_cc <<EOF && subarch="ppc64"
        int test[(int)sizeof(char*) - 7];
EOF
    ;;
3487 3488
esac

3489
enable $subarch
3490
enabled spic && enable_weak pic
3491

3492
# OS specific
3493
case $target_os in
3494
    aix)
3495
        SHFLAGS=-shared
3496
        add_cppflags '-I\$(SRC_PATH)/compat/aix'
3497
        enabled shared && add_ldflags -Wl,-brtl
3498
        ;;
3499
    haiku)
3500
        prefix_default="/boot/common"
3501
        network_extralibs="-lnetwork"
François Revol's avatar
François Revol committed
3502
        host_libs=
3503
        ;;
3504
    sunos)
3505
        SHFLAGS='-shared -Wl,-h,$$(@F)'
3506
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3507
        network_extralibs="-lsocket -lnsl"
3508
        add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3509 3510 3511 3512 3513
        # 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.
3514 3515 3516
        enabled_all suncc x86 &&
            echo "hwcap_1 = OVERRIDE;" > mapfile &&
            add_ldflags -Wl,-M,mapfile
3517
        nm_default='nm -P -g'
3518 3519
        ;;
    netbsd)
3520
        disable symver
3521 3522
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
3523
        enabled gcc || check_ldflags -Wl,-zmuldefs
3524
        ;;
3525
    openbsd|bitrig)
3526
        disable symver
3527
        SHFLAGS='-shared'
3528
        SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3529
        SLIB_INSTALL_LINKS=
3530 3531
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
3532
        ;;
3533 3534 3535 3536
    dragonfly)
        disable symver
        ;;
    freebsd)
3537 3538
        ;;
    bsd/os)
3539
        add_extralibs -lpoll -lgnugetopt
3540
        strip="strip -d"
3541 3542
        ;;
    darwin)
3543
        gas="gas-preprocessor.pl $cc"
3544
        enabled ppc && add_asflags -force_cpusubtype_ALL
3545
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3546
        enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3547
        strip="${strip} -x"
3548
        add_ldflags -Wl,-dynamic,-search_paths_first
3549 3550 3551
        SLIBSUF=".dylib"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
Loren Merritt's avatar
Loren Merritt committed
3552
        objformat="macho"
3553
        enabled x86_64 && objformat="macho64"
3554
        enabled_any pic shared ||
3555
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3556 3557
        ;;
    mingw32*)
3558
        if test $target_os = "mingw32ce"; then
3559 3560 3561 3562
            disable network
        else
            target_os=mingw32
        fi
3563
        LIBTARGET=i386
3564
        if enabled x86_64; then
3565
            LIBTARGET="i386:x86-64"
3566
        elif enabled arm; then
3567
            LIBTARGET=arm-wince
3568
        fi
3569 3570
        check_ldflags -Wl,--nxcompat
        check_ldflags -Wl,--dynamicbase
3571
        shlibdir_default="$bindir_default"
3572 3573 3574 3575
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3576
        dlltool="${cross_prefix}dlltool"
3577
        if check_cmd lib.exe -list; then
3578
            SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3579 3580 3581 3582
            if enabled x86_64; then
                LIBTARGET=x64
            fi
        elif check_cmd $dlltool --version; then
3583
            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)'
3584
        fi
3585 3586 3587 3588
        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)'
3589
        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'
Loren Merritt's avatar
Loren Merritt committed
3590
        objformat="win32"
3591
        ranlib=:
3592
        enable dos_paths
3593
        ;;
3594
    win32|win64)
3595 3596 3597 3598
        if enabled shared; then
            # Link to the import library instead of the normal static library
            # for shared libs.
            LD_LIB='%.lib'
3599
            # Cannot build both shared and static libs with MSVC or icl.
3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612
            disable static
        fi
        shlibdir_default="$bindir_default"
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
        SLIB_CREATE_DEF_CMD='makedef $(SUBDIR)lib$(NAME).ver $(OBJS) > $$(@:$(SLIBSUF)=.def)'
        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)'
3613 3614 3615 3616
        objformat="win32"
        ranlib=:
        enable dos_paths
        ;;
3617
    cygwin*)
3618
        target_os=cygwin
3619
        shlibdir_default="$bindir_default"
3620 3621 3622 3623
        SLIBPREF="cyg"
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3624 3625 3626 3627
        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'
Loren Merritt's avatar
Loren Merritt committed
3628
        objformat="win32"
3629
        enable dos_paths
3630
        ;;
3631 3632
    *-dos|freedos|opendos)
        network_extralibs="-lsocket"
3633
        objformat="coff"
3634
        enable dos_paths
3635
        add_cppflags -U__STRICT_ANSI__
3636
        ;;
3637 3638 3639 3640
    linux)
        enable dv1394
        ;;
    irix*)
3641
        target_os=irix
3642 3643
        ranlib="echo ignoring ranlib"
        ;;
3644
    os/2*)
3645
        strip="lxlite -CS"
3646
        ln_s="cp -f"
3647
        objformat="aout"
3648
        add_cppflags -D_GNU_SOURCE
3649
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3650
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3651
        LIBSUF="_s.a"
3652 3653 3654 3655
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3656
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3657 3658 3659 3660 3661
            echo PROTMODE >> $(SUBDIR)$(NAME).def; \
            echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \
            echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \
            echo EXPORTS >> $(SUBDIR)$(NAME).def; \
            emxexp -o $(OBJS) >> $(SUBDIR)$(NAME).def'
3662
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3663
            emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3664
        SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3665
        enable dos_paths
3666
        enable_weak os2threads
3667
        ;;
3668
    gnu/kfreebsd)
3669
        add_cppflags -D_BSD_SOURCE
3670
        ;;
3671 3672
    gnu)
        ;;
3673 3674 3675 3676
    qnx)
        add_cppflags -D_QNX_SOURCE
        network_extralibs="-lsocket"
        ;;
3677 3678 3679
    symbian)
        SLIBSUF=".dll"
        enable dos_paths
3680 3681 3682 3683 3684 3685 3686 3687
        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
3688
        ;;
3689 3690 3691
    osf1)
        add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
        ;;
3692 3693
    minix)
        ;;
Mans Rullgard's avatar
Mans Rullgard committed
3694 3695 3696 3697 3698 3699 3700 3701 3702
    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
3703
        disable ffserver
Mans Rullgard's avatar
Mans Rullgard committed
3704 3705
        cp_f='cp'
        ;;
3706 3707
    none)
        ;;
3708
    *)
3709
        die "Unknown OS '$target_os'."
3710 3711 3712
        ;;
esac

3713 3714
# determine libc flavour

3715
# uclibc defines __GLIBC__, so it needs to be checked before glibc.
3716 3717
if check_cpp_condition features.h "defined __UCLIBC__"; then
    libc_type=uclibc
3718
    add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3719 3720
elif check_cpp_condition features.h "defined __GLIBC__"; then
    libc_type=glibc
3721
    add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3722 3723 3724 3725
# MinGW headers can be installed on Cygwin, so check for newlib first.
elif check_cpp_condition newlib.h "defined _NEWLIB_VERSION"; then
    libc_type=newlib
    add_cppflags -U__STRICT_ANSI__
3726 3727 3728 3729 3730 3731
elif check_header _mingw.h; then
    libc_type=mingw
    check_cpp_condition _mingw.h \
        "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) || \
            (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
        die "ERROR: MinGW runtime version must be >= 3.15."
3732
    add_cppflags -U__STRICT_ANSI__
3733
    if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3734
            __MINGW64_VERSION_MAJOR < 3"; then
3735
        add_compat msvcrt/snprintf.o
3736
        add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
3737 3738
    else
        add_cppflags -D__USE_MINGW_ANSI_STDIO=1
3739
    fi
3740 3741
elif check_func_headers stdlib.h _get_doserrno; then
    libc_type=msvcrt
3742 3743 3744 3745
    add_compat strtod.o strtod=avpriv_strtod
    add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
                                 _snprintf=avpriv_snprintf  \
                                 vsnprintf=avpriv_vsnprintf
3746 3747 3748 3749 3750 3751 3752
    # 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.
    check_cpp_condition stdlib.h "defined(_WIN32_WINNT)" || add_cppflags -D_WIN32_WINNT=0x0502
3753 3754
elif check_cpp_condition stddef.h "defined __KLIBC__"; then
    libc_type=klibc
3755 3756 3757
elif check_cpp_condition sys/cdefs.h "defined __BIONIC__"; then
    libc_type=bionic
    add_compat strtod.o strtod=avpriv_strtod
3758 3759 3760 3761
fi

test -n "$libc_type" && enable $libc_type

3762 3763 3764
# hacks for compiler/libc/os combinations

if enabled_all tms470 glibc; then
3765
    CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3766 3767 3768 3769 3770 3771
    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

3772 3773 3774 3775
if enabled_all ccc glibc; then
    add_ldflags -Wl,-z,now  # calls to libots crash without this
fi

3776 3777 3778 3779
esc(){
    echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
}

3780
echo "config:$arch:$subarch:$cpu:$target_os:$(esc $cc_ident):$(esc $FFMPEG_CONFIGURATION)" >config.fate
3781

3782
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3783

3784
set_default $PATHS_LIST
3785
set_default nm
3786

3787
# we need to build at least one lib type
3788
if ! enabled_any static shared; then
3789 3790 3791 3792 3793 3794 3795 3796 3797
    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

3798 3799 3800 3801
# backward compatibility layer for incompatible_libav/fork_abi
enabled incompatible_fork_abi  && enable incompatible_libav_abi
enabled incompatible_libav_abi && enable incompatible_fork_abi

3802
die_license_disabled() {
3803
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3804 3805
}

3806 3807 3808 3809
die_license_disabled_gpl() {
    enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
}

3810
die_license_disabled gpl frei0r
3811
die_license_disabled gpl libcdio
3812
die_license_disabled gpl libutvideo
3813
die_license_disabled gpl libvidstab
3814
die_license_disabled gpl libx264
3815
die_license_disabled gpl libxavs
3816
die_license_disabled gpl libxvid
3817
die_license_disabled gpl libzvbi
3818 3819
die_license_disabled gpl x11grab

tipok's avatar
tipok committed
3820
die_license_disabled nonfree libaacplus
3821
die_license_disabled nonfree libfaac
3822
enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3823
enabled gpl && die_license_disabled_gpl nonfree openssl
3824

3825 3826
die_license_disabled version3 libopencore_amrnb
die_license_disabled version3 libopencore_amrwb
3827
die_license_disabled version3 libvo_aacenc
3828
die_license_disabled version3 libvo_amrwbenc
3829

3830
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3831

3832
disabled optimizations || check_cflags -fomit-frame-pointer
3833

3834 3835
enable_weak_pic() {
    disabled pic && return
3836
    enable pic
3837
    add_cppflags -DPIC
3838 3839 3840 3841 3842 3843 3844
    case "$target_os" in
    mingw*|cygwin*)
        ;;
    *)
        add_cflags -fPIC
        ;;
    esac
3845
    add_asflags  -fPIC
3846 3847
}

3848
enabled pic && enable_weak_pic
3849

3850 3851 3852
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
3853
sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3854 3855
extern_prefix=${sym%%ff_extern*}

3856
check_cc <<EOF && enable_weak inline_asm
3857 3858
void foo(void) { __asm__ volatile ("" ::); }
EOF
3859

3860 3861 3862 3863 3864 3865 3866
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
    check_cc <<EOF && _restrict=$restrict_keyword && break
void foo(char * $restrict_keyword p);
EOF
done

3867
check_cc <<EOF && enable pragma_deprecated
3868
void foo(void) { _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") }
3869 3870
EOF

3871 3872 3873 3874
check_cc <<EOF && enable attribute_packed
struct { int x; } __attribute__((packed)) x;
EOF

3875 3876 3877 3878
check_cc <<EOF && enable attribute_may_alias
union { int x; } __attribute__((may_alias)) x;
EOF

3879 3880 3881
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
3882
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3883

3884 3885
check_inline_asm inline_asm_labels '"1:\n"'

3886 3887 3888 3889 3890
if enabled alpha; then

    check_cflags -mieee

elif enabled arm; then
3891

3892 3893 3894 3895
    check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
float func(float a, float b){ return a+b; }
EOF

3896
    enabled thumb && check_cflags -mthumb || check_cflags -marm
3897
    nogas=die
3898

3899 3900 3901 3902 3903
    if     check_cpp_condition stddef.h "defined __ARM_PCS_VFP"; then
        enable vfp_args
    elif ! check_cpp_condition stddef.h "defined __ARM_PCS || defined __SOFTFP__"; then
        case "${cross_prefix:-$cc}" in
            *hardfloat*)         enable vfp_args;   fpabi=vfp ;;
Mohamed Naufal's avatar
Mohamed Naufal committed
3904
            *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3905 3906 3907
__asm__ (".eabi_attribute 28, 1");
int main(void) { return 0; }
EOF
3908 3909 3910
        esac
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
    fi
3911

3912 3913 3914 3915
    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'
3916
    enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3917 3918
    enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'

3919 3920 3921
    [ $target_os = linux ] ||
        map 'enabled_any ${v}_external ${v}_inline || disable $v' \
            $ARCH_EXT_LIST_ARM
3922

3923 3924
    check_inline_asm asm_mod_q '"add r0, %Q0, %R0" :: "r"((long long)0)'
    check_inline_asm asm_mod_y '"vmul.i32 d0, d0, %y0" :: "x"(0)'
3925

3926
    [ $target_os != win32 ] && enabled_all armv6t2 shared !pic && enable_weak_pic
3927

3928
elif enabled mips; then
3929

3930
    check_inline_asm loongson '"dmult.g $1, $2, $3"'
3931
    enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3932
     check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
3933
    enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3934
     check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3935
    enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3936
     check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3937
    enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3938
     check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3939

3940 3941 3942 3943 3944 3945 3946 3947
elif enabled parisc; then

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

3948
elif enabled ppc; then
3949

3950 3951
    enable local_aligned_8 local_aligned_16

3952 3953 3954 3955
    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)'
3956 3957 3958

    # AltiVec flags: The FSF version of GCC differs from the Apple version
    if enabled altivec; then
3959 3960 3961
        if ! enabled_any pic ppc64; then
            nogas=warn
        fi
3962 3963 3964 3965 3966 3967 3968 3969
        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) {
3970 3971 3972
    vector signed int v1 = (vector signed int) { 0 };
    vector signed int v2 = (vector signed int) { 1 };
    v1 = vec_add(v1, v2);
3973 3974 3975 3976
    return 0;
}
EOF

3977
        enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3978
    fi
3979

3980
elif enabled sparc; then
3981

3982
    enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3983

3984
elif enabled x86; then
3985

3986 3987
    check_builtin rdtsc    intrin.h   "__rdtsc()"
    check_builtin mm_empty mmintrin.h "_mm_empty()"
3988

3989 3990
    enable local_aligned_8 local_aligned_16

3991 3992 3993 3994
    # 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.
3995
    check_exec_crash <<EOF && enable ebp_available
3996 3997 3998
volatile int i=0;
__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
return i;
3999 4000
EOF

Reimar Döffinger's avatar
Reimar Döffinger committed
4001
    # check whether EBX is available on x86
4002 4003
    check_inline_asm ebx_available '""::"b"(0)' &&
        check_inline_asm ebx_available '"":::"%ebx"'
4004

4005
    # check whether xmm clobbers are supported
4006
    check_inline_asm xmm_clobbers '"":::"%xmm0"'
4007

4008
    # check whether binutils is new enough to compile SSSE3/MMXEXT
4009 4010
    enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
    enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
4011

4012
    if ! disabled_any asm mmx yasm; then
4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028
        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

4029 4030
        check_yasm "movbe ecx, [5]" && enable yasm ||
            die "yasm/nasm not found or too old. Use --disable-yasm for a crippled build."
4031
        check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external avresample
4032
        check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
4033
        check_yasm "CPU amdnop" && enable cpunop
4034
    fi
4035

4036 4037 4038 4039 4040 4041
    case "$cpu" in
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
            disable fast_clz
        ;;
    esac

4042 4043
fi

4044 4045
if enabled asm; then
    as=${gas:=$as}
4046
    check_as <<EOF && enable gnu_as || \
4047
        $nogas "GNU assembler not found, install gas-preprocessor"
4048 4049 4050 4051 4052
.macro m n
\n: .int 0
.endm
m x
EOF
4053 4054
fi

4055 4056
check_ldflags -Wl,--as-needed

4057 4058 4059 4060
if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
4061 4062
fi

4063
if ! disabled network; then
4064 4065
    check_type "sys/types.h sys/socket.h" socklen_t
    check_type netdb.h "struct addrinfo"
4066 4067
    check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
    check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
4068 4069
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
    check_type netinet/in.h "struct sockaddr_in6"
4070
    check_type poll.h "struct pollfd"
4071 4072
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
4073
    check_type netinet/sctp.h "struct sctp_event_subscribe"
4074
    check_func getaddrinfo $network_extralibs
4075
    check_func getservbyport $network_extralibs
4076 4077 4078 4079
    # Prefer arpa/inet.h over winsock2
    if check_header arpa/inet.h ; then
        check_func closesocket
    elif check_header winsock2.h ; then
4080 4081 4082
        check_func_headers winsock2.h closesocket -lws2 &&
            network_extralibs="-lws2" ||
        { check_func_headers winsock2.h closesocket -lws2_32 &&
4083
            network_extralibs="-lws2_32"; }
4084
        check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
4085 4086
        check_type ws2tcpip.h socklen_t
        check_type ws2tcpip.h "struct addrinfo"
4087 4088
        check_type ws2tcpip.h "struct group_source_req"
        check_type ws2tcpip.h "struct ip_mreq_source"
4089
        check_type ws2tcpip.h "struct ipv6_mreq"
4090
        check_type winsock2.h "struct pollfd"
4091 4092 4093 4094 4095 4096 4097 4098
        check_type ws2tcpip.h "struct sockaddr_in6"
        check_type ws2tcpip.h "struct sockaddr_storage"
        check_struct winsock2.h "struct sockaddr" sa_len
    else
        disable network
    fi
fi

4099 4100 4101
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }

4102
check_func  access
4103
check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
Måns Rullgård's avatar
Måns Rullgård committed
4104
check_func  fcntl
4105
check_func  fork
4106
check_func_headers stdlib.h getenv
4107
check_func  gethrtime
4108
check_func  getopt
4109
check_func  getrusage
4110
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
4111
check_func  gettimeofday
4112
check_func  inet_aton $network_extralibs
4113
check_func  isatty
4114
check_func  localtime_r
4115
check_func  ${malloc_prefix}memalign            && enable memalign
4116
check_func  mkstemp
4117
check_func  mmap
4118
check_func  mprotect
4119
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
4120
check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
Måns Rullgård's avatar
Måns Rullgård committed
4121
check_func  setrlimit
4122
check_struct "sys/stat.h" "struct stat" st_mtim.tv_nsec -D_BSD_SOURCE
4123
check_func  strerror_r
4124
check_func  sched_getaffinity
4125
check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
4126
check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
4127
check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
4128
check_builtin MemoryBarrier windows.h "MemoryBarrier()"
4129
check_builtin sarestart signal.h "SA_RESTART"
4130
check_func  sysconf
4131
check_func  sysctl
4132
check_func  usleep
4133
check_func_headers conio.h kbhit
4134
check_func_headers windows.h PeekNamedPipe
4135
check_func_headers io.h setmode
4136
check_func_headers lzo/lzo1x.h lzo1x_999_compress
4137
check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
4138
check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
4139
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
4140
check_func_headers windows.h GetProcessAffinityMask
4141
check_func_headers windows.h GetProcessTimes
4142
check_func_headers windows.h GetSystemTimeAsFileTime
4143
check_func_headers windows.h MapViewOfFile
4144
check_func_headers windows.h SetConsoleTextAttribute
4145
check_func_headers windows.h Sleep
4146
check_func_headers windows.h VirtualAlloc
4147
check_func_headers glob.h glob
4148
check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
4149

4150
check_header cl/cl.h
4151
check_header direct.h
4152
check_header dlfcn.h
4153
check_header dxva.h
4154
check_header dxva2api.h -D_WIN32_WINNT=0x0600
4155
check_header io.h
4156
check_header libcrystalhd/libcrystalhd_if.h
4157
check_header malloc.h
4158
check_header poll.h
4159
check_header sys/mman.h
4160
check_header sys/param.h
4161
check_header sys/resource.h
4162
check_header sys/select.h
4163
check_header sys/time.h
4164
check_header sys/un.h
4165
check_header termios.h
4166
check_header unistd.h
4167 4168
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
4169
check_header VideoDecodeAcceleration/VDADecoder.h
4170
check_header windows.h
4171
check_header X11/extensions/XvMClib.h
4172
check_header asm/types.h
4173

4174
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4175
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4176

4177
if ! disabled w32threads && ! enabled pthreads; then
4178
    check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
4179 4180
fi

4181 4182
# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
4183
if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4184
    enable pthreads
Måns Rullgård's avatar
Måns Rullgård committed
4185 4186 4187 4188
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
4189
        add_extralibs -pthread
Måns Rullgård's avatar
Måns Rullgård committed
4190 4191
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
4192
        add_extralibs -pthreads
4193 4194
    elif check_func pthread_create -lpthreadGC2; then
        add_extralibs -lpthreadGC2
Måns Rullgård's avatar
Måns Rullgård committed
4195
    elif ! check_lib pthread.h pthread_create -lpthread; then
4196
        disable pthreads
Måns Rullgård's avatar
Måns Rullgård committed
4197
    fi
4198 4199
fi

4200
for thread in $THREADS_LIST; do
4201
    if enabled $thread; then
4202 4203
        test -n "$thread_type" &&
            die "ERROR: Only one thread type must be selected." ||
4204 4205 4206 4207
            thread_type="$thread"
    fi
done

4208 4209 4210 4211
if enabled pthreads; then
  check_func pthread_cancel
fi

4212
enabled sync_val_compare_and_swap && enable atomics_gcc
4213
enabled_all atomic_cas_ptr machine_rw_barrier && enable atomics_suncc
4214 4215
enabled MemoryBarrier && enable atomics_win32

4216
check_lib math.h sin -lm && LIBM="-lm"
4217
disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
Måns Rullgård's avatar
Måns Rullgård committed
4218

4219 4220 4221
atan2f_args=2
ldexpf_args=2
powf_args=2
4222

4223
for func in $MATH_FUNCS; do
4224
    eval check_mathfunc $func \${${func}_args:-1}
4225 4226
done

4227
# these are off by default, so fail if requested and not available
4228 4229 4230 4231
enabled avisynth          && { { check_lib2 "windows.h" LoadLibrary; } ||
                               { check_lib2 "dlfcn.h" dlopen -ldl; } ||
                               die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
enabled fontconfig        && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
4232 4233
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
4234
enabled ladspa            && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; }
4235 4236 4237 4238 4239 4240 4241 4242
enabled libiec61883       && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
enabled libaacplus        && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
enabled libass            && require_pkg_config libass ass/ass.h ass_library_init
enabled libbluray         && require libbluray libbluray/bluray.h bd_open -lbluray
enabled libcelt           && require libcelt celt/celt.h celt_decode -lcelt0 &&
                             { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
                               die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
enabled libcaca           && require_pkg_config caca caca.h caca_create_canvas
4243 4244
enabled libfaac           && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libfdk_aac        && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4245
flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
4246
enabled libflite          && require2 libflite "flite/flite.h" flite_init $flite_libs
4247
enabled libfreetype       && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
4248
enabled libgme            && require  libgme gme/gme.h gme_new_emu -lgme -lstdc++
4249 4250 4251 4252
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
4253
enabled libmodplug        && require libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
4254
enabled libmp3lame        && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4255
enabled libnut            && require libnut libnut.h nut_demuxer_init -lnut
4256 4257
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
4258 4259 4260 4261
enabled libopencv         && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
enabled libopenjpeg       && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg ||
                               check_lib openjpeg.h opj_version -lopenjpeg ||
                               die "ERROR: libopenjpeg not found"; }
4262 4263
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
4264
enabled libquvi           && require_pkg_config libquvi quvi/quvi.h quvi_init
4265 4266
enabled librtmp           && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
enabled libschroedinger   && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
Romain Beauxis's avatar
Romain Beauxis committed
4267
enabled libshine          && require_pkg_config shine shine/layer3.h shine_encode_buffer
4268
enabled libsoxr           && require libsoxr soxr.h soxr_create -lsoxr
4269
enabled libssh            && require_pkg_config libssh libssh/sftp.h sftp_init
4270
enabled libspeex          && require libspeex speex/speex.h speex_decoder_init -lspeex
4271
enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
4272
    media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
4273
    media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
4274
enabled libtheora         && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4275 4276 4277 4278 4279 4280
enabled libtwolame        && require libtwolame twolame.h twolame_init -ltwolame &&
                             { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
                               die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
enabled libutvideo        && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
enabled libv4l2           && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
enabled libvidstab        && require_pkg_config vidstab vid.stab/libvidstab.h vsMotionDetectInit
4281 4282 4283 4284
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
enabled libvpx            && {
4285
    enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4286
                                    die "ERROR: libvpx decoder version must be >=0.9.1"; }
4287
    enabled libvpx_vp8_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx ||
4288
                                    die "ERROR: libvpx encoder version must be >=0.9.7"; }
4289
    enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; }
4290
    enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
4291 4292 4293
enabled libwavpack        && require libwavpack wavpack/wavpack.h WavpackOpenFileOutput  -lwavpack
enabled libx264           && require libx264 x264.h x264_encoder_encode -lx264 &&
                             { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4294
                               die "ERROR: libx264 must be installed and version must be >= 0.118."; }
4295 4296
enabled libxavs           && require libxavs xavs.h xavs_encoder_encode -lxavs
enabled libxvid           && require libxvid xvid.h xvid_global -lxvidcore
4297
enabled libzmq            && require_pkg_config libzmq zmq.h zmq_ctx_new
4298
enabled libzvbi           && require libzvbi libzvbi.h vbi_decoder_new -lzvbi
4299 4300 4301 4302 4303 4304 4305 4306
enabled openal            && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
                               check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
                               die "ERROR: openal not found"; } &&
                             { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
                               die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
enabled opencl            && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
                               check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
                               die "ERROR: opencl not found"; } &&
4307
                             { ! enabled_any w32threads os2threads ||
4308
                               die "opencl currently needs --enable-pthreads or --disable-w32threads"; } &&
4309 4310 4311
                             { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
                               check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
                               die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
4312 4313 4314 4315
enabled openssl           && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto ||
                               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"; }
4316

Samuel Pitoiset's avatar
Samuel Pitoiset committed
4317 4318 4319 4320 4321
if enabled gnutls; then
    { check_lib nettle/bignum.h nettle_mpz_get_str_256 -lnettle -lhogweed -lgmp && enable nettle; } ||
    { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; }
fi

4322 4323 4324 4325 4326 4327 4328 4329 4330
# libdc1394 check
if enabled libdc1394; then
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
        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

4331
SDL_CONFIG="${cross_prefix}sdl-config"
4332
if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4333
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4334 4335
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
    enable sdl
4336 4337
else
  if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
4338 4339
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
    sdl_libs=$("${SDL_CONFIG}" --libs)
4340
    check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
4341
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4342 4343
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
    enable sdl
4344
  fi
4345
fi
4346
enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
4347

4348
texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
4349
makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
4350
perl --version > /dev/null 2>&1 && enable perl || disable perl
4351
pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
4352
rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
4353

4354
check_header linux/fb.h
4355 4356
check_header linux/videodev.h
check_header linux/videodev2.h
4357
check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
4358

4359
check_header sys/videoio.h
4360

4361
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4362 4363 4364
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
# w32api 3.12 had it defined wrong
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
Ramiro Polla's avatar
Ramiro Polla committed
4365

4366 4367
check_type "dshow.h" IBaseFilter

4368
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
Ramiro Polla's avatar
Ramiro Polla committed
4369 4370 4371 4372 4373 4374 4375
{ 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
4376

4377
check_header sndio.h
4378 4379 4380 4381 4382 4383 4384 4385
if check_struct sys/soundcard.h audio_buf_info bytes; then
    enable_safe sys/soundcard.h
else
    check_cc -D__BSD_VISIBLE -D__XSI_VISIBLE <<EOF && add_cppflags -D__BSD_VISIBLE -D__XSI_VISIBLE && enable_safe sys/soundcard.h
    #include <sys/soundcard.h>
    audio_buf_info abc;
EOF
fi
4386
check_header soundcard.h
Måns Rullgård's avatar
Måns Rullgård committed
4387

4388 4389
enabled_any alsa_indev alsa_outdev &&
    check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4390

4391
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
4392
    check_func jack_port_get_latency_range -ljack
4393

4394 4395
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio

4396
if enabled libcdio; then
4397 4398 4399
    check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
    check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
    die "ERROR: libcdio-paranoia not found"
4400
fi
4401

4402 4403 4404 4405
enabled x11grab                                           &&
require X11 X11/Xlib.h XOpenDisplay -lX11                 &&
require Xext X11/extensions/XShm.h XShmCreateImage -lXext &&
require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes
4406

4407 4408 4409
enabled vaapi &&
    check_lib va/va.h vaInitialize -lva ||
    disable vaapi
4410

4411
enabled vdpau &&
4412
    check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4413
    disable vdpau
4414

4415
# Funny iconv installations are not unusual, so check it after all flags have been set
4416
disabled iconv || check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || disable iconv
4417

4418
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4419 4420 4421

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
4422
check_cflags -Wall
4423
check_cflags -Wno-parentheses
4424
check_cflags -Wno-switch
4425
check_cflags -Wno-format-zero-length
Michael Niedermayer's avatar
Michael Niedermayer committed
4426 4427 4428
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
4429
check_cflags -Wno-pointer-sign
4430
check_cflags -Wwrite-strings
4431
check_cflags -Wtype-limits
4432
check_cflags -Wundef
4433
check_cflags -Wmissing-prototypes
4434
check_cflags -Wno-pointer-to-int-cast
4435
check_cflags -Wstrict-prototypes
4436
enabled extra_warnings && check_cflags -Winline
4437

4438
# add some linker flags
4439
check_ldflags -Wl,--warn-common
4440
check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4441
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4442

4443
enabled xmm_clobber_test &&
4444 4445 4446 4447 4448
    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      \
4449
                  -Wl,--wrap,avcodec_encode_video       \
4450
                  -Wl,--wrap,avcodec_encode_video2      \
4451
                  -Wl,--wrap,avcodec_encode_subtitle    \
4452
                  -Wl,--wrap,sws_scale ||
4453 4454
    disable xmm_clobber_test

4455
echo "X{};" > $TMPV
4456
if test_ldflags -Wl,--version-script,$TMPV; then
4457
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4458 4459
    check_cc <<EOF && enable symver_asm_label
void ff_foo(void) __asm__ ("av_foo@VERSION");
4460
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4461 4462 4463 4464 4465 4466
EOF
    check_cc <<EOF && enable symver_gnu_asm
__asm__(".symver ff_foo,av_foo@VERSION");
void ff_foo(void) {}
EOF
fi
4467

4468 4469 4470 4471 4472 4473 4474 4475
if [ -z "$optflags" ]; then
    if enabled small; then
        optflags=$cflags_size
    elif enabled optimizations; then
        optflags=$cflags_speed
    else
        optflags=$cflags_noopt
    fi
4476
fi
4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487

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
4488
fi
4489 4490 4491 4492

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

4494 4495
enabled ftrapv && check_cflags -ftrapv

4496 4497 4498 4499
check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
int x;
EOF

4500

4501
if enabled icc; then
Måns Rullgård's avatar
Måns Rullgård committed
4502 4503 4504 4505
    # Just warnings, no remarks
    check_cflags -w1
    # -wd: Disable following warnings
    # 144, 167, 556: -Wno-pointer-sign
4506
    # 188: enumerated type mixed with another type
4507
    # 1292: attribute "foo" ignored
4508
    # 1419: external declaration in primary source file
Måns Rullgård's avatar
Måns Rullgård committed
4509
    # 10006: ignoring unknown option -fno-signed-zeros
4510
    # 10148: ignoring unknown option -Wno-parentheses
Måns Rullgård's avatar
Måns Rullgård committed
4511
    # 10156: ignoring option '-W'; no argument required
4512
    check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156
Måns Rullgård's avatar
Måns Rullgård committed
4513 4514 4515
    # 11030: Warning unknown option --as-needed
    # 10156: ignoring option '-export'; no argument required
    check_ldflags -wd10156,11030
4516 4517
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
    enable ebp_available
4518
    if enabled x86_32; then
4519
        icc_version=$($cc -dumpversion)
4520 4521
        test ${icc_version%%.*} -ge 11 &&
            check_cflags -falign-stack=maintain-16-byte ||
4522 4523
            disable aligned_stack
    fi
4524 4525
elif enabled ccc; then
    # disable some annoying warnings
4526 4527 4528 4529
    add_cflags -msg_disable bitnotint
    add_cflags -msg_disable mixfuncvoid
    add_cflags -msg_disable nonstandcast
    add_cflags -msg_disable unsupieee
4530
elif enabled gcc; then
4531
    check_optflags -fno-tree-vectorize
4532
    check_cflags -Werror=implicit-function-declaration
4533
    check_cflags -Werror=missing-prototypes
4534
    check_cflags -Werror=return-type
4535
    check_cflags -Werror=vla
4536
    enabled extra_warnings || check_cflags -Wno-maybe-uninitialized
4537 4538
elif enabled llvm_gcc; then
    check_cflags -mllvm -stack-alignment=16
4539
elif enabled clang; then
4540
    check_cflags -mllvm -stack-alignment=16
4541
    check_cflags -Qunused-arguments
4542 4543
    check_cflags -Werror=implicit-function-declaration
    check_cflags -Werror=missing-prototypes
4544
    check_cflags -Werror=return-type
Luca Barbato's avatar
Luca Barbato committed
4545 4546 4547
elif enabled cparser; then
    add_cflags -Wno-missing-variable-declarations
    add_cflags -Wno-empty-statement
4548 4549
elif enabled armcc; then
    # 2523: use of inline assembler is deprecated
4550 4551
    add_cflags -W${armcc_opt},--diag_suppress=2523
    add_cflags -W${armcc_opt},--diag_suppress=1207
4552
    add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4553
    add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4554 4555
    add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
    add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4556 4557
elif enabled tms470; then
    add_cflags -pds=824 -pds=837
4558 4559
elif enabled pathscale; then
    add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4560
elif enabled_any msvc icl; then
4561
    enabled x86_32 && disable aligned_stack
4562
    enabled_all x86_32 debug && add_cflags -Oy-
4563
    enabled debug && add_ldflags -debug
4564
    enable pragma_deprecated
4565
    if enabled icl; then
4566 4567 4568 4569
        # -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
4570 4571
        # icl will pass the inline asm tests but inline asm is currently
        # not supported (build will fail)
4572
        disabled inline_asm || warn "inline asm disabled due to issues with it in ICL"
4573 4574
        disable inline_asm
    fi
4575 4576
fi

Mans Rullgard's avatar
Mans Rullgard committed
4577
case $target_os in
4578 4579 4580
    osf1)
        enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
    ;;
Mans Rullgard's avatar
Mans Rullgard committed
4581 4582 4583 4584 4585
    plan9)
        add_cppflags -Dmain=plan9_main
    ;;
esac

4586
enable frame_thread_encoder
4587
enabled_any $THREADS_LIST      && enable threads
4588
enabled_any $ATOMICS_LIST      && enable atomics_native
4589

4590 4591
enabled threads && ! enabled pthreads && ! enabled atomics_native && die "non pthread threading without atomics not supported, try adding --enable-pthreads or --cpu=i486 or higher if you are on x86"

4592 4593
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }

4594
check_deps $CONFIG_LIST       \
4595
           $CONFIG_EXTRA      \
4596
           $HAVE_LIST         \
4597
           $ALL_COMPONENTS    \
4598

4599

4600
if test $target_os = "haiku"; then
4601 4602 4603 4604
    disable memalign
    disable posix_memalign
fi

4605
! enabled_any memalign posix_memalign aligned_malloc &&
4606 4607
    enabled_any $need_memalign && enable memalign_hack

4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634
# add_dep lib dep
# -> enable ${lib}_deps_${dep}
# -> add $dep to ${lib}_deps only once
add_dep() {
    lib=$1
    dep=$2
    enabled "${lib}_deps_${dep}" && return 0
    enable  "${lib}_deps_${dep}"
    prepend "${lib}_deps" $dep
}

# merge deps lib components
# merge all ${component}_deps into ${lib}_deps and ${lib}_deps_*
merge_deps() {
    lib=$1
    shift
    for comp in $*; do
        enabled $comp || continue
        eval "dep=\"\$${comp}_deps\""
        for d in $dep; do
            add_dep $lib $d
        done
    done
}

merge_deps libavfilter $FILTER_LIST

4635
echo "install prefix            $prefix"
Diego Biurrun's avatar
Diego Biurrun committed
4636 4637 4638
echo "source path               $source_path"
echo "C compiler                $cc"
echo "ARCH                      $arch ($cpu)"
4639 4640
if test "$build_suffix" != ""; then
    echo "build suffix              $build_suffix"
4641
fi
4642 4643 4644
if test "$progs_suffix" != ""; then
    echo "progs suffix              $progs_suffix"
fi
4645 4646 4647
if test "$extra_version" != ""; then
    echo "version string suffix     $extra_version"
fi
4648
echo "big-endian                ${bigendian-no}"
4649
echo "runtime cpu detection     ${runtime_cpudetect-no}"
4650
if enabled x86; then
4651
    echo "${yasmexe}                      ${yasm-no}"
4652
    echo "MMX enabled               ${mmx-no}"
4653
    echo "MMXEXT enabled            ${mmxext-no}"
4654
    echo "3DNow! enabled            ${amd3dnow-no}"
4655
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
4656
    echo "SSE enabled               ${sse-no}"
4657
    echo "SSSE3 enabled             ${ssse3-no}"
4658
    echo "AVX enabled               ${avx-no}"
4659
    echo "FMA4 enabled              ${fma4-no}"
4660
    echo "i686 features enabled     ${i686-no}"
4661
    echo "CMOV is fast              ${fast_cmov-no}"
4662 4663
    echo "EBX available             ${ebx_available-no}"
    echo "EBP available             ${ebp_available-no}"
4664
fi
4665
if enabled arm; then
4666 4667
    echo "ARMv5TE enabled           ${armv5te-no}"
    echo "ARMv6 enabled             ${armv6-no}"
4668
    echo "ARMv6T2 enabled           ${armv6t2-no}"
4669
    echo "VFP enabled               ${vfp-no}"
4670
    echo "NEON enabled              ${neon-no}"
4671
    echo "THUMB enabled             ${thumb-no}"
4672
fi
4673
if enabled mips; then
4674 4675 4676 4677
    echo "MIPS FPU enabled          ${mipsfpu-no}"
    echo "MIPS32R2 enabled          ${mips32r2-no}"
    echo "MIPS DSP R1 enabled       ${mipsdspr1-no}"
    echo "MIPS DSP R2 enabled       ${mipsdspr2-no}"
4678
fi
4679
if enabled ppc; then
4680
    echo "AltiVec enabled           ${altivec-no}"
4681
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
4682
    echo "dcbzl available           ${dcbzl-no}"
4683 4684 4685
fi
if enabled sparc; then
    echo "VIS enabled               ${vis-no}"
4686
fi
4687
echo "debug symbols             ${debug-no}"
4688
echo "strip symbols             ${stripping-no}"
4689
echo "optimize for size         ${small-no}"
4690
echo "optimizations             ${optimizations-no}"
4691 4692
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
4693
echo "postprocessing support    ${postproc-no}"
4694
echo "new filter support        ${avfilter-no}"
4695 4696
echo "network support           ${network-no}"
echo "threading support         ${thread_type-no}"
4697
echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4698
echo "SDL support               ${sdl-no}"
4699
echo "opencl enabled            ${opencl-no}"
4700
echo "libzvbi enabled           ${libzvbi-no}"
4701
echo "texi2html enabled         ${texi2html-no}"
4702
echo "perl enabled              ${perl-no}"
4703 4704
echo "pod2man enabled           ${pod2man-no}"
echo "makeinfo enabled          ${makeinfo-no}"
4705 4706
test -n "$random_seed" &&
    echo "random seed               ${random_seed}"
4707
echo
Fabrice Bellard's avatar
Fabrice Bellard committed
4708

4709 4710 4711 4712
echo "External libraries:"
print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
echo

4713
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4714
    echo "Enabled ${type}s:"
4715
    eval list=\$$(toupper $type)_LIST
4716
    print_enabled '_*' $list | print_3_columns
4717
    echo
4718 4719
done

4720
license="LGPL version 2.1 or later"
4721
if enabled nonfree; then
4722
    license="nonfree and unredistributable"
4723 4724 4725 4726
elif enabled gplv3; then
    license="GPL version 3 or later"
elif enabled lgplv3; then
    license="LGPL version 3 or later"
4727
elif enabled gpl; then
4728
    license="GPL version 2 or later"
4729 4730 4731
fi

echo "License: $license"
4732

4733
echo "Creating config.mak, config.h, and doc/config.texi..."
4734

4735
test -e Makefile || $ln_s "$source_path/Makefile" .
4736

4737 4738
enabled stripping || strip="echo skipping strip"

4739
config_files="$TMPH config.mak doc/config.texi"
4740

4741 4742
cat > config.mak <<EOF
# Automatically generated by configure - do not modify!
4743 4744
ifndef FFMPEG_CONFIG_MAK
FFMPEG_CONFIG_MAK=1
4745
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4746 4747 4748 4749 4750 4751
prefix=$prefix
LIBDIR=\$(DESTDIR)$libdir
SHLIBDIR=\$(DESTDIR)$shlibdir
INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir
4752
DOCDIR=\$(DESTDIR)$docdir
4753
MANDIR=\$(DESTDIR)$mandir
4754
SRC_PATH=$source_path
4755 4756 4757
ifndef MAIN_MAKEFILE
SRC_PATH:=\$(SRC_PATH:.%=..%)
endif
4758
CC_IDENT=$cc_ident
4759 4760
ARCH=$arch
CC=$cc
Mohamed Naufal's avatar
Mohamed Naufal committed
4761
CXX=$cxx
4762 4763 4764
AS=$as
LD=$ld
DEPCC=$dep_cc
4765 4766 4767
DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
DEPAS=$as
DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4768
YASM=$yasmexe
4769
DEPYASM=$yasmexe
4770
AR=$ar
4771 4772
ARFLAGS=$arflags
AR_O=$ar_o
4773
RANLIB=$ranlib
4774
STRIP=$strip
4775
CP=cp -p
4776 4777 4778
LN_S=$ln_s
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
Mohamed Naufal's avatar
Mohamed Naufal committed
4779
CXXFLAGS=$CXXFLAGS
4780
ASFLAGS=$ASFLAGS
4781
AS_C=$AS_C
4782
AS_O=$AS_O
4783
CC_C=$CC_C
4784
CC_E=$CC_E
4785
CC_O=$CC_O
4786
CXX_C=$CXX_C
Mohamed Naufal's avatar
Mohamed Naufal committed
4787
CXX_O=$CXX_O
4788
LD_O=$LD_O
4789 4790
LD_LIB=$LD_LIB
LD_PATH=$LD_PATH
4791
DLLTOOL=$dlltool
4792
LDFLAGS=$LDFLAGS
4793
SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
4794 4795
YASMFLAGS=$YASMFLAGS
BUILDSUF=$build_suffix
4796
PROGSSUF=$progs_suffix
4797 4798 4799 4800 4801 4802 4803 4804 4805
FULLNAME=$FULLNAME
LIBPREF=$LIBPREF
LIBSUF=$LIBSUF
LIBNAME=$LIBNAME
SLIBPREF=$SLIBPREF
SLIBSUF=$SLIBSUF
EXESUF=$EXESUF
EXTRA_VERSION=$extra_version
CCDEP=$CCDEP
Mohamed Naufal's avatar
Mohamed Naufal committed
4806
CXXDEP=$CXXDEP
4807
CCDEP_FLAGS=$CCDEP_FLAGS
4808
ASDEP=$ASDEP
4809
ASDEP_FLAGS=$ASDEP_FLAGS
4810 4811 4812
CC_DEPFLAGS=$CC_DEPFLAGS
AS_DEPFLAGS=$AS_DEPFLAGS
HOSTCC=$host_cc
4813
HOSTLD=$host_ld
4814
HOSTCFLAGS=$host_cflags
4815
HOSTCPPFLAGS=$host_cppflags
4816 4817 4818
HOSTEXESUF=$HOSTEXESUF
HOSTLDFLAGS=$host_ldflags
HOSTLIBS=$host_libs
4819 4820 4821 4822 4823
DEPHOSTCC=$host_cc
DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
HOSTCCDEP=$HOSTCCDEP
HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4824
HOSTCC_C=$HOSTCC_C
4825
HOSTCC_O=$HOSTCC_O
4826
HOSTLD_O=$HOSTLD_O
4827
TARGET_EXEC=$target_exec $target_exec_args
4828
TARGET_PATH=$target_path
4829
TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
4830 4831
LIBS-ffplay=$sdl_libs
CFLAGS-ffplay=$sdl_cflags
4832
ZLIB=$($ldflags_filter -lz)
4833 4834
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
EXTRALIBS=$extralibs
4835
COMPAT_OBJS=$compat_objs
4836
EXEOBJS=$exeobjs
4837
INSTALL=$install
4838 4839 4840 4841 4842 4843
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}
4844 4845 4846 4847
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}
4848
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4849
NOREDZONE_FLAGS=$noredzone_flags
4850
EOF
4851

4852
get_version(){
4853
    lcname=lib${1}
4854 4855
    name=$(toupper $lcname)
    file=$source_path/$lcname/version.h
4856
    eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4857
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4858 4859
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4860
    eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
4861 4862
}

4863
map 'get_version $v' $LIBRARY_LIST
4864

4865 4866
cat > $TMPH <<EOF
/* Automatically generated by configure - do not modify! */
4867 4868 4869
#ifndef FFMPEG_CONFIG_H
#define FFMPEG_CONFIG_H
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4870
#define FFMPEG_LICENSE "$(c_escape $license)"
4871
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4872
#define AVCONV_DATADIR "$(eval c_escape $datadir)"
4873
#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4874
#define av_restrict $_restrict
4875 4876
#define EXTERN_PREFIX "${extern_prefix}"
#define EXTERN_ASM ${extern_prefix}
4877
#define SLIBSUF "$SLIBSUF"
4878
#define HAVE_MMX2 HAVE_MMXEXT
4879
EOF
4880

4881 4882 4883
test -n "$assert_level" &&
    echo "#define ASSERT_LEVEL $assert_level" >>$TMPH

4884 4885 4886
test -n "$malloc_prefix" &&
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH

4887 4888 4889 4890 4891
if enabled yasm; then
    append config_files $TMPASM
    printf '' >$TMPASM
fi

4892 4893
enabled getenv || echo "#define getenv(x) NULL" >> $TMPH

4894

4895 4896 4897
mkdir -p doc
echo "@c auto-generated by configure" > doc/config.texi

4898 4899 4900
print_config ARCH_   "$config_files" $ARCH_LIST
print_config HAVE_   "$config_files" $HAVE_LIST
print_config CONFIG_ "$config_files" $CONFIG_LIST       \
Måns Rullgård's avatar
Måns Rullgård committed
4901
                                     $CONFIG_EXTRA      \
4902
                                     $ALL_COMPONENTS    \
4903

4904
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4905
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4906

Diego Biurrun's avatar
Diego Biurrun committed
4907
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4908
cp_if_changed $TMPH config.h
4909
touch .config
Nick Kurshev's avatar
Nick Kurshev committed
4910

4911 4912
enabled yasm && cp_if_changed $TMPASM config.asm

4913 4914 4915 4916 4917 4918
cat > $TMPH <<EOF
/* Generated by ffconf */
#ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H
EOF

4919
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4920 4921 4922 4923 4924

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

cp_if_changed $TMPH libavutil/avconfig.h

4925 4926 4927 4928
if test -n "$WARNINGS"; then
    printf "\n$WARNINGS"
    enabled fatal_warnings && exit 1
fi
4929

4930
# build pkg-config files
4931

4932
pkgconfig_generate(){
4933 4934 4935 4936 4937 4938 4939 4940
    name=$1
    shortname=${name#lib}${build_suffix}
    comment=$2
    version=$3
    libs=$4
    requires=$5
    enabled ${name#lib} || return 0
    mkdir -p $name
4941
    cat <<EOF > $name/$name${build_suffix}.pc
4942
prefix=$prefix
4943
exec_prefix=\${prefix}
4944
libdir=$libdir
4945
includedir=$incdir
4946

4947 4948 4949
Name: $name
Description: $comment
Version: $version
4950
Requires: $(enabled shared || echo $requires)
4951
Requires.private: $(enabled shared && echo $requires)
4952
Conflicts:
4953
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4954
Libs.private: $(enabled shared && echo $libs)
4955
Cflags: -I\${includedir}
4956
EOF
4957 4958 4959 4960

mkdir -p doc/examples/pc-uninstalled
includedir=${source_path}
[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4961
    cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4962 4963
prefix=
exec_prefix=
4964 4965
libdir=\${pcfiledir}/../../../$name
includedir=${includedir}
4966

4967 4968 4969 4970
Name: $name
Description: $comment
Version: $version
Requires: $requires
4971
Conflicts:
4972
Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs)
4973 4974
Cflags: -I\${includedir}
EOF
4975
}
4976

4977 4978 4979 4980 4981 4982 4983 4984
lavfi_libs="libavutil${build_suffix} = $LIBAVUTIL_VERSION"
enabled libavfilter_deps_avcodec    && prepend lavfi_libs "libavcodec${build_suffix} = $LIBAVCODEC_VERSION,"
enabled libavfilter_deps_avformat   && prepend lavfi_libs "libavformat${build_suffix} = $LIBAVFORMAT_VERSION,"
enabled libavfilter_deps_avresample && prepend lavfi_libs "libavresample${build_suffix} = $LIBAVRESAMPLE_VERSION,"
enabled libavfilter_deps_swscale    && prepend lavfi_libs "libswscale${build_suffix} = $LIBSWSCALE_VERSION,"
enabled libavfilter_deps_swresample && prepend lavfi_libs "libswresample${build_suffix} = $LIBSWRESAMPLE_VERSION,"
enabled libavfilter_deps_postproc   && prepend lavfi_libs "libpostproc${build_suffix} = $LIBPOSTPROC_VERSION,"
lavfi_libs=${lavfi_libs%, }
4985

4986 4987
lavd_libs="libavformat${build_suffix} = $LIBAVFORMAT_VERSION"
enabled lavfi_indev && prepend lavd_libs "libavfilter${build_suffix} = $LIBAVFILTER_VERSION,"
4988

4989 4990 4991 4992 4993 4994 4995 4996 4997
pkgconfig_generate libavutil     "FFmpeg utility library"               "$LIBAVUTIL_VERSION"     "$LIBM"
pkgconfig_generate libavcodec    "FFmpeg codec library"                 "$LIBAVCODEC_VERSION"    "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
pkgconfig_generate libavformat   "FFmpeg container format library"      "$LIBAVFORMAT_VERSION"   "$extralibs" "libavcodec${build_suffix} = $LIBAVCODEC_VERSION"
pkgconfig_generate libavdevice   "FFmpeg device handling library"       "$LIBAVDEVICE_VERSION"   "$extralibs" "$lavd_libs"
pkgconfig_generate libavfilter   "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION"   "$extralibs" "$lavfi_libs"
pkgconfig_generate libpostproc   "FFmpeg postprocessing library"        "$LIBPOSTPROC_VERSION"   ""           "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
pkgconfig_generate libavresample "Libav audio resampling library"       "$LIBAVRESAMPLE_VERSION" "$extralibs" "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
pkgconfig_generate libswscale    "FFmpeg image rescaling library"       "$LIBSWSCALE_VERSION"    "$LIBM"      "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
pkgconfig_generate libswresample "FFmpeg audio resampling library"      "$LIBSWRESAMPLE_VERSION" "$LIBM"      "libavutil${build_suffix} = $LIBAVUTIL_VERSION"
4998 4999 5000 5001

fix_ffmpeg_remote(){
    git_remote_from=$1
    git_remote_to=$2
5002
    fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020
    if [ "$fixme_remote" != "" ]; then
        echolog "
Outdated domain in git config, the official domain for ffmpeg git is since
November 2011, source.ffmpeg.org, both the old and the new point to the same
repository and server. To update it enter the following commands:
"
        for remote in $fixme_remote; do
            echolog "git remote set-url $remote $git_remote_to"
        done
    fi
}

if test -f "$source_path/.git/config"; then
    remote_from=git.videolan.org
    remote_to=source.ffmpeg.org
    fix_ffmpeg_remote git@$remote_from:ffmpeg   git@$remote_to:ffmpeg
    fix_ffmpeg_remote git://$remote_from/ffmpeg git://$remote_to/ffmpeg
fi