configure 103 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
  --enable-postproc        enable GPLed postprocessing support [no]
92
  --disable-avfilter       disable video filter support [no]
93
  --disable-pthreads       disable pthreads [auto]
94 95 96 97 98 99 100 101 102
  --enable-w32threads      use Win32 threads [no]
  --enable-x11grab         enable X11 grabbing [no]
  --disable-network        disable network support [no]
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [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
103
  --disable-dct            disable DCT code
104 105
  --disable-fft            disable FFT code
  --disable-golomb         disable Golomb code
106
  --disable-huffman        disable Huffman code
107 108 109 110 111
  --disable-lpc            disable LPC code
  --disable-mdct           disable MDCT code
  --disable-rdft           disable RDFT code
  --disable-vaapi          disable VAAPI code
  --disable-vdpau          disable VDPAU code
112
  --disable-dxva2          disable DXVA2 code
113 114 115
  --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
116
  --disable-everything     disable all components listed below
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 163
  --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]
164
  --enable-libcelt         enable CELT/Opus decoding via libcelt [no]
Stefano Sabatini's avatar
Stefano Sabatini committed
165
  --enable-frei0r          enable frei0r video filtering
166 167
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
168
  --enable-libopencv       enable video filtering via libopencv [no]
169 170 171 172
  --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]
173
  --enable-libfreetype     enable libfreetype [no]
174 175 176 177 178
  --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]
179
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
180 181 182
  --enable-libschroedinger enable Dirac support via libschroedinger [no]
  --enable-libspeex        enable Speex decoding via libspeex [no]
  --enable-libtheora       enable Theora encoding via libtheora [no]
183
  --enable-libvo-aacenc    enable AAC encoding via libvo-aacenc [no]
184
  --enable-libvo-amrwbenc  enable AMR-WB encoding via libvo-amrwbenc [no]
185 186
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
                           native implementation exists [no]
James Zern's avatar
James Zern committed
187
  --enable-libvpx          enable VP8 support via libvpx [no]
188
  --enable-libx264         enable H.264 encoding via x264 [no]
189
  --enable-libxavs         enable AVS encoding via xavs [no]
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
  --enable-libxvid         enable Xvid encoding via xvidcore,
                           native MPEG-4/Xvid encoder exists [no]
  --enable-mlib            enable Sun medialib [no]
  --enable-zlib            enable zlib [autodetect]

Advanced options (experts only):
  --source-path=PATH       path to source code [$source_path]
  --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
205
  --ar=AR                  use archive tool AR [$ar_default]
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
  --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)
221
  --disable-asm            disable all assembler optimizations
222 223 224 225 226 227 228
  --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
229
  --disable-avx            disable AVX optimizations
230 231 232 233 234 235 236 237 238 239
  --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
240
  --malloc-prefix=PFX      prefix malloc and related names with PFX
241
  --enable-sram            allow use of on-chip SRAM
242
  --disable-symver         disable symbol versioning
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 764 765 766 767 768 769 770 771
check_pkg_config(){
    log check_pkg_config "$@"
    pkg="$1"
    headers="$2"
    funcs="$3"
    shift 3
    $pkg_config --exists $pkg || return
    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 881 882 883 884 885
cp_if_changed(){
    cmp -s "$1" "$2" &&
        echo "$2 is unchanged" ||
        cp -f "$1" "$2"
}

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 961
    mpegaudio_hp
    network
962
    nonfree
963
    pic
964
    postproc
965
    rdft
966
    rtpdec
967
    runtime_cpudetect
968
    shared
969
    sinewin
970
    small
971
    sram
972
    static
973
    swscale
974
    swscale_alpha
975 976
    vaapi
    vdpau
977
    version3
978
    x11grab
979
    zlib
980
"
981

982 983 984 985 986
THREADS_LIST='
    pthreads
    w32threads
'

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

ARCH_EXT_LIST='
1012
    altivec
1013
    amd3dnow
1014
    amd3dnowext
1015
    armv5te
1016
    armv6
1017
    armv6t2
1018
    armvfp
1019
    avx
1020 1021 1022
    iwmmxt
    mmi
    mmx
1023
    mmx2
1024
    neon
1025
    ppc4xx
1026
    sse
1027
    ssse3
1028
    vis
1029 1030
'

1031 1032
HAVE_LIST_PUB='
    bigendian
1033
    fast_unaligned
1034 1035
'

1036 1037
HAVE_LIST="
    $ARCH_EXT_LIST
1038
    $HAVE_LIST_PUB
1039
    $THREADS_LIST
1040
    aligned_stack
1041
    alsa_asoundlib_h
1042
    altivec_h
1043
    arpa_inet_h
1044
    attribute_may_alias
1045
    attribute_packed
1046
    bswap
Alex Beregszaszi's avatar
Alex Beregszaszi committed
1047
    closesocket
1048
    cmov
1049
    dcbzl
1050 1051 1052 1053 1054
    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
1055
    dlfcn_h
1056
    dlopen
1057
    dos_paths
1058 1059
    ebp_available
    ebx_available
1060 1061
    exp2
    exp2f
1062
    fast_64bit
1063
    fast_clz
1064
    fast_cmov
Måns Rullgård's avatar
Måns Rullgård committed
1065
    fcntl
Måns Rullgård's avatar
Måns Rullgård committed
1066
    fork
1067
    getaddrinfo
1068
    gethrtime
1069
    GetProcessMemoryInfo
1070
    GetProcessTimes
Ramiro Polla's avatar
Ramiro Polla committed
1071
    getrusage
1072
    gnu_as
1073
    struct_rusage_ru_maxrss
1074
    ibm_asm
1075
    inet_aton
1076
    inline_asm
1077
    isatty
1078
    kbhit
Måns Rullgård's avatar
Måns Rullgård committed
1079
    ldbrx
1080 1081
    libdc1394_1
    libdc1394_2
1082
    llrint
1083
    llrintf
1084 1085
    local_aligned_16
    local_aligned_8
1086
    localtime_r
1087
    log2
1088
    log2f
1089
    loongson
1090
    lrint
1091
    lrintf
1092
    lzo1x_999_compress
1093 1094
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
1095
    malloc_h
1096
    MapViewOfFile
1097
    memalign
1098
    mkstemp
1099
    mmap
1100
    pld
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
Stefano Sabatini's avatar
Stefano Sabatini committed
1113
    strtok_r
1114
    struct_addrinfo
1115 1116
    struct_ipv6_mreq
    struct_sockaddr_in6
1117
    struct_sockaddr_sa_len
1118
    struct_sockaddr_storage
1119 1120 1121
    symver
    symver_gnu_asm
    symver_asm_label
1122
    sys_mman_h
1123
    sys_resource_h
1124
    sys_select_h
Måns Rullgård's avatar
Måns Rullgård committed
1125
    sys_soundcard_h
1126
    sys_videoio_h
1127
    ten_operands
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
    ld
1189
    logfile
1190
    malloc_prefix
1191
    nm
1192
    pkg_config
Måns Rullgård's avatar
Måns Rullgård committed
1193
    samples
1194
    source_path
1195
    strip
1196 1197
    sysinclude
    sysroot
1198
    target_exec
1199
    target_os
1200
    target_path
1201
"
1202

1203 1204 1205 1206
CMDLINE_APPEND="
    extra_cflags
"

1207 1208
# code dependency declarations

1209
# architecture extensions
1210

1211 1212
armv5te_deps="arm"
armv6_deps="arm"
1213
armv6t2_deps="arm"
1214 1215
armvfp_deps="arm"
iwmmxt_deps="arm"
1216 1217
neon_deps="arm"

1218
mmi_deps="mips"
1219 1220 1221 1222 1223 1224

altivec_deps="ppc"
ppc4xx_deps="ppc"

vis_deps="sparc"

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

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

1239
need_memalign="altivec neon sse"
1240
inline_asm_deps="!tms470"
1241

1242 1243
symver_if_any="symver_asm_label symver_gnu_asm"

1244
# subsystems
1245
dct_select="rdft"
1246 1247 1248
mdct_select="fft"
rdft_select="fft"

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

1390
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1391
vaapi_deps="va_va_h"
1392 1393
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"

1394
# parsers
1395
h264_parser_select="golomb h264dsp h264pred"
1396

1397
# external libraries
1398
libcelt_decoder_deps="libcelt"
1399
libdirac_decoder_deps="libdirac !libschroedinger"
1400
libdirac_encoder_deps="libdirac"
1401
libfaac_encoder_deps="libfaac"
1402 1403
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
1404 1405
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
1406
libmp3lame_encoder_deps="libmp3lame"
1407 1408 1409
libopencore_amrnb_decoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_deps="libopencore_amrnb"
libopencore_amrwb_decoder_deps="libopencore_amrwb"
1410
libopenjpeg_decoder_deps="libopenjpeg"
1411 1412
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
1413
libspeex_decoder_deps="libspeex"
1414
libtheora_encoder_deps="libtheora"
1415
libvo_aacenc_encoder_deps="libvo_aacenc"
1416
libvo_amrwbenc_encoder_deps="libvo_amrwbenc"
1417
libvorbis_encoder_deps="libvorbis"
James Zern's avatar
James Zern committed
1418
libvpx_decoder_deps="libvpx"
James Zern's avatar
James Zern committed
1419
libvpx_encoder_deps="libvpx"
1420
libx264_encoder_deps="libx264"
1421
libxavs_encoder_deps="libxavs"
1422
libxvid_encoder_deps="libxvid"
1423

1424
# demuxers / muxers
1425
ac3_demuxer_select="ac3_parser"
1426
asf_stream_muxer_select="asf_muxer"
1427
avisynth_demuxer_deps="avisynth"
1428
dirac_demuxer_select="dirac_parser"
1429
eac3_demuxer_select="ac3_parser"
1430
flac_demuxer_select="flac_parser"
1431
ipod_muxer_select="mov_muxer"
1432 1433
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
1434
matroska_audio_muxer_select="matroska_muxer"
1435 1436
matroska_demuxer_suggest="zlib bzlib"
mov_demuxer_suggest="zlib"
1437
mp3_demuxer_select="mpegaudio_parser"
1438 1439 1440
mp4_muxer_select="mov_muxer"
mpegtsraw_demuxer_select="mpegts_demuxer"
mxf_d10_muxer_select="mxf_muxer"
1441
ogg_demuxer_select="golomb"
1442
psp_muxer_select="mov_muxer"
1443
rtp_demuxer_select="sdp_demuxer"
1444 1445 1446
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
1447
sap_demuxer_select="sdp_demuxer"
1448
sap_muxer_select="rtp_muxer rtp_protocol"
1449
sdp_demuxer_select="rtpdec"
1450
spdif_muxer_select="aac_parser"
1451 1452
tg2_muxer_select="mov_muxer"
tgp_muxer_select="mov_muxer"
1453
w64_demuxer_deps="wav_demuxer"
1454 1455

# indevs / outdevs
1456 1457 1458 1459
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"
dv1394_indev_deps="dv1394 dv_demuxer"
1460
fbdev_indev_deps="linux_fb_h"
1461 1462 1463 1464
jack_indev_deps="jack_jack_h"
libdc1394_indev_deps="libdc1394"
oss_indev_deps_any="soundcard_h sys_soundcard_h"
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1465 1466
sndio_indev_deps="sndio_h"
sndio_outdev_deps="sndio_h"
1467 1468
v4l_indev_deps="linux_videodev_h"
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1469
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1470
vfwcap_indev_extralibs="-lavicap32"
1471
x11_grab_device_indev_deps="x11grab XShmCreateImage"
Roxis's avatar
Roxis committed
1472
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1473

1474
# protocols
1475
gopher_protocol_deps="network"
1476
http_protocol_deps="network"
1477
http_protocol_select="tcp_protocol"
Måns Rullgård's avatar
Måns Rullgård committed
1478
mmsh_protocol_select="http_protocol"
1479
mmst_protocol_deps="network"
1480 1481
rtmp_protocol_select="tcp_protocol"
rtp_protocol_select="udp_protocol"
1482 1483 1484
tcp_protocol_deps="network"
udp_protocol_deps="network"

1485
# filters
1486
blackframe_filter_deps="gpl"
1487
cropdetect_filter_deps="gpl"
1488
drawtext_filter_deps="libfreetype"
1489
frei0r_filter_deps="frei0r dlopen strtok_r"
1490
frei0r_src_filter_deps="frei0r dlopen strtok_r"
1491
hqdn3d_filter_deps="gpl"
1492
mp_filter_deps="gpl"
1493
ocv_filter_deps="libopencv"
1494
scale_filter_deps="swscale"
1495
yadif_filter_deps="gpl"
1496

1497 1498 1499
# libraries
avdevice_deps="avcodec avformat"
avformat_deps="avcodec"
1500

1501
# programs
1502
ffmpeg_deps="avcodec avformat swscale"
1503
ffmpeg_select="buffer_filter"
1504
ffplay_deps="avcodec avformat swscale sdl"
Måns Rullgård's avatar
Måns Rullgård committed
1505
ffplay_select="rdft"
1506
ffprobe_deps="avcodec avformat"
1507
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1508
ffserver_extralibs='$ldl'
Måns Rullgård's avatar
Måns Rullgård committed
1509

1510
doc_deps="texi2html"
1511

1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526
# 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
}

1527 1528 1529 1530 1531
set_ne_test_deps(){
    eval ${1}_be_test_deps="bigendian"
    eval ${1}_le_test_deps="!bigendian"
}

1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542
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                                                                 \
1543
    dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558
    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"                 \
1559
    msmpeg4v3=msmpeg4                                                   \
1560 1561 1562 1563
    msmpeg4v2                                                           \
    pbm=pbmpipe                                                         \
    pcx                                                                 \
    pgm="pgm pgmpipe"                                                   \
1564
    png                                                                 \
1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 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
    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                                                     \
    mxf                                                                 \
    nut                                                                 \
    ogg                                                                 \
    rawvideo=pixfmt                                                     \
    rm                                                                  \
    swf                                                                 \
    mpegts=ts                                                           \
    voc                                                                 \
    wav                                                                 \
    yuv4mpegpipe=yuv4mpeg                                               \

1605
ac3_fixed_test_deps="ac3_fixed_encoder ac3_decoder rm_muxer rm_demuxer"
1606
mpg_test_deps="mpeg1system_muxer mpegps_demuxer"
1607 1608

set_ne_test_deps pixdesc
1609
set_ne_test_deps pixfmts_copy
1610
set_ne_test_deps pixfmts_crop
Stefano Sabatini's avatar
Stefano Sabatini committed
1611
set_ne_test_deps pixfmts_hflip
1612 1613 1614 1615
set_ne_test_deps pixfmts_null
set_ne_test_deps pixfmts_pad
set_ne_test_deps pixfmts_scale
set_ne_test_deps pixfmts_vflip
1616

Fabrice Bellard's avatar
Fabrice Bellard committed
1617
# default parameters
1618

1619
logfile="config.log"
1620 1621

# installation paths
1622 1623
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
1624
datadir_default='${prefix}/share/ffmpeg'
1625 1626 1627 1628
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
1629 1630

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

1644 1645
nm_opts='-g'

1646
# machine
1647
arch_default=$(uname -m)
1648
cpu="generic"
1649 1650

# OS
1651 1652
target_os_default=$(tolower $(uname -s))
host_os=$target_os_default
1653 1654

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

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

1691 1692
CC_O='-o $@'

1693
host_cflags='-D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -O3 -g -Wall'
1694 1695
host_libs='-lm'

1696
target_path='$(CURDIR)'
1697

1698 1699
# 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
1700
DEPEND_CMD='$(DEPCC) $(DEPFLAGS) $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," > $(@:.o=.d)'
1701
DEPFLAGS='$(CPPFLAGS) $(CFLAGS) -MM'
1702

1703
# find source path
1704
source_path="$(dirname "$0")"
1705
enable source_path_used
1706
if test -f configure; then
1707
    source_path="$(pwd)"
1708
    disable source_path_used
1709
else
1710
    source_path="$(cd "$source_path"; pwd)"
1711
    echo "$source_path" | grep -q '[[:blank:]]' &&
1712
        die "Out of tree builds are impossible with whitespace in source path."
1713 1714
    test -e "$source_path/config.h" &&
        die "Out of tree builds are impossible with config.h in source dir."
1715 1716
fi

1717
for v in "$@"; do
1718 1719 1720
    r=${v#*=}
    l=${v%"$r"}
    r=$(sh_quote "$r")
1721
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
1722
done
1723

1724 1725 1726 1727
find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
1728
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1729 1730 1731 1732
}

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

1743
find_tests(){
1744
    map "echo ${2}\${v}_test" $(ls "$source_path"/tests/ref/$1 | grep -v '[^-a-z0-9_]')
1745 1746 1747 1748 1749
}

ACODEC_TESTS=$(find_tests acodec)
VCODEC_TESTS=$(find_tests vsynth1)
LAVF_TESTS=$(find_tests lavf)
1750
LAVFI_TESTS=$(find_tests lavfi)
1751
SEEK_TESTS=$(find_tests seek seek_)
1752

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

1755 1756 1757 1758 1759 1760
for n in $COMPONENT_LIST; do
    v=$(toupper ${n%s})_LIST
    eval enable \$$v
    eval ${n}_if_any="\$$v"
done

1761
enable $ARCH_EXT_LIST $ACODEC_TESTS $VCODEC_TESTS $LAVF_TESTS $LAVFI_TESTS $SEEK_TESTS
1762 1763 1764 1765 1766 1767 1768

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

1769
show_list() {
Ramiro Polla's avatar
Ramiro Polla committed
1770 1771
    suffix=_$1
    shift
1772
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort | pr -3 -t
1773 1774 1775
    exit 0
}

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

1831 1832
disabled logging && logfile=/dev/null

1833
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
1834 1835
set >> $logfile

1836 1837
test -n "$cross_prefix" && enable cross_compile

1838 1839 1840 1841 1842 1843 1844
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

1845
ar_default="${cross_prefix}${ar_default}"
1846
cc_default="${cross_prefix}${cc_default}"
Måns Rullgård's avatar
Måns Rullgård committed
1847
nm_default="${cross_prefix}${nm_default}"
1848
pkg_config_default="${cross_prefix}${pkg_config_default}"
1849
ranlib="${cross_prefix}${ranlib}"
1850
strip_default="${cross_prefix}${strip_default}"
1851

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

1854
set_default cc nm pkg_config strip sysinclude
1855 1856
enabled cross_compile || host_cc_default=$cc
set_default host_cc
1857

1858 1859
exesuf() {
    case $1 in
1860
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;;
1861 1862 1863 1864 1865
    esac
}

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

1867
# set temporary file name
1868
: ${TMPDIR:=$TEMPDIR}
1869
: ${TMPDIR:=$TMP}
1870
: ${TMPDIR:=/tmp}
1871

1872
if ! check_cmd mktemp -u XXXXXX; then
1873 1874 1875
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
1876
        echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$"
1877 1878 1879 1880 1881 1882
    }
fi

tmpfile(){
    tmp=$(mktemp -u "${TMPDIR}/ffconf.XXXXXXXX")$2 &&
        (set -C; exec > $tmp) 2>/dev/null ||
1883
        die "Unable to create temporary file in $TMPDIR."
1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894
    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
1895
tmpfile TMPV  .ver
1896
tmpfile TMPSH .sh
1897
tmpfile TMPASM .asm
1898 1899

unset -f mktemp
1900

1901 1902
chmod +x $TMPE

1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915
# 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

1916 1917 1918 1919
filter_cflags=echo
filter_cppflags=echo
filter_asflags=echo

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

2096 2097
test -n "$cc_type" && enable $cc_type ||
    warn "Unknown C compiler $cc, unable to select optimal CFLAGS"
2098

2099
: ${as_default:=$cc}
2100
: ${dep_cc_default:=$cc}
2101
: ${ld_default:=$cc}
2102
set_default ar as dep_cc ld
2103

2104 2105 2106
test -n "$CC_DEPFLAGS" || CCDEP=$DEPEND_CMD
test -n "$AS_DEPFLAGS" || ASDEP=$DEPEND_CMD

2107
add_cflags $extra_cflags
2108
add_asflags $extra_cflags
2109

2110 2111
if test -n "$sysroot"; then
    case "$cc_type" in
2112
        gcc|llvm_gcc|clang)
2113
            add_cppflags --sysroot="$sysroot"
2114 2115
            add_ldflags --sysroot="$sysroot"
        ;;
2116 2117 2118 2119
        tms470)
            add_cppflags -I"$sysinclude"
            add_ldflags  --sysroot="$sysroot"
        ;;
2120 2121 2122
    esac
fi

2123 2124 2125 2126
if test "$cpu" = host; then
    enabled cross_compile && die "--cpu=host makes no sense when cross-compiling."

    case "$cc_type" in
2127
        gcc|llvm_gcc)
2128 2129
            check_native(){
                $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return
2130 2131 2132 2133 2134
                sed -n "/$1=/{
                            s/.*$1=\\([^ ]*\\).*/\\1/
                            p
                            q
                        }" $TMPE
2135 2136 2137 2138 2139 2140 2141 2142
            }
            cpu=$(check_native -march || check_native -mcpu)
        ;;
    esac

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

2143 2144 2145 2146 2147 2148 2149 2150
# Deal with common $arch aliases
case "$arch" in
    arm*)
        arch="arm"
    ;;
    mips|mipsel|IP*)
        arch="mips"
    ;;
2151
    mips64*)
2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164
        arch="mips"
        subarch="mips64"
    ;;
    parisc|hppa)
        arch="parisc"
    ;;
    parisc64|hppa64)
        arch="parisc"
        subarch="parisc64"
    ;;
    "Power Macintosh"|ppc|powerpc)
        arch="ppc"
    ;;
2165
    ppc64|powerpc64)
2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178
        arch="ppc"
        subarch="ppc64"
    ;;
    s390|s390x)
        arch="s390"
    ;;
    sh4|sh)
        arch="sh4"
    ;;
    sun4u|sparc64)
        arch="sparc"
        subarch="sparc64"
    ;;
2179
    i[3-6]86|i86pc|BePC|x86pc|x86_64|amd64)
2180 2181 2182 2183
        arch="x86"
    ;;
esac

2184
is_in $arch $ARCH_LIST || warn "unknown architecture $arch"
2185
enable $arch
2186

2187
# Add processor-specific flags
2188 2189 2190
if test "$cpu" = generic; then
    : do nothing
elif enabled ppc; then
2191

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

elif enabled x86; then

Måns Rullgård's avatar
Måns Rullgård committed
2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244
    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)
2245
        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
2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256
            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
2257 2258 2259

elif enabled sparc; then

Måns Rullgård's avatar
Måns Rullgård committed
2260
    case $cpu in
2261 2262 2263 2264
        niagara)
            cpuflags="-mcpu=$cpu"
            disable vis
        ;;
Måns Rullgård's avatar
Måns Rullgård committed
2265 2266 2267 2268
        sparc64)
            cpuflags="-mcpu=v9"
        ;;
    esac
2269 2270 2271

elif enabled arm; then

2272 2273 2274
    case $cpu in
        armv*)
            cpuflags="-march=$cpu"
2275
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2276 2277 2278
        ;;
        *)
            cpuflags="-mcpu=$cpu"
2279 2280 2281 2282 2283 2284 2285 2286
            case $cpu in
                cortex-a*)                               subarch=armv7a  ;;
                cortex-r*)                               subarch=armv7r  ;;
                cortex-m*)                               subarch=armv7m  ;;
                arm11*)                                  subarch=armv6   ;;
                arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
                armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
            esac
2287 2288
        ;;
    esac
2289 2290 2291

elif enabled alpha; then

2292
    enabled ccc && cpuflags="-arch $cpu" || cpuflags="-mcpu=$cpu"
2293 2294 2295

elif enabled bfin; then

2296
    cpuflags="-mcpu=$cpu"
2297 2298 2299

elif enabled mips; then

2300
    cpuflags="-march=$cpu"
2301 2302 2303

elif enabled avr32; then

Måns Rullgård's avatar
Måns Rullgård committed
2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321
    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
2322

2323 2324
fi

2325 2326 2327
add_cflags $cpuflags
add_asflags $cpuflags

2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340
# 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

2341
add_cppflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
2342
check_cflags -std=c99
2343
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cppflags -D_FILE_OFFSET_BITS=64
2344 2345
#include <stdlib.h>
EOF
2346
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE
2347 2348
#include <stdlib.h>
EOF
2349

2350 2351
check_host_cflags -std=c99

2352
case "$arch" in
2353
    alpha|ia64|mips|parisc|sparc)
2354
        spic=$shared
2355
    ;;
2356
    x86)
2357
        subarch="x86_32"
2358
        check_cc <<EOF && subarch="x86_64"
2359
        int test[(int)sizeof(char*) - 7];
2360
EOF
2361
        if test "$subarch" = "x86_64"; then
2362
            spic=$shared
2363
        fi
2364 2365 2366
    ;;
esac

2367
enable $subarch
2368
enabled spic && enable pic
2369

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

2532
echo "config:$arch:$subarch:$cpu:$target_os:$cc_ident:$FFMPEG_CONFIGURATION" >config.fate
2533

2534 2535
check_cpp_condition stdlib.h "defined(__PIC__) || defined(__pic__) || defined(PIC)" && enable pic

2536 2537
set_default $PATHS_LIST

2538
# we need to build at least one lib type
2539
if ! enabled_any static shared; then
2540 2541 2542 2543 2544 2545 2546 2547 2548
    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

2549
disabled static && LIBNAME=""
2550

2551
die_license_disabled() {
2552
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
2553 2554 2555
}

die_license_disabled gpl libx264
2556
die_license_disabled gpl libxavs
2557 2558 2559 2560
die_license_disabled gpl libxvid
die_license_disabled gpl postproc
die_license_disabled gpl x11grab

2561
die_license_disabled nonfree libfaac
2562

2563 2564
die_license_disabled version3 libopencore_amrnb
die_license_disabled version3 libopencore_amrwb
2565
die_license_disabled version3 libvo_aacenc
2566
die_license_disabled version3 libvo_amrwbenc
2567

2568
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
2569

2570
disabled optimizations || check_cflags -fomit-frame-pointer
2571

2572 2573
enable_pic() {
    enable pic
2574 2575 2576
    add_cppflags -DPIC
    add_cflags   -fPIC
    add_asflags  -fPIC
2577 2578 2579
}

enabled pic && enable_pic
2580

2581 2582 2583
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
2584
sym=$($nm $nm_opts $TMPO | awk '/ff_extern/{ print substr($0, match($0, /[^ \t]*ff_extern/)) }')
2585 2586
extern_prefix=${sym%%ff_extern*}

2587 2588 2589
check_cc <<EOF && enable inline_asm
void foo(void) { __asm__ volatile ("" ::); }
EOF
2590

2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601
_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

2602 2603 2604 2605
check_cc <<EOF && enable attribute_may_alias
union { int x; } __attribute__((may_alias)) x;
EOF

2606 2607 2608
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
EOF
2609
od -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
2610

2611 2612 2613 2614 2615
if enabled alpha; then

    check_cflags -mieee

elif enabled arm; then
2616

2617
    check_cflags -marm
2618
    nogas=die
2619

2620 2621 2622 2623 2624 2625
    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 ;;
2626 2627 2628
__asm__ (".eabi_attribute 28, 1");
int main(void) { return 0; }
EOF
2629 2630 2631
        esac
        warn "Compiler does not indicate floating-point ABI, guessing $fpabi."
    fi
2632 2633 2634 2635 2636 2637 2638 2639 2640 2641

    # We have to check if pld is a nop and disable it.
    check_asm pld '"pld [r0]"'

    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"'
2642

2643 2644
    enabled_all armv6t2 shared !pic && enable_pic

2645
elif enabled mips; then
2646

2647 2648
    check_asm loongson '"dmult.g $1, $2, $3"'
    enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2649

2650
elif enabled ppc; then
2651

2652 2653
    enable local_aligned_8 local_aligned_16

2654
    check_asm dcbzl     '"dcbzl 0, %0" :: "r"(0)'
2655
    check_asm ibm_asm   '"add 0, 0, 0"'
2656
    check_asm ppc4xx    '"maclhw r10, r11, r12"'
2657
    check_asm xform_asm '"lwzx %1, %y0" :: "Z"(*(int*)0), "r"(0)'
2658 2659 2660

    # AltiVec flags: The FSF version of GCC differs from the Apple version
    if enabled altivec; then
2661
        nogas=warn
2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681
        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
2682

2683
elif enabled sparc; then
2684

2685 2686
    enabled vis && check_asm vis '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc &&
        add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2687

2688
elif enabled x86; then
2689

2690 2691
    enable local_aligned_8 local_aligned_16

2692 2693 2694 2695
    # 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.
2696
    check_exec_crash <<EOF && enable ebp_available
2697
    volatile int i=0;
2698
    __asm__ volatile (
2699 2700 2701 2702 2703
        "xorl %%ebp, %%ebp"
    ::: "%ebp");
    return i;
EOF

Reimar Döffinger's avatar
Reimar Döffinger committed
2704
    # check whether EBX is available on x86
2705 2706
    check_asm ebx_available '""::"b"(0)' &&
        check_asm ebx_available '"":::"%ebx"'
2707

2708 2709 2710
    # check whether xmm clobbers are supported
    check_asm xmm_clobbers '"":::"%xmm0"'

2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722
    # check whether more than 10 operands are supported
    check_cc <<EOF && enable ten_operands
int main(void) {
    int x=0;
    __asm__ volatile(
        ""
        :"+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x), "+&rm"(x)
    );
    return 0;
}
EOF

2723
    # check whether binutils is new enough to compile SSSE3/MMX2
2724
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
2725
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
2726 2727

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

2729
    if ! disabled_any asm mmx yasm; then
2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745
        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

2746
        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2747
            die "yasm not found, use --disable-yasm for a crippled build"
2748
        check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
2749
    fi
2750

2751 2752 2753 2754 2755 2756
    case "$cpu" in
        athlon*|opteron*|k8*|pentium|pentium-mmx|prescott|nocona|atom|geode)
            disable fast_clz
        ;;
    esac

2757 2758
fi

2759 2760 2761 2762 2763 2764
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

2765 2766
check_ldflags -Wl,--as-needed

2767 2768 2769 2770
if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
2771 2772
fi

2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798
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

2799 2800 2801
# 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
2802
check_func  fcntl
2803
check_func  fork
2804
check_func  getaddrinfo $network_extralibs
2805 2806
check_func  gethrtime
check_func  getrusage
2807
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2808
check_func  inet_aton $network_extralibs
2809
check_func  isatty
2810
check_func  localtime_r
2811
check_func  ${malloc_prefix}memalign            && enable memalign
2812
check_func  mkstemp
2813
check_func  mmap
2814
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
Måns Rullgård's avatar
Måns Rullgård committed
2815
check_func  setrlimit
2816
check_func  strerror_r
Stefano Sabatini's avatar
Stefano Sabatini committed
2817
check_func  strtok_r
2818
check_func_headers conio.h kbhit
2819
check_func_headers io.h setmode
2820
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2821
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2822
check_func_headers windows.h GetProcessTimes
2823
check_func_headers windows.h MapViewOfFile
2824
check_func_headers windows.h VirtualAlloc
2825

2826
check_header dlfcn.h
2827
check_header dxva2api.h
2828
check_header libcrystalhd/libcrystalhd_if.h
2829
check_header malloc.h
2830
check_header poll.h
2831
check_header sys/mman.h
2832
check_header sys/resource.h
2833
check_header sys/select.h
2834
check_header termios.h
2835 2836
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
2837
check_header X11/extensions/XvMClib.h
2838

2839 2840
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex

2841 2842
if ! enabled_any memalign memalign_hack posix_memalign malloc_aligned &&
     enabled_any $need_memalign ; then
2843
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2844
fi
2845

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

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

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

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

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

2893
# these are off by default, so fail if requested and not available
2894
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32
2895
enabled libcelt    && require libcelt celt/celt.h celt_decode -lcelt0
Stefano Sabatini's avatar
Stefano Sabatini committed
2896
enabled frei0r     && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; }
2897 2898 2899
enabled libdirac   && require_pkg_config dirac                          \
    "libdirac_decoder/dirac_parser.h libdirac_encoder/dirac_encoder.h"  \
    "dirac_decoder_init dirac_encoder_init"
2900
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
2901
enabled libfreetype && add_cflags $(pkg-config --cflags freetype2) && require libfreetype ft2build.h FT_Init_FreeType -lfreetype
2902
enabled libgsm     && require  libgsm gsm/gsm.h gsm_create -lgsm
2903
enabled libmp3lame && require  "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
2904
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2905 2906
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
2907
enabled libopencv  && require_pkg_config opencv opencv/cv.h cvCreateImageHeader
2908
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
2909 2910
enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init
2911
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2912
enabled libtheora  && require  libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg
2913
enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc
2914
enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc
2915
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2916 2917 2918
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"; }
2919 2920
    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"; } }
2921
enabled libx264    && require  libx264 x264.h x264_encoder_encode -lx264 &&
2922 2923
                      { check_cpp_condition x264.h "X264_BUILD >= 99" ||
                        die "ERROR: libx264 version must be >= 0.99."; }
2924
enabled libxavs    && require  libxavs xavs.h xavs_encoder_encode -lxavs
2925
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2926
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2927

2928 2929 2930 2931 2932 2933 2934 2935 2936
# libdc1394 check
if enabled libdc1394; then
    { check_lib dc1394/dc1394.h dc1394_new -ldc1394 -lraw1394 &&
        enable libdc1394_2; } ||
    { check_lib libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 &&
        enable libdc1394_1; } ||
    die "ERROR: No version of libdc1394 found "
fi

2937
if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
2938 2939 2940
    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
2941
fi
2942

2943
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2944

2945
check_header linux/fb.h
2946 2947
check_header linux/videodev.h
check_header linux/videodev2.h
2948
check_header sys/videoio.h
2949

2950
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2951 2952 2953
# 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
2954

2955
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
Ramiro Polla's avatar
Ramiro Polla committed
2956 2957 2958 2959 2960 2961 2962
{ 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
2963

2964
check_header sndio.h
2965 2966 2967 2968 2969 2970 2971 2972
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
2973
check_header soundcard.h
Måns Rullgård's avatar
Måns Rullgård committed
2974

2975
enabled_any alsa_indev alsa_outdev && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2976

2977
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
2978

2979 2980
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio

2981
enabled x11grab                         &&
2982 2983
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
2984
check_header X11/extensions/Xfixes.h    &&
2985
check_func XOpenDisplay -lX11           &&
Roxis's avatar
Roxis committed
2986 2987
check_func XShmCreateImage -lX11 -lXext &&
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2988

2989 2990 2991
if ! disabled vaapi; then
    check_lib va/va.h vaInitialize -lva && {
        check_cpp_condition va/va_version.h "VA_CHECK_VERSION(0,32,0)" ||
2992
        warn "Please upgrade to VA-API >= 0.32 if you would like full VA-API support.";
2993 2994
    } || disable vaapi
fi
2995

2996
if ! disabled vdpau && enabled vdpau_vdpau_h; then
2997 2998
check_cpp_condition \
    vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" ||
2999 3000
    { echolog "Please upgrade to libvdpau >= 0.2 if you would like vdpau support." &&
      disable vdpau; }
3001
fi
3002

3003
enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel"
3004 3005 3006

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
3007
check_cflags -Wall
3008
check_cflags -Wno-parentheses
3009
check_cflags -Wno-switch
Michael Niedermayer's avatar
Michael Niedermayer committed
3010 3011 3012
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
3013
check_cflags -Wno-pointer-sign
3014
check_cflags -Wcast-qual
3015
check_cflags -Wwrite-strings
3016
check_cflags -Wtype-limits
3017
check_cflags -Wundef
3018
check_cflags -Wmissing-prototypes
3019
enabled extra_warnings && check_cflags -Winline
3020

3021
# add some linker flags
3022
check_ldflags -Wl,--warn-common
3023
check_ldflags '-Wl,-rpath-link,\$(BUILD_ROOT)/libpostproc -Wl,-rpath-link,\$(BUILD_ROOT)/libswscale -Wl,-rpath-link,\$(BUILD_ROOT)/libavfilter -Wl,-rpath-link,\$(BUILD_ROOT)/libavdevice -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
3024
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
3025

3026
echo "X{};" > $TMPV
3027
if test_ldflags -Wl,--version-script,$TMPV; then
3028
    append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver'
3029 3030
    check_cc <<EOF && enable symver_asm_label
void ff_foo(void) __asm__ ("av_foo@VERSION");
3031
void ff_foo(void) { ${inline_asm+__asm__($quotes);} }
3032 3033 3034 3035 3036 3037
EOF
    check_cc <<EOF && enable symver_gnu_asm
__asm__(".symver ff_foo,av_foo@VERSION");
void ff_foo(void) {}
EOF
fi
3038

3039
if enabled small; then
3040
    add_cflags $size_cflags
3041 3042
    optimizations="small"
elif enabled optimizations; then
3043
    add_cflags $speed_cflags
3044 3045
else
    add_cflags $noopt_cflags
3046
fi
3047
check_cflags -fno-math-errno
3048
check_cflags -fno-signed-zeros
3049

3050
if enabled icc; then
Måns Rullgård's avatar
Måns Rullgård committed
3051 3052 3053 3054
    # Just warnings, no remarks
    check_cflags -w1
    # -wd: Disable following warnings
    # 144, 167, 556: -Wno-pointer-sign
3055
    # 1292: attribute "foo" ignored
Måns Rullgård's avatar
Måns Rullgård committed
3056
    # 10006: ignoring unknown option -fno-signed-zeros
3057
    # 10148: ignoring unknown option -Wno-parentheses
Måns Rullgård's avatar
Måns Rullgård committed
3058
    # 10156: ignoring option '-W'; no argument required
3059
    check_cflags -wd144,167,556,1292,10006,10148,10156
Måns Rullgård's avatar
Måns Rullgård committed
3060 3061 3062 3063 3064
    # 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
3065 3066
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
    enable ebp_available
3067 3068 3069 3070 3071
    if enabled x86_32; then
        test ${icc_version%%.*} -ge 11 && \
            check_cflags -falign-stack=maintain-16-byte || \
            disable aligned_stack
    fi
3072 3073 3074 3075 3076 3077 3078 3079
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
3080 3081
elif enabled gcc; then
    check_cflags -fno-tree-vectorize
3082
    check_cflags -Werror=implicit-function-declaration
3083
    check_cflags -Werror=missing-prototypes
3084 3085
elif enabled llvm_gcc; then
    check_cflags -mllvm -stack-alignment=16
3086
elif enabled clang; then
3087
    check_cflags -mllvm -stack-alignment=16
3088
    check_cflags -Qunused-arguments
3089 3090
elif enabled armcc; then
    # 2523: use of inline assembler is deprecated
3091 3092
    add_cflags -W${armcc_opt},--diag_suppress=2523
    add_cflags -W${armcc_opt},--diag_suppress=1207
3093
    add_cflags -W${armcc_opt},--diag_suppress=1293 # assignment in condition
3094
    add_cflags -W${armcc_opt},--diag_suppress=3343 # hardfp compat
3095 3096
elif enabled tms470; then
    add_cflags -pds=824 -pds=837
3097 3098
elif enabled pathscale; then
    add_cflags -fstrict-overflow -OPT:wrap_around_unsafe_opt=OFF
3099 3100
fi

3101 3102 3103
enabled_any $THREADS_LIST      && enable threads

check_deps $CONFIG_LIST       \
3104
           $CONFIG_EXTRA      \
3105 3106 3107
           $HAVE_LIST         \
           $DECODER_LIST      \
           $ENCODER_LIST      \
3108
           $HWACCEL_LIST      \
3109 3110 3111 3112
           $PARSER_LIST       \
           $BSF_LIST          \
           $DEMUXER_LIST      \
           $MUXER_LIST        \
3113
           $FILTER_LIST       \
3114 3115 3116
           $INDEV_LIST        \
           $OUTDEV_LIST       \
           $PROTOCOL_LIST     \
3117 3118 3119
           $ACODEC_TESTS      \
           $VCODEC_TESTS      \
           $LAVF_TESTS        \
3120
           $LAVFI_TESTS       \
3121
           $SEEK_TESTS        \
3122

3123
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3124

3125
echo "install prefix            $prefix"
Diego Biurrun's avatar
Diego Biurrun committed
3126 3127 3128
echo "source path               $source_path"
echo "C compiler                $cc"
echo "ARCH                      $arch ($cpu)"
3129 3130
if test "$build_suffix" != ""; then
    echo "build suffix              $build_suffix"
3131
fi
3132 3133 3134
if test "$extra_version" != ""; then
    echo "version string suffix     $extra_version"
fi
3135
echo "big-endian                ${bigendian-no}"
3136
echo "runtime cpu detection     ${runtime_cpudetect-no}"
3137
if enabled x86; then
3138
    echo "yasm                      ${yasm-no}"
3139
    echo "MMX enabled               ${mmx-no}"
3140
    echo "MMX2 enabled              ${mmx2-no}"
3141
    echo "3DNow! enabled            ${amd3dnow-no}"
3142
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
3143
    echo "SSE enabled               ${sse-no}"
3144
    echo "SSSE3 enabled             ${ssse3-no}"
3145 3146
    echo "CMOV enabled              ${cmov-no}"
    echo "CMOV is fast              ${fast_cmov-no}"
3147 3148
    echo "EBX available             ${ebx_available-no}"
    echo "EBP available             ${ebp_available-no}"
3149
    echo "10 operands supported     ${ten_operands-no}"
3150
fi
3151
if enabled arm; then
3152 3153
    echo "ARMv5TE enabled           ${armv5te-no}"
    echo "ARMv6 enabled             ${armv6-no}"
3154
    echo "ARMv6T2 enabled           ${armv6t2-no}"
3155
    echo "ARM VFP enabled           ${armvfp-no}"
3156
    echo "IWMMXT enabled            ${iwmmxt-no}"
3157
    echo "NEON enabled              ${neon-no}"
3158
fi
3159
if enabled mips; then
3160
    echo "MMI enabled               ${mmi-no}"
3161
fi
3162
if enabled ppc; then
3163
    echo "AltiVec enabled           ${altivec-no}"
3164
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
3165
    echo "dcbzl available           ${dcbzl-no}"
3166 3167 3168
fi
if enabled sparc; then
    echo "VIS enabled               ${vis-no}"
3169
fi
3170
echo "debug symbols             ${debug-no}"
3171
echo "strip symbols             ${stripping-no}"
3172
echo "optimizations             ${optimizations-no}"
3173 3174
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
3175
echo "postprocessing support    ${postproc-no}"
3176
echo "new filter support        ${avfilter-no}"
3177 3178 3179 3180 3181
echo "network support           ${network-no}"
echo "threading support         ${thread_type-no}"
echo "SDL support               ${sdl-no}"
echo "Sun medialib support      ${mlib-no}"
echo "AVISynth enabled          ${avisynth-no}"
3182
echo "libcelt enabled           ${libcelt-no}"
Stefano Sabatini's avatar
Stefano Sabatini committed
3183
echo "frei0r enabled            ${frei0r-no}"
Ramiro Polla's avatar
Ramiro Polla committed
3184
echo "libdc1394 support         ${libdc1394-no}"
3185
echo "libdirac enabled          ${libdirac-no}"
3186 3187 3188 3189
echo "libfaac enabled           ${libfaac-no}"
echo "libgsm enabled            ${libgsm-no}"
echo "libmp3lame enabled        ${libmp3lame-no}"
echo "libnut enabled            ${libnut-no}"
3190 3191
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
3192
echo "libopencv support         ${libopencv-no}"
3193
echo "libopenjpeg enabled       ${libopenjpeg-no}"
3194
echo "librtmp enabled           ${librtmp-no}"
3195
echo "libschroedinger enabled   ${libschroedinger-no}"
3196
echo "libspeex enabled          ${libspeex-no}"
3197
echo "libtheora enabled         ${libtheora-no}"
3198
echo "libva enabled             ${vaapi-no}"
3199
echo "libvo-aacenc support      ${libvo_aacenc-no}"
3200
echo "libvo-amrwbenc support    ${libvo_amrwbenc-no}"
3201
echo "libvorbis enabled         ${libvorbis-no}"
James Zern's avatar
James Zern committed
3202
echo "libvpx enabled            ${libvpx-no}"
3203
echo "libx264 enabled           ${libx264-no}"
3204
echo "libxavs enabled           ${libxavs-no}"
3205
echo "libxvid enabled           ${libxvid-no}"
3206
echo "zlib enabled              ${zlib-no}"
3207
echo "bzlib enabled             ${bzlib-no}"
3208
echo
Fabrice Bellard's avatar
Fabrice Bellard committed
3209

3210
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
3211
    echo "Enabled ${type}s:"
3212
    eval list=\$$(toupper $type)_LIST
3213
    print_enabled '_*' $list | sort | pr -r -3 -t
3214
    echo
3215 3216
done

3217
license="LGPL version 2.1 or later"
3218
if enabled nonfree; then
3219
    license="nonfree and unredistributable"
3220 3221 3222 3223
elif enabled gplv3; then
    license="GPL version 3 or later"
elif enabled lgplv3; then
    license="LGPL version 3 or later"
3224
elif enabled gpl; then
3225
    license="GPL version 2 or later"
3226 3227 3228
fi

echo "License: $license"
3229

3230 3231
echo "Creating config.mak and config.h..."

3232 3233 3234 3235 3236 3237 3238 3239
# build tree in object directory if source path is different from current one
if enabled source_path_used; then
    DIRS="
        doc
        libavcodec
        libavcodec/$arch
        libavdevice
        libavfilter
3240
        libavfilter/$arch
3241 3242
        libavfilter/libmpcodecs
        libavfilter/libmpcodecs/libvo
3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257
        libavformat
        libavutil
        libavutil/$arch
        libpostproc
        libswscale
        libswscale/$arch
        tests
        tools
    "
    FILES="
        Makefile
        common.mak
        subdir.mak
        doc/texi2pod.pl
        libavcodec/Makefile
3258
        libavcodec/${arch}/Makefile
3259 3260
        libavdevice/Makefile
        libavfilter/Makefile
3261
        libavfilter/${arch}/Makefile
3262 3263 3264 3265 3266
        libavformat/Makefile
        libavutil/Makefile
        libpostproc/Makefile
        libswscale/Makefile
    "
3267
    map 'mkdir -p $v' $DIRS;
3268
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3269 3270
fi

3271 3272
enabled stripping || strip="echo skipping strip"

3273 3274
config_files="$TMPH config.mak"

3275 3276
cat > config.mak <<EOF
# Automatically generated by configure - do not modify!
3277 3278 3279
ifndef FFMPEG_CONFIG_MAK
FFMPEG_CONFIG_MAK=1
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3280 3281 3282 3283 3284 3285 3286 3287 3288 3289
prefix=$prefix
LIBDIR=\$(DESTDIR)$libdir
SHLIBDIR=\$(DESTDIR)$shlibdir
INCDIR=\$(DESTDIR)$incdir
BINDIR=\$(DESTDIR)$bindir
DATADIR=\$(DESTDIR)$datadir
MANDIR=\$(DESTDIR)$mandir
SRC_PATH="$source_path"
SRC_PATH_BARE=$source_path
BUILD_ROOT="$PWD"
3290
CC_IDENT=$cc_ident
3291 3292 3293 3294 3295 3296
ARCH=$arch
CC=$cc
AS=$as
LD=$ld
DEPCC=$dep_cc
YASM=$yasmexe
3297
YASMDEP=$yasmexe
3298 3299
AR=$ar
RANLIB=$ranlib
3300
CP=cp -p
3301
LN_S=$ln_s
3302
STRIP=$strip
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 3330 3331 3332 3333 3334 3335
CPPFLAGS=$CPPFLAGS
CFLAGS=$CFLAGS
ASFLAGS=$ASFLAGS
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
3336
INSTALL=install
3337 3338 3339 3340 3341 3342 3343 3344
LIBTARGET=${LIBTARGET}
SLIBNAME=${SLIBNAME}
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}
SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}
3345
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3346
EOF
3347

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

3358 3359
get_version LIBSWSCALE  libswscale/swscale.h
get_version LIBPOSTPROC libpostproc/postprocess.h
3360
get_version LIBAVCODEC  libavcodec/version.h
3361
get_version LIBAVDEVICE libavdevice/avdevice.h
3362
get_version LIBAVFORMAT libavformat/version.h
3363
get_version LIBAVUTIL   libavutil/avutil.h
3364
get_version LIBAVFILTER libavfilter/avfilter.h
3365

3366 3367
cat > $TMPH <<EOF
/* Automatically generated by configure - do not modify! */
3368 3369 3370
#ifndef FFMPEG_CONFIG_H
#define FFMPEG_CONFIG_H
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
3371
#define FFMPEG_LICENSE "$(c_escape $license)"
3372 3373 3374 3375 3376 3377
#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}
3378
#define SLIBSUF "$SLIBSUF"
3379
EOF
3380

3381 3382 3383
test -n "$malloc_prefix" &&
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH

3384
if enabled small || disabled optimizations; then
3385
    echo "#undef  av_always_inline"  >> $TMPH
3386 3387 3388 3389 3390
    if enabled small; then
        echo "#define av_always_inline inline"  >> $TMPH
    else
        echo "#define av_always_inline av_unused"  >> $TMPH
    fi
3391 3392
fi

3393 3394 3395 3396 3397
if enabled yasm; then
    append config_files $TMPASM
    printf '' >$TMPASM
fi

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

3414 3415 3416 3417
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)
3418
LAVFI_TESTS=$(print_enabled  -n _test $LAVFI_TESTS)
3419
SEEK_TESTS=$(print_enabled   -n _test $SEEK_TESTS)
3420 3421
EOF

3422 3423
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3424

Diego Biurrun's avatar
Diego Biurrun committed
3425
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3426
cp_if_changed $TMPH config.h
3427
touch .config
Nick Kurshev's avatar
Nick Kurshev committed
3428

3429 3430
enabled yasm && cp_if_changed $TMPASM config.asm

3431 3432 3433 3434 3435 3436
cat > $TMPH <<EOF
/* Generated by ffconf */
#ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H
EOF

3437
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3438 3439 3440 3441 3442

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

cp_if_changed $TMPH libavutil/avconfig.h

3443 3444
test -n "$WARNINGS" && printf "\n$WARNINGS"

3445
# build pkg-config files
3446

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

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

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

3487 3488
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBM"
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs $LIBM" "libavutil = $LIBAVUTIL_VERSION"
3489 3490 3491
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"
3492 3493
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"