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

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

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

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

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

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

if test "$E1" != 0 || test "$E2" = 0; then
    echo "Broken shell detected.  Trying alternatives."
31 32 33 34 35 36 37 38 39 40 41 42
    export FF_CONF_EXEC
    if test "0$FF_CONF_EXEC" -lt 1; then
        FF_CONF_EXEC=1
        try_exec bash "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 2; then
        FF_CONF_EXEC=2
        try_exec ksh "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 3; then
        FF_CONF_EXEC=3
        try_exec /usr/xpg4/bin/sh "$0" "$@"
43 44
    fi
    echo "No compatible shell script interpreter found."
D
typo  
Diego Biurrun 已提交
45
    echo "This configure script requires a POSIX-compatible shell"
46
    echo "such as bash or ksh."
47
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
D
Diego Biurrun 已提交
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
S
Stefano Sabatini 已提交
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
L
Laurent Aimar 已提交
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]
S
Stefano Sabatini 已提交
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]
J
James Zern 已提交
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
M
Mans Rullgard 已提交
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
S
Stefano Sabatini 已提交
255
  exit 0
256
}
257

258 259
quotes='""'

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

264
log_file(){
M
Måns Rullgård 已提交
265
    log BEGIN $1
266
    pr -n -t $1 >> $logfile
M
Måns Rullgård 已提交
267 268 269
    log END $1
}

270
echolog(){
M
Måns Rullgård 已提交
271
    log "$@"
272
    echo "$@"
273 274
}

M
Måns Rullgård 已提交
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
L
Lou Logan 已提交
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
}

M
Måns Rullgård 已提交
307
tolower(){
308
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
M
Måns Rullgård 已提交
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
M
Måns Rullgård 已提交
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
Måns Rullgård 已提交
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(){
M
Måns Rullgård 已提交
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
M
Måns Rullgård 已提交
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
}

L
Loren Merritt 已提交
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
Måns Rullgård 已提交
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);
}
D
Diego Biurrun 已提交
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
V
Vitor Sessak 已提交
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
P
Philip Langdale 已提交
913
    crystalhd
914
    dct
915
    doc
916
    dwt
L
Laurent Aimar 已提交
917
    dxva2
918
    fastdiv
919 920
    ffmpeg
    ffplay
S
Stefano Sabatini 已提交
921
    ffprobe
922
    ffserver
923
    fft
S
Stefano Sabatini 已提交
924
    frei0r
925
    golomb
926
    gpl
927
    gray
928
    h264dsp
929
    h264pred
A
Aurelien Jacobs 已提交
930
    hardcoded_tables
931
    huffman
932
    libcelt
R
Ramiro Polla 已提交
933
    libdc1394
934
    libdirac
935
    libfaac
936
    libfreetype
937
    libgsm
938
    libmp3lame
939
    libnut
940 941
    libopencore_amrnb
    libopencore_amrwb
942
    libopencv
J
Jai Menon 已提交
943
    libopenjpeg
944
    librtmp
945
    libschroedinger
D
David Conrad 已提交
946
    libspeex
D
Diego Biurrun 已提交
947
    libtheora
948
    libvo_aacenc
949
    libvo_amrwbenc
950
    libvorbis
J
James Zern 已提交
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
M
Måns Rullgård 已提交
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
M
Måns Rullgård 已提交
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
M
Måns Rullgård 已提交
1018
    armvfp
M
Mans Rullgard 已提交
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
A
Alex Beregszaszi 已提交
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
Måns Rullgård 已提交
1065
    fcntl
M
Måns Rullgård 已提交
1066
    fork
1067
    getaddrinfo
1068
    gethrtime
1069
    GetProcessMemoryInfo
1070
    GetProcessTimes
R
Ramiro Polla 已提交
1071
    getrusage
1072
    gnu_as
1073
    struct_rusage_ru_maxrss
1074
    ibm_asm
M
Måns Rullgård 已提交
1075
    inet_aton
M
Måns Rullgård 已提交
1076
    inline_asm
M
Martin Storsjö 已提交
1077
    isatty
D
Dave Yeo 已提交
1078
    kbhit
M
Måns Rullgård 已提交
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
D
Daniel Verkamp 已提交
1096
    MapViewOfFile
1097
    memalign
R
Ramiro Polla 已提交
1098
    mkstemp
1099
    mmap
1100
    pld
1101
    posix_memalign
1102 1103
    round
    roundf
1104 1105
    sdl
    sdl_video_size
1106
    setmode
B
Brad 已提交
1107
    sndio_h
1108
    socklen_t
M
Måns Rullgård 已提交
1109
    soundcard_h
1110
    poll_h
M
Måns Rullgård 已提交
1111
    setrlimit
S
Stefano Sabatini 已提交
1112
    strerror_r
S
Stefano Sabatini 已提交
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
Måns Rullgård 已提交
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
L
Loren Merritt 已提交
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
Måns Rullgård 已提交
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
"

D
Diego Biurrun 已提交
1207 1208
# code dependency declarations

1209
# architecture extensions
1210

M
Måns Rullgård 已提交
1211 1212
armv5te_deps="arm"
armv6_deps="arm"
1213
armv6t2_deps="arm"
M
Måns Rullgård 已提交
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"

M
Måns Rullgård 已提交
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"
M
Mans Rullgard 已提交
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
V
Vitor Sessak 已提交
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"
J
Janne Grunau 已提交
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"
A
Aurelien Jacobs 已提交
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
flashsv2_encoder_select="zlib"
1279
flv_decoder_select="h263_decoder"
1280
flv_encoder_select="h263_encoder"
1281
fraps_decoder_select="huffman"
1282
h261_encoder_select="aandct"
1283
h263_decoder_select="h263_parser"
1284
h263_encoder_select="aandct"
1285
h263_vaapi_hwaccel_select="vaapi h263_decoder"
1286
h263i_decoder_select="h263_decoder"
1287
h263p_encoder_select="h263_encoder"
1288
h264_decoder_select="golomb h264dsp h264pred"
1289
h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf h264_parser"
L
Laurent Aimar 已提交
1290 1291
h264_dxva2_hwaccel_deps="dxva2api_h"
h264_dxva2_hwaccel_select="dxva2 h264_decoder"
1292
h264_vaapi_hwaccel_select="vaapi"
1293
h264_vdpau_decoder_select="vdpau h264_decoder"
1294
imc_decoder_select="fft mdct"
1295 1296
jpegls_decoder_select="golomb"
jpegls_encoder_select="golomb"
1297
ljpeg_encoder_select="aandct"
1298
loco_decoder_select="golomb"
1299
mjpeg_encoder_select="aandct"
1300
mlp_decoder_select="mlp_parser"
1301 1302 1303 1304 1305
mp1float_decoder_select="dct"
mp2float_decoder_select="dct"
mp3adufloat_decoder_select="dct"
mp3float_decoder_select="dct"
mp3on4float_decoder_select="dct"
1306 1307
mpeg1video_encoder_select="aandct"
mpeg2video_encoder_select="aandct"
1308
mpeg4_decoder_select="h263_decoder mpeg4video_parser"
1309
mpeg4_encoder_select="h263_encoder"
1310 1311
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
1312
mpeg1_vdpau_hwaccel_select="vdpau mpeg1video_decoder"
P
Philip Langdale 已提交
1313
mpeg2_crystalhd_decoder_select="crystalhd"
L
Laurent Aimar 已提交
1314 1315
mpeg2_dxva2_hwaccel_deps="dxva2api_h"
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
1316
mpeg2_vdpau_hwaccel_select="vdpau mpeg2video_decoder"
1317
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
P
Philip Langdale 已提交
1318
mpeg4_crystalhd_decoder_select="crystalhd"
1319
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
1320
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
1321
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1322
mpeg_xvmc_decoder_select="mpegvideo_decoder"
P
Philip Langdale 已提交
1323
msmpeg4_crystalhd_decoder_select="crystalhd"
1324
msmpeg4v1_decoder_select="h263_decoder"
1325
msmpeg4v1_encoder_select="h263_encoder"
1326
msmpeg4v2_decoder_select="h263_decoder"
1327
msmpeg4v2_encoder_select="h263_encoder"
1328
msmpeg4v3_decoder_select="h263_decoder"
1329
msmpeg4v3_encoder_select="h263_encoder"
1330 1331
nellymoser_decoder_select="mdct sinewin"
nellymoser_encoder_select="mdct sinewin"
1332 1333
png_decoder_select="zlib"
png_encoder_select="zlib"
1334
qcelp_decoder_select="lsp"
1335
qdm2_decoder_select="mdct rdft"
1336
ra_144_encoder_select="lpc"
1337
rv10_decoder_select="h263_decoder"
1338
rv10_encoder_select="h263_encoder"
1339
rv20_decoder_select="h263_decoder"
1340
rv20_encoder_select="h263_encoder"
1341 1342
rv30_decoder_select="golomb h264pred"
rv40_decoder_select="golomb h264pred"
1343
shorten_decoder_select="golomb"
1344
sipr_decoder_select="lsp"
1345 1346
snow_decoder_select="dwt"
snow_encoder_select="aandct dwt"
1347 1348 1349
sonic_decoder_select="golomb"
sonic_encoder_select="golomb"
sonic_ls_encoder_select="golomb"
D
Daniel Verkamp 已提交
1350
svq1_encoder_select="aandct"
1351
svq3_decoder_select="golomb h264dsp h264pred"
B
Baptiste Coudurier 已提交
1352
svq3_decoder_suggest="zlib"
1353
theora_decoder_select="vp3_decoder"
1354 1355
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
1356
truehd_decoder_select="mlp_decoder"
1357
tscc_decoder_select="zlib"
1358
twinvq_decoder_select="mdct lsp sinewin"
1359
vc1_decoder_select="h263_decoder"
P
Philip Langdale 已提交
1360
vc1_crystalhd_decoder_select="crystalhd"
1361
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
L
Laurent Aimar 已提交
1362
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
1363 1364
vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
vc1_vdpau_decoder_select="vdpau vc1_decoder"
1365 1366
vorbis_decoder_select="mdct"
vorbis_encoder_select="mdct"
1367
vp6_decoder_select="huffman"
1368 1369
vp6a_decoder_select="vp6_decoder"
vp6f_decoder_select="vp6_decoder"
1370
vp8_decoder_select="h264pred"
1371 1372 1373 1374 1375 1376
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"
1377
wmv1_decoder_select="h263_decoder"
1378
wmv1_encoder_select="h263_encoder"
1379
wmv2_decoder_select="h263_decoder"
1380
wmv2_encoder_select="h263_encoder"
1381
wmv3_decoder_select="vc1_decoder"
P
Philip Langdale 已提交
1382
wmv3_crystalhd_decoder_select="crystalhd"
L
Laurent Aimar 已提交
1383
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
1384 1385
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
1386 1387 1388 1389
zlib_decoder_select="zlib"
zlib_encoder_select="zlib"
zmbv_decoder_select="zlib"
zmbv_encoder_select="zlib"
1390

P
Philip Langdale 已提交
1391
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
1392
vaapi_deps="va_va_h"
1393 1394
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"

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

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

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

# indevs / outdevs
1457 1458 1459 1460
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"
S
Stefano Sabatini 已提交
1461
fbdev_indev_deps="linux_fb_h"
1462 1463 1464 1465
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"
B
Brad 已提交
1466 1467
sndio_indev_deps="sndio_h"
sndio_outdev_deps="sndio_h"
1468 1469
v4l_indev_deps="linux_videodev_h"
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
1470
vfwcap_indev_deps="capCreateCaptureWindow vfwcap_defines"
1471
vfwcap_indev_extralibs="-lavicap32"
1472
x11_grab_device_indev_deps="x11grab XShmCreateImage"
R
Roxis 已提交
1473
x11_grab_device_indev_extralibs="-lX11 -lXext -lXfixes"
1474

D
Diego Biurrun 已提交
1475
# protocols
1476
gopher_protocol_deps="network"
1477
http_protocol_deps="network"
1478
http_protocol_select="tcp_protocol"
M
Måns Rullgård 已提交
1479
mmsh_protocol_select="http_protocol"
1480
mmst_protocol_deps="network"
1481 1482
rtmp_protocol_select="tcp_protocol"
rtp_protocol_select="udp_protocol"
1483 1484 1485
tcp_protocol_deps="network"
udp_protocol_deps="network"

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

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

D
Diego Biurrun 已提交
1502
# programs
1503
ffmpeg_deps="avcodec avformat swscale"
1504
ffmpeg_select="buffer_filter"
1505
ffplay_deps="avcodec avformat swscale sdl"
M
Måns Rullgård 已提交
1506
ffplay_select="rdft"
1507
ffprobe_deps="avcodec avformat"
1508
ffserver_deps="avformat ffm_muxer fork rtp_protocol rtsp_demuxer"
1509
ffserver_extralibs='$ldl'
M
Måns Rullgård 已提交
1510

1511
doc_deps="texi2html"
D
Diego Biurrun 已提交
1512

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

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

1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543
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                                                                 \
1544
    dnxhd="dnxhd_1080i dnxhd_720p dnxhd_720p_rd"                        \
1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559
    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"                 \
1560
    msmpeg4v3=msmpeg4                                                   \
1561 1562 1563 1564
    msmpeg4v2                                                           \
    pbm=pbmpipe                                                         \
    pcx                                                                 \
    pgm="pgm pgmpipe"                                                   \
1565
    png                                                                 \
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 1605
    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                                               \

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

set_ne_test_deps pixdesc
1610
set_ne_test_deps pixfmts_copy
S
Stefano Sabatini 已提交
1611
set_ne_test_deps pixfmts_crop
S
Stefano Sabatini 已提交
1612
set_ne_test_deps pixfmts_hflip
S
Stefano Sabatini 已提交
1613 1614 1615 1616
set_ne_test_deps pixfmts_null
set_ne_test_deps pixfmts_pad
set_ne_test_deps pixfmts_scale
set_ne_test_deps pixfmts_vflip
1617

F
Fabrice Bellard 已提交
1618
# default parameters
1619

1620
logfile="config.log"
1621 1622

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

# toolchain
1632
ar_default="ar"
1633
cc_default="gcc"
1634
cc_version=\"unknown\"
1635
host_cc_default="gcc"
D
Diego Biurrun 已提交
1636
ln_s="ln -sf"
1637
nm_default="nm"
D
Diego Biurrun 已提交
1638
objformat="elf"
1639
pkg_config_default=pkg-config
M
Michael Niedermayer 已提交
1640
ranlib="ranlib"
1641
strip_default="strip"
D
Diego Biurrun 已提交
1642
yasmexe="yasm"
1643
nogas=":"
1644

1645 1646
nm_opts='-g'

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

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

# configurable options
1656 1657
enable avcodec
enable avdevice
1658
enable avfilter
1659
enable avformat
1660
enable avutil
1661
enable asm
1662
enable debug
1663
enable doc
1664
enable fastdiv
1665 1666
enable ffmpeg
enable ffplay
S
Stefano Sabatini 已提交
1667
enable ffprobe
1668 1669 1670
enable ffserver
enable mpegaudio_hp
enable network
1671
enable optimizations
1672
enable protocols
D
Diego Biurrun 已提交
1673
enable static
1674
enable stripping
1675
enable swscale
1676
enable swscale_alpha
1677 1678

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

1692 1693
CC_O='-o $@'

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

M
Måns Rullgård 已提交
1697
target_path='$(CURDIR)'
1698

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

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

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

1725 1726 1727 1728
find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
M
Måns Rullgård 已提交
1729
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1730 1731 1732 1733
}

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

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

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

M
Måns Rullgård 已提交
1754 1755
pcm_test_deps=$(map 'echo ${v%_*}_decoder $v' $(filter pcm_* $ENCODER_LIST))

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

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

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

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

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

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

1834
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
M
Måns Rullgård 已提交
1835 1836
set >> $logfile

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

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

1846
ar_default="${cross_prefix}${ar_default}"
D
Diego Biurrun 已提交
1847
cc_default="${cross_prefix}${cc_default}"
M
Måns Rullgård 已提交
1848
nm_default="${cross_prefix}${nm_default}"
1849
pkg_config_default="${cross_prefix}${pkg_config_default}"
1850
ranlib="${cross_prefix}${ranlib}"
1851
strip_default="${cross_prefix}${strip_default}"
1852

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

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

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

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

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

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

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

unset -f mktemp
1901

M
Mans Rullgard 已提交
1902 1903
chmod +x $TMPE

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

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

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

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

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

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

2108
add_cflags $extra_cflags
2109
add_asflags $extra_cflags
2110

M
Måns Rullgård 已提交
2111 2112
if test -n "$sysroot"; then
    case "$cc_type" in
M
Mans Rullgard 已提交
2113
        gcc|llvm_gcc|clang)
2114
            add_cppflags --sysroot="$sysroot"
M
Måns Rullgård 已提交
2115 2116
            add_ldflags --sysroot="$sysroot"
        ;;
2117 2118 2119 2120
        tms470)
            add_cppflags -I"$sysinclude"
            add_ldflags  --sysroot="$sysroot"
        ;;
M
Måns Rullgård 已提交
2121 2122 2123
    esac
fi

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

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

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

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

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

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

2193 2194
    case $(tolower $cpu) in
        601|ppc601|powerpc601)
M
Måns Rullgård 已提交
2195
            cpuflags="-mcpu=601"
2196
            disable altivec
M
Måns Rullgård 已提交
2197
        ;;
2198
        603*|ppc603*|powerpc603*)
M
Måns Rullgård 已提交
2199
            cpuflags="-mcpu=603"
2200
            disable altivec
M
Måns Rullgård 已提交
2201
        ;;
2202
        604*|ppc604*|powerpc604*)
M
Måns Rullgård 已提交
2203
            cpuflags="-mcpu=604"
2204
            disable altivec
M
Måns Rullgård 已提交
2205
        ;;
2206
        g3|75*|ppc75*|powerpc75*)
M
Måns Rullgård 已提交
2207
            cpuflags="-mcpu=750 -mpowerpc-gfxopt"
2208
            disable altivec
M
Måns Rullgård 已提交
2209
        ;;
2210
        g4|745*|ppc745*|powerpc745*)
M
Måns Rullgård 已提交
2211 2212
            cpuflags="-mcpu=7450 -mpowerpc-gfxopt"
        ;;
2213
        74*|ppc74*|powerpc74*)
M
Måns Rullgård 已提交
2214 2215
            cpuflags="-mcpu=7400 -mpowerpc-gfxopt"
        ;;
2216
        g5|970|ppc970|powerpc970|power4*)
M
Måns Rullgård 已提交
2217 2218
            cpuflags="-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
        ;;
2219
        cell)
M
Måns Rullgård 已提交
2220 2221 2222
            cpuflags="-mcpu=cell"
            enable ldbrx
        ;;
A
Ancoron Luciferis 已提交
2223 2224 2225 2226 2227 2228 2229 2230
        e500v2)
            cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
            disable altivec
        ;;
        e500)
            cpuflags="-mcpu=8540 -mhard-float"
            disable altivec
        ;;
M
Måns Rullgård 已提交
2231
    esac
2232 2233 2234

elif enabled x86; then

M
Måns Rullgård 已提交
2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245
    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)
2246
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2|amdfam10|barcelona|atom)
M
Måns Rullgård 已提交
2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257
            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
2258 2259 2260

elif enabled sparc; then

M
Måns Rullgård 已提交
2261
    case $cpu in
2262 2263 2264 2265
        niagara)
            cpuflags="-mcpu=$cpu"
            disable vis
        ;;
M
Måns Rullgård 已提交
2266 2267 2268 2269
        sparc64)
            cpuflags="-mcpu=v9"
        ;;
    esac
2270 2271 2272

elif enabled arm; then

2273 2274 2275
    case $cpu in
        armv*)
            cpuflags="-march=$cpu"
M
Måns Rullgård 已提交
2276
            subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
2277 2278 2279
        ;;
        *)
            cpuflags="-mcpu=$cpu"
M
Måns Rullgård 已提交
2280 2281 2282 2283 2284 2285 2286 2287
            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
2288 2289
        ;;
    esac
2290 2291 2292

elif enabled alpha; then

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

elif enabled bfin; then

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

elif enabled mips; then

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

elif enabled avr32; then

M
Måns Rullgård 已提交
2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322
    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
2323

2324 2325
fi

2326 2327 2328
add_cflags $cpuflags
add_asflags $cpuflags

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

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

2351 2352
check_host_cflags -std=c99

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

2368
enable $subarch
2369
enabled spic && enable pic
R
Ramiro Polla 已提交
2370

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

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

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

2537 2538
set_default $PATHS_LIST

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

D
Diego Biurrun 已提交
2550
disabled static && LIBNAME=""
R
Ramiro Polla 已提交
2551

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

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

2562
die_license_disabled nonfree libfaac
2563

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

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

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

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

enabled pic && enable_pic
2581

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

2588 2589 2590
check_cc <<EOF && enable inline_asm
void foo(void) { __asm__ volatile ("" ::); }
EOF
M
Måns Rullgård 已提交
2591

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

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

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

2612 2613 2614 2615 2616
if enabled alpha; then

    check_cflags -mieee

elif enabled arm; then
2617

2618
    check_cflags -marm
2619
    nogas=die
2620

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

    # 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"'
2643

2644 2645
    enabled_all armv6t2 shared !pic && enable_pic

2646
elif enabled mips; then
2647

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

2651
elif enabled ppc; then
2652

2653 2654
    enable local_aligned_8 local_aligned_16

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

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

2684
elif enabled sparc; then
2685

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

2689
elif enabled x86; then
2690

2691 2692
    enable local_aligned_8 local_aligned_16

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

R
Reimar Döffinger 已提交
2705
    # check whether EBX is available on x86
M
Måns Rullgård 已提交
2706 2707
    check_asm ebx_available '""::"b"(0)' &&
        check_asm ebx_available '"":::"%ebx"'
2708

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

2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723
    # 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

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

    check_asm bswap '"bswap %%eax" ::: "%eax"'
L
Loren Merritt 已提交
2729

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

2747
        check_yasm "pextrd [eax], xmm0, 1" && enable yasm ||
2748
            die "yasm not found, use --disable-yasm for a crippled build"
M
Mans Rullgard 已提交
2749
        check_yasm "vpaddw xmm0, xmm0, xmm0" || disable avx
2750
    fi
2751

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

2758 2759
fi

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

2766 2767
check_ldflags -Wl,--as-needed

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

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 2799
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

2800 2801 2802
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }

M
Måns Rullgård 已提交
2803
check_func  fcntl
2804
check_func  fork
2805
check_func  getaddrinfo $network_extralibs
2806 2807
check_func  gethrtime
check_func  getrusage
2808
check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
2809
check_func  inet_aton $network_extralibs
M
Martin Storsjö 已提交
2810
check_func  isatty
2811
check_func  localtime_r
2812
check_func  ${malloc_prefix}memalign            && enable memalign
2813
check_func  mkstemp
2814
check_func  mmap
2815
check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
M
Måns Rullgård 已提交
2816
check_func  setrlimit
S
Stefano Sabatini 已提交
2817
check_func  strerror_r
S
Stefano Sabatini 已提交
2818
check_func  strtok_r
D
Dave Yeo 已提交
2819
check_func_headers conio.h kbhit
2820
check_func_headers io.h setmode
2821
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2822
check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
2823
check_func_headers windows.h GetProcessTimes
D
Daniel Verkamp 已提交
2824
check_func_headers windows.h MapViewOfFile
2825
check_func_headers windows.h VirtualAlloc
R
Ramiro Polla 已提交
2826

2827
check_header dlfcn.h
L
Laurent Aimar 已提交
2828
check_header dxva2api.h
P
Philip Langdale 已提交
2829
check_header libcrystalhd/libcrystalhd_if.h
2830
check_header malloc.h
2831
check_header poll.h
2832
check_header sys/mman.h
2833
check_header sys/resource.h
2834
check_header sys/select.h
2835
check_header termios.h
2836 2837
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
D
Diego Biurrun 已提交
2838
check_header X11/extensions/XvMClib.h
2839

2840 2841
check_struct dxva2api.h DXVA_PictureParameters wDecodedPictureIndex

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

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

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

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

2877
check_lib math.h sin -lm && LIBM="-lm"
2878
disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersion -lcrystalhd || disable crystalhd
L
Luca Barbato 已提交
2879
enabled vaapi && require vaapi va/va.h vaInitialize -lva
M
Måns Rullgård 已提交
2880

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

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

2929 2930 2931 2932 2933 2934 2935 2936 2937
# 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

2938
if check_pkg_config sdl SDL_version.h SDL_Linked_Version; then
2939 2940 2941
    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
M
Michael Niedermayer 已提交
2942
fi
2943

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

S
Stefano Sabatini 已提交
2946
check_header linux/fb.h
2947 2948
check_header linux/videodev.h
check_header linux/videodev2.h
2949
check_header sys/videoio.h
2950

2951
check_func_headers "windows.h vfw.h" capCreateCaptureWindow "$vfwcap_indev_extralibs"
2952 2953 2954
# check that WM_CAP_DRIVER_CONNECT is defined to the proper value
# w32api 3.12 had it defined wrong
check_cpp_condition vfw.h "WM_CAP_DRIVER_CONNECT > WM_USER" && enable vfwcap_defines
R
Ramiro Polla 已提交
2955

2956
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
R
Indent  
Ramiro Polla 已提交
2957 2958 2959 2960 2961 2962 2963
{ 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
2964

B
Brad 已提交
2965
check_header sndio.h
M
Michael Niedermayer 已提交
2966 2967 2968 2969 2970 2971 2972 2973
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
2974
check_header soundcard.h
M
Måns Rullgård 已提交
2975

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

2978
enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack
O
Olivier Guilyardi 已提交
2979

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

2982
enabled x11grab                         &&
2983 2984
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
2985
check_header X11/extensions/Xfixes.h    &&
2986
check_func XOpenDisplay -lX11           &&
R
Roxis 已提交
2987 2988
check_func XShmCreateImage -lX11 -lXext &&
check_func XFixesGetCursorImage -lX11 -lXext -lXfixes
2989

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

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

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

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
3008
check_cflags -Wall
D
Diego Biurrun 已提交
3009
check_cflags -Wno-parentheses
3010
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
3011 3012 3013
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
3014
check_cflags -Wno-pointer-sign
3015
check_cflags -Wcast-qual
3016
check_cflags -Wwrite-strings
3017
check_cflags -Wtype-limits
3018
check_cflags -Wundef
3019
check_cflags -Wmissing-prototypes
3020
check_cflags -Wno-pointer-to-int-cast
3021
enabled extra_warnings && check_cflags -Winline
3022

3023
# add some linker flags
3024
check_ldflags -Wl,--warn-common
3025
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'
3026
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
F
Fabrice Bellard 已提交
3027

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

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

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

3103 3104 3105
enabled_any $THREADS_LIST      && enable threads

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

3125
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
3126

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

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

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

echo "License: $license"
3231

3232 3233
echo "Creating config.mak and config.h..."

3234 3235 3236 3237 3238 3239 3240 3241
# 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
3242
        libavfilter/$arch
3243 3244
        libavfilter/libmpcodecs
        libavfilter/libmpcodecs/libvo
3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259
        libavformat
        libavutil
        libavutil/$arch
        libpostproc
        libswscale
        libswscale/$arch
        tests
        tools
    "
    FILES="
        Makefile
        common.mak
        subdir.mak
        doc/texi2pod.pl
        libavcodec/Makefile
3260
        libavcodec/${arch}/Makefile
3261 3262
        libavdevice/Makefile
        libavfilter/Makefile
3263
        libavfilter/${arch}/Makefile
3264 3265 3266 3267 3268
        libavformat/Makefile
        libavutil/Makefile
        libpostproc/Makefile
        libswscale/Makefile
    "
M
Måns Rullgård 已提交
3269
    map 'mkdir -p $v' $DIRS;
3270
    map 'test -f "$source_path/$v" && $ln_s "$source_path/$v" $v' $FILES
3271 3272
fi

3273 3274
enabled stripping || strip="echo skipping strip"

3275 3276
config_files="$TMPH config.mak"

3277 3278
cat > config.mak <<EOF
# Automatically generated by configure - do not modify!
3279 3280 3281
ifndef FFMPEG_CONFIG_MAK
FFMPEG_CONFIG_MAK=1
FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION
3282 3283 3284 3285 3286 3287 3288 3289 3290 3291
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"
3292
CC_IDENT=$cc_ident
3293 3294 3295 3296 3297 3298
ARCH=$arch
CC=$cc
AS=$as
LD=$ld
DEPCC=$dep_cc
YASM=$yasmexe
3299
YASMDEP=$yasmexe
3300 3301
AR=$ar
RANLIB=$ranlib
3302
CP=cp -p
3303
LN_S=$ln_s
3304
STRIP=$strip
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 3336 3337
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
M
Måns Rullgård 已提交
3338
INSTALL=install
3339 3340 3341 3342 3343 3344 3345 3346
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}
3347
SAMPLES:=${samples:-\$(FATE_SAMPLES)}
3348
EOF
L
Luca Barbato 已提交
3349

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

3360 3361
get_version LIBSWSCALE  libswscale/swscale.h
get_version LIBPOSTPROC libpostproc/postprocess.h
3362
get_version LIBAVCODEC  libavcodec/version.h
3363
get_version LIBAVDEVICE libavdevice/avdevice.h
3364
get_version LIBAVFORMAT libavformat/version.h
3365
get_version LIBAVUTIL   libavutil/avutil.h
3366
get_version LIBAVFILTER libavfilter/avfilter.h
L
Luca Barbato 已提交
3367

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

3383 3384 3385
test -n "$malloc_prefix" &&
    echo "#define MALLOC_PREFIX $malloc_prefix" >>$TMPH

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

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

3400 3401 3402
print_config ARCH_   "$config_files" $ARCH_LIST
print_config HAVE_   "$config_files" $HAVE_LIST
print_config CONFIG_ "$config_files" $CONFIG_LIST       \
M
Måns Rullgård 已提交
3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414
                                     $CONFIG_EXTRA      \
                                     $DECODER_LIST      \
                                     $ENCODER_LIST      \
                                     $HWACCEL_LIST      \
                                     $PARSER_LIST       \
                                     $BSF_LIST          \
                                     $DEMUXER_LIST      \
                                     $MUXER_LIST        \
                                     $FILTER_LIST       \
                                     $PROTOCOL_LIST     \
                                     $INDEV_LIST        \
                                     $OUTDEV_LIST       \
3415

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

3424 3425
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
echo "endif # FFMPEG_CONFIG_MAK" >> config.mak
3426

D
Diego Biurrun 已提交
3427
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
3428
cp_if_changed $TMPH config.h
3429
touch .config
N
Nick Kurshev 已提交
3430

3431 3432
enabled yasm && cp_if_changed $TMPASM config.asm

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

3439
print_config AV_HAVE_ $TMPH $HAVE_LIST_PUB
3440 3441 3442 3443 3444

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

cp_if_changed $TMPH libavutil/avconfig.h

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

3447
# build pkg-config files
3448

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

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

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

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