configure 104 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
show_help(){
58 59 60 61 62 63
cat <<EOF
Usage: configure [options]
Options: [defaults in brackets after descriptions]

Standard options:
  --help                   print this message
64
  --logfile=FILE           log tests and output to FILE [config.log]
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
  --disable-logging        do not log configure debug information
  --prefix=PREFIX          install in PREFIX [$prefix]
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
  --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]

Configuration options:
  --disable-static         do not build static libraries [no]
  --enable-shared          build shared libraries [no]
  --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]
  --disable-doc            do not build documentation
  --disable-ffmpeg         disable ffmpeg build
  --disable-ffplay         disable ffplay build
Stefano Sabatini's avatar
Stefano Sabatini committed
85
  --disable-ffprobe        disable ffprobe build
86
  --disable-ffserver       disable ffserver build
87 88 89 90
  --disable-avdevice       disable libavdevice build
  --disable-avcodec        disable libavcodec build
  --disable-avformat       disable libavformat build
  --disable-swscale        disable libswscale build
91
  --disable-postproc       disable libpostproc build
92
  --disable-avfilter       disable video filter support [no]
93
  --disable-pthreads       disable pthreads [auto]
94 95 96 97 98 99 100 101
  --enable-w32threads      use Win32 threads [no]
  --enable-x11grab         enable X11 grabbing [no]
  --disable-network        disable network support [no]
  --enable-gray            enable full grayscale support (slower color)
  --disable-swscale-alpha  disable alpha channel support in swscale
  --disable-fastdiv        disable table-based division
  --enable-small           optimize for size instead of speed
  --disable-aandct         disable AAN DCT code
102
  --disable-dct            disable DCT code
103 104
  --disable-fft            disable FFT code
  --disable-golomb         disable Golomb code
105
  --disable-huffman        disable Huffman code
106 107 108
  --disable-lpc            disable LPC code
  --disable-mdct           disable MDCT code
  --disable-rdft           disable RDFT code
109 110
  --enable-vaapi           enable VAAPI code [autodetect]
  --enable-vdpau           enable VDPAU code [autodetect]
111
  --disable-dxva2          disable DXVA2 code
112 113 114
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
115
  --disable-everything     disable all components listed below
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
  --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
  --disable-indev=NAME     disable input device NAME
  --disable-outdev=NAME    disable output device NAME
  --disable-indevs         disable input devices
  --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
  --list-decoders          show all available decoders
  --list-encoders          show all available encoders
  --list-hwaccels          show all available hardware accelerators
  --list-muxers            show all available muxers
  --list-demuxers          show all available demuxers
  --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

External library support:
  --enable-avisynth        enable reading of AVISynth script files [no]
  --enable-bzlib           enable bzlib [autodetect]
163
  --enable-libcelt         enable CELT/Opus decoding via libcelt [no]
Stefano Sabatini's avatar
Stefano Sabatini committed
164
  --enable-frei0r          enable frei0r video filtering
165 166
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
167
  --enable-libopencv       enable video filtering via libopencv [no]
168 169 170 171
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                           and libraw1394 [no]
  --enable-libdirac        enable Dirac support via libdirac [no]
  --enable-libfaac         enable FAAC support via libfaac [no]
172
  --enable-libfreetype     enable libfreetype [no]
173 174 175 176 177
  --enable-libgsm          enable GSM support via libgsm [no]
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
  --enable-libnut          enable NUT (de)muxing via libnut,
                           native (de)muxer exists [no]
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
178
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
179 180 181
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
  --enable-libspeex        enable Speex decoding via libspeex [no]
  --enable-libtheora       enable Theora encoding via libtheora [no]
182
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
183
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
184 185
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
                           native implementation exists [no]
James Zern's avatar
James Zern committed
186
  --enable-libvpx          enable VP8 support via libvpx [no]
187
  --enable-libx264         enable H.264 encoding via x264 [no]
188
  --enable-libxavs         enable AVS encoding via xavs [no]
189 190
  --enable-libxvid         enable Xvid encoding via xvidcore,
                           native MPEG-4/Xvid encoder exists [no]
191
  --enable-openal          enable OpenAL 1.1 capture support [no]
192 193 194 195 196 197 198 199 200 201 202 203
  --enable-mlib            enable Sun medialib [no]
  --enable-zlib            enable zlib [autodetect]

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
  --nm=NM                  use nm tool
204
  --ar=AR                  use archive tool AR [$ar_default]
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
  --as=AS                  use assembler AS [$as_default]
  --cc=CC                  use C compiler CC [$cc_default]
  --ld=LD                  use linker LD
  --host-cc=HOSTCC         use host C compiler HOSTCC
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
  --host-libs=HLIBS        use libs HLIBS when linking for host
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
  --extra-libs=ELIBS       add ELIBS [$ELIBS]
  --extra-version=STRING   version string suffix []
  --build-suffix=SUFFIX    library name suffix []
  --arch=ARCH              select architecture [$arch]
  --cpu=CPU                select the minimum required CPU (affects
                           instruction selection, may crash on older CPUs)
220
  --disable-asm            disable all assembler optimizations
221 222 223 224 225 226 227
  --disable-altivec        disable AltiVec optimizations
  --disable-amd3dnow       disable 3DNow! optimizations
  --disable-amd3dnowext    disable 3DNow! extended optimizations
  --disable-mmx            disable MMX optimizations
  --disable-mmx2           disable MMX2 optimizations
  --disable-sse            disable SSE optimizations
  --disable-ssse3          disable SSSE3 optimizations
228
  --disable-avx            disable AVX optimizations
229 230 231 232 233 234 235 236 237 238
  --disable-armv5te        disable armv5te optimizations
  --disable-armv6          disable armv6 optimizations
  --disable-armv6t2        disable armv6t2 optimizations
  --disable-armvfp         disable ARM VFP optimizations
  --disable-iwmmxt         disable iwmmxt optimizations
  --disable-mmi            disable MMI optimizations
  --disable-neon           disable neon optimizations
  --disable-vis            disable VIS optimizations
  --disable-yasm           disable use of yasm assembler
  --enable-pic             build position-independent code
239
  --malloc-prefix=PFX      prefix malloc and related names with PFX
240
  --enable-sram            allow use of on-chip SRAM
241
  --disable-symver         disable symbol versioning
242
  --optflags               override optimization-related compiler flags
243

244
Developer options (useful when working on FFmpeg itself):
245 246 247 248
  --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
249
  --disable-stripping      disable stripping of executables and shared libraries
250 251
  --samples=PATH           location of test samples for FATE, if not set use
                           \$FATE_SAMPLES at make invocation time.
252 253 254

NOTE: Object files are built at the place where configure is launched.
EOF
255
  exit 0
256
}
257

258 259
quotes='""'

260
log(){
261
    echo "$@" >> $logfile
262 263
}

264
log_file(){
Måns Rullgård's avatar
Måns Rullgård committed
265
    log BEGIN $1
266
    pr -n -t $1 >> $logfile
Måns Rullgård's avatar
Måns Rullgård committed
267 268 269
    log END $1
}

270
echolog(){
Måns Rullgård's avatar
Måns Rullgård committed
271
    log "$@"
272
    echo "$@"
273 274
}

275 276 277 278 279
warn(){
    log "WARNING: $*"
    WARNINGS="${WARNINGS}WARNING: $*\n"
}

280 281 282
die(){
    echolog "$@"
    cat <<EOF
283

284
If you think configure made a mistake, make sure you are using the latest
285
version from Git.  If the latest version fails, report the problem to the
286
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
287
EOF
288
    if disabled logging; then
289
        cat <<EOF
290 291
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
292 293 294
EOF
    else
cat <<EOF
295 296
Include the log file "$logfile" produced by configure as this will help
solving the problem.
297 298
EOF
    fi
299 300 301
    exit 1
}

302
# Avoid locale weirdness, besides we really just want to translate ASCII.
303
toupper(){
304
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
305 306
}

307
tolower(){
308
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
309 310
}

311 312 313 314
c_escape(){
    echo "$*" | sed 's/["\\]/\\\0/g'
}

315 316
sh_quote(){
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
317
    test "x$v" = "x${v#*[!A-Za-z0-9_/.+-]}" || v="'$v'"
318 319 320
    echo "$v"
}

321 322 323 324
cleanws(){
    echo "$@" | sed 's/^ *//;s/  */ /g;s/ *$//'
}

325 326 327 328
filter(){
    pat=$1
    shift
    for v; do
329
        eval "case $v in $pat) echo $v ;; esac"
330 331 332
    done
}

333 334 335 336 337 338 339 340
filter_out(){
    pat=$1
    shift
    for v; do
        eval "case $v in $pat) ;; *) echo $v ;; esac"
    done
}

341 342 343
map(){
    m=$1
    shift
344
    for v; do eval $m; done
345 346
}

347 348 349 350 351 352 353 354
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

355 356 357 358 359 360 361 362
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

363 364 365 366 367 368 369 370 371 372
set_safe(){
    var=$1
    shift
    eval $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')='$*'
}

get_safe(){
    eval echo \$$(echo "$1" | sed 's/[^A-Za-z0-9_]/_/g')
}

373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391
pushvar(){
    for var in $*; do
        eval level=\${${var}_level:=0}
        eval ${var}_${level}="\$$var"
        eval ${var}_level=$(($level+1))
    done
}

popvar(){
    for var in $*; do
        eval level=\${${var}_level:-0}
        test $level = 0 && continue
        eval level=$(($level-1))
        eval $var="\${${var}_${level}}"
        eval ${var}_level=$level
        eval unset ${var}_${level}
    done
}

392 393 394 395 396 397 398 399
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

400 401 402 403 404 405 406 407
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

408
enable_safe(){
409 410 411
    for var; do
        enable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
412 413 414
}

disable_safe(){
415 416 417
    for var; do
        disable $(echo "$var" | sed 's/[^A-Za-z0-9_]/_/g')
    done
418 419
}

420 421 422 423
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
424 425
        eval sgs="\$${var}_suggest"
        pushvar var sgs
426
        enable_deep $sel
427 428
        popvar sgs
        enable_deep_weak $sgs
429 430 431 432 433 434 435 436 437
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

438 439 440 441 442
enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

443
enabled(){
444 445
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
446 447
}

448
disabled(){
449 450
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
451 452
}

453 454 455 456 457 458
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

459 460 461 462 463 464
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

465 466 467 468 469 470
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

471 472 473 474
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
475
    return 1
476 477
}

478 479
set_default(){
    for opt; do
480
        eval : \${$opt:=\$${opt}_default}
481 482 483
    done
}

484 485 486 487 488 489 490 491 492
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

493 494
check_deps(){
    for cfg; do
495
        cfg="${cfg#!}"
496 497 498 499
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking

500 501
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
502
        eval dep_sel="\$${cfg}_select"
503
        eval dep_sgs="\$${cfg}_suggest"
504 505
        eval dep_ifa="\$${cfg}_if"
        eval dep_ifn="\$${cfg}_if_any"
506

507 508 509
        pushvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
        check_deps $dep_all $dep_any $dep_sel $dep_sgs $dep_ifa $dep_ifn
        popvar cfg dep_all dep_any dep_sel dep_sgs dep_ifa dep_ifn
510

511 512
        [ -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
513 514
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
515
        disabled_any $dep_sel && disable $cfg
516

517 518 519
        if enabled $cfg; then
            eval dep_extralibs="\$${cfg}_extralibs"
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
520
            enable_deep $dep_sel
521
            enable_deep_weak $dep_sgs
522 523
        fi

524
        disable ${cfg}_checking
525 526 527
    done
}

528 529 530 531 532 533 534 535 536 537
print_config_h(){
    enabled $1 && v=1 || v=0
    echo "#define $2 $v"
}

print_config_mak(){
    enabled $1 && v= || v=!
    echo "$v$2=yes"
}

538 539 540 541
print_config_asm(){
    enabled $1 && echo "%define $2"
}

542 543
print_config(){
    pfx=$1
544 545
    files=$2
    shift 2
546
    for cfg; do
547
        ucname="$(toupper $cfg)"
548 549 550
        for f in $files; do
            "print_config_${f##*.}" $cfg ${pfx}${ucname} >>$f
        done
551
    done
552 553
}

554 555 556 557 558 559 560 561 562
print_enabled(){
    test "$1" = -n && end=" " && shift || end="\n"
    suf=$1
    shift
    for v; do
        enabled $v && printf "%s$end" ${v%$suf};
    done
}

563 564 565 566 567 568
append(){
    var=$1
    shift
    eval "$var=\"\$$var $*\""
}

569 570 571 572 573 574
prepend(){
    var=$1
    shift
    eval "$var=\"$* \$$var\""
}

575
add_cppflags(){
576
    append CPPFLAGS $($filter_cppflags "$@")
577 578
}

579
add_cflags(){
580
    append CFLAGS $($filter_cflags "$@")
581 582
}

583
add_asflags(){
584
    append ASFLAGS $($filter_asflags "$@")
585 586
}

587 588 589 590 591
add_ldflags(){
    append LDFLAGS "$@"
}

add_extralibs(){
592
    prepend extralibs "$@"
593 594
}

595
check_cmd(){
596
    log "$@"
597
    "$@" >> $logfile 2>&1
598 599
}

600
check_cc(){
601
    log check_cc "$@"
602
    cat > $TMPC
603
    log_file $TMPC
604
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -c -o $TMPO $TMPC
605 606 607 608
}

check_cpp(){
    log check_cpp "$@"
609
    cat > $TMPC
610
    log_file $TMPC
611
    check_cmd $cc $CPPFLAGS $CFLAGS "$@" -E -o $TMPO $TMPC
612 613
}

614 615 616 617
check_as(){
    log check_as "$@"
    cat > $TMPC
    log_file $TMPC
618
    check_cmd $as $CPPFLAGS $ASFLAGS "$@" -c -o $TMPO $TMPC
619 620
}

621 622 623
check_asm(){
    log check_asm "$@"
    name="$1"
624
    code="$2"
625
    shift 2
626 627
    disable $name
    check_as "$@" <<EOF && enable $name
628
void foo(void){ __asm__ volatile($code); }
629 630 631
EOF
}

Loren Merritt's avatar
Loren Merritt committed
632 633 634 635 636 637 638 639
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

640
check_ld(){
641
    log check_ld "$@"
642 643 644 645 646
    flags=''
    libs=''
    for f; do
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
    done
647
    check_cc $($filter_cflags $flags) || return
648
    check_cmd $ld $LDFLAGS $flags -o $TMPE $TMPO $libs $extralibs
649 650
}

651 652
check_cppflags(){
    log check_cppflags "$@"
653 654
    set -- $($filter_cppflags "$@")
    check_cc "$@" <<EOF && append CPPFLAGS "$@"
655 656 657 658
int x;
EOF
}

659
check_cflags(){
660
    log check_cflags "$@"
661 662
    set -- $($filter_cflags "$@")
    check_cc "$@" <<EOF && append CFLAGS "$@"
663 664 665 666
int x;
EOF
}

667 668 669
test_ldflags(){
    log test_ldflags "$@"
    check_ld "$@" <<EOF
670
int main(void){ return 0; }
671 672 673
EOF
}

674 675 676 677 678
check_ldflags(){
    log check_ldflags "$@"
    test_ldflags "$@" && add_ldflags "$@"
}

679
check_header(){
680
    log check_header "$@"
681 682
    header=$1
    shift
683 684
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
685 686 687 688 689 690
#include <$header>
int x;
EOF
}

check_func(){
691
    log check_func "$@"
692 693
    func=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
694 695
    disable $func
    check_ld "$@" <<EOF && enable $func
696
extern int $func();
697
int main(void){ $func(); }
698 699 700
EOF
}

701
check_mathfunc(){
702
    log check_mathfunc "$@"
703 704 705 706 707
    func=$1
    shift
    disable $func
    check_ld "$@" <<EOF && enable $func
#include <math.h>
708 709
float foo(float f) { return $func(f); }
int main(void){ return 0; }
710 711 712
EOF
}

713 714
check_func_headers(){
    log check_func_headers "$@"
715
    headers=$1
716
    funcs=$2
717
    shift 2
718 719 720 721 722 723 724 725 726
    {
        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; }"
    } | check_ld "$@" && enable $funcs && enable_safe $headers
727 728
}

729 730 731 732
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
733 734
    shift 2
    check_cpp $($filter_cppflags "$@") <<EOF
735 736 737 738 739 740 741
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

742 743 744 745 746
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
747
    check_header $header && check_func $func "$@" && add_extralibs "$@"
748 749
}

750 751 752
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
753
    funcs="$2"
754
    shift 2
755
    check_func_headers "$headers" "$funcs" "$@" && add_extralibs "$@"
756 757
}

758 759 760 761 762 763
check_pkg_config(){
    log check_pkg_config "$@"
    pkg="$1"
    headers="$2"
    funcs="$3"
    shift 3
764
    $pkg_config --exists $pkg 2>/dev/null || return
765 766 767 768 769 770 771
    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
}

772
check_exec(){
773
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
774 775
}

776
check_exec_crash(){
777
    code=$(cat)
778 779 780 781 782 783 784

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

785
    (check_exec "$@") >> $logfile 2>&1 <<EOF
786 787 788 789
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
Diego Biurrun's avatar
Diego Biurrun committed
790
int main(void){
791 792 793 794 795 796 797 798 799 800 801
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
    { $code }
}
EOF
}

802 803 804 805 806
check_type(){
    log check_type "$@"
    headers=$1
    type=$2
    shift 2
807
    disable_safe "$type"
808 809 810 811 812
    incs=""
    for hdr in $headers; do
        incs="$incs
#include <$hdr>"
    done
813
    check_cc "$@" <<EOF && enable_safe "$type"
814 815 816 817 818
$incs
$type v;
EOF
}

819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836
check_struct(){
    log check_type "$@"
    headers=$1
    struct=$2
    member=$3
    shift 3
    disable_safe "${struct}_${member}"
    incs=""
    for hdr in $headers; do
        incs="$incs
#include <$hdr>"
    done
    check_cc "$@" <<EOF && enable_safe "${struct}_${member}"
$incs
const void *p = &(($struct *)0)->$member;
EOF
}

837 838 839 840 841 842
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
843 844
}

845 846 847 848 849 850 851 852
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

853 854 855 856 857 858 859
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)
}

860 861 862 863 864 865 866 867 868 869 870 871 872 873
check_host_cc(){
    log check_host_cc "$@"
    cat > $TMPC
    log_file $TMPC
    check_cmd $host_cc $host_cflags "$@" -c -o $TMPO $TMPC
}

check_host_cflags(){
    log check_host_cflags "$@"
    check_host_cc "$@" <<EOF && append host_cflags "$@"
int x;
EOF
}

874 875 876 877 878 879
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

880
cp_if_changed(){
881 882 883
    cmp -s "$1" "$2" && echo "$2 is unchanged" && return
    mkdir -p "$(dirname $2)"
    cp -f "$1" "$2"
884 885
}

886 887 888
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

889 890 891 892 893
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
Vitor Sessak's avatar
Vitor Sessak committed
894
    filters
895
    hwaccels
896
    indevs
897
    muxers
898
    outdevs
899 900 901 902 903 904
    parsers
    protocols
"

CONFIG_LIST="
    $COMPONENT_LIST
905
    aandct
906
    ac3dsp
907 908
    avcodec
    avdevice
909
    avfilter
910
    avformat
911
    avisynth
912
    bzlib
913
    crystalhd
914
    dct
915
    doc
916
    dwt
917
    dxva2
918
    fastdiv
919 920
    ffmpeg
    ffplay
Stefano Sabatini's avatar
Stefano Sabatini committed
921
    ffprobe
922
    ffserver
923
    fft
Stefano Sabatini's avatar
Stefano Sabatini committed
924
    frei0r
925
    golomb
926
    gpl
927
    gray
928
    h264dsp
929
    h264pred
Aurelien Jacobs's avatar
Aurelien Jacobs committed
930
    hardcoded_tables
931
    huffman
932
    libcelt
Ramiro Polla's avatar
Ramiro Polla committed
933
    libdc1394
934
    libdirac
935
    libfaac
936
    libfreetype
937
    libgsm
938
    libmp3lame
939
    libnut
940 941
    libopencore_amrnb
    libopencore_amrwb
942
    libopencv
943
    libopenjpeg
944
    librtmp
945
    libschroedinger
946
    libspeex
947
    libtheora
948
    libvo_aacenc
949
    libvo_amrwbenc
950
    libvorbis
James Zern's avatar
James Zern committed
951
    libvpx
952
    libx264
953
    libxavs
954
    libxvid
955
    lpc
956
    lsp
957
    mdct
958
    memalign_hack
959
    mlib
960
    mpegaudiodsp
961
    network
962
    nonfree
963
    openal
964
    pic
965
    postproc
966
    rdft
967
    rtpdec
968
    runtime_cpudetect
969
    shared
970
    sinewin
971
    small
972
    sram
973
    static
974
    swscale
975
    swscale_alpha
976
    thumb
977 978
    vaapi
    vdpau
979
    version3
980
    x11grab
981
    zlib
982
"
983

984 985 986 987 988
THREADS_LIST='
    pthreads
    w32threads
'

989 990
ARCH_LIST='
    alpha
991
    arm
992 993 994
    avr32
    avr32_ap
    avr32_uc
995 996 997 998
    bfin
    ia64
    m68k
    mips
999
    mips64
1000
    parisc
1001
    ppc
1002
    ppc64
1003 1004 1005 1006
    s390
    sh4
    sparc
    sparc64
1007
    tomi
1008 1009 1010 1011 1012 1013
    x86
    x86_32
    x86_64
'

ARCH_EXT_LIST='
1014
    altivec
1015
    amd3dnow
1016
    amd3dnowext
1017
    armv5te
1018
    armv6
1019
    armv6t2
1020
    armvfp
1021
    avx
1022 1023 1024
    iwmmxt
    mmi
    mmx
1025
    mmx2
1026
    neon
1027
    ppc4xx
1028
    sse
1029
    ssse3
Mans Rullgard's avatar
Mans Rullgard committed
1030
    vfpv3
1031
    vis
1032 1033
'

1034 1035
HAVE_LIST_PUB='
    bigendian
1036
    fast_unaligned
1037 1038
'

1039 1040
HAVE_LIST="
    $ARCH_EXT_LIST
1041
    $HAVE_LIST_PUB
1042
    $THREADS_LIST
1043
    aligned_stack
1044
    alsa_asoundlib_h
1045
    altivec_h
1046
    arpa_inet_h
1047
    attribute_may_alias
1048
    attribute_packed
1049
    bswap
Alex Beregszaszi's avatar
Alex Beregszaszi committed
1050
    closesocket
1051
    cmov
1052
    dcbzl
1053 1054 1055 1056 1057
    dev_bktr_ioctl_bt848_h
    dev_bktr_ioctl_meteor_h
    dev_ic_bt8xx_h
    dev_video_meteor_ioctl_meteor_h
    dev_video_bktr_ioctl_bt848_h
1058
    dlfcn_h
1059
    dlopen
1060
    dos_paths
1061 1062
    ebp_available
    ebx_available
1063 1064
    exp2
    exp2f
1065
    fast_64bit
1066
    fast_clz
1067
    fast_cmov
Måns Rullgård's avatar
Måns Rullgård committed
1068
    fcntl
Måns Rullgård's avatar
Måns Rullgård committed
1069
    fork
1070
    getaddrinfo
1071
    gethrtime
1072
    GetProcessMemoryInfo
1073
    GetProcessTimes
Ramiro Polla's avatar
Ramiro Polla committed
1074
    getrusage
1075
    gnu_as
1076
    struct_rusage_ru_maxrss
1077
    ibm_asm
1078
    inet_aton
1079
    inline_asm
1080
    isatty
1081
    kbhit
Måns Rullgård's avatar
Måns Rullgård committed
1082
    ldbrx
1083
    llrint
1084
    llrintf
1085 1086
    local_aligned_16
    local_aligned_8
1087
    localtime_r
1088
    log2
1089
    log2f
1090
    loongson
1091
    lrint
1092
    lrintf
1093
    lzo1x_999_compress
1094 1095
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
1096
    malloc_h
1097
    MapViewOfFile
1098
    memalign
1099
    mkstemp
1100
    mmap
1101
    posix_memalign
1102 1103
    round
    roundf
1104 1105
    sdl
    sdl_video_size
1106
    setmode
1107
    sndio_h
1108
    socklen_t
Måns Rullgård's avatar
Måns Rullgård committed
1109
    soundcard_h
1110
    poll_h
Måns Rullgård's avatar
Måns Rullgård committed
1111
    setrlimit
1112
    strerror_r
1113
    strptime
Stefano Sabatini's avatar
Stefano Sabatini committed
1114
    strtok_r
1115
    struct_addrinfo
1116 1117
    struct_ipv6_mreq
    struct_sockaddr_in6
1118
    struct_sockaddr_sa_len
1119
    struct_sockaddr_storage
1120 1121 1122
    symver
    symver_gnu_asm
    symver_asm_label
1123
    sys_mman_h
1124
    sys_resource_h
1125
    sys_select_h
Måns Rullgård's avatar
Måns Rullgård committed
1126
    sys_soundcard_h
1127
    sys_videoio_h
1128
    termios_h
1129
    threads
1130
    trunc
1131
    truncf
1132
    vfp_args
1133
    VirtualAlloc
1134
    winsock2_h
1135
    xform_asm
1136
    xmm_clobbers
Loren Merritt's avatar
Loren Merritt committed
1137
    yasm
1138
"
1139

1140 1141
# options emitted with CONFIG_ prefix but not available on command line
CONFIG_EXTRA="
1142
    avutil
1143 1144
    gplv3
    lgplv3
1145 1146
"

1147
CMDLINE_SELECT="
1148
    $ARCH_EXT_LIST
1149
    $CONFIG_LIST
1150
    $THREADS_LIST
1151
    asm
1152
    cross_compile
1153 1154
    debug
    extra_warnings
1155
    logging
1156
    optimizations
1157
    stripping
1158
    symver
1159
    yasm
1160
"
1161 1162

PATHS_LIST='
1163
    bindir
1164
    datadir
1165 1166 1167 1168 1169
    incdir
    libdir
    mandir
    prefix
    shlibdir
1170 1171 1172 1173
'

CMDLINE_SET="
    $PATHS_LIST
1174
    ar
1175
    arch
1176
    as
1177 1178 1179 1180
    build_suffix
    cc
    cpu
    cross_prefix
1181
    dep_cc
1182
    extra_version
1183 1184 1185 1186
    host_cc
    host_cflags
    host_ldflags
    host_libs
1187
    host_os
1188
    install
1189
    ld
1190
    logfile
1191
    malloc_prefix
1192
    nm
1193
    optflags
1194
    pkg_config
Måns Rullgård's avatar
Måns Rullgård committed
1195
    samples
1196
    strip
1197 1198
    sysinclude
    sysroot
1199
    target_exec
1200
    target_os
1201
    target_path
1202
"
1203

1204 1205 1206 1207
CMDLINE_APPEND="
    extra_cflags
"

1208 1209
# code dependency declarations

1210
# architecture extensions
1211

1212 1213
armv5te_deps="arm"
armv6_deps="arm"
1214
armv6t2_deps="arm"
1215 1216
armvfp_deps="arm"
iwmmxt_deps="arm"
1217
neon_deps="arm"
Mans Rullgard's avatar
Mans Rullgard committed
1218
vfpv3_deps="armvfp"
1219

1220
mmi_deps="mips"
1221 1222 1223 1224 1225 1226

altivec_deps="ppc"
ppc4xx_deps="ppc"

vis_deps="sparc"

1227
x86_64_suggest="cmov fast_cmov"
1228 1229
amd3dnow_deps="mmx"
amd3dnowext_deps="amd3dnow"
1230
mmx_deps="x86"
1231 1232 1233
mmx2_deps="mmx"
sse_deps="mmx"
ssse3_deps="sse"
1234
avx_deps="ssse3"
1235

1236
aligned_stack_if_any="ppc x86"
1237
fast_64bit_if_any="alpha ia64 mips64 parisc64 ppc64 sparc64 x86_64"
1238
fast_clz_if_any="alpha armv5te avr32 mips ppc x86"
1239
fast_unaligned_if_any="armv6 ppc x86"
1240

1241
need_memalign="altivec neon sse"
1242
inline_asm_deps="!tms470"
1243

1244 1245
symver_if_any="symver_asm_label symver_gnu_asm"

1246
# subsystems
1247
dct_select="rdft"
1248 1249
mdct_select="fft"
rdft_select="fft"
1250
mpegaudiodsp_select="dct"
1251

1252
# decoders / encoders / hardware accelerators
1253
aac_decoder_select="mdct sinewin"
1254
aac_encoder_select="mdct sinewin"
1255
aac_latm_decoder_select="aac_decoder aac_latm_parser"
1256
ac3_decoder_select="mdct ac3dsp ac3_parser"
1257
ac3_encoder_select="mdct ac3dsp"
1258
ac3_fixed_encoder_select="mdct ac3dsp"
1259
alac_encoder_select="lpc"
1260
amrnb_decoder_select="lsp"
1261
amrwb_decoder_select="lsp"
1262
atrac1_decoder_select="mdct sinewin"
1263
atrac3_decoder_select="mdct"
1264 1265
binkaudio_dct_decoder_select="mdct rdft dct sinewin"
binkaudio_rdft_decoder_select="mdct rdft sinewin"
1266
cavs_decoder_select="golomb"
1267
cook_decoder_select="mdct sinewin"
1268
cscd_decoder_suggest="zlib"
1269
dca_decoder_select="mdct"
1270
dnxhd_encoder_select="aandct"
1271
dxa_decoder_select="zlib"
1272
eac3_decoder_select="ac3_decoder"
1273
eac3_encoder_select="mdct ac3dsp"
1274
eamad_decoder_select="aandct"
1275
eatgq_decoder_select="aandct"
1276
eatqi_decoder_select="aandct"
1277 1278
ffv1_decoder_select="golomb"
flac_decoder_select="golomb"
1279
flac_encoder_select="golomb lpc"
1280 1281
flashsv_decoder_select="zlib"
flashsv_encoder_select="zlib"
1282
flashsv2_encoder_select="zlib"
1283
flv_decoder_select="h263_decoder"
1284
flv_encoder_select="h263_encoder"
1285
fraps_decoder_select="huffman"
1286
h261_encoder_select="aandct"
1287
h263_decoder_select="h263_parser"
1288
h263_encoder_select="aandct"
1289
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1290
h263i_decoder_select="h263_decoder"
1291
h263p_encoder_select="h263_encoder"
1292
h264_decoder_select="golomb h264dsp h264pred"
1293
h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
1294 1295
h264_dxva2_hwaccel_deps="dxva2api_h"
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1296
h264_vaapi_hwaccel_select="vaapi"
1297
h264_vdpau_decoder_select="vdpau h264_decoder"
1298
imc_decoder_select="fft mdct sinewin"
1299 1300
jpegls_decoder_select="golomb"
jpegls_encoder_select="golomb"
1301
ljpeg_encoder_select="aandct"
1302
loco_decoder_select="golomb"
1303
mjpeg_encoder_select="aandct"
1304
mlp_decoder_select="mlp_parser"
1305 1306 1307 1308 1309 1310 1311 1312 1313 1314
mp1_decoder_select="mpegaudiodsp"
mp2_decoder_select="mpegaudiodsp"
mp3adu_decoder_select="mpegaudiodsp"
mp3_decoder_select="mpegaudiodsp"
mp3on4_decoder_select="mpegaudiodsp"
mp1float_decoder_select="mpegaudiodsp"
mp2float_decoder_select="mpegaudiodsp"
mp3adufloat_decoder_select="mpegaudiodsp"
mp3float_decoder_select="mpegaudiodsp"
mp3on4float_decoder_select="mpegaudiodsp"
1315 1316
mpeg1video_encoder_select="aandct"
mpeg2video_encoder_select="aandct"
1317
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1318
mpeg4_encoder_select="h263_encoder"
1319 1320
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1321
mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
1322
mpeg2_crystalhd_decoder_select="crystalhd"
1323 1324
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1325
mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1326
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
1327
mpeg4_crystalhd_decoder_select="crystalhd"
1328
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1329
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1330
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1331
mpeg_xvmc_decoder_select="mpegvideo_decoder"
1332
msmpeg4_crystalhd_decoder_select="crystalhd"
1333
msmpeg4v1_decoder_select="h263_decoder"
1334
msmpeg4v1_encoder_select="h263_encoder"
1335
msmpeg4v2_decoder_select="h263_decoder"
1336
msmpeg4v2_encoder_select="h263_encoder"
1337
msmpeg4v3_decoder_select="h263_decoder"
1338
msmpeg4v3_encoder_select="h263_encoder"
1339 1340
nellymoser_decoder_select="mdct sinewin"
nellymoser_encoder_select="mdct sinewin"
1341 1342
png_decoder_select="zlib"
png_encoder_select="zlib"
1343
qcelp_decoder_select="lsp"
1344
qdm2_decoder_select="mdct rdft mpegaudiodsp"
1345
ra_144_encoder_select="lpc"
1346
rv10_decoder_select="h263_decoder"
1347
rv10_encoder_select="h263_encoder"
1348
rv20_decoder_select="h263_decoder"
1349
rv20_encoder_select="h263_encoder"
1350 1351
rv30_decoder_select="golomb h264pred"
rv40_decoder_select="golomb h264pred"
1352
shorten_decoder_select="golomb"
1353
sipr_decoder_select="lsp"
1354 1355
snow_decoder_select="dwt"
snow_encoder_select="aandct dwt"
1356 1357 1358
sonic_decoder_select="golomb"
sonic_encoder_select="golomb"
sonic_ls_encoder_select="golomb"
1359
svq1_encoder_select="aandct"
1360
svq3_decoder_select="golomb h264dsp h264pred"
1361
svq3_decoder_suggest="zlib"
1362
theora_decoder_select="vp3_decoder"
1363 1364
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
1365
truehd_decoder_select="mlp_decoder"
1366
tscc_decoder_select="zlib"
1367
twinvq_decoder_select="mdct lsp sinewin"
1368
vc1_decoder_select="h263_decoder"
1369
vc1_crystalhd_decoder_select="crystalhd"
1370
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
1371
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1372 1373
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1374 1375
vorbis_decoder_select="mdct"
vorbis_encoder_select="mdct"
1376
vp6_decoder_select="huffman"
1377 1378
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
1379
vp8_decoder_select="h264pred"
1380 1381 1382 1383 1384 1385
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"
1386
wmv1_decoder_select="h263_decoder"
1387
wmv1_encoder_select="h263_encoder"
1388
wmv2_decoder_select="h263_decoder"
1389
wmv2_encoder_select="h263_encoder"
1390
wmv3_decoder_select="vc1_decoder"
1391
wmv3_crystalhd_decoder_select="crystalhd"
1392
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1393 1394
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1395 1396 1397 1398
zlib_decoder_select="zlib"
zlib_encoder_select="zlib"
zmbv_decoder_select="zlib"
zmbv_encoder_select="zlib"
1399

1400
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1401
vaapi_deps="va_va_h"
1402 1403
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"

1404
# parsers
1405
h264_parser_select="golomb h264dsp h264pred"
1406

1407
# external libraries
1408
libcelt_decoder_deps="libcelt"
1409
libdirac_decoder_deps="libdirac !libschroedinger"
1410
libdirac_encoder_deps="libdirac"
1411
libfaac_encoder_deps="libfaac"
1412 1413
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
1414 1415
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
1416
libmp3lame_encoder_deps="libmp3lame"
1417 1418 1419
libopencore_amrnb_decoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_deps="libopencore_amrnb"
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1420
libopenjpeg_decoder_deps="libopenjpeg"
1421 1422
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
1423
libspeex_decoder_deps="libspeex"
1424
libtheora_encoder_deps="libtheora"
1425
libvo_aacenc_encoder_deps="libvo_aacenc"
1426
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1427
libvorbis_encoder_deps="libvorbis"
James Zern's avatar
James Zern committed
1428
libvpx_decoder_deps="libvpx"
James Zern's avatar
James Zern committed
1429
libvpx_encoder_deps="libvpx"
1430
libx264_encoder_deps="libx264"
1431
libxavs_encoder_deps="libxavs"
1432
libxvid_encoder_deps="libxvid"
1433

1434
# demuxers / muxers
1435
ac3_demuxer_select="ac3_parser"
1436
asf_stream_muxer_select="asf_muxer"
1437
avisynth_demuxer_deps="avisynth"
1438
dirac_demuxer_select="dirac_parser"
1439
eac3_demuxer_select="ac3_parser"
1440
flac_demuxer_select="flac_parser"
1441
ipod_muxer_select="mov_muxer"
1442 1443
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
1444
matroska_audio_muxer_select="matroska_muxer"
1445 1446
matroska_demuxer_suggest="zlib bzlib"
mov_demuxer_suggest="zlib"
1447
mp3_demuxer_select="mpegaudio_parser"
1448 1449 1450
mp4_muxer_select="mov_muxer"
mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_d10_muxer_select="mxf_muxer"
1451
ogg_demuxer_select="golomb"
1452
psp_muxer_select="mov_muxer"
1453
rtp_demuxer_select="sdp_demuxer"
1454 1455 1456
rtpdec_select="asf_demuxer rm_demuxer rtp_protocol mpegts_demuxer mov_demuxer"
rtsp_demuxer_select="http_protocol rtpdec"
rtsp_muxer_select="rtp_muxer http_protocol rtp_protocol"
Martin Storsjö's avatar
Martin Storsjö committed
1457
sap_demuxer_select="sdp_demuxer"
1458
sap_muxer_select="rtp_muxer rtp_protocol"
1459
sdp_demuxer_select="rtpdec"
1460
spdif_muxer_select="aac_parser"
1461 1462
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
1463
w64_demuxer_deps="wav_demuxer"
1464 1465

# indevs / outdevs
1466 1467 1468
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"
1469 1470
dshow_indev_deps="IBaseFilter"
dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
1471
dv1394_indev_deps="dv1394 dv_demuxer"
1472
fbdev_indev_deps="linux_fb_h"
1473
jack_indev_deps="jack_jack_h sem_timedwait"
1474
libdc1394_indev_deps="libdc1394"
1475
openal_indev_deps="openal"
1476 1477
oss_indev_deps_any="soundcard_h sys_soundcard_h"
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1478
sdl_outdev_deps="sdl"
1479 1480
sndio_indev_deps="sndio_h"
sndio_outdev_deps="sndio_h"
1481 1482
v4l_indev_deps="linux_videodev_h"
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1483
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1484
vfwcap_indev_extralibs="-lavicap32"
1485
x11_grab_device_indev_deps="x11grab XShmCreateImage"
Roxis's avatar
Roxis committed
1486
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1487

1488
# protocols
1489
gopher_protocol_deps="network"
1490
http_protocol_deps="network"
1491
http_protocol_select="tcp_protocol"
Måns Rullgård's avatar
Måns Rullgård committed
1492
mmsh_protocol_select="http_protocol"
1493
mmst_protocol_deps="network"
1494 1495
rtmp_protocol_select="tcp_protocol"
rtp_protocol_select="udp_protocol"
1496
tcp_protocol_deps="network"
1497
udp_protocol_deps="network"
1498

1499
# filters
1500
blackframe_filter_deps="gpl"
1501
boxblur_filter_deps="gpl"
1502
cropdetect_filter_deps="gpl"
1503
drawtext_filter_deps="libfreetype"
1504
frei0r_filter_deps="frei0r dlopen strtok_r"
1505
frei0r_src_filter_deps="frei0r dlopen strtok_r"
1506
hqdn3d_filter_deps="gpl"
1507 1508
movie_filter_deps="avcodec avformat"
mp_filter_deps="gpl avcodec"
1509
negate_filter_deps="lut_filter"
1510
ocv_filter_deps="libopencv"
1511
scale_filter_deps="swscale"
1512
yadif_filter_deps="gpl"
1513

1514 1515 1516
# libraries
avdevice_deps="avcodec avformat"
avformat_deps="avcodec"
1517
postproc_deps="gpl"
1518

1519
# programs
1520
ffmpeg_deps="avcodec avformat swscale"
1521
ffmpeg_select="buffer_filter buffersink_filter"
1522
ffplay_deps="avcodec avformat swscale sdl"
1523
ffplay_select="buffersink_filter rdft"
1524
ffprobe_deps="avcodec avformat"
1525
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1526
ffserver_extralibs='$ldl'
Måns Rullgård's avatar
Måns Rullgård committed
1527

1528
doc_deps="texi2html"
1529

1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555
# tests

test_deps(){
    suf1=$1
    suf2=$2
    shift 2
    for v; do
        dep=${v%=*}
        tests=${v#*=}
        for name in ${tests}; do
            eval ${name}_test_deps="'${dep}$suf1 ${dep}$suf2'"
        done
    done
}

test_deps _encoder _decoder                                             \
    adpcm_g726=g726                                                     \
    adpcm_ima_qt                                                        \
    adpcm_ima_wav                                                       \
    adpcm_ms                                                            \
    adpcm_swf                                                           \
    adpcm_yamaha=adpcm_yam                                              \
    alac                                                                \
    asv1                                                                \
    asv2                                                                \
    bmp                                                                 \
1556
    dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571
    dvvideo="dv dv50"                                                   \
    ffv1                                                                \
    flac                                                                \
    flashsv                                                             \
    flv                                                                 \
    gif                                                                 \
    h261                                                                \
    h263="h263 h263p"                                                   \
    huffyuv                                                             \
    jpegls                                                              \
    mjpeg="jpg mjpeg ljpeg"                                             \
    mp2                                                                 \
    mpeg1video="mpeg mpeg1b"                                            \
    mpeg2video="mpeg2 mpeg2thread"                                      \
    mpeg4="mpeg4 mpeg4adv mpeg4nr mpeg4thread error rc"                 \
1572
    msmpeg4v3=msmpeg4                                                   \
1573 1574 1575 1576
    msmpeg4v2                                                           \
    pbm=pbmpipe                                                         \
    pcx                                                                 \
    pgm="pgm pgmpipe"                                                   \
1577
    png                                                                 \
1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606
    ppm="ppm ppmpipe"                                                   \
    rawvideo="rgb yuv"                                                  \
    roq                                                                 \
    rv10                                                                \
    rv20                                                                \
    sgi                                                                 \
    snow="snow snowll"                                                  \
    svq1                                                                \
    targa=tga                                                           \
    tiff                                                                \
    wmav1                                                               \
    wmav2                                                               \
    wmv1                                                                \
    wmv2                                                                \

test_deps _muxer _demuxer                                               \
    aiff                                                                \
    pcm_alaw=alaw                                                       \
    asf                                                                 \
    au                                                                  \
    avi                                                                 \
    dv=dv_fmt                                                           \
    ffm                                                                 \
    flv=flv_fmt                                                         \
    gxf                                                                 \
    matroska=mkv                                                        \
    mmf                                                                 \
    mov                                                                 \
    pcm_mulaw=mulaw                                                     \
1607
    mxf="mxf mxf_d10"                                                   \
1608 1609 1610 1611 1612 1613 1614 1615 1616 1617
    nut                                                                 \
    ogg                                                                 \
    rawvideo=pixfmt                                                     \
    rm                                                                  \
    swf                                                                 \
    mpegts=ts                                                           \
    voc                                                                 \
    wav                                                                 \
    yuv4mpegpipe=yuv4mpeg                                               \

1618
ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1619
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1620

Fabrice Bellard's avatar
Fabrice Bellard committed
1621
# default parameters
1622

1623
logfile="config.log"
1624 1625

# installation paths
1626 1627
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
1628
datadir_default='${prefix}/share/ffmpeg'
1629 1630 1631 1632
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
1633 1634

# toolchain
1635
ar_default="ar"
1636
cc_default="gcc"
1637
cc_version=\"unknown\"
1638
host_cc_default="gcc"
1639
install="install"
1640
ln_s="ln -sf"
1641
nm_default="nm"
1642
objformat="elf"
1643
pkg_config_default=pkg-config
Michael Niedermayer's avatar
Michael Niedermayer committed
1644
ranlib="ranlib"
1645
strip_default="strip"
1646
yasmexe="yasm"
1647
nogas=":"
1648

1649 1650
nm_opts='-g'

1651
# machine
1652
arch_default=$(uname -m)
1653
cpu="generic"
1654 1655

# OS
1656 1657
target_os_default=$(tolower $(uname -s))
host_os=$target_os_default
1658 1659

# configurable options
1660 1661
enable avcodec
enable avdevice
1662
enable avfilter
1663
enable avformat
1664
enable avutil
1665
enable asm
1666
enable debug
1667
enable doc
1668
enable fastdiv
1669 1670
enable ffmpeg
enable ffplay
Stefano Sabatini's avatar
Stefano Sabatini committed
1671
enable ffprobe
1672 1673
enable ffserver
enable network
1674
enable optimizations
1675
enable postproc
1676
enable protocols
1677
enable static
1678
enable stripping
1679
enable swscale
1680
enable swscale_alpha
1681 1682

# build settings
1683
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1684
FFSERVERLDFLAGS=-Wl,-E
1685 1686
LIBPREF="lib"
LIBSUF=".a"
1687 1688
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1689 1690
SLIBPREF="lib"
SLIBSUF=".so"
1691
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1692 1693
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
Måns Rullgård's avatar
Måns Rullgård committed
1694
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1695 1696
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
1697

1698
AS_O='-o $@'
1699 1700
CC_O='-o $@'

1701
host_cflags='-D_ISOC99_SOURCE -O3 -g'
1702 1703
host_libs='-lm'

1704
target_path='$(CURDIR)'
1705

1706 1707
# 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
1708
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1709
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1710

1711
# find source path
1712
if test -f configure; then
1713
    source_path=.
1714
else
1715
    source_path=$(cd $(dirname "$0"); pwd)
1716
    echo "$source_path" | grep -q '[[:blank:]]' &&
1717
        die "Out of tree builds are impossible with whitespace in source path."
1718 1719
    test -e "$source_path/config.h" &&
        die "Out of tree builds are impossible with config.h in source dir."
1720 1721
fi

1722
for v in "$@"; do
1723 1724 1725
    r=${v#*=}
    l=${v%"$r"}
    r=$(sh_quote "$r")
1726
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1727
done
1728

1729 1730 1731 1732
find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
1733
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1734 1735 1736 1737
}

ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1738
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1739 1740 1741 1742
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)
1743 1744
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1745
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1746
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1747

1748
find_tests(){
1749
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1750 1751 1752 1753 1754
}

ACODEC_TESTS=$(find_tests acodec)
VCODEC_TESTS=$(find_tests vsynth1)
LAVF_TESTS=$(find_tests lavf)
1755
LAVFI_TESTS=$(find_tests lavfi)
1756
SEEK_TESTS=$(find_tests seek seek_)
1757

1758 1759
pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))

1760 1761 1762 1763 1764 1765
for n in $COMPONENT_LIST; do
    v=$(toupper ${n%s})_LIST
    eval enable \$$v
    eval ${n}_if_any="\$$v"
done

1766
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1767 1768 1769 1770 1771 1772 1773

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

1774
show_list() {
Ramiro Polla's avatar
Ramiro Polla committed
1775 1776
    suffix=_$1
    shift
1777
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1778 1779 1780
    exit 0
}

1781
for opt do
1782 1783
    optval="${opt#*=}"
    case "$opt" in
1784
    --extra-ldflags=*) add_ldflags $optval
1785
    ;;
1786
    --extra-libs=*) add_extralibs $optval
1787
    ;;
1788
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1789
    ;;
1790 1791
    --enable-debug=*) debuglevel="$optval"
    ;;
1792
    --disable-everything)
1793
    map 'eval unset \${$(toupper ${v%s})_LIST}' $COMPONENT_LIST
1794
    ;;
1795
    --enable-*=*|--disable-*=*)
1796
    eval $(echo "${opt%%=*}" | sed 's/--/action=/;s/-/ thing=/')
1797 1798
    is_in "${thing}s" $COMPONENT_LIST || die_unknown "$opt"
    eval list=\$$(toupper $thing)_LIST
1799 1800
    name=$(echo "${optval}" | sed "s/,/_${thing}|/g")_${thing}
    $action $(filter "$name" $list)
1801 1802
    ;;
    --enable-?*|--disable-?*)
1803
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1804
    if is_in $option $COMPONENT_LIST; then
1805
        test $action = disable && action=unset
1806 1807 1808 1809 1810 1811
        eval $action \$$(toupper ${option%s})_LIST
    elif is_in $option $CMDLINE_SELECT; then
        $action $option
    else
        die_unknown $opt
    fi
1812 1813 1814 1815 1816 1817 1818 1819 1820 1821
    ;;
    --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
    ;;
    *)
1822
    optname="${opt%%=*}"
1823 1824
    optname="${optname#--}"
    optname=$(echo "$optname" | sed 's/-/_/g')
1825 1826 1827 1828 1829 1830 1831
    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
1832 1833
    ;;
    esac
1834 1835
done

1836 1837
disabled logging && logfile=/dev/null

1838
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1839 1840
set >> $logfile

1841 1842
test -n "$cross_prefix" && enable cross_compile

1843 1844 1845 1846 1847 1848 1849
if enabled cross_compile; then
    test -n "$arch" && test -n "$target_os" ||
        die "Must specify target arch and OS when cross-compiling"
fi

set_default arch target_os

1850
ar_default="${cross_prefix}${ar_default}"
1851
cc_default="${cross_prefix}${cc_default}"
Måns Rullgård's avatar
Måns Rullgård committed
1852
nm_default="${cross_prefix}${nm_default}"
1853
pkg_config_default="${cross_prefix}${pkg_config_default}"
1854
ranlib="${cross_prefix}${ranlib}"
1855
strip_default="${cross_prefix}${strip_default}"
1856

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

1859
set_default cc nm pkg_config strip sysinclude
1860 1861
enabled cross_compile || host_cc_default=$cc
set_default host_cc
1862

1863 1864 1865 1866 1867
if ! $pkg_config --version >/dev/null 2>&1; then
    warn "$pkg_config not found, library detection may fail."
    pkg_config=false
fi

1868 1869
exesuf() {
    case $1 in
1870
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
1871 1872 1873 1874 1875
    esac
}

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

1877
# set temporary file name
1878
: ${TMPDIR:=$TEMPDIR}
1879
: ${TMPDIR:=$TMP}
1880
: ${TMPDIR:=/tmp}
1881

1882
if ! check_cmd mktemp -u XXXXXX; then
1883 1884 1885
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
1886
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
1887 1888 1889 1890 1891 1892
    }
fi

tmpfile(){
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
        (set -C; exec > $tmp) 2>/dev/null ||
1893
        die "Unable to create temporary file in $TMPDIR."
1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904
    append TMPFILES $tmp
    eval $1=$tmp
}

trap 'rm -f -- $TMPFILES' EXIT

tmpfile TMPC  .c
tmpfile TMPE  $EXESUF
tmpfile TMPH  .h
tmpfile TMPO  .o
tmpfile TMPS  .S
1905
tmpfile TMPV  .ver
1906
tmpfile TMPSH .sh
1907
tmpfile TMPASM .asm
1908 1909

unset -f mktemp
1910

1911 1912
chmod +x $TMPE

1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925
# 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

1926 1927 1928 1929
filter_cflags=echo
filter_cppflags=echo
filter_asflags=echo

1930 1931 1932 1933 1934 1935 1936 1937 1938 1939
if   $cc -v 2>&1 | grep -q '^gcc.*LLVM'; then
    cc_type=llvm_gcc
    cc_version=__VERSION__
    gcc_extra_ver=$(expr "$($cc --version | head -n1)" : '.*\((.*)\)')
    cc_ident="llvm-gcc $($cc -dumpversion) $gcc_extra_ver"
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    speed_cflags='-O3'
    size_cflags='-Os'
elif $cc -v 2>&1 | grep -qi ^gcc; then
1940
    cc_type=gcc
1941
    cc_version=__VERSION__
1942 1943
    gcc_version=$($cc --version | head -n1)
    gcc_basever=$($cc -dumpversion)
1944
    gcc_pkg_ver=$(expr "$gcc_version" : '[^ ]* \(([^)]*)\)')
1945 1946
    gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)")
    cc_ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver")
1947 1948 1949 1950
    if ! $cc -dumpversion | grep -q '^2\.'; then
        CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
        AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    fi
1951 1952
    speed_cflags='-O3'
    size_cflags='-Os'
1953 1954
elif $cc --version 2>/dev/null | grep -q Intel; then
    cc_type=icc
1955
    cc_version="AV_STRINGIFY(__INTEL_COMPILER)"
1956
    cc_ident=$($cc --version | head -n1)
1957
    icc_version=$($cc -dumpversion)
1958 1959
    CC_DEPFLAGS='-MMD'
    AS_DEPFLAGS='-MMD'
1960 1961
    speed_cflags='-O3'
    size_cflags='-Os'
1962
    noopt_cflags='-O1'
1963 1964
elif $cc -v 2>&1 | grep -q xlc; then
    cc_type=xlc
1965
    cc_version="AV_STRINGIFY(__IBMC__)"
1966
    cc_ident=$($cc -qversion 2>/dev/null | head -n1)
1967 1968
    speed_cflags='-O5'
    size_cflags='-O5 -qcompact'
1969 1970
elif $cc -V 2>/dev/null | grep -q Compaq; then
    cc_type=ccc
1971
    cc_version="AV_STRINGIFY(__DECC_VER)"
1972
    cc_ident=$($cc -V | head -n1 | cut -d' ' -f1-3)
1973
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -M'
1974
    debuglevel=3
1975
    add_ldflags -Wl,-z,now # calls to libots crash without this
1976 1977
    speed_cflags='-fast'
    size_cflags='-O1'
1978
elif $cc --vsn 2>/dev/null | grep -q "ARM C/C++ Compiler"; then
1979 1980
    test -d "$sysroot" || die "No valid sysroot specified."
    cc_type=armcc
1981
    cc_version="AV_STRINGIFY(__ARMCC_VERSION)"
1982
    cc_ident=$($cc --vsn | head -n1)
1983 1984 1985 1986 1987 1988
    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."
1989
    $cc --vsn | grep -q RVCT && armcc_opt=rvct || armcc_opt=armcc
1990
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1991
    as_default="${cross_prefix}gcc"
1992 1993
    CC_DEPFLAGS='-MMD'
    AS_DEPFLAGS='-MMD'
1994 1995
    speed_cflags='-O3'
    size_cflags='-Os'
1996
    filter_asflags="filter_out -W${armcc_opt}*"
1997 1998
elif $cc -version 2>/dev/null | grep -q TMS470; then
    cc_type=tms470
1999
    cc_version="AV_STRINGIFY(__TI_COMPILER_VERSION__)"
2000
    cc_ident=$($cc -version | head -n1 | tr -s ' ')
2001 2002 2003 2004 2005 2006 2007
    cc="$cc --gcc --abi=eabi -eo=.o -mc -me"
    CC_O='-fr=$(@D)'
    as_default="${cross_prefix}gcc"
    ld_default="${cross_prefix}gcc"
    TMPO=$(basename $TMPC .c).o
    append TMPFILES $TMPO
    add_cflags -D__gnuc_va_list=va_list -D__USER_LABEL_PREFIX__=
2008 2009
    CC_DEPFLAGS='-ppa -ppd=$(@:.o=.d)'
    AS_DEPFLAGS='-MMD'
2010 2011
    speed_cflags='-O3 -mf=5'
    size_cflags='-O3 -mf=2'
2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028
    filter_cflags=tms470_flags
    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        ;;
2029
                -mfpu=vfpv3)    echo --float_support=vfpv3        ;;
2030
                -msoft-float)   echo --float_support=vfplib       ;;
2031
                -O[0-3]|-mf=*)  echo $flag                        ;;
2032
                -g)             echo -g -mn                       ;;
2033
                -pds=*)         echo $flag                        ;;
2034 2035 2036
            esac
        done
    }
2037 2038
elif $cc -v 2>&1 | grep -q clang; then
    cc_type=clang
2039 2040
    $cc -dM -E $TMPC | grep -q __clang_version__ &&
        cc_version=__clang_version__ || cc_version=__VERSION__
2041
    cc_ident=$($cc --version | head -n1)
2042 2043
    CC_DEPFLAGS='-MMD'
    AS_DEPFLAGS='-MMD'
2044 2045
    speed_cflags='-O3'
    size_cflags='-Os'
2046 2047 2048
elif $cc -V 2>&1 | grep -q Sun; then
    cc_type=suncc
    cc_version="AV_STRINGIFY(__SUNPRO_C)"
2049
    cc_ident=$($cc -V 2>&1 | head -n1 | cut -d' ' -f 2-)
2050
    DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "1s,^.*: ,$@: ," -e "\$$!s,\$$, \\\," -e "1!s,^.*: , ," > $(@:.o=.d)'
2051
    DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -xM1'
2052 2053
    speed_cflags='-O5'
    size_cflags='-O5 -xspace'
2054 2055 2056 2057 2058 2059 2060
    filter_cflags=suncc_flags
    suncc_flags(){
        for flag; do
            case $flag in
                -march=*|-mcpu=*)
                    case "${flag#*=}" in
                        native)                   echo -xtarget=native       ;;
2061
                        v9|niagara)               echo -xarch=sparc          ;;
2062
                        ultrasparc)               echo -xarch=sparcvis       ;;
2063
                        ultrasparc3|niagara2)     echo -xarch=sparcvis2      ;;
2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087
                        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   ;;
                        amdfam10|barcelona)       echo -xarch=sse4_1         ;;
                        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              ;;
                -f*-*|-W*)                                    ;;
                *)                    echo $flag              ;;
            esac
        done
    }
2088
elif $cc -v 2>&1 | grep -q 'PathScale\|Path64'; then
2089 2090 2091 2092 2093 2094 2095
    cc_type=pathscale
    cc_version=__PATHSCALE__
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    speed_cflags='-O2'
    size_cflags='-Os'
2096
    filter_cflags='filter_out -Wdisabled-optimization'
2097 2098 2099 2100 2101 2102 2103 2104
elif $cc -v 2>&1 | grep -q Open64; then
    cc_type=open64
    cc_version=__OPEN64__
    cc_ident=$($cc -v 2>&1 | head -n1 | tr -d :)
    CC_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    AS_DEPFLAGS='-MMD -MF $(@:.o=.d) -MT $@'
    speed_cflags='-O2'
    size_cflags='-Os'
2105
    filter_cflags='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
2106 2107
fi

2108 2109
test -n "$cc_type" && enable $cc_type ||
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2110

2111
: ${as_default:=$cc}
2112
: ${dep_cc_default:=$cc}
2113
: ${ld_default:=$cc}
2114
set_default ar as dep_cc ld
2115

2116 2117 2118
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD

2119
add_cflags $extra_cflags
2120
add_asflags $extra_cflags
2121

2122 2123
if test -n "$sysroot"; then
    case "$cc_type" in
2124
        gcc|llvm_gcc|clang)
2125
            add_cppflags --sysroot="$sysroot"
2126 2127
            add_ldflags --sysroot="$sysroot"
        ;;
2128 2129 2130 2131
        tms470)
            add_cppflags -I"$sysinclude"
            add_ldflags  --sysroot="$sysroot"
        ;;
2132 2133 2134
    esac
fi

2135 2136 2137 2138
if test "$cpu" = host; then
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."

    case "$cc_type" in
2139
        gcc|llvm_gcc)
2140 2141
            check_native(){
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2142
                sed -n "/cc1.*$1=/{
2143 2144 2145 2146
                            s/.*$1=\\([^ ]*\\).*/\\1/
                            p
                            q
                        }" $TMPE
2147 2148 2149 2150 2151 2152 2153 2154
            }
            cpu=$(check_native -march || check_native -mcpu)
        ;;
    esac

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

2155 2156 2157 2158 2159 2160 2161 2162
# Deal with common $arch aliases
case "$arch" in
    arm*)
        arch="arm"
    ;;
    mips|mipsel|IP*)
        arch="mips"
    ;;
2163
    mips64*)
2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176
        arch="mips"
        subarch="mips64"
    ;;
    parisc|hppa)
        arch="parisc"
    ;;
    parisc64|hppa64)
        arch="parisc"
        subarch="parisc64"
    ;;
    "Power Macintosh"|ppc|powerpc)
        arch="ppc"
    ;;
2177
    ppc64|powerpc64)
2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190
        arch="ppc"
        subarch="ppc64"
    ;;
    s390|s390x)
        arch="s390"
    ;;
    sh4|sh)
        arch="sh4"
    ;;
    sun4u|sparc64)
        arch="sparc"
        subarch="sparc64"
    ;;
2191
    i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2192 2193 2194 2195
        arch="x86"
    ;;
esac

2196
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2197
enable $arch
2198

2199
# Add processor-specific flags
2200 2201 2202
if test "$cpu" = generic; then
    : do nothing
elif enabled ppc; then
2203

2204 2205
    case $(tolower $cpu) in
        601|ppc601|powerpc601)
Måns Rullgård's avatar
Måns Rullgård committed
2206
            cpuflags="-mcpu=601"
2207
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
2208
        ;;
2209
        603*|ppc603*|powerpc603*)
Måns Rullgård's avatar
Måns Rullgård committed
2210
            cpuflags="-mcpu=603"
2211
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
2212
        ;;
2213
        604*|ppc604*|powerpc604*)
Måns Rullgård's avatar
Måns Rullgård committed
2214
            cpuflags="-mcpu=604"
2215
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
2216
        ;;
2217
        g3|75*|ppc75*|powerpc75*)
Måns Rullgård's avatar
Måns Rullgård committed
2218
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2219
            disable altivec
Måns Rullgård's avatar
Måns Rullgård committed
2220
        ;;
2221
        g4|745*|ppc745*|powerpc745*)
Måns Rullgård's avatar
Måns Rullgård committed
2222 2223
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
        ;;
2224
        74*|ppc74*|powerpc74*)
Måns Rullgård's avatar
Måns Rullgård committed
2225 2226
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
        ;;
2227
        g5|970|ppc970|powerpc970|power4*)
Måns Rullgård's avatar
Måns Rullgård committed
2228 2229
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
        ;;
2230
        cell)
Måns Rullgård's avatar
Måns Rullgård committed
2231 2232 2233
            cpuflags="-mcpu=cell"
            enable ldbrx
        ;;
2234 2235 2236 2237 2238 2239 2240 2241
        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
2242
    esac
2243 2244 2245

elif enabled x86; then

Måns Rullgård's avatar
Måns Rullgård committed
2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256
    case $cpu in
        i[345]86|pentium)
            cpuflags="-march=$cpu"
            disable mmx
        ;;
        # targets that do NOT support conditional mov (cmov)
        pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
            cpuflags="-march=$cpu"
            disable cmov
        ;;
        # targets that do support conditional mov (cmov)
2257
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx|core2|amdfam10|barcelona|atom)
Måns Rullgård's avatar
Måns Rullgård committed
2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268
            cpuflags="-march=$cpu"
            enable cmov
            enable fast_cmov
        ;;
        # targets that do support conditional mov but on which it's slow
        pentium4|pentium4m|prescott|nocona)
            cpuflags="-march=$cpu"
            enable cmov
            disable fast_cmov
        ;;
    esac
2269 2270 2271

elif enabled sparc; then

Måns Rullgård's avatar
Måns Rullgård committed
2272
    case $cpu in
2273 2274 2275 2276
        niagara)
            cpuflags="-mcpu=$cpu"
            disable vis
        ;;
Måns Rullgård's avatar
Måns Rullgård committed
2277 2278 2279 2280
        sparc64)
            cpuflags="-mcpu=v9"
        ;;
    esac
2281 2282 2283

elif enabled arm; then

2284 2285 2286
    case $cpu in
        armv*)
            cpuflags="-march=$cpu"
2287
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2288 2289 2290
        ;;
        *)
            cpuflags="-mcpu=$cpu"
2291 2292 2293
            case $cpu in
                cortex-a*)                               subarch=armv7a  ;;
                cortex-r*)                               subarch=armv7r  ;;
2294
                cortex-m*)                 enable thumb; subarch=armv7m  ;;
2295 2296 2297 2298
                arm11*)                                  subarch=armv6   ;;
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
            esac
2299 2300
        ;;
    esac
2301 2302 2303

elif enabled alpha; then

2304
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2305 2306 2307

elif enabled bfin; then

2308
    cpuflags="-mcpu=$cpu"
2309 2310 2311

elif enabled mips; then

2312
    cpuflags="-march=$cpu"
2313 2314 2315

elif enabled avr32; then

Måns Rullgård's avatar
Måns Rullgård committed
2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333
    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
2334

2335 2336
fi

2337 2338 2339
add_cflags $cpuflags
add_asflags $cpuflags

2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352
# 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

2353
add_cppflags -D_ISOC99_SOURCE
2354
check_cflags -std=c99
2355
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2356 2357
#include <stdlib.h>
EOF
2358
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2359 2360
#include <stdlib.h>
EOF
2361

2362
check_host_cflags -std=c99
2363
check_host_cflags -Wall
2364

2365
case "$arch" in
2366
    alpha|ia64|mips|parisc|sparc)
2367
        spic=$shared
2368
    ;;
2369
    x86)
2370
        subarch="x86_32"
2371
        check_cc <<EOF && subarch="x86_64"
2372
        int test[(int)sizeof(char*) - 7];
2373
EOF
2374
        if test "$subarch" = "x86_64"; then
2375
            spic=$shared
2376
        fi
2377 2378 2379
    ;;
esac

2380
enable $subarch
2381
enabled spic && enable pic
2382

2383
# OS specific
2384
case $target_os in
2385
    haiku)
2386
        prefix_default="/boot/common"
2387
        network_extralibs="-lnetwork"
François Revol's avatar
François Revol committed
2388
        host_libs=
2389
        ;;
2390 2391
    sunos)
        FFSERVERLDFLAGS=""
2392
        SHFLAGS='-shared -Wl,-h,$$(@F)'
2393
        enabled x86 && SHFLAGS="-mimpure-text $SHFLAGS"
2394
        network_extralibs="-lsocket -lnsl"
2395
        add_cppflags -D__EXTENSIONS__
2396
        nm_opts='-P -g'
2397 2398
        ;;
    netbsd)
2399
        disable symver
2400 2401
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
2402 2403
        ;;
    openbsd)
2404
        enable malloc_aligned
2405
        # On OpenBSD 4.5. the compiler does not use PIC unless
2406
        # explicitly using -fPIC. FFmpeg builds fine without PIC,
2407 2408
        # however the generated executable will not do anything
        # (simply quits with exit-code 1, no crash, no output).
2409
        # Thus explicitly enable PIC here.
2410
        enable pic
2411
        disable symver
2412
        SHFLAGS='-shared'
2413 2414
        oss_indev_extralibs="-lossaudio"
        oss_outdev_extralibs="-lossaudio"
2415
        ;;
2416 2417 2418 2419 2420
    dragonfly)
        enable malloc_aligned
        disable symver
        ;;
    freebsd)
2421
        enable malloc_aligned
2422 2423
        ;;
    bsd/os)
2424
        add_extralibs -lpoll -lgnugetopt
2425
        strip="strip -d"
2426 2427
        ;;
    darwin)
2428
        enable malloc_aligned
2429
        gas="gas-preprocessor.pl $cc"
2430
        enabled ppc && add_asflags -force_cpusubtype_ALL
2431 2432
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)'
        enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress
2433
        strip="${strip} -x"
2434
        add_ldflags -Wl,-dynamic,-search_paths_first
2435 2436 2437 2438
        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
2439
        objformat="macho"
2440
        enabled x86_64 && objformat="macho64"
2441
        enabled_any pic shared ||
2442
            { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; }
2443 2444
        ;;
    mingw32*)
2445
        if test $target_os = "mingw32ce"; then
2446 2447 2448 2449
            disable network
        else
            target_os=mingw32
        fi
2450
        LIBTARGET=i386
2451
        if enabled x86_64; then
2452
            enable malloc_aligned
2453
            LIBTARGET=x64
2454
        elif enabled arm; then
2455
            LIBTARGET=arm-wince
2456
        fi
2457
        shlibdir_default="$bindir_default"
2458 2459 2460 2461
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
2462
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)'
2463 2464 2465 2466
        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)'
2467
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.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
2468
        objformat="win32"
2469
        enable dos_paths
2470
        check_cflags -fno-common
2471 2472
        check_cpp_condition _mingw.h "defined (__MINGW64_VERSION_MAJOR) || (__MINGW32_MAJOR_VERSION > 3) \
                                      || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
Ramiro Polla's avatar
Ramiro Polla committed
2473
                die "ERROR: MinGW runtime version must be >= 3.15."
2474
        add_cppflags -U__STRICT_ANSI__
2475 2476
        ;;
    cygwin*)
2477
        target_os=cygwin
2478
        shlibdir_default="$bindir_default"
2479 2480 2481 2482 2483
        SLIBPREF="cyg"
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
        SHFLAGS='-shared -Wl,--enable-auto-image-base'
Loren Merritt's avatar
Loren Merritt committed
2484
        objformat="win32"
2485
        enable dos_paths
2486
        check_cflags -fno-common
2487
        add_cppflags -U__STRICT_ANSI__
2488
        ;;
2489 2490
    *-dos|freedos|opendos)
        network_extralibs="-lsocket"
2491
        objformat="coff"
2492
        enable dos_paths
2493
        add_cppflags -U__STRICT_ANSI__
2494
        ;;
2495
    linux)
2496
        add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
2497 2498 2499
        enable dv1394
        ;;
    irix*)
2500
        target_os=irix
2501 2502
        ranlib="echo ignoring ranlib"
        ;;
2503
    os/2*)
2504
        strip="lxlite -CS"
2505
        ln_s="cp -f"
2506
        objformat="aout"
2507
        add_cppflags -D_GNU_SOURCE
2508
        add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap
2509
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
2510
        FFSERVERLDFLAGS=""
2511
        LIBSUF="_s.a"
2512 2513 2514 2515
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
2516 2517 2518 2519 2520 2521 2522 2523
        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \
          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'
        SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \
          emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;'
2524
        SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib'
2525
        enable dos_paths
2526
        ;;
2527
    gnu/kfreebsd)
2528
        add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
2529
        ;;
2530 2531
    gnu)
        ;;
2532 2533 2534 2535
    qnx)
        add_cppflags -D_QNX_SOURCE
        network_extralibs="-lsocket"
        ;;
2536 2537 2538
    symbian)
        SLIBSUF=".dll"
        enable dos_paths
2539 2540 2541 2542 2543 2544 2545 2546
        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
2547
        ;;
2548 2549
    none)
        ;;
2550
    *)
2551
        die "Unknown OS '$target_os'."
2552 2553 2554
        ;;
esac

2555
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2556

2557 2558
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic

2559 2560
set_default $PATHS_LIST

2561
# we need to build at least one lib type
2562
if ! enabled_any static shared; then
2563 2564 2565 2566 2567 2568 2569 2570 2571
    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

2572
die_license_disabled() {
2573
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2574 2575 2576
}

die_license_disabled gpl libx264
2577
die_license_disabled gpl libxavs
2578 2579 2580
die_license_disabled gpl libxvid
die_license_disabled gpl x11grab

2581
die_license_disabled nonfree libfaac
2582

2583 2584
die_license_disabled version3 libopencore_amrnb
die_license_disabled version3 libopencore_amrwb
2585
die_license_disabled version3 libvo_aacenc
2586
die_license_disabled version3 libvo_amrwbenc
2587

2588
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2589

2590
disabled optimizations || check_cflags -fomit-frame-pointer
2591

2592 2593
enable_pic() {
    enable pic
2594 2595 2596
    add_cppflags -DPIC
    add_cflags   -fPIC
    add_asflags  -fPIC
2597 2598 2599
}

enabled pic && enable_pic
2600

2601 2602 2603
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
2604
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2605 2606
extern_prefix=${sym%%ff_extern*}

2607 2608 2609
check_cc <<EOF && enable inline_asm
void foo(void) { __asm__ volatile ("" ::); }
EOF
2610

2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621
_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

2622 2623 2624 2625
check_cc <<EOF && enable attribute_may_alias
union { int x; } __attribute__((may_alias)) x;
EOF

2626 2627 2628
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
2629
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2630

2631 2632 2633 2634 2635
if enabled alpha; then

    check_cflags -mieee

elif enabled arm; then
2636

2637
    enabled thumb && check_cflags -mthumb || check_cflags -marm
2638
    nogas=die
2639

2640 2641 2642 2643 2644 2645
    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 ;;
            *) check_ld <<EOF && enable vfp_args && fpabi=vfp || fpabi=soft ;;
2646 2647 2648
__asm__ (".eabi_attribute 28, 1");
int main(void) { return 0; }
EOF
2649 2650 2651
        esac
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
    fi
2652 2653 2654 2655 2656 2657 2658

    enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
    enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
    enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
    enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
    enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
    enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
Mans Rullgard's avatar
Mans Rullgard committed
2659
    enabled vfpv3   && check_asm vfpv3   '"vmov.f32 s0, #1.0"'
2660

2661 2662
    enabled_all armv6t2 shared !pic && enable_pic

2663
elif enabled mips; then
2664

2665 2666
    check_asm loongson '"dmult.g $1, $2, $3"'
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2667

2668
elif enabled ppc; then
2669

2670 2671
    enable local_aligned_8 local_aligned_16

2672
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2673
    check_asm ibm_asm   '"add 0, 0, 0"'
2674
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2675
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2676 2677 2678

    # AltiVec flags: The FSF version of GCC differs from the Apple version
    if enabled altivec; then
2679
        nogas=warn
2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699
        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) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
EOF

        # check if our compiler supports braces for vector declarations
        check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
$inc_altivec_h
int main (void) { (vector int) {1}; return 0; }
EOF
    fi
2700

2701
elif enabled sparc; then
2702

2703 2704
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2705

2706
elif enabled x86; then
2707

2708 2709
    enable local_aligned_8 local_aligned_16

2710 2711 2712 2713
    # 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.
2714
    check_exec_crash <<EOF && enable ebp_available
2715
    volatile int i=0;
2716
    __asm__ volatile (
2717 2718 2719 2720 2721
        "xorl %%ebp, %%ebp"
    ::: "%ebp");
    return i;
EOF

Reimar Döffinger's avatar
Reimar Döffinger committed
2722
    # check whether EBX is available on x86
2723 2724
    check_asm ebx_available '""::"b"(0)' &&
        check_asm ebx_available '"":::"%ebx"'
2725

2726 2727 2728
    # check whether xmm clobbers are supported
    check_asm xmm_clobbers '"":::"%xmm0"'

2729
    # check whether binutils is new enough to compile SSSE3/MMX2
2730
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2731
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2732 2733

    check_asm bswap '"bswap %%eax" ::: "%eax"'
Loren Merritt's avatar
Loren Merritt committed
2734

2735
    if ! disabled_any asm mmx yasm; then
2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751
        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

2752
        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2753
            die "yasm not found, use --disable-yasm for a crippled build"
2754
        check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
2755
    fi
2756

2757 2758 2759 2760 2761 2762
    case "$cpu" in
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
            disable fast_clz
        ;;
    esac

2763 2764
fi

2765 2766 2767 2768 2769 2770
if enabled asm; then
    as=${gas:=$as}
    check_asm gnu_as '".macro m n\n\\n:.int 0\n.endm\nm x"' ||
        $nogas "GNU assembler not found, install gas-preprocessor"
fi

2771 2772
check_ldflags -Wl,--as-needed

2773 2774 2775 2776
if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
2777 2778
fi

2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804
if enabled network; then
    check_type "sys/types.h sys/socket.h" socklen_t
    check_type netdb.h "struct addrinfo"
    check_type netinet/in.h "struct ipv6_mreq" -D_DARWIN_C_SOURCE
    check_type netinet/in.h "struct sockaddr_in6"
    check_type "sys/types.h sys/socket.h" "struct sockaddr_storage"
    check_struct "sys/types.h sys/socket.h" "struct sockaddr" sa_len
    # Prefer arpa/inet.h over winsock2
    if check_header arpa/inet.h ; then
        check_func closesocket
    elif check_header winsock2.h ; then
        check_func_headers winsock2.h closesocket -lws2 && \
            network_extralibs="-lws2" || \
        { check_func_headers winsock2.h closesocket -lws2_32 && \
            network_extralibs="-lws2_32"; }
        check_type ws2tcpip.h socklen_t
        check_type ws2tcpip.h "struct addrinfo"
        check_type ws2tcpip.h "struct ipv6_mreq"
        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

2805 2806 2807
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }

Måns Rullgård's avatar
Måns Rullgård committed
2808
check_func  fcntl
2809
check_func  fork
2810
check_func  getaddrinfo $network_extralibs
2811 2812
check_func  gethrtime
check_func  getrusage
2813
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2814
check_func  inet_aton $network_extralibs
2815
check_func  isatty
2816
check_func  localtime_r
2817
check_func  ${malloc_prefix}memalign            && enable memalign
2818
check_func  mkstemp
2819
check_func  mmap
2820
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
Måns Rullgård's avatar
Måns Rullgård committed
2821
check_func  setrlimit
2822
check_func  strerror_r
2823
check_func  strptime
Stefano Sabatini's avatar
Stefano Sabatini committed
2824
check_func  strtok_r
2825
check_func_headers conio.h kbhit
2826
check_func_headers io.h setmode
2827
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2828
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2829
check_func_headers windows.h GetProcessTimes
2830
check_func_headers windows.h MapViewOfFile
2831
check_func_headers windows.h VirtualAlloc
2832

2833
check_header dlfcn.h
2834
check_header dxva2api.h
2835
check_header libcrystalhd/libcrystalhd_if.h
2836
check_header malloc.h
2837
check_header poll.h
2838
check_header sys/mman.h
2839
check_header sys/resource.h
2840
check_header sys/select.h
2841
check_header termios.h
2842 2843
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
2844
check_header X11/extensions/XvMClib.h
2845

2846 2847
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex

2848
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2849
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2850 2851 2852

# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
2853 2854
if ! disabled pthreads && ! enabled w32threads; then
    enable pthreads
Måns Rullgård's avatar
Måns Rullgård committed
2855 2856 2857 2858
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
2859
        add_extralibs -pthread
Måns Rullgård's avatar
Måns Rullgård committed
2860 2861
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
2862
        add_extralibs -pthreads
2863 2864
    elif check_func pthread_create -lpthreadGC2; then
        add_extralibs -lpthreadGC2
Måns Rullgård's avatar
Måns Rullgård committed
2865
    elif ! check_lib pthread.h pthread_create -lpthread; then
2866
        disable pthreads
Måns Rullgård's avatar
Måns Rullgård committed
2867
    fi
2868 2869
fi

2870
for thread in $THREADS_LIST; do
2871
    if enabled $thread; then
2872 2873
        test -n "$thread_type" &&
            die "ERROR: Only one thread type must be selected." ||
2874 2875 2876 2877
            thread_type="$thread"
    fi
done

2878
check_lib math.h sin -lm && LIBM="-lm"
2879
disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
2880
enabled vaapi && require vaapi va/va.h vaInitialize -lva
Måns Rullgård's avatar
Måns Rullgård committed
2881

2882 2883 2884
check_mathfunc exp2
check_mathfunc exp2f
check_mathfunc llrint
2885
check_mathfunc llrintf
2886 2887 2888 2889 2890 2891
check_mathfunc log2
check_mathfunc log2f
check_mathfunc lrint
check_mathfunc lrintf
check_mathfunc round
check_mathfunc roundf
2892
check_mathfunc trunc
2893
check_mathfunc truncf
2894

2895
# these are off by default, so fail if requested and not available
2896
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2897
enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0
Stefano Sabatini's avatar
Stefano Sabatini committed
2898
enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2899
enabled libdc1394  && require_pkg_config libdc1394-2 dc1394/dc1394.h dc1394_new
2900 2901 2902
enabled libdirac   && require_pkg_config dirac                          \
    "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h"  \
    "dirac_decoder_init dirac_encoder_init"
2903
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2904
enabled libfreetype && require_pkg_config freetype2 "ft2build.h freetype/freetype.h" FT_Init_FreeType
2905
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2906
enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2907
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2908 2909
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
2910
enabled libopencv  && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader
2911
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2912 2913
enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
2914
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2915
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2916
enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
2917
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
2918
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2919 2920 2921
enabled libvpx     && {
    enabled libvpx_decoder && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx ||
                                die "ERROR: libvpx decoder version must be >=0.9.1"; }
2922 2923
    enabled libvpx_encoder && { check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_CQ" -lvpx ||
                                die "ERROR: libvpx encoder version must be >=0.9.6"; } }
2924
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2925 2926
                      { check_cpp_condition x264.h "X264_BUILD >= 115" ||
                        die "ERROR: libx264 version must be >= 0.115."; }
2927
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2928
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2929 2930 2931 2932 2933
enabled openal     && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
                        check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
                        die "ERROR: openal not found"; } &&
                      { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" ||
                        die "ERROR: openal version must be 1.1 or compatible"; }
2934
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2935

2936
SDL_CONFIG="${cross_prefix}sdl-config"
2937 2938 2939 2940 2941 2942
if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
    enable sdl &&
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
else
  if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2943 2944
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
    sdl_libs=$("${SDL_CONFIG}" --libs)
2945
    check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs &&
2946 2947 2948
    check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags &&
    enable sdl &&
    check_struct SDL.h SDL_VideoInfo current_w $sdl_cflags && enable sdl_video_size
2949
  fi
2950
fi
2951
enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs
2952

2953
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2954

2955
check_header linux/fb.h
2956 2957
check_header linux/videodev.h
check_header linux/videodev2.h
2958
check_header sys/videoio.h
2959

2960
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2961 2962 2963
# 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
2964

2965 2966
check_type "dshow.h" IBaseFilter

2967
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
Ramiro Polla's avatar
Ramiro Polla committed
2968 2969 2970 2971 2972 2973 2974
{ 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
2975

2976
check_header sndio.h
2977 2978 2979 2980 2981 2982 2983 2984
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
2985
check_header soundcard.h
Måns Rullgård's avatar
Måns Rullgård committed
2986

2987
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2988

2989
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait
2990

2991 2992
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio

2993
enabled x11grab                         &&
2994 2995
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
2996
check_header X11/extensions/Xfixes.h    &&
2997
check_func XOpenDisplay -lX11           &&
Roxis's avatar
Roxis committed
2998 2999
check_func XShmCreateImage -lX11 -lXext &&
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
3000

3001 3002 3003
if ! disabled vaapi; then
    check_lib va/va.h vaInitialize -lva && {
        check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
3004
        warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
3005 3006
    } || disable vaapi
fi
3007

3008
if ! disabled vdpau && enabled vdpau_vdpau_h; then
3009 3010
check_cpp_condition \
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
3011 3012
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
      disable vdpau; }
3013
fi
3014

3015
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3016 3017 3018

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
3019
check_cflags -Wall
3020
check_cflags -Wno-parentheses
3021
check_cflags -Wno-switch
3022
check_cflags -Wno-format-zero-length
Michael Niedermayer's avatar
Michael Niedermayer committed
3023 3024 3025
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
3026
check_cflags -Wno-pointer-sign
3027
check_cflags -Wcast-qual
3028
check_cflags -Wwrite-strings
3029
check_cflags -Wtype-limits
3030
check_cflags -Wundef
3031
check_cflags -Wmissing-prototypes
3032
check_cflags -Wno-pointer-to-int-cast
3033
enabled extra_warnings && check_cflags -Winline
3034

3035
# add some linker flags
3036
check_ldflags -Wl,--warn-common
3037
check_ldflags -Wl,-rpath-link=libpostproc:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
3038
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3039

3040
echo "X{};" > $TMPV
3041
if test_ldflags -Wl,--version-script,$TMPV; then
3042
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3043 3044
    check_cc <<EOF && enable symver_asm_label
void ff_foo(void) __asm__ ("av_foo@VERSION");
3045
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3046 3047 3048 3049 3050 3051
EOF
    check_cc <<EOF && enable symver_gnu_asm
__asm__(".symver ff_foo,av_foo@VERSION");
void ff_foo(void) {}
EOF
fi
3052

3053 3054 3055
if [ -n "$optflags" ]; then
    add_cflags $optflags
elif enabled small; then
3056
    add_cflags $size_cflags
3057
elif enabled optimizations; then
3058
    add_cflags $speed_cflags
3059 3060
else
    add_cflags $noopt_cflags
3061
fi
3062
check_cflags -fno-math-errno
3063
check_cflags -fno-signed-zeros
3064

3065
if enabled icc; then
Måns Rullgård's avatar
Måns Rullgård committed
3066 3067 3068 3069
    # Just warnings, no remarks
    check_cflags -w1
    # -wd: Disable following warnings
    # 144, 167, 556: -Wno-pointer-sign
3070
    # 1292: attribute "foo" ignored
Måns Rullgård's avatar
Måns Rullgård committed
3071
    # 10006: ignoring unknown option -fno-signed-zeros
3072
    # 10148: ignoring unknown option -Wno-parentheses
Måns Rullgård's avatar
Måns Rullgård committed
3073
    # 10156: ignoring option '-W'; no argument required
3074
    check_cflags -wd144,167,556,1292,10006,10148,10156
Måns Rullgård's avatar
Måns Rullgård committed
3075 3076 3077 3078 3079
    # 11030: Warning unknown option --as-needed
    # 10156: ignoring option '-export'; no argument required
    check_ldflags -wd10156,11030
    # Allow to compile with optimizations
    check_ldflags -march=$cpu
3080 3081
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
    enable ebp_available
3082 3083 3084 3085 3086
    if enabled x86_32; then
        test ${icc_version%%.*} -ge 11 && \
            check_cflags -falign-stack=maintain-16-byte || \
            disable aligned_stack
    fi
3087 3088 3089 3090 3091 3092 3093 3094
elif enabled ccc; then
    # disable some annoying warnings
    add_cflags -msg_disable cvtu32to64
    add_cflags -msg_disable embedcomment
    add_cflags -msg_disable needconstext
    add_cflags -msg_disable nomainieee
    add_cflags -msg_disable ptrmismatch1
    add_cflags -msg_disable unreachcode
3095 3096
elif enabled gcc; then
    check_cflags -fno-tree-vectorize
3097
    check_cflags -Werror=implicit-function-declaration
3098
    check_cflags -Werror=missing-prototypes
3099 3100
elif enabled llvm_gcc; then
    check_cflags -mllvm -stack-alignment=16
3101
elif enabled clang; then
3102
    check_cflags -mllvm -stack-alignment=16
3103
    check_cflags -Qunused-arguments
3104 3105
elif enabled armcc; then
    # 2523: use of inline assembler is deprecated
3106 3107
    add_cflags -W${armcc_opt},--diag_suppress=2523
    add_cflags -W${armcc_opt},--diag_suppress=1207
3108
    add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3109
    add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3110 3111
    add_cflags -W${armcc_opt},--diag_suppress=167  # pointer sign
    add_cflags -W${armcc_opt},--diag_suppress=513  # pointer sign
3112 3113
elif enabled tms470; then
    add_cflags -pds=824 -pds=837
3114 3115
elif enabled pathscale; then
    add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3116 3117
fi

3118 3119 3120
enabled_any $THREADS_LIST      && enable threads

check_deps $CONFIG_LIST       \
3121
           $CONFIG_EXTRA      \
3122 3123 3124
           $HAVE_LIST         \
           $DECODER_LIST      \
           $ENCODER_LIST      \
3125
           $HWACCEL_LIST      \
3126 3127 3128 3129
           $PARSER_LIST       \
           $BSF_LIST          \
           $DEMUXER_LIST      \
           $MUXER_LIST        \
3130
           $FILTER_LIST       \
3131 3132 3133
           $INDEV_LIST        \
           $OUTDEV_LIST       \
           $PROTOCOL_LIST     \
3134 3135 3136
           $ACODEC_TESTS      \
           $VCODEC_TESTS      \
           $LAVF_TESTS        \
3137
           $LAVFI_TESTS       \
3138
           $SEEK_TESTS        \
3139

3140
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3141

3142 3143 3144 3145 3146
if test $target_os == "haiku"; then
    disable memalign
    disable posix_memalign
fi

3147 3148 3149
! enabled_any memalign posix_memalign malloc_aligned &&
    enabled_any $need_memalign && enable memalign_hack

3150
echo "install prefix            $prefix"
Diego Biurrun's avatar
Diego Biurrun committed
3151 3152 3153
echo "source path               $source_path"
echo "C compiler                $cc"
echo "ARCH                      $arch ($cpu)"
3154 3155
if test "$build_suffix" != ""; then
    echo "build suffix              $build_suffix"
3156
fi
3157 3158 3159
if test "$extra_version" != ""; then
    echo "version string suffix     $extra_version"
fi
3160
echo "big-endian                ${bigendian-no}"
3161
echo "runtime cpu detection     ${runtime_cpudetect-no}"
3162
if enabled x86; then
3163
    echo "${yasmexe}                      ${yasm-no}"
3164
    echo "MMX enabled               ${mmx-no}"
3165
    echo "MMX2 enabled              ${mmx2-no}"
3166
    echo "3DNow! enabled            ${amd3dnow-no}"
3167
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
3168
    echo "SSE enabled               ${sse-no}"
3169
    echo "SSSE3 enabled             ${ssse3-no}"
3170
    echo "AVX enabled               ${avx-no}"
3171 3172
    echo "CMOV enabled              ${cmov-no}"
    echo "CMOV is fast              ${fast_cmov-no}"
3173 3174
    echo "EBX available             ${ebx_available-no}"
    echo "EBP available             ${ebp_available-no}"
3175
fi
3176
if enabled arm; then
3177 3178
    echo "ARMv5TE enabled           ${armv5te-no}"
    echo "ARMv6 enabled             ${armv6-no}"
3179
    echo "ARMv6T2 enabled           ${armv6t2-no}"
3180
    echo "ARM VFP enabled           ${armvfp-no}"
3181
    echo "IWMMXT enabled            ${iwmmxt-no}"
3182
    echo "NEON enabled              ${neon-no}"
3183
fi
3184
if enabled mips; then
3185
    echo "MMI enabled               ${mmi-no}"
3186
fi
3187
if enabled ppc; then
3188
    echo "AltiVec enabled           ${altivec-no}"
3189
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
3190
    echo "dcbzl available           ${dcbzl-no}"
3191 3192 3193
fi
if enabled sparc; then
    echo "VIS enabled               ${vis-no}"
3194
fi
3195
echo "debug symbols             ${debug-no}"
3196
echo "strip symbols             ${stripping-no}"
3197
echo "optimize for size         ${small-no}"
3198
echo "optimizations             ${optimizations-no}"
3199 3200
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
3201
echo "postprocessing support    ${postproc-no}"
3202
echo "new filter support        ${avfilter-no}"
3203 3204 3205 3206
echo "network support           ${network-no}"
echo "threading support         ${thread_type-no}"
echo "SDL support               ${sdl-no}"
echo "Sun medialib support      ${mlib-no}"
3207 3208 3209
echo "libdxva2 enabled          ${dxva2-no}"
echo "libva enabled             ${vaapi-no}"
echo "libvdpau enabled          ${vdpau-no}"
3210
echo "AVISynth enabled          ${avisynth-no}"
3211
echo "libcelt enabled           ${libcelt-no}"
Stefano Sabatini's avatar
Stefano Sabatini committed
3212
echo "frei0r enabled            ${frei0r-no}"
Ramiro Polla's avatar
Ramiro Polla committed
3213
echo "libdc1394 support         ${libdc1394-no}"
3214
echo "libdirac enabled          ${libdirac-no}"
3215 3216 3217 3218
echo "libfaac enabled           ${libfaac-no}"
echo "libgsm enabled            ${libgsm-no}"
echo "libmp3lame enabled        ${libmp3lame-no}"
echo "libnut enabled            ${libnut-no}"
3219 3220
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3221
echo "libopencv support         ${libopencv-no}"
3222
echo "libopenjpeg enabled       ${libopenjpeg-no}"
3223
echo "librtmp enabled           ${librtmp-no}"
3224
echo "libschroedinger enabled   ${libschroedinger-no}"
3225
echo "libspeex enabled          ${libspeex-no}"
3226
echo "libtheora enabled         ${libtheora-no}"
3227
echo "libvo-aacenc support      ${libvo_aacenc-no}"
3228
echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3229
echo "libvorbis enabled         ${libvorbis-no}"
James Zern's avatar
James Zern committed
3230
echo "libvpx enabled            ${libvpx-no}"
3231
echo "libx264 enabled           ${libx264-no}"
3232
echo "libxavs enabled           ${libxavs-no}"
3233
echo "libxvid enabled           ${libxvid-no}"
3234
echo "openal enabled            ${openal-no}"
3235
echo "zlib enabled              ${zlib-no}"
3236
echo "bzlib enabled             ${bzlib-no}"
3237
echo
Fabrice Bellard's avatar
Fabrice Bellard committed
3238

3239
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3240
    echo "Enabled ${type}s:"
3241
    eval list=\$$(toupper $type)_LIST
3242
    print_enabled '_*' $list | sort | pr -r -3 -t
3243
    echo
3244 3245
done

3246
license="LGPL version 2.1 or later"
3247
if enabled nonfree; then
3248
    license="nonfree and unredistributable"
3249 3250 3251 3252
elif enabled gplv3; then
    license="GPL version 3 or later"
elif enabled lgplv3; then
    license="LGPL version 3 or later"
3253
elif enabled gpl; then
3254
    license="GPL version 2 or later"
3255 3256 3257
fi

echo "License: $license"
3258

3259 3260
echo "Creating config.mak and config.h..."

3261
test -e Makefile || $ln_s "$source_path/Makefile" .
3262

3263 3264
enabled stripping || strip="echo skipping strip"

3265 3266
config_files="$TMPH config.mak"

3267 3268
cat > config.mak <<EOF
# Automatically generated by configure - do not modify!
3269 3270
ifndef FFMPEG_CONFIG_MAK
FFMPEG_CONFIG_MAK=1
3271
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3272 3273 3274 3275 3276 3277 3278
prefix=$prefix
LIBDIR=\$(DESTDIR)$libdir
SHLIBDIR=\$(DESTDIR)$shlibdir
INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir
MANDIR=\$(DESTDIR)$mandir
3279
SRC_PATH=$source_path
3280 3281 3282
ifndef MAIN_MAKEFILE
SRC_PATH:=\$(SRC_PATH:.%=..%)
endif
3283
CC_IDENT=$cc_ident
3284 3285 3286 3287 3288 3289
ARCH=$arch
CC=$cc
AS=$as
LD=$ld
DEPCC=$dep_cc
YASM=$yasmexe
3290
YASMDEP=$yasmexe
3291 3292
AR=$ar
RANLIB=$ranlib
3293
CP=cp -p
3294
LN_S=$ln_s
3295
STRIP=$strip
3296 3297 3298
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
ASFLAGS=$ASFLAGS
3299
AS_O=$CC_O
3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329
CC_O=$CC_O
LDFLAGS=$LDFLAGS
FFSERVERLDFLAGS=$FFSERVERLDFLAGS
SHFLAGS=$SHFLAGS
YASMFLAGS=$YASMFLAGS
BUILDSUF=$build_suffix
FULLNAME=$FULLNAME
LIBPREF=$LIBPREF
LIBSUF=$LIBSUF
LIBNAME=$LIBNAME
SLIBPREF=$SLIBPREF
SLIBSUF=$SLIBSUF
EXESUF=$EXESUF
EXTRA_VERSION=$extra_version
DEPFLAGS=$DEPFLAGS
CCDEP=$CCDEP
ASDEP=$ASDEP
CC_DEPFLAGS=$CC_DEPFLAGS
AS_DEPFLAGS=$AS_DEPFLAGS
HOSTCC=$host_cc
HOSTCFLAGS=$host_cflags
HOSTEXESUF=$HOSTEXESUF
HOSTLDFLAGS=$host_ldflags
HOSTLIBS=$host_libs
TARGET_EXEC=$target_exec
TARGET_PATH=$target_path
SDL_LIBS=$sdl_libs
SDL_CFLAGS=$sdl_cflags
LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD
EXTRALIBS=$extralibs
3330
INSTALL=$install
3331 3332 3333 3334 3335 3336
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}
3337 3338 3339 3340
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}
3341
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3342
EOF
3343

3344 3345 3346
get_version(){
    name=$1
    file=$source_path/$2
3347 3348
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
3349 3350 3351
    lcname=$(tolower $name)
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
3352 3353
}

3354 3355
get_version LIBSWSCALE  libswscale/swscale.h
get_version LIBPOSTPROC libpostproc/postprocess.h
3356
get_version LIBAVCODEC  libavcodec/version.h
3357
get_version LIBAVDEVICE libavdevice/avdevice.h
3358
get_version LIBAVFORMAT libavformat/version.h
3359
get_version LIBAVUTIL   libavutil/avutil.h
3360
get_version LIBAVFILTER libavfilter/avfilter.h
3361

3362 3363
cat > $TMPH <<EOF
/* Automatically generated by configure - do not modify! */
3364 3365 3366
#ifndef FFMPEG_CONFIG_H
#define FFMPEG_CONFIG_H
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3367
#define FFMPEG_LICENSE "$(c_escape $license)"
3368 3369 3370 3371 3372 3373
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
#define CC_TYPE "$cc_type"
#define CC_VERSION $cc_version
#define restrict $_restrict
#define EXTERN_PREFIX "${extern_prefix}"
#define EXTERN_ASM ${extern_prefix}
3374
#define SLIBSUF "$SLIBSUF"
3375
EOF
3376

3377 3378 3379
test -n "$malloc_prefix" &&
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH

3380
if enabled small || disabled optimizations; then
3381
    echo "#undef  av_always_inline"  >> $TMPH
3382 3383 3384 3385 3386
    if enabled small; then
        echo "#define av_always_inline inline"  >> $TMPH
    else
        echo "#define av_always_inline av_unused"  >> $TMPH
    fi
3387 3388
fi

3389 3390 3391 3392 3393
if enabled yasm; then
    append config_files $TMPASM
    printf '' >$TMPASM
fi

3394 3395 3396
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
3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408
                                     $CONFIG_EXTRA      \
                                     $DECODER_LIST      \
                                     $ENCODER_LIST      \
                                     $HWACCEL_LIST      \
                                     $PARSER_LIST       \
                                     $BSF_LIST          \
                                     $DEMUXER_LIST      \
                                     $MUXER_LIST        \
                                     $FILTER_LIST       \
                                     $PROTOCOL_LIST     \
                                     $INDEV_LIST        \
                                     $OUTDEV_LIST       \
3409

3410 3411 3412 3413
cat >>config.mak <<EOF
ACODEC_TESTS=$(print_enabled -n _test $ACODEC_TESTS)
VCODEC_TESTS=$(print_enabled -n _test $VCODEC_TESTS)
LAVF_TESTS=$(print_enabled   -n _test $LAVF_TESTS)
3414
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3415
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3416 3417
EOF

3418
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
3419
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3420

Diego Biurrun's avatar
Diego Biurrun committed
3421
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3422
cp_if_changed $TMPH config.h
3423
touch .config
Nick Kurshev's avatar
Nick Kurshev committed
3424

3425 3426
enabled yasm && cp_if_changed $TMPASM config.asm

3427 3428 3429 3430 3431 3432
cat > $TMPH <<EOF
/* Generated by ffconf */
#ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H
EOF

3433
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3434 3435 3436 3437 3438

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

cp_if_changed $TMPH libavutil/avconfig.h

3439 3440
test -n "$WARNINGS" && printf "\n$WARNINGS"

3441
# build pkg-config files
3442

3443 3444
pkgconfig_generate(){
name=$1
3445
shortname=${name#lib}${build_suffix}
3446 3447 3448 3449
comment=$2
version=$3
libs=$4
requires=$5
3450
enabled ${name#lib} || return 0
3451
mkdir -p $name
3452
cat <<EOF > $name/$name.pc
3453
prefix=$prefix
3454
exec_prefix=\${prefix}
3455
libdir=$libdir
3456
includedir=$incdir
3457

3458 3459 3460
Name: $name
Description: $comment
Version: $version
3461
Requires: $(enabled shared || echo $requires)
3462
Requires.private: $(enabled shared && echo $requires)
3463
Conflicts:
3464
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs)
3465
Libs.private: $(enabled shared && echo $libs)
3466
Cflags: -I\${includedir}
3467
EOF
3468
cat <<EOF > $name/$name-uninstalled.pc
3469 3470
prefix=
exec_prefix=
3471
libdir=\${pcfiledir}
3472
includedir=${source_path}
3473

3474 3475 3476 3477
Name: $name
Description: $comment
Version: $version
Requires: $requires
3478
Conflicts:
3479
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
3480 3481
Cflags: -I\${includedir}
EOF
3482
}
3483

3484
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
3485
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
3486 3487 3488
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
3489 3490
pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" "libavutil = $LIBAVUTIL_VERSION"