configure 147 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 86 87 88 89
  --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]

90
Licensing options:
91 92 93 94 95
  --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]
96 97 98 99 100

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

106 107
Program options:
  --disable-programs       do not build command line programs
108 109 110 111
  --disable-ffmpeg         disable ffmpeg build
  --disable-ffplay         disable ffplay build
  --disable-ffprobe        disable ffprobe build
  --disable-ffserver       disable ffserver build
112

113
Documentation options:
114
  --disable-doc            do not build documentation
115 116 117 118 119 120
  --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:
121 122 123
  --disable-avdevice       disable libavdevice build
  --disable-avcodec        disable libavcodec build
  --disable-avformat       disable libavformat build
124
  --disable-avutil         disable libavutil build
Michael Niedermayer's avatar
Michael Niedermayer committed
125
  --disable-swresample     disable libswresample build
126
  --disable-swscale        disable libswscale build
127
  --disable-postproc       disable libpostproc build
128
  --disable-avfilter       disable libavfilter build
129
  --enable-avresample      enable libavresample build [no]
130
  --disable-pthreads       disable pthreads [auto]
131
  --disable-w32threads     disable Win32 threads [auto]
132
  --disable-os2threads     disable OS/2 threads [auto]
133
  --disable-network        disable network support [no]
134
  --disable-dct            disable DCT code
135
  --disable-dwt            disable DWT code
136
  --disable-error-resilience disable error resilience code
137
  --disable-lsp            disable LSP code
138
  --disable-lzo            disable LZO decoder code
139 140
  --disable-mdct           disable MDCT code
  --disable-rdft           disable RDFT code
141
  --disable-fft            disable FFT code
142 143

Hardware accelerators:
144
  --disable-dxva2          disable DXVA2 code [autodetect]
145
  --disable-vaapi          disable VAAPI code [autodetect]
146
  --enable-vda             enable VDA code
147
  --disable-vdpau          disable VDPAU code [autodetect]
148 149

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

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

Optimization options (experts only):
295
  --disable-asm            disable all assembler optimizations
296 297 298 299
  --disable-altivec        disable AltiVec optimizations
  --disable-amd3dnow       disable 3DNow! optimizations
  --disable-amd3dnowext    disable 3DNow! extended optimizations
  --disable-mmx            disable MMX optimizations
300
  --disable-mmxext         disable MMXEXT optimizations
301
  --disable-sse            disable SSE optimizations
302 303
  --disable-sse2           disable SSE2 optimizations
  --disable-sse3           disable SSE3 optimizations
304
  --disable-ssse3          disable SSSE3 optimizations
305 306
  --disable-sse4           disable SSE4 optimizations
  --disable-sse42          disable SSE4.2 optimizations
307
  --disable-avx            disable AVX optimizations
308
  --disable-fma4           disable FMA4 optimizations
309 310 311
  --disable-armv5te        disable armv5te optimizations
  --disable-armv6          disable armv6 optimizations
  --disable-armv6t2        disable armv6t2 optimizations
312
  --disable-vfp            disable VFP optimizations
313
  --disable-neon           disable NEON optimizations
314
  --disable-vis            disable VIS optimizations
315
  --disable-inline-asm     disable use of inline assembler
316
  --disable-yasm           disable use of yasm assembler
317 318 319 320
  --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
321
  --disable-fast-unaligned consider unaligned accesses slow
322

323
Developer options (useful when working on FFmpeg itself):
324 325 326 327
  --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
328
  --disable-stripping      disable stripping of executables and shared libraries
329
  --assert-level=level     0(default), 1 or 2, amount of assertion testing,
330
                           2 causes a slowdown at runtime.
331
  --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data
332 333 334
  --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
335
  --enable-ftrapv          Trap arithmetic overflows
336 337
  --samples=PATH           location of test samples for FATE, if not set use
                           \$FATE_SAMPLES at make invocation time.
338 339
  --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only;
                           should be used only for debugging purposes)
340 341 342 343 344 345 346 347
  --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
348 349 350

NOTE: Object files are built at the place where configure is launched.
EOF
351
  exit 0
352
}
353

354 355
quotes='""'

356
log(){
357
    echo "$@" >> $logfile
358 359
}

360
log_file(){
Måns Rullgård's avatar
Måns Rullgård committed
361
    log BEGIN $1
362
    pr -n -t $1 >> $logfile
Måns Rullgård's avatar
Måns Rullgård committed
363 364 365
    log END $1
}

366
echolog(){
Måns Rullgård's avatar
Måns Rullgård committed
367
    log "$@"
368
    echo "$@"
369 370
}

371 372 373 374 375
warn(){
    log "WARNING: $*"
    WARNINGS="${WARNINGS}WARNING: $*\n"
}

376 377 378
die(){
    echolog "$@"
    cat <<EOF
379

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

398
# Avoid locale weirdness, besides we really just want to translate ASCII.
399
toupper(){
400
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
401 402
}

403
tolower(){
404
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
405 406
}

407 408 409 410
c_escape(){
    echo "$*" | sed 's/["\\]/\\\0/g'
}

411 412
sh_quote(){
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
413
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
414 415 416
    echo "$v"
}

417 418 419 420
cleanws(){
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
}

421 422 423 424
filter(){
    pat=$1
    shift
    for v; do
425
        eval "case $v in $pat) echo $v ;; esac"
426 427 428
    done
}

429 430 431 432 433 434 435 436
filter_out(){
    pat=$1
    shift
    for v; do
        eval "case $v in $pat) ;; *) echo $v ;; esac"
    done
}

437 438 439
map(){
    m=$1
    shift
440
    for v; do eval $m; done
441 442
}

443 444 445 446 447 448
add_suffix(){
    suffix=$1
    shift
    for v; do echo ${v}${suffix}; done
}

449 450 451 452 453 454 455 456
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

457 458 459 460 461 462 463 464
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

465 466 467 468
sanitize_var_name(){
    echo $@ | sed 's/[^A-Za-z0-9_]/_/g'
}

469 470 471
set_safe(){
    var=$1
    shift
472
    eval $(sanitize_var_name "$var")='$*'
473 474 475
}

get_safe(){
476
    eval echo \$$(sanitize_var_name "$1")
477 478
}

479
pushvar(){
480 481 482 483
    for pvar in $*; do
        eval level=\${${pvar}_level:=0}
        eval ${pvar}_${level}="\$$pvar"
        eval ${pvar}_level=$(($level+1))
484 485 486 487
    done
}

popvar(){
488 489
    for pvar in $*; do
        eval level=\${${pvar}_level:-0}
490 491
        test $level = 0 && continue
        eval level=$(($level-1))
492 493 494
        eval $pvar="\${${pvar}_${level}}"
        eval ${pvar}_level=$level
        eval unset ${pvar}_${level}
495 496 497
    done
}

498 499 500 501 502 503 504 505
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

506 507 508 509 510 511 512 513
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

514
enable_safe(){
515 516 517
    for var; do
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
518 519 520
}

disable_safe(){
521 522 523
    for var; do
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
524 525
}

526 527 528 529
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
530 531
        eval sgs="\$${var}_suggest"
        pushvar var sgs
532
        enable_deep $sel
533 534
        popvar sgs
        enable_deep_weak $sgs
535 536 537 538 539 540 541 542 543
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

544
enable_deep_weak(){
545 546 547 548 549 550 551
    for var; do
        disabled $var && continue
        pushvar var
        do_enable_deep $var
        popvar var
        enable_weak $var
    done
552 553
}

554
enabled(){
555 556
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
557 558
}

559
disabled(){
560 561
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
562 563
}

564 565 566 567 568 569
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

570 571 572 573 574 575
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

576 577 578 579 580 581
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

582 583 584 585
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
586
    return 1
587 588
}

589 590
set_default(){
    for opt; do
591
        eval : \${$opt:=\$${opt}_default}
592 593 594
    done
}

595 596 597 598 599 600 601 602 603
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

604
do_check_deps(){
605
    for cfg; do
606
        cfg="${cfg#!}"
607 608 609
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking
610
        append allopts $cfg
611

612 613
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
614
        eval dep_sel="\$${cfg}_select"
615
        eval dep_sgs="\$${cfg}_suggest"
616 617
        eval dep_ifa="\$${cfg}_if"
        eval dep_ifn="\$${cfg}_if_any"
618

619
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
620
        do_check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
621
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
622

623 624
        [ -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
625 626
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
627
        disabled_any $dep_sel && disable $cfg
628

629
        if enabled $cfg; then
630
            enable_deep $dep_sel
631
            enable_deep_weak $dep_sgs
632 633
        fi

634
        disable ${cfg}_checking
635 636 637
    done
}

638 639 640 641 642 643 644 645 646 647 648 649
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
}

650 651
print_config(){
    pfx=$1
652 653
    files=$2
    shift 2
654 655 656 657 658 659 660 661 662 663 664 665 666 667
    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\$/) {
668
                    n = -v ? \"\" : \"!\";
669
                    printf(\"%s%s=yes\\n\", n, c) >>file;
670 671 672 673 674 675
                } else if (file ~ /\\.texi\$/) {
                    pre = -v ? \"\" : \"@c \";
                    yesno = \$2;
                    c2 = tolower(c);
                    gsub(/_/, \"-\", c2);
                    printf(\"%s@set %s %s\\n\", pre, c2, yesno) >>file;
676 677 678
                }
            }
        }"
679 680
}

681 682 683 684
print_enabled(){
    suf=$1
    shift
    for v; do
685
        enabled $v && printf "%s\n" ${v%$suf};
686 687 688
    done
}

689 690 691 692 693 694
append(){
    var=$1
    shift
    eval "$var=\"\$$var $*\""
}

695 696 697 698 699 700
prepend(){
    var=$1
    shift
    eval "$var=\"$* \$$var\""
}

701
add_cppflags(){
702
    append CPPFLAGS "$@"
703 704
}

705
add_cflags(){
706
    append CFLAGS $($cflags_filter "$@")
707 708
}

Mohamed Naufal's avatar
Mohamed Naufal committed
709
add_cxxflags(){
710
    append CXXFLAGS $($cflags_filter "$@")
Mohamed Naufal's avatar
Mohamed Naufal committed
711 712
}

713
add_asflags(){
714
    append ASFLAGS $($asflags_filter "$@")
715 716
}

717
add_ldflags(){
718
    append LDFLAGS $($ldflags_filter "$@")
719 720 721
}

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

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

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

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

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

743
check_cmd(){
744
    log "$@"
745
    "$@" >> $logfile 2>&1
746 747
}

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

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

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

Mohamed Naufal's avatar
Mohamed Naufal committed
763 764 765 766
check_cxx(){
    log check_cxx "$@"
    cat > $TMPCPP
    log_file $TMPCPP
767
    check_cmd $cxx $CPPFLAGS $CFLAGS $CXXFLAGS "$@" $CXX_C -o $TMPO $TMPCPP
Mohamed Naufal's avatar
Mohamed Naufal committed
768 769
}

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

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

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

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

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

Loren Merritt's avatar
Loren Merritt committed
805 806 807 808 809
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
810
    check_cmd $yasmexe $YASMFLAGS -Werror "$@" -o $TMPO $TMPS
Loren Merritt's avatar
Loren Merritt committed
811 812
}

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

817
check_ld(){
818
    log check_ld "$@"
Mohamed Naufal's avatar
Mohamed Naufal committed
819 820
    type=$1
    shift 1
Jonas Bechtel's avatar
Jonas Bechtel committed
821 822
    flags=$(filter_out '-l*|*.so' $@)
    libs=$(filter '-l*|*.so' $@)
823
    check_$type $($cflags_filter $flags) || return
824 825
    flags=$($ldflags_filter $flags)
    libs=$($ldflags_filter $libs)
826
    check_cmd $ld $LDFLAGS $flags $(ld_o $TMPE) $TMPO $libs $extralibs
827 828
}

829 830 831 832 833 834 835 836 837 838 839 840 841 842
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 "$@"
}

843 844
check_cppflags(){
    log check_cppflags "$@"
845
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
846 847 848 849
int x;
EOF
}

850
check_cflags(){
851
    log check_cflags "$@"
852
    set -- $($cflags_filter "$@")
853
    check_cc "$@" <<EOF && append CFLAGS "$@"
854 855 856 857
int x;
EOF
}

Mohamed Naufal's avatar
Mohamed Naufal committed
858 859
check_cxxflags(){
    log check_cxxflags "$@"
860
    set -- $($cflags_filter "$@")
Mohamed Naufal's avatar
Mohamed Naufal committed
861 862 863 864 865
    check_cxx "$@" <<EOF && append CXXFLAGS "$@"
int x;
EOF
}

866 867
test_ldflags(){
    log test_ldflags "$@"
Mohamed Naufal's avatar
Mohamed Naufal committed
868
    check_ld "cc" "$@" <<EOF
869
int main(void){ return 0; }
870 871 872
EOF
}

873 874 875 876 877
check_ldflags(){
    log check_ldflags "$@"
    test_ldflags "$@" && add_ldflags "$@"
}

878
check_header(){
879
    log check_header "$@"
880 881
    header=$1
    shift
882 883
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
884 885 886 887 888 889
#include <$header>
int x;
EOF
}

check_func(){
890
    log check_func "$@"
891 892
    func=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
893
    disable $func
Mohamed Naufal's avatar
Mohamed Naufal committed
894
    check_ld "cc" "$@" <<EOF && enable $func
895
extern int $func();
896
int main(void){ $func(); }
897 898 899
EOF
}

900
check_mathfunc(){
901
    log check_mathfunc "$@"
902
    func=$1
903 904 905
    narg=$2
    shift 2
    test $narg = 2 && args="f, g" || args="f"
906 907 908
    disable $func
    check_ld "cc" "$@" <<EOF && enable $func
#include <math.h>
909
float foo(float f, float g) { return $func($args); }
910 911 912 913
int main(void){ return (int) foo; }
EOF
}

914 915
check_func_headers(){
    log check_func_headers "$@"
916
    headers=$1
917
    funcs=$2
918
    shift 2
919 920 921 922 923 924 925 926
    {
        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
927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946
    } | 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
947 948
}

949 950 951 952
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
953
    shift 2
954
    check_cpp "$@" <<EOF
955 956 957 958 959 960 961
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

962 963 964 965 966
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
967
    check_header $header && check_func $func "$@" && add_extralibs "$@"
968 969
}

970 971 972
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
973
    funcs="$2"
974
    shift 2
975
    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
976 977
}

Mohamed Naufal's avatar
Mohamed Naufal committed
978 979 980 981 982 983 984 985
check_lib_cpp(){
    log check_lib_cpp "$@"
    headers="$1"
    classes="$2"
    shift 2
    check_class_headers_cpp "$headers" "$classes" "$@" && add_extralibs "$@"
}

986 987 988 989 990 991
check_pkg_config(){
    log check_pkg_config "$@"
    pkg="$1"
    headers="$2"
    funcs="$3"
    shift 3
992
    $pkg_config --exists $pkg 2>/dev/null || return
993 994 995 996 997 998 999
    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
}

1000
check_exec(){
Mohamed Naufal's avatar
Mohamed Naufal committed
1001
    check_ld "cc" "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
1002 1003
}

1004
check_exec_crash(){
1005
    code=$(cat)
1006 1007 1008 1009 1010 1011 1012

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

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

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

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

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

1064 1065 1066 1067 1068 1069
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
1070 1071
}

1072 1073 1074 1075 1076 1077 1078 1079
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
1080 1081 1082 1083 1084 1085 1086 1087
require_cpp(){
    name="$1"
    headers="$2"
    classes="$3"
    shift 3
    check_lib_cpp "$headers" "$classes" "$@" || die "ERROR: $name not found"
}

1088 1089 1090 1091 1092 1093 1094
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)
}

1095 1096 1097 1098
hostcc_o(){
    eval printf '%s\\n' $HOSTCC_O
}

1099 1100 1101 1102
check_host_cc(){
    log check_host_cc "$@"
    cat > $TMPC
    log_file $TMPC
1103
    check_cmd $host_cc $host_cflags "$@" $HOSTCC_C $(hostcc_o $TMPO) $TMPC
1104 1105
}

1106 1107 1108 1109 1110 1111 1112
check_host_cppflags(){
    log check_host_cppflags "$@"
    check_host_cc "$@" <<EOF && append host_cppflags "$@"
int x;
EOF
}

1113 1114
check_host_cflags(){
    log check_host_cflags "$@"
1115
    set -- $($host_cflags_filter "$@")
1116 1117 1118 1119 1120
    check_host_cc "$@" <<EOF && append host_cflags "$@"
int x;
EOF
}

1121 1122 1123 1124 1125 1126
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

1127
cp_if_changed(){
1128 1129
    cmp -s "$1" "$2" && echo "$2 is unchanged" && return
    mkdir -p "$(dirname $2)"
Mans Rullgard's avatar
Mans Rullgard committed
1130
    $cp_f "$1" "$2"
1131 1132
}

1133 1134 1135
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

1136 1137 1138 1139 1140
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
Vitor Sessak's avatar
Vitor Sessak committed
1141
    filters
1142
    hwaccels
1143
    indevs
1144
    muxers
1145
    outdevs
1146 1147 1148 1149
    parsers
    protocols
"

1150 1151 1152
EXTERNAL_LIBRARY_LIST="
    avisynth
    bzlib
1153 1154
    crystalhd
    fontconfig
1155 1156
    frei0r
    gnutls
1157
    iconv
1158 1159 1160 1161
    libaacplus
    libass
    libbluray
    libcaca
1162
    libcdio
1163
    libcelt
1164 1165 1166
    libdc1394
    libfaac
    libfdk_aac
1167
    libflite
1168 1169
    libfreetype
    libgsm
1170
    libiec61883
1171
    libilbc
1172
    libmodplug
1173
    libmp3lame
1174
    libnut
1175 1176 1177 1178 1179 1180
    libopencore_amrnb
    libopencore_amrwb
    libopencv
    libopenjpeg
    libopus
    libpulse
1181
    libquvi
1182 1183
    librtmp
    libschroedinger
1184
    libshine
1185
    libsoxr
1186
    libspeex
1187
    libstagefright_h264
1188
    libtheora
1189 1190 1191
    libtwolame
    libutvideo
    libv4l2
1192
    libvidstab
1193 1194 1195 1196 1197 1198 1199
    libvo_aacenc
    libvo_amrwbenc
    libvorbis
    libvpx
    libx264
    libxavs
    libxvid
1200
    libzmq
1201
    openal
1202
    opencl
1203 1204 1205 1206 1207
    openssl
    x11grab
    zlib
"

1208 1209 1210 1211 1212 1213 1214 1215
DOCUMENT_LIST="
    doc
    htmlpages
    manpages
    podpages
    txtpages
"

1216 1217 1218 1219 1220 1221
HWACCEL_LIST="
    dxva2
    vaapi
    vda
    vdpau
"
1222

1223 1224 1225 1226 1227 1228 1229
LIBRARY_LIST="
    avcodec
    avdevice
    avfilter
    avformat
    avresample
    avutil
1230
    postproc
1231
    swresample
1232 1233 1234
    swscale
"

1235
PROGRAM_LIST="
1236 1237 1238
    ffplay
    ffprobe
    ffserver
1239 1240 1241
    ffmpeg
"

1242 1243
CONFIG_LIST="
    $COMPONENT_LIST
1244
    $DOCUMENT_LIST
1245
    $EXTERNAL_LIBRARY_LIST
1246
    $HWACCEL_LIST
1247
    $LIBRARY_LIST
1248
    $PROGRAM_LIST
1249
    dct
1250
    dwt
1251
    error_resilience
1252
    fast_unaligned
1253
    fft
1254
    ftrapv
1255
    gpl
1256
    gray
Aurelien Jacobs's avatar
Aurelien Jacobs committed
1257
    hardcoded_tables
1258
    incompatible_fork_abi
1259
    lsp
1260
    lzo
1261
    mdct
1262
    memalign_hack
1263
    memory_poisoning
1264
    network
1265
    nonfree
1266
    pic
1267
    rdft
1268
    runtime_cpudetect
1269
    safe_bitstream_reader
1270
    shared
1271
    small
1272
    sram
1273
    static
1274
    swscale_alpha
1275
    thumb
1276
    version3
1277
    xmm_clobber_test
1278
"
1279

1280 1281 1282
THREADS_LIST='
    pthreads
    w32threads
1283
    os2threads
1284 1285
'

1286 1287 1288
ATOMICS_LIST='
    atomics_gcc
    atomics_suncc
1289
    atomics_win32
1290 1291
'

1292
ARCH_LIST='
1293
    aarch64
1294
    alpha
1295
    arm
1296 1297 1298
    avr32
    avr32_ap
    avr32_uc
1299 1300 1301 1302
    bfin
    ia64
    m68k
    mips
1303
    mips64
1304
    parisc
1305
    ppc
1306
    ppc64
1307 1308 1309 1310
    s390
    sh4
    sparc
    sparc64
1311 1312
    tilegx
    tilepro
1313
    tomi
1314 1315 1316 1317 1318
    x86
    x86_32
    x86_64
'

1319 1320 1321 1322 1323
ARCH_EXT_LIST_ARM='
    armv5te
    armv6
    armv6t2
    neon
1324
    vfp
1325 1326 1327
    vfpv3
'

1328
ARCH_EXT_LIST_X86='
1329
    amd3dnow
1330
    amd3dnowext
1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343
    avx
    fma4
    mmx
    mmxext
    sse
    sse2
    sse3
    sse4
    sse42
    ssse3
'

ARCH_EXT_LIST="
1344
    $ARCH_EXT_LIST_ARM
1345 1346
    $ARCH_EXT_LIST_X86
    altivec
1347
    ppc4xx
1348
    vis
1349 1350 1351 1352
    mipsfpu
    mips32r2
    mipsdspr1
    mipsdspr2
1353
"
1354

1355 1356 1357 1358 1359 1360
HAVE_LIST_CMDLINE='
    inline_asm
    symver
    yasm
'

1361 1362
HAVE_LIST_PUB='
    bigendian
1363
    fast_unaligned
1364
    incompatible_fork_abi
1365 1366
'

1367
MATH_FUNCS="
1368 1369
    atanf
    atan2f
1370
    cbrt
1371
    cbrtf
1372
    cosf
1373 1374
    exp2
    exp2f
1375
    expf
1376 1377
    isinf
    isnan
1378
    ldexpf
1379 1380 1381 1382
    llrint
    llrintf
    log2
    log2f
1383
    log10f
1384 1385
    lrint
    lrintf
1386
    powf
1387 1388 1389
    rint
    round
    roundf
1390
    sinf
1391 1392 1393 1394
    trunc
    truncf
"

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

Diego Biurrun's avatar
Diego Biurrun committed
1540
# options emitted with CONFIG_ prefix but not available on the command line
1541
CONFIG_EXTRA="
1542
    aandcttables
1543
    ac3dsp
1544
    audio_frame_queue
1545
    dsputil
1546
    frame_thread_encoder
1547
    gcrypt
1548
    golomb
1549
    gplv3
1550 1551 1552
    h264chroma
    h264dsp
    h264pred
1553
    h264qpel
1554
    hpeldsp
1555
    huffman
1556
    lgplv3
1557
    lpc
1558
    mpegaudio
1559
    mpegaudiodsp
1560
    mpegvideo
1561
    mpegvideoenc
1562
    nettle
1563
    rangecoder
1564
    rtpdec
1565
    rtpenc_chain
1566
    sinewin
1567
    videodsp
1568
    vp3dsp
1569 1570
"

1571
CMDLINE_SELECT="
1572
    $ARCH_EXT_LIST
1573
    $CONFIG_LIST
1574
    $HAVE_LIST_CMDLINE
1575
    $THREADS_LIST
1576
    asm
1577
    cross_compile
1578 1579
    debug
    extra_warnings
1580
    logging
1581
    lto
1582
    optimizations
1583
    stripping
1584
"
1585 1586

PATHS_LIST='
1587
    bindir
1588
    datadir
1589 1590 1591 1592 1593
    incdir
    libdir
    mandir
    prefix
    shlibdir
1594 1595 1596 1597
'

CMDLINE_SET="
    $PATHS_LIST
1598
    ar
1599
    arch
1600
    as
1601
    assert_level
1602 1603 1604 1605
    build_suffix
    cc
    cpu
    cross_prefix
Mohamed Naufal's avatar
Mohamed Naufal committed
1606
    cxx
1607
    dep_cc
1608
    extra_version
1609 1610
    host_cc
    host_cflags
1611
    host_ld
1612 1613
    host_ldflags
    host_libs
1614
    host_os
1615
    install
1616
    ld
1617
    logfile
1618
    malloc_prefix
1619
    nm
1620
    optflags
1621
    pkg_config
1622
    progs_suffix
1623
    random_seed
Måns Rullgård's avatar
Måns Rullgård committed
1624
    samples
1625
    strip
1626 1627
    sysinclude
    sysroot
1628
    target_exec
1629
    target_os
1630
    target_path
1631
    target_samples
1632
    toolchain
1633
    valgrind
1634
    yasmexe
1635
"
1636

1637 1638
CMDLINE_APPEND="
    extra_cflags
Mohamed Naufal's avatar
Mohamed Naufal committed
1639
    extra_cxxflags
1640
    host_cppflags
1641 1642
"

1643 1644
# code dependency declarations

1645
# architecture extensions
1646

1647 1648
armv5te_deps="arm"
armv6_deps="arm"
1649
armv6t2_deps="arm"
1650
neon_deps="arm"
1651 1652
vfp_deps="arm"
vfpv3_deps="vfp"
1653

1654 1655
map 'eval ${v}_inline_deps=inline_asm' $ARCH_EXT_LIST_ARM

1656 1657 1658 1659
mipsfpu_deps="mips"
mips32r2_deps="mips"
mipsdspr1_deps="mips"
mipsdspr2_deps="mips"
1660 1661 1662 1663 1664 1665

altivec_deps="ppc"
ppc4xx_deps="ppc"

vis_deps="sparc"

1666
x86_64_suggest="fast_cmov i686"
1667

1668 1669
amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
1670
mmx_deps="x86"
1671
mmxext_deps="mmx"
1672 1673 1674 1675 1676 1677 1678
sse_deps="mmxext"
sse2_deps="sse"
sse3_deps="sse2"
ssse3_deps="sse3"
sse4_deps="ssse3"
sse42_deps="sse4"
avx_deps="sse42"
1679
fma4_deps="avx"
1680

1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691
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

1692
aligned_stack_if_any="ppc x86"
1693
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1694 1695
fast_clz_if_any="alpha avr32 mips ppc x86"
fast_unaligned_if_any="ppc x86"
1696

1697
inline_asm_deps="!tms470"
1698
need_memalign="altivec neon sse"
1699

1700 1701
symver_if_any="symver_asm_label symver_gnu_asm"

1702 1703
log2_deps="!msvcrt"

1704
# subsystems
1705
dct_select="rdft"
1706
error_resilience_select="dsputil"
1707
frame_thread_encoder_deps="encoders threads"
1708
lpc_select="dsputil"
1709 1710
mdct_select="fft"
rdft_select="fft"
1711
mpegaudio_select="mpegaudiodsp"
1712
mpegaudiodsp_select="dct"
1713
mpegvideo_select="dsputil h264chroma hpeldsp videodsp"
1714
mpegvideoenc_select="mpegvideo"
1715

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

1899
# hardware accelerators
1900
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1901
dxva2_deps="dxva2api_h"
1902
vaapi_deps="va_va_h"
1903
vda_deps="VideoDecodeAcceleration_VDADecoder_h pthreads"
1904
vda_extralibs="-framework CoreFoundation -framework VideoDecodeAcceleration -framework QuartzCore"
1905 1906
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"

1907 1908 1909 1910
h263_vaapi_hwaccel_deps="vaapi"
h263_vaapi_hwaccel_select="h263_decoder"
h263_vdpau_hwaccel_deps="vdpau"
h263_vdpau_hwaccel_select="h263_decoder"
1911
h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1912 1913
h264_dxva2_hwaccel_deps="dxva2"
h264_dxva2_hwaccel_select="h264_decoder"
1914 1915
h264_vaapi_hwaccel_deps="vaapi"
h264_vaapi_hwaccel_select="h264_decoder"
1916 1917
h264_vda_decoder_deps="vda"
h264_vda_decoder_select="h264_decoder"
1918 1919 1920 1921 1922 1923 1924
h264_vda_hwaccel_deps="vda"
h264_vda_hwaccel_select="h264_decoder"
h264_vdpau_decoder_deps="vdpau"
h264_vdpau_decoder_select="h264_decoder"
h264_vdpau_hwaccel_deps="vdpau"
h264_vdpau_hwaccel_select="h264_decoder"
mpeg_vdpau_decoder_deps="vdpau"
1925
mpeg_vdpau_decoder_select="mpeg2video_decoder"
1926 1927 1928 1929
mpeg1_vdpau_decoder_deps="vdpau"
mpeg1_vdpau_decoder_select="mpeg1video_decoder"
mpeg1_vdpau_hwaccel_deps="vdpau"
mpeg1_vdpau_hwaccel_select="mpeg1video_decoder"
1930
mpeg2_crystalhd_decoder_select="crystalhd"
1931 1932
mpeg2_dxva2_hwaccel_deps="dxva2"
mpeg2_dxva2_hwaccel_select="mpeg2video_decoder"
1933 1934 1935 1936
mpeg2_vaapi_hwaccel_deps="vaapi"
mpeg2_vaapi_hwaccel_select="mpeg2video_decoder"
mpeg2_vdpau_hwaccel_deps="vdpau"
mpeg2_vdpau_hwaccel_select="mpeg2video_decoder"
1937
mpeg4_crystalhd_decoder_select="crystalhd"
1938 1939 1940 1941 1942 1943
mpeg4_vaapi_hwaccel_deps="vaapi"
mpeg4_vaapi_hwaccel_select="mpeg4_decoder"
mpeg4_vdpau_decoder_deps="vdpau"
mpeg4_vdpau_decoder_select="mpeg4_decoder"
mpeg4_vdpau_hwaccel_deps="vdpau"
mpeg4_vdpau_hwaccel_select="mpeg4_decoder"
1944 1945
msmpeg4_crystalhd_decoder_select="crystalhd"
vc1_crystalhd_decoder_select="crystalhd"
1946 1947
vc1_dxva2_hwaccel_deps="dxva2"
vc1_dxva2_hwaccel_select="vc1_decoder"
1948 1949 1950 1951 1952 1953
vc1_vaapi_hwaccel_deps="vaapi"
vc1_vaapi_hwaccel_select="vc1_decoder"
vc1_vdpau_decoder_deps="vdpau"
vc1_vdpau_decoder_select="vc1_decoder"
vc1_vdpau_hwaccel_deps="vdpau"
vc1_vdpau_hwaccel_select="vc1_decoder"
1954
wmv3_crystalhd_decoder_select="crystalhd"
1955 1956 1957
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1958
wmv3_vdpau_hwaccel_select="vc1_vdpau_hwaccel"
1959

1960
# parsers
1961
h264_parser_select="golomb h264chroma h264dsp h264pred h264qpel videodsp"
1962 1963
mpeg4video_parser_select="error_resilience mpegvideo"
mpegvideo_parser_select="error_resilience mpegvideo"
1964
vc1_parser_select="mpegvideo"
1965

1966
# external libraries
tipok's avatar
tipok committed
1967
libaacplus_encoder_deps="libaacplus"
1968
libcelt_decoder_deps="libcelt"
1969
libfaac_encoder_deps="libfaac"
1970
libfaac_encoder_select="audio_frame_queue"
1971
libfdk_aac_encoder_deps="libfdk_aac"
1972
libfdk_aac_encoder_select="audio_frame_queue"
1973 1974
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
1975 1976
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
1977 1978
libilbc_decoder_deps="libilbc"
libilbc_encoder_deps="libilbc"
1979
libmodplug_demuxer_deps="libmodplug"
1980
libmp3lame_encoder_deps="libmp3lame"
1981
libmp3lame_encoder_select="audio_frame_queue"
1982 1983
libopencore_amrnb_decoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_deps="libopencore_amrnb"
1984
libopencore_amrnb_encoder_select="audio_frame_queue"
1985
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1986
libopenjpeg_decoder_deps="libopenjpeg"
1987
libopenjpeg_encoder_deps="libopenjpeg"
1988
libopus_decoder_deps="libopus"
1989
libopus_encoder_deps="libopus"
1990
libopus_encoder_select="audio_frame_queue"
1991
libquvi_demuxer_deps="libquvi"
1992 1993
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
1994 1995
libshine_encoder_deps="libshine"
libshine_encoder_select="audio_frame_queue"
1996
libspeex_decoder_deps="libspeex"
Art Clarke's avatar
Art Clarke committed
1997
libspeex_encoder_deps="libspeex"
1998
libspeex_encoder_select="audio_frame_queue"
Mohamed Naufal's avatar
Mohamed Naufal committed
1999
libstagefright_h264_decoder_deps="libstagefright_h264"
2000
libtheora_encoder_deps="libtheora"
2001
libtwolame_encoder_deps="libtwolame"
2002
libvo_aacenc_encoder_deps="libvo_aacenc"
2003
libvo_aacenc_encoder_select="audio_frame_queue"
2004
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
2005
libvorbis_decoder_deps="libvorbis"
2006
libvorbis_encoder_deps="libvorbis"
2007
libvorbis_encoder_select="audio_frame_queue"
2008 2009 2010 2011
libvpx_vp8_decoder_deps="libvpx"
libvpx_vp8_encoder_deps="libvpx"
libvpx_vp9_decoder_deps="libvpx"
libvpx_vp9_encoder_deps="libvpx"
2012
libx264_encoder_deps="libx264"
2013
libx264rgb_encoder_deps="libx264"
2014
libxavs_encoder_deps="libxavs"
2015
libxvid_encoder_deps="libxvid"
2016 2017
libutvideo_decoder_deps="libutvideo"
libutvideo_encoder_deps="libutvideo"
2018

2019
# demuxers / muxers
2020
ac3_demuxer_select="ac3_parser"
2021
asf_stream_muxer_select="asf_muxer"
2022
avisynth_demuxer_deps="avisynth"
2023
dirac_demuxer_select="dirac_parser"
2024
dts_demuxer_select="dca_parser"
Paul B Mahol's avatar
Paul B Mahol committed
2025
dtshd_demuxer_select="dca_parser"
2026
eac3_demuxer_select="ac3_parser"
2027
f4v_muxer_select="mov_muxer"
2028
flac_demuxer_select="flac_parser"
2029
ipod_muxer_select="mov_muxer"
2030
ismv_muxer_select="mov_muxer"
2031 2032
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
2033
matroska_audio_muxer_select="matroska_muxer"
2034
matroska_demuxer_suggest="bzlib lzo zlib"
2035
mov_demuxer_suggest="zlib"
2036
mov_muxer_select="rtpenc_chain"
2037
mp3_demuxer_select="mpegaudio_parser"
2038
mp4_muxer_select="mov_muxer"
2039
mpegts_muxer_select="adts_muxer latm_muxer"
2040 2041
mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_d10_muxer_select="mxf_muxer"
2042
ogg_demuxer_select="golomb"
2043
psp_muxer_select="mov_muxer"
2044
rtp_demuxer_select="sdp_demuxer"
2045 2046
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
rtsp_demuxer_select="http_protocol rtpdec"
2047
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol rtpenc_chain"
Martin Storsjö's avatar
Martin Storsjö committed
2048
sap_demuxer_select="sdp_demuxer"
2049
sap_muxer_select="rtp_muxer rtp_protocol rtpenc_chain"
2050
sdp_demuxer_select="rtpdec"
2051
smoothstreaming_muxer_select="ismv_muxer"
2052
spdif_muxer_select="aac_parser"
2053
tak_demuxer_select="tak_parser"
2054 2055
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
Clément Bœsch's avatar
Clément Bœsch committed
2056
vobsub_demuxer_select="mpegps_demuxer"
2057
w64_demuxer_deps="wav_demuxer"
Paul B Mahol's avatar
Paul B Mahol committed
2058
w64_muxer_deps="wav_muxer"
2059 2060

# indevs / outdevs
2061 2062 2063
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
2064
caca_outdev_deps="libcaca"
2065 2066
dshow_indev_deps="IBaseFilter"
dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
2067
dv1394_indev_deps="dv1394 dv_demuxer"
2068
fbdev_indev_deps="linux_fb_h"
2069
iec61883_indev_deps="libiec61883"
2070
jack_indev_deps="jack_jack_h sem_timedwait"
2071
lavfi_indev_deps="avfilter"
2072
libcdio_indev_deps="libcdio"
2073
libdc1394_indev_deps="libdc1394"
2074
libv4l2_indev_deps="libv4l2"
2075
openal_indev_deps="openal"
2076 2077
oss_indev_deps_any="soundcard_h sys_soundcard_h"
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
2078
pulse_indev_deps="libpulse"
2079
sdl_outdev_deps="sdl"
2080 2081
sndio_indev_deps="sndio_h"
sndio_outdev_deps="sndio_h"
2082 2083
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
2084
v4l2_outdev_deps_any="linux_videodev2_h sys_videoio_h"
2085
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
2086
vfwcap_indev_extralibs="-lavicap32"
2087
xv_outdev_deps="X11_extensions_Xvlib_h XvGetPortAttribute"
2088
xv_outdev_extralibs="-lXv -lX11 -lXext"
2089
x11grab_indev_deps="x11grab"
2090

2091
# protocols
Petri Hintukainen's avatar
Petri Hintukainen committed
2092
bluray_protocol_deps="libbluray"
Samuel Pitoiset's avatar
Samuel Pitoiset committed
2093 2094 2095
ffrtmpcrypt_protocol_deps="!librtmp_protocol"
ffrtmpcrypt_protocol_deps_any="gcrypt nettle openssl"
ffrtmpcrypt_protocol_select="tcp_protocol"
2096 2097
ffrtmphttp_protocol_deps="!librtmp_protocol"
ffrtmphttp_protocol_select="http_protocol"
Lukasz Marek's avatar
Lukasz Marek committed
2098
ftp_protocol_select="tcp_protocol"
2099
gopher_protocol_select="network"
2100
httpproxy_protocol_select="tcp_protocol"
2101
http_protocol_select="tcp_protocol"
2102
https_protocol_select="tls_protocol"
2103 2104 2105 2106 2107
librtmp_protocol_deps="librtmp"
librtmpe_protocol_deps="librtmp"
librtmps_protocol_deps="librtmp"
librtmpt_protocol_deps="librtmp"
librtmpte_protocol_deps="librtmp"
Måns Rullgård's avatar
Måns Rullgård committed
2108
mmsh_protocol_select="http_protocol"
2109
mmst_protocol_select="network"
2110
rtmp_protocol_deps="!librtmp_protocol"
2111
rtmp_protocol_select="tcp_protocol"
Samuel Pitoiset's avatar
Samuel Pitoiset committed
2112
rtmpe_protocol_select="ffrtmpcrypt_protocol"
Samuel Pitoiset's avatar
Samuel Pitoiset committed
2113 2114
rtmps_protocol_deps="!librtmp_protocol"
rtmps_protocol_select="tls_protocol"
2115
rtmpt_protocol_select="ffrtmphttp_protocol"
2116
rtmpte_protocol_select="ffrtmpcrypt_protocol ffrtmphttp_protocol"
2117
rtmpts_protocol_select="ffrtmphttp_protocol https_protocol"
2118
rtp_protocol_select="udp_protocol"
2119 2120
sctp_protocol_deps="struct_sctp_event_subscribe"
sctp_protocol_select="network"
2121
srtp_protocol_select="rtp_protocol"
2122
tcp_protocol_select="network"
2123 2124
tls_protocol_deps_any="openssl gnutls"
tls_protocol_select="tcp_protocol"
2125
udp_protocol_select="network"
2126

2127
# filters
2128
aconvert_filter_deps="swresample"
2129
amovie_filter_deps="avcodec avformat"
2130
aresample_filter_deps="swresample"
2131
ass_filter_deps="libass"
2132
asyncts_filter_deps="avresample"
2133
atempo_filter_deps="avcodec rdft"
2134
azmq_filter_deps="libzmq"
2135
blackframe_filter_deps="gpl"
2136
boxblur_filter_deps="gpl"
2137
colormatrix_filter_deps="gpl"
2138
cropdetect_filter_deps="gpl"
2139
dctdnoiz_filter_deps="avcodec fft"
2140
delogo_filter_deps="gpl"
2141
deshake_filter_deps="avcodec"
2142
deshake_filter_select="dsputil"
2143
drawtext_filter_deps="libfreetype"
2144
ebur128_filter_deps="gpl"
2145
flite_filter_deps="libflite"
Stefano Sabatini's avatar
Stefano Sabatini committed
2146
frei0r_filter_deps="frei0r dlopen"
2147
frei0r_filter_extralibs='$ldl'
Stefano Sabatini's avatar
Stefano Sabatini committed
2148
frei0r_src_filter_deps="frei0r dlopen"
2149
frei0r_src_filter_extralibs='$ldl'
Clément Bœsch's avatar
Clément Bœsch committed
2150
geq_filter_deps="gpl"
2151
histeq_filter_deps="gpl"
2152
hqdn3d_filter_deps="gpl"
2153
hue_filter_deps="gpl"
2154
interlace_filter_deps="gpl"
2155
kerndeint_filter_deps="gpl"
2156
movie_filter_deps="avcodec avformat"
2157
mp_filter_deps="gpl avcodec swscale inline_asm"
2158
mpdecimate_filter_deps="gpl avcodec"
2159
mptestsrc_filter_deps="gpl"
2160
negate_filter_deps="lut_filter"
2161
noise_filter_deps="gpl"
2162
resample_filter_deps="avresample"
2163
ocv_filter_deps="libopencv"
2164
owdenoise_filter_deps="gpl"
2165
pan_filter_deps="swresample"
Clément Bœsch's avatar
Clément Bœsch committed
2166
pp_filter_deps="gpl postproc"
2167
removelogo_filter_deps="avcodec avformat swscale"
2168
scale_filter_deps="swscale"
2169
smartblur_filter_deps="gpl swscale"
2170
showspectrum_filter_deps="avcodec rdft"
2171
stereo3d_filter_deps="gpl"
2172
subtitles_filter_deps="avformat avcodec libass"
2173
super2xsai_filter_deps="gpl"
2174
tinterlace_filter_deps="gpl"
2175 2176
vidstabdetect_filter_deps="libvidstab"
vidstabtransform_filter_deps="libvidstab"
2177
yadif_filter_deps="gpl"
2178 2179 2180
pixfmts_super2xsai_test_deps="super2xsai_filter"
tinterlace_merge_test_deps="tinterlace_filter"
tinterlace_pad_test_deps="tinterlace_filter"
2181
zmq_filter_deps="libzmq"
2182

2183
# libraries
2184 2185 2186 2187 2188
avcodec_deps="avutil"
avdevice_deps="avutil avcodec avformat"
avfilter_deps="avutil"
avformat_deps="avutil avcodec"
avresample_deps="avutil"
2189
postproc_deps="avutil gpl"
2190
swscale_deps="avutil"
2191

2192
# programs
2193
ffmpeg_deps="avcodec avfilter avformat swscale swresample"
2194 2195
ffmpeg_select="aformat_filter anull_filter atrim_filter format_filter
               null_filter
2196
               setpts_filter trim_filter"
2197
ffplay_deps="avcodec avformat swscale swresample sdl"
2198
ffplay_select="rdft crop_filter"
2199
ffprobe_deps="avcodec avformat"
2200
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
2201
ffserver_extralibs='$ldl'
Måns Rullgård's avatar
Måns Rullgård committed
2202

2203 2204 2205 2206 2207 2208
# documentation
podpages_deps="perl"
manpages_deps="perl pod2man"
htmlpages_deps="texi2html"
txtpages_deps="makeinfo"
doc_deps_any="manpages htmlpages podpages txtpages"
2209

Fabrice Bellard's avatar
Fabrice Bellard committed
2210
# default parameters
2211

2212
logfile="config.log"
2213 2214

# installation paths
2215 2216
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
2217
datadir_default='${prefix}/share/ffmpeg'
2218 2219 2220 2221
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
2222 2223

# toolchain
2224
ar_default="ar"
2225
cc_default="gcc"
Mohamed Naufal's avatar
Mohamed Naufal committed
2226
cxx_default="g++"
2227
host_cc_default="gcc"
Mans Rullgard's avatar
Mans Rullgard committed
2228
cp_f="cp -f"
2229
install="install"
2230
ln_s="ln -s -f"
2231
nm_default="nm -g"
2232
objformat="elf"
2233
pkg_config_default=pkg-config
Michael Niedermayer's avatar
Michael Niedermayer committed
2234
ranlib="ranlib"
2235
strip_default="strip"
2236
yasmexe_default="yasm"
2237

2238
nogas=":"
2239

2240
# machine
2241
arch_default=$(uname -m)
2242
cpu="generic"
2243 2244

# OS
2245 2246
target_os_default=$(tolower $(uname -s))
host_os=$target_os_default
2247 2248

# configurable options
2249
enable $PROGRAM_LIST
2250
enable $DOCUMENT_LIST
2251
enable $(filter_out avresample $LIBRARY_LIST)
2252
enable stripping
2253 2254 2255 2256

enable asm
enable debug
enable doc
2257
enable optimizations
2258
enable runtime_cpudetect
2259
enable safe_bitstream_reader
2260
enable static
2261
enable swscale_alpha
2262

2263 2264
# Enable hwaccels by default.
enable dxva2 vaapi vdpau
2265

2266
# build settings
2267
SHFLAGS='-shared -Wl,-soname,$$(@F)'
2268
FFSERVERLDFLAGS=-Wl,-E
2269 2270
LIBPREF="lib"
LIBSUF=".a"
2271 2272
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
2273 2274
SLIBPREF="lib"
SLIBSUF=".so"
2275
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
2276 2277
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
Måns Rullgård's avatar
Måns Rullgård committed
2278
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
2279 2280
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
2281

2282 2283
asflags_filter=echo
cflags_filter=echo
2284 2285
ldflags_filter=echo

2286
AS_C='-c'
2287
AS_O='-o $@'
2288
CC_C='-c'
2289
CC_E='-E -o $@'
2290
CC_O='-o $@'
2291
CXX_C='-c'
Mohamed Naufal's avatar
Mohamed Naufal committed
2292
CXX_O='-o $@'
2293
LD_O='-o $@'
2294 2295
LD_LIB='-l%'
LD_PATH='-L'
2296
HOSTCC_C='-c'
2297
HOSTCC_O='-o $@'
2298
HOSTLD_O='-o $@'
2299

2300 2301
host_cflags='-O3 -g'
host_cppflags='-D_ISOC99_SOURCE -D_XOPEN_SOURCE=600'
2302
host_libs='-lm'
2303 2304
host_cflags_filter=echo
host_ldflags_filter=echo
2305

2306
target_path='$(CURDIR)'
2307

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

2313
# find source path
2314
if test -f configure; then
2315
    source_path=.
2316
else
2317
    source_path=$(cd $(dirname "$0"); pwd)
2318
    echo "$source_path" | grep -q '[[:blank:]]' &&
2319
        die "Out of tree builds are impossible with whitespace in source path."
2320 2321
    test -e "$source_path/config.h" &&
        die "Out of tree builds are impossible with config.h in source dir."
2322 2323
fi

2324
for v in "$@"; do
2325 2326 2327
    r=${v#*=}
    l=${v%"$r"}
    r=$(sh_quote "$r")
2328
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
2329
done
2330

2331 2332 2333 2334
find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
2335
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
2336 2337 2338 2339
}

ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
2340
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
2341 2342 2343 2344
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)
2345 2346
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
2347
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
2348
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
2349

2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363
ALL_COMPONENTS="
    $BSF_LIST
    $DECODER_LIST
    $DEMUXER_LIST
    $ENCODER_LIST
    $FILTER_LIST
    $HWACCEL_LIST
    $INDEV_LIST
    $MUXER_LIST
    $OUTDEV_LIST
    $PARSER_LIST
    $PROTOCOL_LIST
"

2364 2365 2366 2367 2368 2369
for n in $COMPONENT_LIST; do
    v=$(toupper ${n%s})_LIST
    eval enable \$$v
    eval ${n}_if_any="\$$v"
done

2370
enable $ARCH_EXT_LIST
2371 2372 2373 2374 2375 2376 2377

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

2378 2379 2380 2381
print_3_columns() {
    cat | tr ' ' '\n' | sort | pr -r -3 -t
}

2382
show_list() {
Ramiro Polla's avatar
Ramiro Polla committed
2383 2384
    suffix=_$1
    shift
2385
    echo $* | sed s/$suffix//g | print_3_columns
2386 2387 2388
    exit 0
}

2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409
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 }")
}

2410
for opt do
2411 2412
    optval="${opt#*=}"
    case "$opt" in
2413 2414
        --extra-ldflags=*)
            add_ldflags $optval
2415
        ;;
2416 2417
        --extra-libs=*)
            add_extralibs $optval
2418
        ;;
2419 2420
        --disable-devices)
            disable $INDEV_LIST $OUTDEV_LIST
2421
        ;;
2422 2423
        --enable-debug=*)
            debuglevel="$optval"
2424 2425 2426 2427 2428 2429 2430
        ;;
        --disable-programs)
            disable $PROGRAM_LIST
        ;;
        --disable-everything)
            map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
        ;;
2431 2432 2433 2434
        --disable-all)
            map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
            disable $LIBRARY_LIST $PROGRAM_LIST doc
        ;;
2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447
        --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}
2448 2449 2450
            list=$(filter "$name" $list)
            [ "$list" = "" ] && warn "Option $opt did not match anything"
            $action $list
2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470
        ;;
        --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
        ;;
2471 2472
        --fatal-warnings) enable fatal_warnings
        ;;
2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484
        *)
            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
        ;;
2485
    esac
2486 2487
done

2488 2489
disabled logging && logfile=/dev/null

2490
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
2491 2492
set >> $logfile

2493 2494
test -n "$cross_prefix" && enable cross_compile

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

2500
ar_default="${cross_prefix}${ar_default}"
2501
cc_default="${cross_prefix}${cc_default}"
Mohamed Naufal's avatar
Mohamed Naufal committed
2502
cxx_default="${cross_prefix}${cxx_default}"
Måns Rullgård's avatar
Måns Rullgård committed
2503
nm_default="${cross_prefix}${nm_default}"
2504
pkg_config_default="${cross_prefix}${pkg_config_default}"
2505
ranlib="${cross_prefix}${ranlib}"
2506
strip_default="${cross_prefix}${strip_default}"
2507

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

2510 2511
test -n "$valgrind" && toolchain="valgrind-memcheck"

2512
case "$toolchain" in
2513 2514
    clang-asan)
        cc_default="clang"
2515 2516
        add_cflags  -fsanitize=address
        add_ldflags -fsanitize=address
2517 2518 2519
    ;;
    clang-tsan)
        cc_default="clang"
2520 2521
        add_cflags  -fsanitize=thread -pie
        add_ldflags -fsanitize=thread -pie
2522
    ;;
2523 2524 2525 2526 2527 2528 2529 2530 2531 2532
    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
    ;;
2533
    valgrind-massif)
2534
        target_exec_default=${valgrind:-"valgrind"}
2535
        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"
2536
    ;;
2537
    valgrind-memcheck)
2538
        target_exec_default=${valgrind:-"valgrind"}
2539
        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"
2540
    ;;
2541 2542 2543 2544
    msvc)
        cc_default="c99wrap cl"
        ld_default="c99wrap link"
        nm_default="dumpbin -symbols"
2545
        ar_default="lib"
2546
        target_os_default="win32"
2547
    ;;
2548 2549 2550 2551 2552 2553 2554
    icl)
        cc_default="c99wrap -noconv icl"
        ld_default="c99wrap xilink"
        nm_default="dumpbin -symbols"
        ar_default="xilib"
        target_os_default="win32"
    ;;
2555 2556 2557 2558
    gcov)
        add_cflags  -fprofile-arcs -ftest-coverage
        add_ldflags -fprofile-arcs -ftest-coverage
    ;;
2559 2560 2561 2562 2563
    ?*)
        die "Unknown toolchain $toolchain"
    ;;
esac

2564
set_default arch cc cxx pkg_config strip sysinclude target_exec target_os yasmexe
2565 2566
enabled cross_compile || host_cc_default=$cc
set_default host_cc
2567

2568 2569 2570 2571 2572
if ! $pkg_config --version >/dev/null 2>&1; then
    warn "$pkg_config not found, library detection may fail."
    pkg_config=false
fi

2573 2574
exesuf() {
    case $1 in
2575
        mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
2576 2577 2578 2579 2580
    esac
}

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

2582
# set temporary file name
2583
: ${TMPDIR:=$TEMPDIR}
2584
: ${TMPDIR:=$TMP}
2585
: ${TMPDIR:=/tmp}
2586

2587
if ! check_cmd mktemp -u XXXXXX; then
2588 2589 2590
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
2591
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
2592 2593 2594 2595 2596 2597
    }
fi

tmpfile(){
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
        (set -C; exec > $tmp) 2>/dev/null ||
2598
        die "Unable to create temporary file in $TMPDIR."
2599 2600 2601 2602 2603 2604
    append TMPFILES $tmp
    eval $1=$tmp
}

trap 'rm -f -- $TMPFILES' EXIT

2605
tmpfile TMPASM .asm
2606
tmpfile TMPC   .c
2607
tmpfile TMPCPP .cpp
2608 2609 2610 2611 2612 2613
tmpfile TMPE   $EXESUF
tmpfile TMPH   .h
tmpfile TMPO   .o
tmpfile TMPS   .S
tmpfile TMPSH  .sh
tmpfile TMPV   .ver
2614 2615

unset -f mktemp
2616

2617 2618
chmod +x $TMPE

2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631
# 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

2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649
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
}

2650 2651 2652 2653 2654 2655 2656
msvc_flags(){
    for flag; do
        case $flag in
            -fomit-frame-pointer) echo -Oy ;;
            -g)                   echo -Z7 ;;
            -Wall)                echo -W4 -wd4244 -wd4127 -wd4018 -wd4389 \
                                       -wd4146 -wd4057 -wd4204 -wd4706 -wd4305 \
2657
                                       -wd4152 -wd4324 -we4013 -wd4100 -wd4214 \
2658
                                       -wd4554 \
2659
                                       -wd4996 -wd4273 ;;
2660 2661 2662 2663
            -std=c99)             ;;
            -fno-math-errno)      ;;
            -fno-common)          ;;
            -fno-signed-zeros)    ;;
2664
            -fPIC)                ;;
2665 2666
            -mthumb)              ;;
            -march=*)             ;;
2667
            -lz)                  echo zlib.lib ;;
2668 2669
            -lavifil32)           echo vfw32.lib ;;
            -lavicap32)           echo vfw32.lib user32.lib ;;
2670 2671 2672 2673 2674 2675
            -l*)                  echo ${flag#-l}.lib ;;
            *)                    echo $flag ;;
        esac
    done
}

2676 2677 2678
pgi_flags(){
    for flag; do
        case $flag in
2679
            -flto)                echo -Mipa=fast,libopt,libinline,vestigial ;;
2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703
            -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   ;;
2704 2705
                    corei7)           echo -xarch=sse4_2 -xchip=nehalem  ;;
                    corei7-avx)       echo -xarch=avx -xchip=sandybridge ;;
2706 2707
                    amdfam10|barcelona)       echo -xtarget=barcelona    ;;
                    bdver*)                   echo -xarch=avx            ;;
2708 2709 2710 2711 2712 2713 2714 2715 2716 2717
                    athlon-4|athlon-[mx]p)    echo -xarch=ssea           ;;
                    k8|opteron|athlon64|athlon-fx)
                                              echo -xarch=sse2a          ;;
                    athlon*)                  echo -xarch=pentium_proa   ;;
                esac
                ;;
            -std=c99)             echo -xc99              ;;
            -fomit-frame-pointer) echo -xregs=frameptr    ;;
            -fPIC)                echo -KPIC -xcode=pic32 ;;
            -W*,*)                echo $flag              ;;
2718 2719
            -f*-*|-W*|-mimpure-text)                      ;;
            -shared)              echo -G                 ;;
2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741
            *)                    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        ;;
2742
            -mfpu=vfpv3-d16) echo --float_support=vfpv3d16    ;;
2743 2744 2745 2746
            -msoft-float)   echo --float_support=vfplib       ;;
            -O[0-3]|-mf=*)  echo $flag                        ;;
            -g)             echo -g -mn                       ;;
            -pds=*)         echo $flag                        ;;
2747 2748 2749
            -D*|-I*)        echo $flag                        ;;
            --gcc|--abi=*)  echo $flag                        ;;
            -me)            echo $flag                        ;;
2750 2751 2752 2753
        esac
    done
}

2754 2755 2756 2757
probe_cc(){
    pfx=$1
    _cc=$2

2758 2759
    unset _type _ident _cc_c _cc_e _cc_o _flags _cflags
    unset _ld_o _ldflags _ld_lib _ld_path
2760
    unset _depflags _DEPCMD _DEPFLAGS
2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781
    _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'
2782
    elif $_cc --version 2>/dev/null | grep -q ^icc; then
2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799
        _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'
2800
        _flags_filter=ccc_flags
2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816
    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'
2817
    elif $_cc -version 2>/dev/null | grep -Eq 'TMS470|TI ARM'; then
2818 2819 2820
        _type=tms470
        _ident=$($_cc -version | head -n1 | tr -s ' ')
        _flags='--gcc --abi=eabi -me'
2821
        _cc_e='-ppl -fe=$@'
2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836
        _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)'
2837
        _DEPFLAGS='-xM1 -xc99'
2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858
        _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 }')"
2859
        opt_common='-alias=ansi -Mdse -Mlre -Mpre'
2860 2861
        _cflags_speed="-O3 -Mautoinline -Munroll=c:4 $opt_common"
        _cflags_size="-O2 -Munroll=c:1 $opt_common"
2862
        _cflags_noopt="-O"
2863
        _flags_filter=pgi_flags
2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877
    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"
        # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
        if $_cc 2>&1 | grep -q Linker; then
            _ld_o='-out $@'
        else
            _ld_o='-Fe$@'
        fi
        _cc_o='-Fo $@'
2878
        _cc_e='-P -Fi $@'
2879 2880 2881 2882 2883 2884
        _flags_filter=msvc_flags
        _ld_lib='lib%.a'
        _ld_path='-libpath:'
        _flags='-nologo'
        _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64'
        if [ $pfx = hostcc ]; then
2885
            append _cflags -Dsnprintf=_snprintf
2886
        fi
2887
        disable stripping
2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912
    elif $_cc 2>&1 | grep -q Intel; then
        _type=icl
        _ident=$($cc 2>&1 | head -n1)
        _depflags='-QMMD -QMF$(@:.o=.d) -QMT$@'
        # Not only is O3 broken on 13.x+ but it's slower on all previous versions (tested) as well
        _cflags_speed="-O2"
        _cflags_size="-O1 -Oi" # -O1 without -Oi miscompiles stuff
        # Nonstandard output options, to avoid msys path conversion issues, relies on wrapper to remap it
        if $_cc 2>&1 | grep -q Linker; then
            _ld_o='-out $@'
        else
            _ld_o='-Fe$@'
        fi
        _cc_o='-Fo $@'
        _cc_e='-P'
        _flags_filter=msvc_flags
        _ld_lib='lib%.a'
        _ld_path='-libpath:'
        # -Qdiag-error to make icl error when presented with certain unknown arguments
        _flags='-nologo -Qdiag-error:10157 -Qdiag-error:4044'
        # -Qvec- -Qsimd- to prevent miscompilation, -GS for consistency with msvc which enables it by default
        _cflags='-D_USE_MATH_DEFINES -Dinline=__inline -FIstdlib.h -Dstrtoll=_strtoi64 -Qstd=c99 -Qms0 -Qvec- -Qsimd- -GS'
        if [ $pfx = hostcc ]; then
            append _cflags -Dsnprintf=_snprintf
        fi
2913
    fi
2914 2915 2916 2917 2918 2919

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

set_ccvars(){
2920
    eval ${1}_C=\${_cc_c-\${${1}_C}}
2921
    eval ${1}_E=\${_cc_e-\${${1}_E}}
2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945
    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
2946

2947 2948
test -n "$cc_type" && enable $cc_type ||
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2949

2950
: ${as_default:=$cc}
2951
: ${dep_cc_default:=$cc}
2952
: ${ld_default:=$cc}
2953 2954
: ${host_ld_default:=$host_cc}
set_default ar as dep_cc ld host_ld
2955

2956 2957 2958 2959 2960 2961 2962 2963 2964
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
2965
LD_O=${_ld_o-$LD_O}
2966 2967
LD_LIB=${_ld_lib-$LD_LIB}
LD_PATH=${_ld_path-$LD_PATH}
2968

2969 2970 2971 2972
probe_cc hostld "$host_ld"
host_ldflags_filter=$_flags_filter
add_host_ldflags $_flags $_ldflags
HOSTLD_O=${_ld_o-$HOSTLD_O}
2973 2974 2975 2976 2977 2978 2979

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

2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991
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='$@'
else
    arflags="rc"
    ar_o='$@'
fi

2992
add_cflags $extra_cflags
Mohamed Naufal's avatar
Mohamed Naufal committed
2993
add_cxxflags $extra_cxxflags
2994
add_asflags $extra_cflags
2995

2996 2997
if test -n "$sysroot"; then
    case "$cc_type" in
2998
        gcc|llvm_gcc|clang)
2999
            add_cppflags --sysroot="$sysroot"
3000 3001
            add_ldflags --sysroot="$sysroot"
        ;;
3002 3003 3004 3005
        tms470)
            add_cppflags -I"$sysinclude"
            add_ldflags  --sysroot="$sysroot"
        ;;
3006 3007 3008
    esac
fi

3009 3010 3011 3012
if test "$cpu" = host; then
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."

    case "$cc_type" in
3013
        gcc|llvm_gcc)
3014 3015
            check_native(){
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
3016
                sed -n "/cc1.*$1=/{
3017 3018 3019 3020
                            s/.*$1=\\([^ ]*\\).*/\\1/
                            p
                            q
                        }" $TMPE
3021 3022 3023 3024 3025 3026 3027 3028
            }
            cpu=$(check_native -march || check_native -mcpu)
        ;;
    esac

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

3029 3030
# Deal with common $arch aliases
case "$arch" in
3031 3032 3033
    aarch64|arm64)
        arch="aarch64"
    ;;
3034
    arm*|iPad*)
3035 3036
        arch="arm"
    ;;
3037
    mips*|IP*)
3038 3039
        arch="mips"
    ;;
3040
    parisc*|hppa*)
3041 3042
        arch="parisc"
    ;;
3043
    "Power Macintosh"|ppc*|powerpc*)
3044 3045 3046 3047 3048 3049 3050 3051
        arch="ppc"
    ;;
    s390|s390x)
        arch="s390"
    ;;
    sh4|sh)
        arch="sh4"
    ;;
3052
    sun4u|sparc*)
3053 3054
        arch="sparc"
    ;;
3055 3056 3057
    tilegx|tile-gx)
        arch="tilegx"
    ;;
3058
    i[3-6]86|i86pc|BePC|x86pc|x86_64|x86_32|amd64)
3059 3060 3061 3062
        arch="x86"
    ;;
esac

3063
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
3064
enable $arch
3065

3066
# Add processor-specific flags
3067
if enabled aarch64; then
3068

Måns Rullgård's avatar
Måns Rullgård committed
3069
    case $cpu in
3070
        armv*)
Måns Rullgård's avatar
Måns Rullgård committed
3071 3072
            cpuflags="-march=$cpu"
        ;;
3073 3074
        *)
            cpuflags="-mcpu=$cpu"
Måns Rullgård's avatar
Måns Rullgård committed
3075 3076
        ;;
    esac
3077

3078
elif enabled alpha; then
3079

3080
    cpuflags="-mcpu=$cpu"
3081 3082 3083

elif enabled arm; then

3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114
    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)

3115 3116 3117
    case $cpu in
        armv*)
            cpuflags="-march=$cpu"
3118
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
3119 3120 3121
        ;;
        *)
            cpuflags="-mcpu=$cpu"
3122 3123 3124
            case $cpu in
                cortex-a*)                               subarch=armv7a  ;;
                cortex-r*)                               subarch=armv7r  ;;
3125
                cortex-m*)                 enable thumb; subarch=armv7m  ;;
3126 3127 3128
                arm11*)                                  subarch=armv6   ;;
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
3129
                *)                             subarch=$(probe_arm_arch) ;;
3130
            esac
3131 3132
        ;;
    esac
3133

3134 3135 3136 3137 3138
    case "$subarch" in
        armv5t*)    enable fast_clz                ;;
        armv[6-8]*) enable fast_clz fast_unaligned ;;
    esac

3139
elif enabled avr32; then
3140

3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158
    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
3159 3160 3161

elif enabled bfin; then

3162
    cpuflags="-mcpu=$cpu"
3163 3164 3165

elif enabled mips; then

3166
    cpuflags="-march=$cpu"
3167

3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189
    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

3190
elif enabled ppc; then
3191

3192 3193
    case $(tolower $cpu) in
        601|ppc601|powerpc601)
Måns Rullgård's avatar
Måns Rullgård committed
3194
            cpuflags="-mcpu=601"
3195
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
3196
        ;;
3197
        603*|ppc603*|powerpc603*)
Måns Rullgård's avatar
Måns Rullgård committed
3198
            cpuflags="-mcpu=603"
3199
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
3200
        ;;
3201
        604*|ppc604*|powerpc604*)
Måns Rullgård's avatar
Måns Rullgård committed
3202
            cpuflags="-mcpu=604"
3203
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
3204
        ;;
3205
        g3|75*|ppc75*|powerpc75*)
3206
            cpuflags="-mcpu=750"
3207
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
3208
        ;;
3209
        g4|745*|ppc745*|powerpc745*)
3210
            cpuflags="-mcpu=7450"
Måns Rullgård's avatar
Måns Rullgård committed
3211
        ;;
3212
        74*|ppc74*|powerpc74*)
3213
            cpuflags="-mcpu=7400"
Måns Rullgård's avatar
Måns Rullgård committed
3214
        ;;
3215
        g5|970|ppc970|powerpc970)
3216
            cpuflags="-mcpu=970"
Måns Rullgård's avatar
Måns Rullgård committed
3217
        ;;
3218
        power[3-7]*)
Måns Rullgård's avatar
Måns Rullgård committed
3219 3220
            cpuflags="-mcpu=$cpu"
        ;;
3221
        cell)
Måns Rullgård's avatar
Måns Rullgård committed
3222 3223 3224
            cpuflags="-mcpu=cell"
            enable ldbrx
        ;;
3225 3226 3227 3228
        e500mc)
            cpuflags="-mcpu=e500mc"
            disable altivec
        ;;
3229 3230 3231 3232 3233 3234 3235
        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
3236 3237
        ;;
    esac
3238

3239
elif enabled sparc; then
3240 3241

    case $cpu in
3242 3243 3244
        cypress|f93[04]|tsc701|sparcl*|supersparc|hypersparc|niagara|v[789])
            cpuflags="-mcpu=$cpu"
            disable vis
3245
        ;;
3246
        ultrasparc*|niagara[234])
3247 3248 3249 3250
            cpuflags="-mcpu=$cpu"
        ;;
    esac

3251 3252
elif enabled x86; then

Måns Rullgård's avatar
Måns Rullgård committed
3253 3254 3255 3256 3257
    case $cpu in
        i[345]86|pentium)
            cpuflags="-march=$cpu"
            disable mmx
        ;;
3258
        # targets that do NOT support nopl and conditional mov (cmov)
Måns Rullgård's avatar
Måns Rullgård committed
3259 3260
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
            cpuflags="-march=$cpu"
3261
            disable i686
Måns Rullgård's avatar
Måns Rullgård committed
3262
        ;;
3263
        # targets that do support nopl and conditional mov (cmov)
3264
        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
3265
            cpuflags="-march=$cpu"
3266
            enable i686
Måns Rullgård's avatar
Måns Rullgård committed
3267 3268 3269 3270 3271
            enable fast_cmov
        ;;
        # targets that do support conditional mov but on which it's slow
        pentium4|pentium4m|prescott|nocona)
            cpuflags="-march=$cpu"
3272
            enable i686
Måns Rullgård's avatar
Måns Rullgård committed
3273 3274 3275
            disable fast_cmov
        ;;
    esac
3276 3277 3278

fi

3279 3280 3281 3282
if [ "$cpu" != generic ]; then
    add_cflags  $cpuflags
    add_asflags $cpuflags
fi
3283

3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296
# 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

3297
add_cppflags -D_ISOC99_SOURCE
Mohamed Naufal's avatar
Mohamed Naufal committed
3298
add_cxxflags -D__STDC_CONSTANT_MACROS
3299
check_cflags -std=c99
3300
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
3301 3302
#include <stdlib.h>
EOF
3303
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
3304 3305
#include <stdlib.h>
EOF
3306

3307
check_host_cflags -std=c99
3308
check_host_cflags -Wall
3309

3310 3311 3312 3313 3314 3315 3316 3317
check_64bit(){
    arch32=$1
    arch64=$2
    expr=$3
    check_code cc "" "int test[2*($expr) - 1]" &&
        subarch=$arch64 || subarch=$arch32
}

3318
case "$arch" in
3319
    aarch64|alpha|ia64)
3320
        spic=$shared
3321
    ;;
3322 3323
    mips)
        check_64bit mips mips64 '_MIPS_SIM > 1'
3324
        spic=$shared
3325
    ;;
3326 3327 3328 3329
    parisc)
        check_64bit parisc parisc64 'sizeof(void *) > 4'
        spic=$shared
    ;;
3330 3331
    ppc)
        check_64bit ppc ppc64 'sizeof(void *) > 4'
3332
        spic=$shared
3333
    ;;
3334 3335 3336 3337
    sparc)
        check_64bit sparc sparc64 'sizeof(void *) > 4'
        spic=$shared
    ;;
3338
    x86)
3339
        check_64bit x86_32 x86_64 'sizeof(void *) > 4'
3340
        if test "$subarch" = "x86_64"; then
3341
            spic=$shared
3342
        fi
3343
    ;;
3344 3345 3346 3347 3348
    ppc)
        check_cc <<EOF && subarch="ppc64"
        int test[(int)sizeof(char*) - 7];
EOF
    ;;
3349 3350
esac

3351
enable $subarch
3352
enabled spic && enable_weak pic
3353

3354
# OS specific
3355
case $target_os in
3356
    haiku)
3357
        prefix_default="/boot/common"
3358
        network_extralibs="-lnetwork"
François Revol's avatar
François Revol committed
3359
        host_libs=
3360
        ;;
3361 3362
    sunos)
        FFSERVERLDFLAGS=""
3363
        SHFLAGS='-shared -Wl,-h,$$(@F)'
3364
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
3365
        network_extralibs="-lsocket -lnsl"
3366
        add_cppflags -D__EXTENSIONS__ -D_XOPEN_SOURCE=600
3367 3368 3369 3370 3371 3372
        # 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.
        enabled_all suncc x86 && echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile
3373
        nm_default='nm -P -g'
3374 3375
        ;;
    netbsd)
3376
        disable symver
3377 3378
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
3379
        enabled gcc || check_ldflags -Wl,-zmuldefs
3380
        ;;
3381
    openbsd|bitrig)
3382
        disable symver
3383
        SHFLAGS='-shared'
3384
        SLIB_INSTALL_NAME='$(SLIBNAME).$(LIBMAJOR).$(LIBMINOR)'
3385
        SLIB_INSTALL_LINKS=
3386 3387
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
3388
        ;;
3389 3390 3391 3392
    dragonfly)
        disable symver
        ;;
    freebsd)
3393 3394
        ;;
    bsd/os)
3395
        add_extralibs -lpoll -lgnugetopt
3396
        strip="strip -d"
3397 3398
        ;;
    darwin)
3399
        gas="gas-preprocessor.pl $cc"
3400
        enabled ppc && add_asflags -force_cpusubtype_ALL
3401
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
3402
        enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
3403
        strip="${strip} -x"
3404
        add_ldflags -Wl,-dynamic,-search_paths_first
3405 3406 3407 3408
        SLIBSUF=".dylib"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
        FFSERVERLDFLAGS=-Wl,-bind_at_load
Loren Merritt's avatar
Loren Merritt committed
3409
        objformat="macho"
3410
        enabled x86_64 && objformat="macho64"
3411
        enabled_any pic shared ||
3412
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
3413 3414
        ;;
    mingw32*)
3415
        if test $target_os = "mingw32ce"; then
3416 3417 3418 3419
            disable network
        else
            target_os=mingw32
        fi
3420
        LIBTARGET=i386
3421
        if enabled x86_64; then
3422
            LIBTARGET="i386:x86-64"
3423
        elif enabled arm; then
3424
            LIBTARGET=arm-wince
3425
        fi
3426 3427
        check_ldflags -Wl,--nxcompat
        check_ldflags -Wl,--dynamicbase
3428
        shlibdir_default="$bindir_default"
3429 3430 3431 3432
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3433
        dlltool="${cross_prefix}dlltool"
3434
        if check_cmd lib.exe -list; then
3435
            SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
3436 3437 3438 3439
            if enabled x86_64; then
                LIBTARGET=x64
            fi
        elif check_cmd $dlltool --version; then
3440
            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)'
3441
        fi
3442 3443 3444 3445
        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)'
3446
        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
3447
        objformat="win32"
3448
        ranlib=:
3449
        enable dos_paths
3450
        disable pic
3451
        ;;
3452
    win32|win64)
3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471
        if enabled shared; then
            # Link to the import library instead of the normal static library
            # for shared libs.
            LD_LIB='%.lib'
            # Cannot build shared and static libraries at the same time with
            # MSVC.
            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)'
3472 3473 3474
        objformat="win32"
        ranlib=:
        enable dos_paths
3475
        disable pic
3476
        ;;
3477
    cygwin*)
3478
        target_os=cygwin
3479
        shlibdir_default="$bindir_default"
3480 3481 3482 3483
        SLIBPREF="cyg"
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
3484 3485 3486 3487
        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
3488
        objformat="win32"
3489
        enable dos_paths
3490
        disable pic
3491
        ;;
3492 3493
    *-dos|freedos|opendos)
        network_extralibs="-lsocket"
3494
        objformat="coff"
3495
        enable dos_paths
3496
        add_cppflags -U__STRICT_ANSI__
3497
        ;;
3498 3499 3500 3501
    linux)
        enable dv1394
        ;;
    irix*)
3502
        target_os=irix
3503 3504
        ranlib="echo ignoring ranlib"
        ;;
3505
    os/2*)
3506
        strip="lxlite -CS"
3507
        ln_s="cp -f"
3508
        objformat="aout"
3509
        add_cppflags -D_GNU_SOURCE
3510
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
3511
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
3512
        FFSERVERLDFLAGS=""
3513
        LIBSUF="_s.a"
3514 3515 3516 3517
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
3518
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
3519 3520 3521 3522 3523
            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'
3524
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
3525
            emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
3526
        SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
3527
        enable dos_paths
3528
        enable_weak os2threads
3529
        ;;
3530
    gnu/kfreebsd)
3531
        add_cppflags -D_BSD_SOURCE
3532
        ;;
3533 3534
    gnu)
        ;;
3535 3536 3537 3538
    qnx)
        add_cppflags -D_QNX_SOURCE
        network_extralibs="-lsocket"
        ;;
3539 3540 3541
    symbian)
        SLIBSUF=".dll"
        enable dos_paths
3542 3543 3544 3545 3546 3547 3548 3549
        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
3550
        ;;
3551 3552
    osf1)
        add_cppflags -D_OSF_SOURCE -D_POSIX_PII -D_REENTRANT
3553
        FFSERVERLDFLAGS=
3554
        ;;
3555 3556
    minix)
        ;;
Mans Rullgard's avatar
Mans Rullgard committed
3557 3558 3559 3560 3561 3562 3563 3564 3565
    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
3566
        disable ffserver
Mans Rullgard's avatar
Mans Rullgard committed
3567 3568
        cp_f='cp'
        ;;
3569 3570
    none)
        ;;
3571
    *)
3572
        die "Unknown OS '$target_os'."
3573 3574 3575
        ;;
esac

3576 3577
# determine libc flavour

3578
# uclibc defines __GLIBC__, so it needs to be checked before glibc.
3579 3580
if check_cpp_condition features.h "defined __UCLIBC__"; then
    libc_type=uclibc
3581
    add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3582 3583
elif check_cpp_condition features.h "defined __GLIBC__"; then
    libc_type=glibc
3584
    add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
3585 3586 3587 3588
# 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__
3589 3590 3591 3592 3593 3594
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."
3595
    add_cppflags -U__STRICT_ANSI__
3596
    if check_cpp_condition _mingw.h "defined(__MINGW64_VERSION_MAJOR) && \
3597
            __MINGW64_VERSION_MAJOR < 3"; then
3598
        add_compat msvcrt/snprintf.o
3599 3600
        add_cflags "-include $source_path/compat/msvcrt/snprintf.h"
    fi
3601 3602
elif check_func_headers stdlib.h _get_doserrno; then
    libc_type=msvcrt
3603 3604 3605 3606
    add_compat strtod.o strtod=avpriv_strtod
    add_compat msvcrt/snprintf.o snprintf=avpriv_snprintf   \
                                 _snprintf=avpriv_snprintf  \
                                 vsnprintf=avpriv_vsnprintf
3607 3608 3609 3610 3611 3612 3613
    # 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
3614 3615
elif check_cpp_condition stddef.h "defined __KLIBC__"; then
    libc_type=klibc
3616 3617 3618
elif check_cpp_condition sys/cdefs.h "defined __BIONIC__"; then
    libc_type=bionic
    add_compat strtod.o strtod=avpriv_strtod
3619 3620 3621 3622
fi

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

3623 3624 3625
# hacks for compiler/libc/os combinations

if enabled_all tms470 glibc; then
3626
    CPPFLAGS="-I${source_path}/compat/tms470 ${CPPFLAGS}"
3627 3628 3629 3630 3631 3632
    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

3633 3634 3635 3636
if enabled_all ccc glibc; then
    add_ldflags -Wl,-z,now  # calls to libots crash without this
fi

3637 3638 3639 3640
esc(){
    echo "$*" | sed 's/%/%25/g;s/:/%3a/g'
}

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

3643
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable_weak pic
3644

3645
set_default $PATHS_LIST
3646
set_default nm
3647

3648
# we need to build at least one lib type
3649
if ! enabled_any static shared; then
3650 3651 3652 3653 3654 3655 3656 3657 3658
    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

3659
die_license_disabled() {
3660
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
3661 3662
}

3663 3664 3665 3666
die_license_disabled_gpl() {
    enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; }
}

3667
die_license_disabled gpl libcdio
3668
die_license_disabled gpl libutvideo
3669
die_license_disabled gpl libvidstab
3670
die_license_disabled gpl libx264
3671
die_license_disabled gpl libxavs
3672 3673 3674
die_license_disabled gpl libxvid
die_license_disabled gpl x11grab

tipok's avatar
tipok committed
3675
die_license_disabled nonfree libaacplus
3676
die_license_disabled nonfree libfaac
3677
enabled gpl && die_license_disabled_gpl nonfree libfdk_aac
3678
enabled gpl && die_license_disabled_gpl nonfree openssl
3679

3680 3681
die_license_disabled version3 libopencore_amrnb
die_license_disabled version3 libopencore_amrwb
3682
die_license_disabled version3 libvo_aacenc
3683
die_license_disabled version3 libvo_amrwbenc
3684

3685
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
3686

3687
disabled optimizations || check_cflags -fomit-frame-pointer
3688

3689 3690
enable_weak_pic() {
    disabled pic && return
3691
    enable pic
3692 3693 3694
    add_cppflags -DPIC
    add_cflags   -fPIC
    add_asflags  -fPIC
3695 3696
}

3697
enabled pic && enable_weak_pic
3698

3699 3700 3701
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
3702
sym=$($nm $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
3703 3704
extern_prefix=${sym%%ff_extern*}

3705
check_cc <<EOF && enable_weak inline_asm
3706 3707
void foo(void) { __asm__ volatile ("" ::); }
EOF
3708

3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
    check_cc <<EOF && _restrict=$restrict_keyword && break
void foo(char * $restrict_keyword p);
EOF
done

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

3720 3721 3722 3723
check_cc <<EOF && enable attribute_may_alias
union { int x; } __attribute__((may_alias)) x;
EOF

3724 3725 3726
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
3727
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
3728

3729 3730 3731 3732 3733
if enabled alpha; then

    check_cflags -mieee

elif enabled arm; then
3734

3735 3736 3737 3738
    check_cpp_condition stddef.h "defined __thumb__" && check_cc <<EOF && enable_weak thumb
float func(float a, float b){ return a+b; }
EOF

3739
    enabled thumb && check_cflags -mthumb || check_cflags -marm
3740
    nogas=die
3741

3742 3743 3744 3745 3746
    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
3747
            *) check_ld "cc" <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
3748 3749 3750
__asm__ (".eabi_attribute 28, 1");
int main(void) { return 0; }
EOF
3751 3752 3753
        esac
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
    fi
3754

3755 3756 3757 3758
    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'
3759
    enabled vfp     && check_insn vfp     'fadds s0, s0, s0'
3760 3761
    enabled vfpv3   && check_insn vfpv3   'vmov.f32 s0, #1.0'

3762 3763 3764
    [ $target_os = linux ] ||
        map 'enabled_any ${v}_external ${v}_inline || disable $v' \
            $ARCH_EXT_LIST_ARM
3765

3766 3767
    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)'
3768

3769
    enabled_all armv6t2 shared !pic && enable_weak_pic
3770

3771
elif enabled mips; then
3772

3773
    check_inline_asm loongson '"dmult.g $1, $2, $3"'
3774
    enabled mips32r2  && add_cflags "-mips32r2" && add_asflags "-mips32r2" &&
3775
     check_inline_asm mips32r2  '"rotr $t0, $t1, 1"'
3776
    enabled mipsdspr1 && add_cflags "-mdsp" && add_asflags "-mdsp" &&
3777
     check_inline_asm mipsdspr1 '"addu.qb $t0, $t1, $t2"'
3778
    enabled mipsdspr2 && add_cflags "-mdspr2" && add_asflags "-mdspr2" &&
3779
     check_inline_asm mipsdspr2 '"absq_s.qb $t0, $t1"'
3780
    enabled mipsfpu   && add_cflags "-mhard-float" && add_asflags "-mhard-float" &&
3781
     check_inline_asm mipsfpu   '"madd.d $f0, $f2, $f4, $f6"'
3782

3783 3784 3785 3786 3787 3788 3789 3790
elif enabled parisc; then

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

3791
elif enabled ppc; then
3792

3793 3794
    enable local_aligned_8 local_aligned_16

3795 3796 3797 3798
    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)'
3799 3800 3801

    # AltiVec flags: The FSF version of GCC differs from the Apple version
    if enabled altivec; then
3802
        nogas=warn
3803 3804 3805 3806 3807 3808 3809 3810
        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) {
3811 3812 3813
    vector signed int v1 = (vector signed int) { 0 };
    vector signed int v2 = (vector signed int) { 1 };
    v1 = vec_add(v1, v2);
3814 3815 3816 3817
    return 0;
}
EOF

3818
        enabled altivec || warn "Altivec disabled, possibly missing --cpu flag"
3819
    fi
3820

3821
elif enabled sparc; then
3822

3823
    enabled vis && check_inline_asm vis '"pdist %f0, %f0, %f0"'
3824

3825
elif enabled x86; then
3826

3827 3828
    check_builtin rdtsc    intrin.h   "__rdtsc()"
    check_builtin mm_empty mmintrin.h "_mm_empty()"
3829

3830 3831
    enable local_aligned_8 local_aligned_16

3832 3833 3834 3835
    # 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.
3836
    check_exec_crash <<EOF && enable ebp_available
3837 3838 3839
volatile int i=0;
__asm__ volatile ("xorl %%ebp, %%ebp" ::: "%ebp");
return i;
3840 3841
EOF

Reimar Döffinger's avatar
Reimar Döffinger committed
3842
    # check whether EBX is available on x86
3843 3844
    check_inline_asm ebx_available '""::"b"(0)' &&
        check_inline_asm ebx_available '"":::"%ebx"'
3845

3846
    # check whether xmm clobbers are supported
3847
    check_inline_asm xmm_clobbers '"":::"%xmm0"'
3848

3849
    # check whether binutils is new enough to compile SSSE3/MMXEXT
3850 3851
    enabled ssse3  && check_inline_asm ssse3_inline  '"pabsw %xmm0, %xmm0"'
    enabled mmxext && check_inline_asm mmxext_inline '"pmaxub %mm0, %mm1"'
3852

3853
    if ! disabled_any asm mmx yasm; then
3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869
        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

3870
        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
3871
            die "yasm not found, use --disable-yasm for a crippled build"
3872 3873
        check_yasm "vextractf128 xmm0, ymm0, 0"      || disable avx_external
        check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
3874
        check_yasm "CPU amdnop" && enabled i686 && enable cpunop
3875
    fi
3876

3877 3878 3879 3880 3881 3882
    case "$cpu" in
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
            disable fast_clz
        ;;
    esac

3883 3884
fi

3885 3886
if enabled asm; then
    as=${gas:=$as}
3887
    check_as <<EOF && enable gnu_as || \
3888
        $nogas "GNU assembler not found, install gas-preprocessor"
3889 3890 3891 3892 3893
.macro m n
\n: .int 0
.endm
m x
EOF
3894 3895
fi

3896 3897
check_ldflags -Wl,--as-needed

3898 3899 3900 3901
if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
3902 3903
fi

3904
if ! disabled network; then
3905 3906
    check_type "sys/types.h sys/socket.h" socklen_t
    check_type netdb.h "struct addrinfo"
3907 3908
    check_type netinet/in.h "struct group_source_req" -D_BSD_SOURCE
    check_type netinet/in.h "struct ip_mreq_source" -D_BSD_SOURCE
3909 3910
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
    check_type netinet/in.h "struct sockaddr_in6"
3911
    check_type poll.h "struct pollfd"
3912 3913
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
3914
    check_type netinet/sctp.h "struct sctp_event_subscribe"
3915
    check_func getaddrinfo $network_extralibs
3916
    check_func getservbyport $network_extralibs
3917 3918 3919 3920
    # Prefer arpa/inet.h over winsock2
    if check_header arpa/inet.h ; then
        check_func closesocket
    elif check_header winsock2.h ; then
3921 3922 3923
        check_func_headers winsock2.h closesocket -lws2 &&
            network_extralibs="-lws2" ||
        { check_func_headers winsock2.h closesocket -lws2_32 &&
3924
            network_extralibs="-lws2_32"; }
3925
        check_func_headers ws2tcpip.h getaddrinfo $network_extralibs
3926 3927
        check_type ws2tcpip.h socklen_t
        check_type ws2tcpip.h "struct addrinfo"
3928 3929
        check_type ws2tcpip.h "struct group_source_req"
        check_type ws2tcpip.h "struct ip_mreq_source"
3930
        check_type ws2tcpip.h "struct ipv6_mreq"
3931
        check_type winsock2.h "struct pollfd"
3932 3933 3934 3935 3936 3937 3938 3939
        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

3940 3941 3942
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }

3943
check_func  access
3944
check_func  clock_gettime || { check_func clock_gettime -lrt && add_extralibs -lrt; }
Måns Rullgård's avatar
Måns Rullgård committed
3945
check_func  fcntl
3946
check_func  fork
3947
check_func_headers stdlib.h getenv
3948
check_func  gethrtime
3949
check_func  getopt
3950
check_func  getrusage
3951
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
3952
check_func  gettimeofday
3953
check_func  inet_aton $network_extralibs
3954
check_func  isatty
3955
check_func  localtime_r
3956
check_func  ${malloc_prefix}memalign            && enable memalign
3957
check_func  mkstemp
3958
check_func  mmap
3959
check_func  mprotect
3960
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
3961
check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
Måns Rullgård's avatar
Måns Rullgård committed
3962
check_func  setrlimit
3963
check_func  strerror_r
3964
check_func  sched_getaffinity
3965
check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
3966
check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
3967
check_builtin atomic_cas_ptr atomic.h "void **ptr; void *oldval, *newval; atomic_cas_ptr(ptr, oldval, newval)"
3968
check_builtin MemoryBarrier windows.h "MemoryBarrier()"
3969
check_func  sysconf
3970
check_func  sysctl
3971
check_func  usleep
3972
check_func_headers conio.h kbhit
3973
check_func_headers windows.h PeekNamedPipe
3974
check_func_headers io.h setmode
3975
check_func_headers lzo/lzo1x.h lzo1x_999_compress
3976
check_lib2 "windows.h shellapi.h" CommandLineToArgvW -lshell32
3977
check_lib2 "windows.h wincrypt.h" CryptGenRandom -ladvapi32
3978
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
3979
check_func_headers windows.h GetProcessAffinityMask
3980
check_func_headers windows.h GetProcessTimes
3981
check_func_headers windows.h GetSystemTimeAsFileTime
3982
check_func_headers windows.h MapViewOfFile
3983
check_func_headers windows.h SetConsoleTextAttribute
3984
check_func_headers windows.h Sleep
3985
check_func_headers windows.h VirtualAlloc
3986
check_func_headers glob.h glob
3987
check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
3988

3989
check_header cl/cl.h
3990
check_header direct.h
3991
check_header dlfcn.h
3992
check_header dxva.h
3993
check_header dxva2api.h -D_WIN32_WINNT=0x0600
3994
check_header io.h
3995
check_header libcrystalhd/libcrystalhd_if.h
3996
check_header malloc.h
3997
check_header poll.h
3998
check_header sys/mman.h
3999
check_header sys/param.h
4000
check_header sys/resource.h
4001
check_header sys/select.h
4002
check_header sys/time.h
4003
check_header termios.h
4004
check_header unistd.h
4005 4006
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
4007
check_header VideoDecodeAcceleration/VDADecoder.h
4008
check_header windows.h
4009
check_header X11/extensions/XvMClib.h
4010
check_header asm/types.h
4011

4012
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
4013
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
4014

4015
if ! disabled w32threads && ! enabled pthreads; then
4016
    check_func_headers "windows.h process.h" _beginthreadex && enable w32threads
4017 4018
fi

4019 4020
# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
4021
if ! disabled pthreads && ! enabled w32threads && ! enabled os2threads; then
4022
    enable pthreads
Måns Rullgård's avatar
Måns Rullgård committed
4023 4024 4025 4026
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
4027
        add_extralibs -pthread
Måns Rullgård's avatar
Måns Rullgård committed
4028 4029
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
4030
        add_extralibs -pthreads
4031 4032
    elif check_func pthread_create -lpthreadGC2; then
        add_extralibs -lpthreadGC2
Måns Rullgård's avatar
Måns Rullgård committed
4033
    elif ! check_lib pthread.h pthread_create -lpthread; then
4034
        disable pthreads
Måns Rullgård's avatar
Måns Rullgård committed
4035
    fi
4036 4037
fi

4038
for thread in $THREADS_LIST; do
4039
    if enabled $thread; then
4040 4041
        test -n "$thread_type" &&
            die "ERROR: Only one thread type must be selected." ||
4042 4043 4044 4045
            thread_type="$thread"
    fi
done

4046 4047 4048 4049
if enabled pthreads; then
  check_func pthread_cancel
fi

4050
enabled sync_val_compare_and_swap && enable atomics_gcc
4051
enabled machine_rw_barrier && enabled atomic_cas_ptr && enable atomics_suncc
4052 4053
enabled MemoryBarrier && enable atomics_win32

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

4057 4058 4059
atan2f_args=2
ldexpf_args=2
powf_args=2
4060

4061
for func in $MATH_FUNCS; do
4062
    eval check_mathfunc $func \${${func}_args:-1}
4063 4064
done

4065
# these are off by default, so fail if requested and not available
d s's avatar
d s committed
4066 4067 4068
enabled avisynth   && { { check_lib2 "windows.h" LoadLibrary; } ||
                        { check_lib2 "dlfcn.h" dlopen -ldl; } ||
                        die "ERROR: LoadLibrary/dlopen not found for avisynth"; }
4069
enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit
Stefano Sabatini's avatar
Stefano Sabatini committed
4070
enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
4071
enabled gnutls     && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init
4072
enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883
tipok's avatar
tipok committed
4073
enabled libaacplus && require  "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus
4074
enabled libass     && require_pkg_config libass ass/ass.h ass_library_init
Petri Hintukainen's avatar
Petri Hintukainen committed
4075
enabled libbluray  && require libbluray libbluray/bluray.h bd_open -lbluray
4076 4077
enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0 &&
                      { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
4078
                        die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
Paul B Mahol's avatar
Paul B Mahol committed
4079
enabled libcaca    && require_pkg_config caca caca.h caca_create_canvas
4080
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
4081
enabled libfdk_aac && require  libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
4082
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"
4083
enabled libflite   && require2 libflite "flite/flite.h" flite_init $flite_libs
4084
enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
4085 4086 4087
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"; }
4088
enabled libilbc    && require  libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
4089
enabled libmodplug && require  libmodplug libmodplug/modplug.h ModPlug_Load -lmodplug
4090
enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
4091
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
4092 4093
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
4094
enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
4095 4096 4097
enabled libopenjpeg && { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg ||
                         check_lib openjpeg.h opj_version -lopenjpeg ||
                         die "ERROR: libopenjpeg not found"; }
4098
enabled libopus    && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create
4099
enabled libpulse && require_pkg_config libpulse-simple pulse/simple.h pa_simple_new
4100
enabled libquvi    && require_pkg_config libquvi quvi/quvi.h quvi_init
4101 4102
enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
4103
enabled libshine   && require_pkg_config shine shine/layer3.h shine_encode_frame
4104
enabled libsoxr    && require  libsoxr soxr.h soxr_create -lsoxr
4105
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
Mohamed Naufal's avatar
Mohamed Naufal committed
4106
enabled libstagefright_h264  && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h
4107
    media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h
4108
    media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static
4109
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
4110 4111
enabled libtwolame && require  libtwolame twolame.h twolame_init -ltwolame &&
                      { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame ||
4112
                        die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; }
4113
enabled libutvideo    && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++
4114
enabled libv4l2    && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl
4115
enabled libvidstab && require_pkg_config vidstab vid.stab/libvidstab.h vsMotionDetectInit
4116
enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
4117
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
4118
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
4119
enabled libvpx     && {
4120
    enabled libvpx_vp8_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
4121
                                die "ERROR: libvpx decoder version must be >=0.9.1"; }
4122 4123
    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 ||
                                die "ERROR: libvpx encoder version must be >=0.9.7"; }
4124 4125
    enabled libvpx_vp9_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder;  }
    enabled libvpx_vp9_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx" -lvpx || disable libvpx_vp9_encoder; } }
4126
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
4127
                      { check_cpp_condition x264.h "X264_BUILD >= 118" ||
4128
                        die "ERROR: libx264 must be installed and version must be >= 0.118."; }
4129
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
4130
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
4131
enabled libzmq     && require_pkg_config libzmq zmq.h zmq_ctx_new
4132 4133 4134 4135
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)" ||
4136
                        die "ERROR: openal must be installed and version must be 1.1 or compatible"; }
4137 4138 4139 4140 4141 4142
enabled opencl     && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL ||
                        check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL ||
                        die "ERROR: opencl not found"; } &&
                      { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" ||
                        check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" ||
                        die "ERROR: opencl must be installed and version must be 1.2 or compatible"; }
4143 4144 4145 4146
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"; }
4147

Samuel Pitoiset's avatar
Samuel Pitoiset committed
4148 4149 4150 4151 4152
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

4153 4154 4155 4156 4157 4158 4159 4160 4161
# 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

4162
SDL_CONFIG="${cross_prefix}sdl-config"
4163
if check_pkg_config sdl SDL_events.h SDL_PollEvent; then
4164
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4165 4166
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
    enable sdl
4167 4168
else
  if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
4169 4170
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
    sdl_libs=$("${SDL_CONFIG}" --libs)
4171
    check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
4172
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
4173 4174
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags &&
    enable sdl
4175
  fi
4176
fi
4177
enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
4178

4179
texi2html --help 2> /dev/null | grep -q 'init-file' && enable texi2html || disable texi2html
4180
makeinfo --version > /dev/null 2>&1 && enable makeinfo  || disable makeinfo
4181
perl --version > /dev/null 2>&1 && enable perl || disable perl
4182
pod2man --help > /dev/null 2>&1 && enable pod2man || disable pod2man
4183
rsync --help 2> /dev/null | grep -q 'contimeout' && enable rsync_contimeout || disable rsync_contimeout
4184

4185
check_header linux/fb.h
4186 4187
check_header linux/videodev.h
check_header linux/videodev2.h
4188
check_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_safe struct_v4l2_frmivalenum_discrete
4189

4190
check_header sys/videoio.h
4191

4192
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
4193 4194 4195
# 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
4196

4197 4198
check_type "dshow.h" IBaseFilter

4199
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
Ramiro Polla's avatar
Ramiro Polla committed
4200 4201 4202 4203 4204 4205 4206
{ 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
4207

4208
check_header sndio.h
4209 4210 4211 4212 4213 4214 4215 4216
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
4217
check_header soundcard.h
Måns Rullgård's avatar
Måns Rullgård committed
4218

4219
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
4220

4221
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
4222
    check_func jack_port_get_latency_range -ljack
4223

4224 4225
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio

4226 4227 4228
if enabled libcdio; then
    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
fi
4229

4230 4231 4232 4233
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
4234

4235 4236 4237
enabled vaapi &&
    check_lib va/va.h vaInitialize -lva ||
    disable vaapi
4238

4239
enabled vdpau &&
4240
    check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
4241
    disable vdpau
4242

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

4246
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
4247 4248 4249

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
4250
check_cflags -Wall
4251
check_cflags -Wno-parentheses
4252
check_cflags -Wno-switch
4253
check_cflags -Wno-format-zero-length
Michael Niedermayer's avatar
Michael Niedermayer committed
4254 4255 4256
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
4257
check_cflags -Wno-pointer-sign
4258
check_cflags -Wwrite-strings
4259
check_cflags -Wtype-limits
4260
check_cflags -Wundef
4261
check_cflags -Wmissing-prototypes
4262
check_cflags -Wno-pointer-to-int-cast
4263
check_cflags -Wstrict-prototypes
4264
enabled extra_warnings && check_cflags -Winline
4265

4266
# add some linker flags
4267
check_ldflags -Wl,--warn-common
4268
check_ldflags -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample
4269
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
4270

4271
enabled xmm_clobber_test &&
4272 4273 4274 4275 4276 4277 4278
    check_ldflags -Wl,--wrap,avcodec_open2              \
                  -Wl,--wrap,avcodec_decode_audio4      \
                  -Wl,--wrap,avcodec_decode_video2      \
                  -Wl,--wrap,avcodec_decode_subtitle2   \
                  -Wl,--wrap,avcodec_encode_audio2      \
                  -Wl,--wrap,avcodec_encode_video       \
                  -Wl,--wrap,avcodec_encode_subtitle    \
4279
                  -Wl,--wrap,sws_scale ||
4280 4281
    disable xmm_clobber_test

4282
echo "X{};" > $TMPV
4283
if test_ldflags -Wl,--version-script,$TMPV; then
4284
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
4285 4286
    check_cc <<EOF && enable symver_asm_label
void ff_foo(void) __asm__ ("av_foo@VERSION");
4287
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
4288 4289 4290 4291 4292 4293
EOF
    check_cc <<EOF && enable symver_gnu_asm
__asm__(".symver ff_foo,av_foo@VERSION");
void ff_foo(void) {}
EOF
fi
4294

4295 4296 4297 4298 4299 4300 4301 4302
if [ -z "$optflags" ]; then
    if enabled small; then
        optflags=$cflags_size
    elif enabled optimizations; then
        optflags=$cflags_speed
    else
        optflags=$cflags_noopt
    fi
4303
fi
4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314

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
4315
fi
4316 4317 4318 4319

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

4321 4322
enabled ftrapv && check_cflags -ftrapv

4323 4324 4325 4326
check_cc -mno-red-zone <<EOF && noredzone_flags="-mno-red-zone"
int x;
EOF

4327

4328
if enabled icc; then
Måns Rullgård's avatar
Måns Rullgård committed
4329 4330 4331 4332
    # Just warnings, no remarks
    check_cflags -w1
    # -wd: Disable following warnings
    # 144, 167, 556: -Wno-pointer-sign
4333
    # 188: enumerated type mixed with another type
4334
    # 1292: attribute "foo" ignored
4335
    # 1419: external declaration in primary source file
Måns Rullgård's avatar
Måns Rullgård committed
4336
    # 10006: ignoring unknown option -fno-signed-zeros
4337
    # 10148: ignoring unknown option -Wno-parentheses
Måns Rullgård's avatar
Måns Rullgård committed
4338
    # 10156: ignoring option '-W'; no argument required
4339
    check_cflags -wd144,167,188,556,1292,1419,10006,10148,10156
Måns Rullgård's avatar
Måns Rullgård committed
4340 4341 4342
    # 11030: Warning unknown option --as-needed
    # 10156: ignoring option '-export'; no argument required
    check_ldflags -wd10156,11030
4343 4344
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
    enable ebp_available
4345
    if enabled x86_32; then
4346
        icc_version=$($cc -dumpversion)
4347 4348
        test ${icc_version%%.*} -ge 11 &&
            check_cflags -falign-stack=maintain-16-byte ||
4349 4350
            disable aligned_stack
    fi
4351 4352
elif enabled ccc; then
    # disable some annoying warnings
4353 4354 4355 4356
    add_cflags -msg_disable bitnotint
    add_cflags -msg_disable mixfuncvoid
    add_cflags -msg_disable nonstandcast
    add_cflags -msg_disable unsupieee
4357
elif enabled gcc; then
4358
    check_optflags -fno-tree-vectorize
4359
    check_cflags -Werror=implicit-function-declaration
4360
    check_cflags -Werror=missing-prototypes
4361
    check_cflags -Werror=return-type
4362
    check_cflags -Werror=vla
4363 4364
elif enabled llvm_gcc; then
    check_cflags -mllvm -stack-alignment=16
4365
elif enabled clang; then
4366
    check_cflags -mllvm -stack-alignment=16
4367
    check_cflags -Qunused-arguments
4368 4369
    check_cflags -Werror=implicit-function-declaration
    check_cflags -Werror=missing-prototypes
4370
    check_cflags -Werror=return-type
4371 4372
elif enabled armcc; then
    # 2523: use of inline assembler is deprecated
4373 4374
    add_cflags -W${armcc_opt},--diag_suppress=2523
    add_cflags -W${armcc_opt},--diag_suppress=1207
4375
    add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
4376
    add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
4377 4378
    add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
    add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
4379 4380
elif enabled tms470; then
    add_cflags -pds=824 -pds=837
4381 4382
elif enabled pathscale; then
    add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
4383 4384
elif enabled msvc; then
    enabled x86_32 && disable aligned_stack
4385 4386 4387 4388 4389 4390 4391
elif enabled icl; then
    enabled x86_32 && disable aligned_stack
    check_cflags -W1 # Just warnings, no remark spam
    # basically -fstrict-aliasing for icl that doesn't work (correctly) on 13.x+
    check_cpp_condition "windows.h" "__ICL < 1300" && add_cflags -Qansi-alias
    # icl will pass the inline asm tests but inline asm is currently not supported (build will fail)
    disable inline_asm
4392 4393
fi

Mans Rullgard's avatar
Mans Rullgard committed
4394
case $target_os in
4395 4396 4397
    osf1)
        enabled ccc && add_ldflags '-Wl,-expect_unresolved,*'
    ;;
Mans Rullgard's avatar
Mans Rullgard committed
4398 4399 4400 4401 4402
    plan9)
        add_cppflags -Dmain=plan9_main
    ;;
esac

4403
enable frame_thread_encoder
4404
enabled_any $THREADS_LIST      && enable threads
4405
enabled_any $ATOMICS_LIST      && enable atomics_native
4406

4407 4408
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }

4409
check_deps $CONFIG_LIST       \
4410
           $CONFIG_EXTRA      \
4411
           $HAVE_LIST         \
4412
           $ALL_COMPONENTS    \
4413

4414

4415
if test $target_os = "haiku"; then
4416 4417 4418 4419
    disable memalign
    disable posix_memalign
fi

4420
! enabled_any memalign posix_memalign aligned_malloc &&
4421 4422
    enabled_any $need_memalign && enable memalign_hack

4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449
# 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

4450
echo "install prefix            $prefix"
Diego Biurrun's avatar
Diego Biurrun committed
4451 4452 4453
echo "source path               $source_path"
echo "C compiler                $cc"
echo "ARCH                      $arch ($cpu)"
4454 4455
if test "$build_suffix" != ""; then
    echo "build suffix              $build_suffix"
4456
fi
4457 4458 4459
if test "$progs_suffix" != ""; then
    echo "progs suffix              $progs_suffix"
fi
4460 4461 4462
if test "$extra_version" != ""; then
    echo "version string suffix     $extra_version"
fi
4463
echo "big-endian                ${bigendian-no}"
4464
echo "runtime cpu detection     ${runtime_cpudetect-no}"
4465
if enabled x86; then
4466
    echo "${yasmexe}                      ${yasm-no}"
4467
    echo "MMX enabled               ${mmx-no}"
4468
    echo "MMXEXT enabled            ${mmxext-no}"
4469
    echo "3DNow! enabled            ${amd3dnow-no}"
4470
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
4471
    echo "SSE enabled               ${sse-no}"
4472
    echo "SSSE3 enabled             ${ssse3-no}"
4473
    echo "AVX enabled               ${avx-no}"
4474
    echo "FMA4 enabled              ${fma4-no}"
4475
    echo "i686 features enabled     ${i686-no}"
4476
    echo "CMOV is fast              ${fast_cmov-no}"
4477 4478
    echo "EBX available             ${ebx_available-no}"
    echo "EBP available             ${ebp_available-no}"
4479
fi
4480
if enabled arm; then
4481 4482
    echo "ARMv5TE enabled           ${armv5te-no}"
    echo "ARMv6 enabled             ${armv6-no}"
4483
    echo "ARMv6T2 enabled           ${armv6t2-no}"
4484
    echo "VFP enabled               ${vfp-no}"
4485
    echo "NEON enabled              ${neon-no}"
4486
    echo "THUMB enabled             ${thumb-no}"
4487
fi
4488
if enabled mips; then
4489 4490 4491 4492
    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}"
4493
fi
4494
if enabled ppc; then
4495
    echo "AltiVec enabled           ${altivec-no}"
4496
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
4497
    echo "dcbzl available           ${dcbzl-no}"
4498 4499 4500
fi
if enabled sparc; then
    echo "VIS enabled               ${vis-no}"
4501
fi
4502
echo "debug symbols             ${debug-no}"
4503
echo "strip symbols             ${stripping-no}"
4504
echo "optimize for size         ${small-no}"
4505
echo "optimizations             ${optimizations-no}"
4506 4507
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
4508
echo "postprocessing support    ${postproc-no}"
4509
echo "new filter support        ${avfilter-no}"
4510 4511
echo "network support           ${network-no}"
echo "threading support         ${thread_type-no}"
4512
echo "safe bitstream reader     ${safe_bitstream_reader-no}"
4513
echo "SDL support               ${sdl-no}"
4514
echo "opencl enabled            ${opencl-no}"
4515
echo "libshine enabled          ${libshine-no}"
4516
echo "texi2html enabled         ${texi2html-no}"
4517
echo "perl enabled              ${perl-no}"
4518 4519
echo "pod2man enabled           ${pod2man-no}"
echo "makeinfo enabled          ${makeinfo-no}"
4520 4521
test -n "$random_seed" &&
    echo "random seed               ${random_seed}"
4522
echo
Fabrice Bellard's avatar
Fabrice Bellard committed
4523

4524 4525 4526 4527
echo "External libraries:"
print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns
echo

4528
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
4529
    echo "Enabled ${type}s:"
4530
    eval list=\$$(toupper $type)_LIST
4531
    print_enabled '_*' $list | print_3_columns
4532
    echo
4533 4534
done

4535
license="LGPL version 2.1 or later"
4536
if enabled nonfree; then
4537
    license="nonfree and unredistributable"
4538 4539 4540 4541
elif enabled gplv3; then
    license="GPL version 3 or later"
elif enabled lgplv3; then
    license="LGPL version 3 or later"
4542
elif enabled gpl; then
4543
    license="GPL version 2 or later"
4544 4545 4546
fi

echo "License: $license"
4547

4548
echo "Creating config.mak, config.h, and doc/config.texi..."
4549

4550
test -e Makefile || $ln_s "$source_path/Makefile" .
4551

4552 4553
enabled stripping || strip="echo skipping strip"

4554
config_files="$TMPH config.mak doc/config.texi"
4555

4556 4557
cat > config.mak <<EOF
# Automatically generated by configure - do not modify!
4558 4559
ifndef FFMPEG_CONFIG_MAK
FFMPEG_CONFIG_MAK=1
4560
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
4561 4562 4563 4564 4565 4566 4567
prefix=$prefix
LIBDIR=\$(DESTDIR)$libdir
SHLIBDIR=\$(DESTDIR)$shlibdir
INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir
MANDIR=\$(DESTDIR)$mandir
4568
SRC_PATH=$source_path
4569 4570 4571
ifndef MAIN_MAKEFILE
SRC_PATH:=\$(SRC_PATH:.%=..%)
endif
4572
CC_IDENT=$cc_ident
4573 4574
ARCH=$arch
CC=$cc
Mohamed Naufal's avatar
Mohamed Naufal committed
4575
CXX=$cxx
4576 4577 4578
AS=$as
LD=$ld
DEPCC=$dep_cc
4579 4580 4581
DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS)
DEPAS=$as
DEPASFLAGS=$DEPASFLAGS \$(CPPFLAGS)
4582
YASM=$yasmexe
4583
DEPYASM=$yasmexe
4584
AR=$ar
4585 4586
ARFLAGS=$arflags
AR_O=$ar_o
4587
RANLIB=$ranlib
4588
CP=cp -p
4589
LN_S=$ln_s
4590
STRIP=$strip
4591 4592
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
Mohamed Naufal's avatar
Mohamed Naufal committed
4593
CXXFLAGS=$CXXFLAGS
4594
ASFLAGS=$ASFLAGS
4595
AS_C=$AS_C
4596
AS_O=$AS_O
4597
CC_C=$CC_C
4598
CC_E=$CC_E
4599
CC_O=$CC_O
4600
CXX_C=$CXX_C
Mohamed Naufal's avatar
Mohamed Naufal committed
4601
CXX_O=$CXX_O
4602
LD_O=$LD_O
4603 4604
LD_LIB=$LD_LIB
LD_PATH=$LD_PATH
4605
DLLTOOL=$dlltool
4606
LDFLAGS=$LDFLAGS
4607
LDFLAGS-ffserver=$FFSERVERLDFLAGS
4608
SHFLAGS=$(echo $($ldflags_filter $SHFLAGS))
4609 4610
YASMFLAGS=$YASMFLAGS
BUILDSUF=$build_suffix
4611
PROGSSUF=$progs_suffix
4612 4613 4614 4615 4616 4617 4618 4619 4620
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
4621
CXXDEP=$CXXDEP
4622
CCDEP_FLAGS=$CCDEP_FLAGS
4623
ASDEP=$ASDEP
4624
ASDEP_FLAGS=$ASDEP_FLAGS
4625 4626 4627
CC_DEPFLAGS=$CC_DEPFLAGS
AS_DEPFLAGS=$AS_DEPFLAGS
HOSTCC=$host_cc
4628
HOSTLD=$host_ld
4629
HOSTCFLAGS=$host_cflags
4630
HOSTCPPFLAGS=$host_cppflags
4631 4632 4633
HOSTEXESUF=$HOSTEXESUF
HOSTLDFLAGS=$host_ldflags
HOSTLIBS=$host_libs
4634 4635 4636 4637 4638
DEPHOSTCC=$host_cc
DEPHOSTCCFLAGS=$DEPHOSTCCFLAGS \$(HOSTCCFLAGS)
HOSTCCDEP=$HOSTCCDEP
HOSTCCDEP_FLAGS=$HOSTCCDEP_FLAGS
HOSTCC_DEPFLAGS=$HOSTCC_DEPFLAGS
4639
HOSTCC_C=$HOSTCC_C
4640
HOSTCC_O=$HOSTCC_O
4641
HOSTLD_O=$HOSTLD_O
4642
TARGET_EXEC=$target_exec $target_exec_args
4643
TARGET_PATH=$target_path
4644
TARGET_SAMPLES=${target_samples:-\$(SAMPLES)}
4645 4646
LIBS-ffplay=$sdl_libs
CFLAGS-ffplay=$sdl_cflags
4647
ZLIB=$($ldflags_filter -lz)
4648 4649
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
EXTRALIBS=$extralibs
4650
COMPAT_OBJS=$compat_objs
4651
EXEOBJS=$exeobjs
4652
INSTALL=$install
4653 4654 4655 4656 4657 4658
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}
4659 4660 4661 4662
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}
4663
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
4664
NOREDZONE_FLAGS=$noredzone_flags
4665
EOF
4666

4667
get_version(){
4668
    lcname=lib${1}
4669 4670
    name=$(toupper $lcname)
    file=$source_path/$lcname/version.h
4671
    eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
4672
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
4673 4674
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
4675
    eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> config.mak
4676 4677
}

4678
map 'get_version $v' $LIBRARY_LIST
4679

4680 4681
cat > $TMPH <<EOF
/* Automatically generated by configure - do not modify! */
4682 4683 4684
#ifndef FFMPEG_CONFIG_H
#define FFMPEG_CONFIG_H
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
4685
#define FFMPEG_LICENSE "$(c_escape $license)"
4686
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
4687
#define AVCONV_DATADIR "$(eval c_escape $datadir)"
4688
#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
4689
#define av_restrict $_restrict
4690 4691
#define EXTERN_PREFIX "${extern_prefix}"
#define EXTERN_ASM ${extern_prefix}
4692
#define SLIBSUF "$SLIBSUF"
4693
#define HAVE_MMX2 HAVE_MMXEXT
4694
EOF
4695

4696 4697 4698
test -n "$assert_level" &&
    echo "#define ASSERT_LEVEL $assert_level" >>$TMPH

4699 4700 4701
test -n "$malloc_prefix" &&
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH

4702 4703 4704 4705 4706
if enabled yasm; then
    append config_files $TMPASM
    printf '' >$TMPASM
fi

4707 4708
enabled getenv || echo "#define getenv(x) NULL" >> $TMPH

4709

4710 4711 4712
mkdir -p doc
echo "@c auto-generated by configure" > doc/config.texi

4713 4714 4715
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
4716
                                     $CONFIG_EXTRA      \
4717
                                     $ALL_COMPONENTS    \
4718

4719
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
4720
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
4721

Diego Biurrun's avatar
Diego Biurrun committed
4722
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
4723
cp_if_changed $TMPH config.h
4724
touch .config
Nick Kurshev's avatar
Nick Kurshev committed
4725

4726 4727
enabled yasm && cp_if_changed $TMPASM config.asm

4728 4729 4730 4731 4732 4733
cat > $TMPH <<EOF
/* Generated by ffconf */
#ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H
EOF

4734
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
4735 4736 4737 4738 4739

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

cp_if_changed $TMPH libavutil/avconfig.h

4740 4741 4742 4743
if test -n "$WARNINGS"; then
    printf "\n$WARNINGS"
    enabled fatal_warnings && exit 1
fi
4744

4745
# build pkg-config files
4746

4747
pkgconfig_generate(){
4748 4749 4750 4751 4752 4753 4754 4755
    name=$1
    shortname=${name#lib}${build_suffix}
    comment=$2
    version=$3
    libs=$4
    requires=$5
    enabled ${name#lib} || return 0
    mkdir -p $name
4756
    cat <<EOF > $name/$name${build_suffix}.pc
4757
prefix=$prefix
4758
exec_prefix=\${prefix}
4759
libdir=$libdir
4760
includedir=$incdir
4761

4762 4763 4764
Name: $name
Description: $comment
Version: $version
4765
Requires: $(enabled shared || echo $requires)
4766
Requires.private: $(enabled shared && echo $requires)
4767
Conflicts:
4768
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4769
Libs.private: $(enabled shared && echo $libs)
4770
Cflags: -I\${includedir}
4771
EOF
4772 4773 4774 4775

mkdir -p doc/examples/pc-uninstalled
includedir=${source_path}
[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.."
4776
    cat <<EOF > doc/examples/pc-uninstalled/$name.pc
4777 4778
prefix=
exec_prefix=
4779 4780
libdir=\${pcfiledir}/../../../$name
includedir=${includedir}
4781

4782 4783 4784 4785
Name: $name
Description: $comment
Version: $version
Requires: $requires
4786
Conflicts:
4787
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
4788 4789
Cflags: -I\${includedir}
EOF
4790
}
4791

4792 4793 4794 4795 4796 4797 4798 4799
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%, }
4800

4801 4802
lavd_libs="libavformat${build_suffix} = $LIBAVFORMAT_VERSION"
enabled lavfi_indev && prepend lavd_libs "libavfilter${build_suffix} = $LIBAVFILTER_VERSION,"
4803

4804
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
4805 4806
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"
4807
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$lavd_libs"
4808
pkgconfig_generate libavfilter "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$lavfi_libs"
4809 4810 4811 4812
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"
4813 4814 4815 4816

fix_ffmpeg_remote(){
    git_remote_from=$1
    git_remote_to=$2
4817
    fixme_remote=$(git --git-dir=$source_path/.git --work-tree=$source_path remote -v | grep $git_remote_from | cut -f 1 | sort | uniq)
4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835
    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