configure 78.0 KB
Newer Older
1
#!/bin/sh
2
#
3 4
# FFmpeg configure script
#
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."
D
Diego Biurrun 已提交
47 48 49
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
    echo "Instead, install a working POSIX-compatible shell."
    echo "Disabling this configure test will create a broken FFmpeg."
50 51 52 53
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
        echo "This bash version ($BASH_VERSION) is broken on your platform."
        echo "Upgrade to a later version if available."
    fi
54 55 56
    exit 1
fi

57 58 59 60 61 62
show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
63 64
  echo "  --logfile=FILE           log tests and output to FILE [config.err]"
  echo "  --disable-logging        do not log configure debug information"
65
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
66
  echo "  --bindir=DIR             install binaries in DIR [PREFIX/bin]"
67
  echo "  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]"
68
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
69
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
70
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
71
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
72 73
  echo
  echo "Configuration options:"
74 75
  echo "  --disable-static         do not build static libraries [no]"
  echo "  --enable-shared          build shared libraries [no]"
76 77
  echo "  --enable-gpl             allow use of GPL code, the resulting libs"
  echo "                           and binaries will be under GPL [no]"
78
  echo "  --enable-version3        upgrade (L)GPL to version 3 [no]"
79 80
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
  echo "                           and binaries will be unredistributable [no]"
81 82 83
  echo "  --disable-ffmpeg         disable ffmpeg build"
  echo "  --disable-ffplay         disable ffplay build"
  echo "  --disable-ffserver       disable ffserver build"
84
  echo "  --enable-postproc        enable GPLed postprocessing support [no]"
85
  echo "  --enable-avfilter        video filter support [no]"
86
  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
87 88 89 90 91
  echo "  --enable-beosthreads     use BeOS threads [no]"
  echo "  --enable-os2threads      use OS/2 threads [no]"
  echo "  --enable-pthreads        use pthreads [no]"
  echo "  --enable-w32threads      use Win32 threads [no]"
  echo "  --enable-x11grab         enable X11 grabbing [no]"
92 93 94 95
  echo "  --disable-network        disable network support [no]"
  echo "  --disable-ipv6           disable IPv6 support [no]"
  echo "  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]"
  echo "  --enable-gray            enable full grayscale support (slower color)"
96
  echo "  --disable-swscale-alpha  disable alpha channel support in swscale"
97
  echo "  --disable-fastdiv        disable table-based division"
98 99 100 101 102
  echo "  --enable-small           optimize for size instead of speed"
  echo "  --disable-aandct         disable AAN DCT code"
  echo "  --disable-fft            disable FFT code"
  echo "  --disable-golomb         disable Golomb code"
  echo "  --disable-mdct           disable MDCT code"
103
  echo "  --disable-rdft           disable RDFT code"
104 105
  echo "  --disable-vaapi          disable VAAPI code"
  echo "  --disable-vdpau          disable VDPAU code"
106
  echo "  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)"
107 108 109 110 111 112 113 114 115
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
  echo "  --enable-beos-netserver  enable BeOS netserver"
  echo "  --disable-encoder=NAME   disable encoder NAME"
  echo "  --enable-encoder=NAME    enable encoder NAME"
  echo "  --disable-encoders       disable all encoders"
  echo "  --disable-decoder=NAME   disable decoder NAME"
  echo "  --enable-decoder=NAME    enable decoder NAME"
  echo "  --disable-decoders       disable all decoders"
116 117 118
  echo "  --disable-hwaccel=NAME   disable hwaccel NAME"
  echo "  --enable-hwaccel=NAME    enable hwaccel NAME"
  echo "  --disable-hwaccels       disable all hwaccels"
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
  echo "  --disable-muxer=NAME     disable muxer NAME"
  echo "  --enable-muxer=NAME      enable muxer NAME"
  echo "  --disable-muxers         disable all muxers"
  echo "  --disable-demuxer=NAME   disable demuxer NAME"
  echo "  --enable-demuxer=NAME    enable demuxer NAME"
  echo "  --disable-demuxers       disable all demuxers"
  echo "  --enable-parser=NAME     enable parser NAME"
  echo "  --disable-parser=NAME    disable parser NAME"
  echo "  --disable-parsers        disable all parsers"
  echo "  --enable-bsf=NAME        enable bitstream filter NAME"
  echo "  --disable-bsf=NAME       disable bitstream filter NAME"
  echo "  --disable-bsfs           disable all bitstream filters"
  echo "  --enable-protocol=NAME   enable protocol NAME"
  echo "  --disable-protocol=NAME  disable protocol NAME"
  echo "  --disable-protocols      disable all protocols"
134 135
  echo "  --disable-indev=NAME     disable input device NAME"
  echo "  --disable-outdev=NAME    disable output device NAME"
136 137 138 139 140 141 142 143
  echo "  --disable-indevs         disable input devices"
  echo "  --disable-outdevs        disable output devices"
  echo "  --disable-devices        disable all devices"
  echo "  --enable-filter=NAME     enable filter NAME"
  echo "  --disable-filter=NAME    disable filter NAME"
  echo "  --disable-filters        disable all filters"
  echo "  --list-decoders          show all available decoders"
  echo "  --list-encoders          show all available encoders"
144
  echo "  --list-hwaccels          show all available hardware accelerators"
145 146 147 148 149 150 151 152
  echo "  --list-muxers            show all available muxers"
  echo "  --list-demuxers          show all available demuxers"
  echo "  --list-parsers           show all available parsers"
  echo "  --list-protocols         show all available protocols"
  echo "  --list-bsfs              show all available bitstream filters"
  echo "  --list-indevs            show all available input devices"
  echo "  --list-outdevs           show all available output devices"
  echo "  --list-filters           show all available filters"
M
Måns Rullgård 已提交
153 154
  echo
  echo "External library support:"
155
  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
156 157 158
  echo "  --enable-bzlib           enable bzlib [autodetect]"
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
159 160
  echo "  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]"
  echo "  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]"
R
Ramiro Polla 已提交
161
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
162 163 164 165 166 167 168
  echo "                           and libraw1394 [no]"
  echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
  echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
  echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
  echo "  --enable-libgsm          enable GSM support via libgsm [no]"
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
169
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
170
  echo "                           native (de)muxer exists [no]"
J
Jai Menon 已提交
171
  echo "  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]"
172 173 174
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
  echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
  echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
175
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
176 177
  echo "                           native implementation exists [no]"
  echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
178
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
179
  echo "                           native MPEG-4/Xvid encoder exists [no]"
D
Diego Biurrun 已提交
180
  echo "  --enable-mlib            enable Sun medialib [no]"
181
  echo "  --enable-zlib            enable zlib [autodetect]"
182 183 184 185
  echo ""
  echo "Advanced options (experts only):"
  echo "  --source-path=PATH       path to source code [$source_path]"
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
186
  echo "  --enable-cross-compile   assume a cross-compiler is used"
187 188
  echo "  --sysroot=PATH           root of cross-build tree"
  echo "  --sysinclude=PATH        location of cross-build system headers"
189
  echo "  --target-os=OS           compiler targets OS [$target_os]"
190 191
  echo "  --target-exec=CMD        command to run executables on target"
  echo "  --target-path=DIR        path to view of build directory on target"
192
  echo "  --nm=NM                  use nm tool"
193
  echo "  --as=AS                  use assembler AS [$as_default]"
194
  echo "  --cc=CC                  use C compiler CC [$cc_default]"
195 196 197 198
  echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
199 200 201
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
202
  echo "  --extra-version=STRING   version string suffix []"
203 204 205
  echo "  --build-suffix=SUFFIX    library name suffix []"
  echo "  --arch=ARCH              select architecture [$arch]"
  echo "  --cpu=CPU                select the minimum required CPU (affects"
D
Diego Biurrun 已提交
206
  echo "                           instruction selection, may crash on older CPUs)"
207
  echo "  --enable-powerpc-perf    enable performance report on PPC"
208
  echo "                           (requires enabling PMC)"
209
  echo "  --disable-altivec        disable AltiVec optimizations"
210
  echo "  --disable-amd3dnow       disable 3DNow! optimizations"
211
  echo "  --disable-amd3dnowext    disable 3DNow! extended optimizations"
212 213
  echo "  --disable-mmx            disable MMX optimizations"
  echo "  --disable-mmx2           disable MMX2 optimizations"
214
  echo "  --disable-sse            disable SSE optimizations"
215 216 217
  echo "  --disable-ssse3          disable SSSE3 optimizations"
  echo "  --disable-armv5te        disable armv5te optimizations"
  echo "  --disable-armv6          disable armv6 optimizations"
218
  echo "  --disable-armv6t2        disable armv6t2 optimizations"
D
Diego Biurrun 已提交
219
  echo "  --disable-armvfp         disable ARM VFP optimizations"
220
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
221 222 223
  echo "  --disable-mmi            disable MMI optimizations"
  echo "  --disable-neon           disable neon optimizations"
  echo "  --disable-vis            disable VIS optimizations"
224
  echo "  --disable-yasm           disable use of yasm assembler"
M
Måns Rullgård 已提交
225 226
  echo
  echo "Developer options (useful when working on FFmpeg itself):"
227
  echo "  --disable-debug          disable debugging symbols"
228
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
M
Måns Rullgård 已提交
229
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
230
  echo "  --disable-optimizations  disable compiler optimizations"
M
Måns Rullgård 已提交
231
  echo "  --enable-extra-warnings  enable more compiler warnings"
232
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
233 234
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
S
Stefano Sabatini 已提交
235
  exit 0
236
}
237

238
log(){
239
    echo "$@" >> $logfile
240 241
}

242
log_file(){
M
Måns Rullgård 已提交
243
    log BEGIN $1
244
    pr -n -t $1 >> $logfile
M
Måns Rullgård 已提交
245 246 247
    log END $1
}

248
echolog(){
M
Måns Rullgård 已提交
249
    log "$@"
250
    echo "$@"
251 252 253 254 255
}

die(){
    echolog "$@"
    cat <<EOF
256

257 258
If you think configure made a mistake, make sure you are using the latest
version from SVN.  If the latest version fails, report the problem to the
259
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
260
EOF
261
    if disabled logging; then
262
        cat <<EOF
263 264
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
265 266 267
EOF
    else
cat <<EOF
268 269
Include the log file "$logfile" produced by configure as this will help
solving the problem.
270 271
EOF
    fi
272 273 274
    exit 1
}

275
# Avoid locale weirdness, besides we really just want to translate ASCII.
276
toupper(){
277
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
278 279
}

M
Måns Rullgård 已提交
280
tolower(){
281
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
M
Måns Rullgård 已提交
282 283
}

284 285 286 287
c_escape(){
    echo "$*" | sed 's/["\\]/\\\0/g'
}

288 289 290 291 292 293
sh_quote(){
    v=$(echo "$1" | sed "s/'/'\\\\''/g")
    test "$v" = "${v#*[ |&;<>()$\`\\\"\'*?\[\]#~=%]}" || v="'$v'"
    echo "$v"
}

294 295 296 297 298 299 300 301
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

302 303 304 305 306 307 308 309
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328
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
}

329 330 331 332 333 334 335 336
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

337 338 339 340 341 342 343 344
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

345 346 347 348 349 350 351 352
enable_safe(){
    enable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
}

disable_safe(){
    disable $(echo "$*" | sed 's/[^A-Za-z0-9_ ]/_/g')
}

353 354 355 356
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
357 358
        eval sgs="\$${var}_suggest"
        pushvar var sgs
359
        enable_deep $sel
360 361
        popvar sgs
        enable_deep_weak $sgs
362 363 364 365 366 367 368 369 370
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

371 372 373 374 375
enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

376
enabled(){
377 378
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
379 380
}

381
disabled(){
382 383
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
384 385
}

386 387 388 389 390 391
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

392 393 394 395 396 397
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

398 399 400 401 402 403
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

404 405 406 407
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
408
    return 1
409 410
}

411 412
set_default(){
    for opt; do
413
        eval : \${$opt:=\$${opt}_default}
414 415 416
    done
}

417 418 419 420 421 422 423 424 425
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

426 427
check_deps(){
    for cfg; do
428
        cfg="${cfg#!}"
429 430 431 432
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking

433 434
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
435
        eval dep_sel="\$${cfg}_select"
436
        eval dep_sgs="\$${cfg}_suggest"
437

438 439 440
        pushvar cfg dep_all dep_any dep_sel dep_sgs
        check_deps $dep_all $dep_any $dep_sel $dep_sgs
        popvar cfg dep_all dep_any dep_sel dep_sgs
441

M
Måns Rullgård 已提交
442 443
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
444
        disabled_any $dep_sel && disable $cfg
445

446 447 448
        if enabled $cfg; then
            eval dep_extralibs="\$${cfg}_extralibs"
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
449
            enable_deep $dep_sel
450
            enable_deep_weak $dep_sgs
451 452
        fi

453
        disable ${cfg}_checking
454 455 456
    done
}

457 458 459 460 461 462
print_config(){
    pfx=$1
    header=$2
    makefile=$3
    shift 3
    for cfg; do
463
        ucname="$(toupper $cfg)"
464
        if enabled $cfg; then
465 466 467
            echo "#define ${pfx}${ucname} 1" >> $header
            echo "${pfx}${ucname}=yes" >> $makefile
        else
468
            echo "#define ${pfx}${ucname} 0" >> $header
469 470
        fi
    done
471 472 473
}

flags_saved(){
474
    (: ${SAVE_CFLAGS?}) 2> /dev/null
475 476
}

477
save_flags(){
478
    flags_saved && return
479 480 481 482 483 484
    SAVE_CFLAGS="$CFLAGS"
    SAVE_LDFLAGS="$LDFLAGS"
    SAVE_extralibs="$extralibs"
}

restore_flags(){
485
    flags_saved || return
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508
    CFLAGS="$SAVE_CFLAGS"
    LDFLAGS="$SAVE_LDFLAGS"
    extralibs="$SAVE_extralibs"
    unset SAVE_CFLAGS
    unset SAVE_LDFLAGS
    unset SAVE_extralibs
}

temp_cflags(){
    save_flags
    CFLAGS="$CFLAGS $*"
}

temp_ldflags(){
    save_flags
    LDFLAGS="$LDFLAGS $*"
}

temp_extralibs(){
    save_flags
    extralibs="$extralibs $*"
}

509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527
append(){
    var=$1
    shift
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
    eval "$var=\"\$$var $*\""
}

add_cflags(){
    append CFLAGS "$@"
}

add_ldflags(){
    append LDFLAGS "$@"
}

add_extralibs(){
    append extralibs "$@"
}

528
check_cmd(){
M
Måns Rullgård 已提交
529
    log "$@"
530
    "$@" >> $logfile 2>&1
531 532
}

533
check_cc(){
534
    log check_cc "$@"
535
    cat > $TMPC
536
    log_file $TMPC
537
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
538 539 540 541
}

check_cpp(){
    log check_cpp "$@"
542
    cat > $TMPC
543
    log_file $TMPC
544
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
545 546
}

547 548 549 550 551 552 553
check_as(){
    log check_as "$@"
    cat > $TMPC
    log_file $TMPC
    check_cmd $as $CFLAGS "$@" -c -o $TMPO $TMPC
}

554 555 556 557 558
check_asm(){
    log check_asm "$@"
    name="$1"
    asm="$2"
    shift 2
559
    check_as "$@" <<EOF && enable $name || disable $name
560
void foo(void){ __asm__ volatile($asm); }
561 562 563
EOF
}

L
Loren Merritt 已提交
564 565 566 567 568 569 570 571
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

572
check_ld(){
573
    log check_ld "$@"
574
    check_cc || return
575 576 577 578 579 580
    flags=''
    libs=''
    for f; do
        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
    done
    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
581 582 583
}

check_cflags(){
584 585
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
586 587 588 589 590
int x;
EOF
}

check_ldflags(){
591 592
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
593
int main(void){ return 0; }
594 595 596 597
EOF
}

check_header(){
598
    log check_header "$@"
599 600
    header=$1
    shift
601 602
    disable_safe $header
    check_cpp "$@" <<EOF && enable_safe $header
603 604 605 606 607 608
#include <$header>
int x;
EOF
}

check_func(){
609
    log check_func "$@"
610 611
    func=$1
    shift
M
Måns Rullgård 已提交
612 613
    disable $func
    check_ld "$@" <<EOF && enable $func
614
extern int $func();
615
int main(void){ $func(); }
616 617 618
EOF
}

619 620
check_func_headers(){
    log check_func_headers "$@"
621 622 623 624 625 626 627 628 629
    headers=$1
    func=$2
    shift 2
    disable $func
    incs=""
    for hdr in $headers; do
        incs="$incs
#include <$hdr>"
    done
630
    check_ld "$@" <<EOF && enable $func && enable_safe $headers
631
$incs
632
int main(int argc, char **argv){
633 634 635 636 637 638
    (void) $func;
    return 0;
}
EOF
}

639 640 641 642 643 644 645 646 647 648 649 650
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
    check_cpp <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

651 652 653 654 655
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
656 657 658 659 660
    temp_extralibs "$@"
    check_header $header && check_func $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
661 662
}

663 664 665 666 667 668
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
    func="$2"
    shift 2
    temp_extralibs "$@"
669
    check_func_headers "$headers" $func && add_extralibs "$@"
670 671 672 673 674
    err=$?
    restore_flags
    return $err
}

675
check_exec(){
676
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
677 678
}

679
check_exec_crash(){
680
    code=$(cat)
681 682 683 684 685 686 687

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

688
    (check_exec "$@") >> $logfile 2>&1 <<EOF
689 690 691 692
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
D
Diego Biurrun 已提交
693
int main(void){
694 695 696 697 698 699 700 701 702 703 704
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
    { $code }
}
EOF
}

705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721
check_type(){
    log check_type "$@"
    headers=$1
    type=$2
    shift 2
    disable $type
    incs=""
    for hdr in $headers; do
        incs="$incs
#include <$hdr>"
    done
    check_cc "$@" <<EOF && enable $type
$incs
$type v;
EOF
}

722 723 724 725 726 727
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
728 729
}

730 731 732 733 734 735 736 737
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

738 739 740 741 742 743 744 745 746 747
check_foo_config(){
    cfg=$1
    pkg=$2
    header=$3
    func=$4
    shift 4
    disable $cfg
    check_cmd ${pkg}-config --version
    err=$?
    if test "$err" = 0; then
748 749
        temp_cflags $(${pkg}-config --cflags)
        temp_extralibs $(${pkg}-config --libs)
750 751 752 753 754
        check_lib "$@" $header $func && enable $cfg
    fi
    return $err
}

755 756 757 758 759 760
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

761 762 763
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

764 765 766 767 768
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
V
Vitor Sessak 已提交
769
    filters
770
    hwaccels
771
    indevs
772
    muxers
773
    outdevs
774 775 776 777 778 779
    parsers
    protocols
"

CONFIG_LIST="
    $COMPONENT_LIST
780
    aandct
781 782
    avfilter
    avfilter_lavf
783 784
    avisynth
    beos_netserver
785
    bzlib
786
    fastdiv
787 788 789
    ffmpeg
    ffplay
    ffserver
790
    fft
791
    golomb
792
    gpl
793
    gprof
794
    gray
A
Aurelien Jacobs 已提交
795
    hardcoded_tables
796
    ipv6
797 798
    libamr_nb
    libamr_wb
R
Ramiro Polla 已提交
799
    libdc1394
800
    libdirac
801 802 803
    libfaac
    libfaad
    libfaadbin
804
    libgsm
805
    libmp3lame
806
    libnut
807 808
    libopencore_amrnb
    libopencore_amrwb
J
Jai Menon 已提交
809
    libopenjpeg
810
    libschroedinger
D
David Conrad 已提交
811
    libspeex
D
Diego Biurrun 已提交
812
    libtheora
813
    libvorbis
814 815
    libx264
    libxvid
816
    mdct
817
    memalign_hack
818
    mlib
819 820
    mpegaudio_hp
    network
821
    nonfree
822
    postproc
823
    powerpc_perf
824
    rdft
825
    runtime_cpudetect
826
    shared
827
    small
828
    static
829
    swscale_alpha
830 831
    vaapi
    vdpau
832
    version3
833
    x11grab
834
    zlib
835
"
836

837 838
THREADS_LIST='
    beosthreads
D
Dave Yeo 已提交
839
    os2threads
840 841 842 843
    pthreads
    w32threads
'

844 845
ARCH_LIST='
    alpha
M
Måns Rullgård 已提交
846
    arm
847 848 849 850
    bfin
    ia64
    m68k
    mips
851
    mips64
852
    parisc
853
    ppc
854
    ppc64
855 856 857 858 859 860 861 862 863 864
    s390
    sh4
    sparc
    sparc64
    x86
    x86_32
    x86_64
'

ARCH_EXT_LIST='
865
    altivec
866
    amd3dnow
867
    amd3dnowext
868
    armv5te
869
    armv6
870
    armv6t2
M
Måns Rullgård 已提交
871
    armvfp
872 873 874
    iwmmxt
    mmi
    mmx
875
    mmx2
876
    neon
877
    ppc4xx
878
    sse
879
    ssse3
880
    vis
881 882 883 884 885
'

HAVE_LIST="
    $ARCH_EXT_LIST
    $THREADS_LIST
886
    alsa_asoundlib_h
887
    altivec_h
888
    arpa_inet_h
889
    bigendian
890
    bswap
A
Alex Beregszaszi 已提交
891
    closesocket
892
    cmov
893
    conio_h
894
    dcbzl
895 896 897 898 899
    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
900
    dlfcn_h
901
    dlopen
902
    dos_paths
903 904
    ebp_available
    ebx_available
905
    fast_64bit
906
    fast_cmov
907
    fast_unaligned
M
Måns Rullgård 已提交
908
    fork
909
    gethrtime
910
    GetProcessTimes
R
Ramiro Polla 已提交
911
    getrusage
M
Måns Rullgård 已提交
912
    inet_aton
M
Måns Rullgård 已提交
913
    inline_asm
M
Måns Rullgård 已提交
914
    ldbrx
915 916
    libdc1394_1
    libdc1394_2
917
    llrint
918
    loongson
919
    lrint
920
    lrintf
921
    lzo1x_999_compress
922 923
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
924 925
    malloc_h
    memalign
R
Ramiro Polla 已提交
926
    mkstemp
927
    pld
928
    posix_memalign
929 930
    round
    roundf
931 932
    sdl
    sdl_video_size
933
    setmode
934
    socklen_t
M
Måns Rullgård 已提交
935
    soundcard_h
936
    poll_h
937
    sys_mman_h
938
    sys_resource_h
939
    sys_select_h
M
Måns Rullgård 已提交
940
    sys_soundcard_h
941
    sys_videoio_h
942
    ten_operands
943
    termios_h
944
    threads
945
    truncf
946
    VirtualAlloc
947
    winsock2_h
948
    xform_asm
L
Loren Merritt 已提交
949
    yasm
950
"
951

952 953
# options emitted with CONFIG_ prefix but not available on command line
CONFIG_EXTRA="
954 955
    gplv3
    lgplv3
956 957
"

958
CMDLINE_SELECT="
959
    $ARCH_EXT_LIST
960
    $CONFIG_LIST
961
    $THREADS_LIST
962
    cross_compile
963 964
    debug
    extra_warnings
965
    logging
966
    optimizations
967
    stripping
968
    yasm
969
"
970 971

PATHS_LIST='
972
    bindir
973
    datadir
974 975 976 977 978
    incdir
    libdir
    mandir
    prefix
    shlibdir
979 980 981 982 983
'

CMDLINE_SET="
    $PATHS_LIST
    arch
984
    as
985 986 987 988
    build_suffix
    cc
    cpu
    cross_prefix
989
    extra_version
990 991 992 993
    host_cc
    host_cflags
    host_ldflags
    host_libs
994
    host_os
995
    logfile
996
    nm
997
    source_path
998 999
    sysinclude
    sysroot
1000
    target_exec
1001
    target_os
1002
    target_path
1003
"
1004

D
Diego Biurrun 已提交
1005 1006
# code dependency declarations

1007
# architecture extensions
1008
altivec_deps="ppc"
1009
amd3dnow_deps="mmx"
1010
amd3dnowext_deps="amd3dnow"
M
Måns Rullgård 已提交
1011 1012
armv5te_deps="arm"
armv6_deps="arm"
1013
armv6t2_deps="arm"
M
Måns Rullgård 已提交
1014 1015
armvfp_deps="arm"
iwmmxt_deps="arm"
1016
mmi_deps="mips"
1017
mmx_deps="x86"
1018
mmx2_deps="mmx"
M
Måns Rullgård 已提交
1019
neon_deps="arm"
1020
ppc4xx_deps="ppc"
1021 1022
sse_deps="mmx"
ssse3_deps="sse"
1023
vis_deps="sparc"
1024

1025
# decoders / encoders / hardware accelerators
1026 1027 1028
aac_decoder_select="fft mdct"
ac3_decoder_select="fft mdct"
atrac3_decoder_select="fft mdct"
1029
cavs_decoder_select="golomb"
1030
cook_decoder_select="fft mdct"
1031
cscd_decoder_suggest="zlib"
1032
dca_decoder_select="fft mdct"
1033
dnxhd_encoder_select="aandct"
1034
dxa_decoder_select="zlib"
1035
eac3_decoder_select="fft mdct"
1036
eatgq_decoder_select="aandct"
A
Aurelien Jacobs 已提交
1037
eatqi_decoder_select="aandct"
1038 1039 1040
ffv1_decoder_select="golomb"
flac_decoder_select="golomb"
flac_encoder_select="golomb"
1041 1042
flashsv_decoder_select="zlib"
flashsv_encoder_select="zlib"
1043 1044 1045
flv_encoder_select="aandct"
h261_encoder_select="aandct"
h263_encoder_select="aandct"
G
Gwenole Beauchesne 已提交
1046
h263_vaapi_hwaccel_deps="va_va_h"
1047
h263_vaapi_hwaccel_select="vaapi"
1048
h263p_encoder_select="aandct"
1049
h264_decoder_select="golomb"
G
Gwenole Beauchesne 已提交
1050
h264_vaapi_hwaccel_deps="va_va_h"
1051
h264_vaapi_hwaccel_select="vaapi"
1052
h264_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1053
h264_vdpau_decoder_select="vdpau"
1054
imc_decoder_select="fft mdct"
1055 1056
jpegls_decoder_select="golomb"
jpegls_encoder_select="golomb"
1057
ljpeg_encoder_select="aandct"
1058
loco_decoder_select="golomb"
1059 1060 1061 1062
mjpeg_encoder_select="aandct"
mpeg1video_encoder_select="aandct"
mpeg2video_encoder_select="aandct"
mpeg4_encoder_select="aandct"
1063
mpeg_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1064
mpeg_vdpau_decoder_select="vdpau"
1065
mpeg1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1066
mpeg1_vdpau_decoder_select="vdpau"
G
Gwenole Beauchesne 已提交
1067
mpeg2_vaapi_hwaccel_deps="va_va_h"
1068
mpeg2_vaapi_hwaccel_select="vaapi"
G
Gwenole Beauchesne 已提交
1069
mpeg4_vaapi_hwaccel_deps="va_va_h"
1070
mpeg4_vaapi_hwaccel_select="vaapi"
1071
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
1072 1073 1074
msmpeg4v1_encoder_select="aandct"
msmpeg4v2_encoder_select="aandct"
msmpeg4v3_encoder_select="aandct"
1075 1076
nellymoser_decoder_select="fft mdct"
nellymoser_encoder_select="fft mdct"
1077 1078
png_decoder_select="zlib"
png_encoder_select="zlib"
1079
qdm2_decoder_select="fft mdct rdft"
1080 1081
rv10_encoder_select="aandct"
rv20_encoder_select="aandct"
A
Aurelien Jacobs 已提交
1082 1083
rv30_decoder_select="golomb"
rv40_decoder_select="golomb"
1084 1085 1086 1087 1088
shorten_decoder_select="golomb"
sonic_decoder_select="golomb"
sonic_encoder_select="golomb"
sonic_ls_encoder_select="golomb"
svq3_decoder_select="golomb"
B
Baptiste Coudurier 已提交
1089
svq3_decoder_suggest="zlib"
1090 1091 1092
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
tscc_decoder_select="zlib"
G
Gwenole Beauchesne 已提交
1093
vc1_vaapi_hwaccel_deps="va_va_h"
1094
vc1_vaapi_hwaccel_select="vaapi"
1095
vc1_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1096
vc1_vdpau_decoder_select="vdpau"
1097 1098 1099 1100 1101 1102
vorbis_decoder_select="fft mdct"
vorbis_encoder_select="fft mdct"
wmav1_decoder_select="fft mdct"
wmav1_encoder_select="fft mdct"
wmav2_decoder_select="fft mdct"
wmav2_encoder_select="fft mdct"
1103 1104
wmv1_encoder_select="aandct"
wmv2_encoder_select="aandct"
G
Gwenole Beauchesne 已提交
1105
wmv3_vaapi_hwaccel_deps="va_va_h"
1106
wmv3_vaapi_hwaccel_select="vaapi"
1107
wmv3_vdpau_decoder_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
1108
wmv3_vdpau_decoder_select="vdpau"
1109 1110 1111 1112
zlib_decoder_select="zlib"
zlib_encoder_select="zlib"
zmbv_decoder_select="zlib"
zmbv_encoder_select="zlib"
1113

1114 1115 1116
# parsers
h264_parser_select="golomb"

D
Diego Biurrun 已提交
1117
# external libraries
1118 1119 1120 1121
libamr_nb_decoder_deps="libamr_nb"
libamr_nb_encoder_deps="libamr_nb"
libamr_wb_decoder_deps="libamr_wb"
libamr_wb_encoder_deps="libamr_wb"
1122
libdirac_decoder_deps="libdirac !libschroedinger"
1123
libdirac_encoder_deps="libdirac"
1124
libfaac_encoder_deps="libfaac"
1125
libfaad_decoder_deps="libfaad"
1126
libfaadbin_decoder_extralibs='$ldl'
1127 1128
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
1129 1130
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
1131
libmp3lame_encoder_deps="libmp3lame"
1132 1133 1134
libopencore_amrnb_decoder_deps="libopencore_amrnb"
libopencore_amrnb_encoder_deps="libopencore_amrnb"
libopencore_amrwb_decoder_deps="libopencore_amrwb"
J
Jai Menon 已提交
1135
libopenjpeg_decoder_deps="libopenjpeg"
1136 1137
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
D
David Conrad 已提交
1138
libspeex_decoder_deps="libspeex"
D
Diego Biurrun 已提交
1139
libtheora_encoder_deps="libtheora"
1140
libvorbis_encoder_deps="libvorbis"
1141 1142
libx264_encoder_deps="libx264"
libxvid_encoder_deps="libxvid"
1143

D
Diego Biurrun 已提交
1144
# demuxers / muxers
1145
ac3_demuxer_deps="ac3_parser"
1146 1147 1148 1149 1150 1151 1152 1153
alsa_indev_deps="alsa_asoundlib_h snd_pcm_htimestamp"
alsa_indev_extralibs="-lasound"
alsa_outdev_deps="alsa_asoundlib_h"
alsa_outdev_extralibs="-lasound"
audio_beos_indev_deps="audio_beos"
audio_beos_indev_extralibs="-lmedia -lbe"
audio_beos_outdev_deps="audio_beos"
audio_beos_outdev_extralibs="-lmedia -lbe"
1154
avisynth_demuxer_deps="avisynth"
1155
bktr_indev_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1156
dirac_demuxer_deps="dirac_parser"
1157 1158 1159 1160
dv1394_indev_deps="dv1394 dv_demuxer"
jack_indev_deps="jack_jack_h"
jack_indev_extralibs="-ljack"
libdc1394_indev_deps="libdc1394"
1161 1162
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
1163 1164
matroska_demuxer_suggest="zlib bzlib"
mov_demuxer_suggest="zlib"
1165
mp3_demuxer_deps="mpegaudio_parser"
1166 1167
oss_indev_deps_any="soundcard_h sys_soundcard_h"
oss_outdev_deps_any="soundcard_h sys_soundcard_h"
1168
redir_demuxer_deps="network"
1169
rtp_muxer_deps="network rtp_protocol"
1170 1171
rtsp_demuxer_deps="sdp_demuxer"
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1172 1173 1174 1175 1176 1177
v4l_indev_deps="linux_videodev_h"
v4l2_indev_deps_any="linux_videodev2_h sys_videoio_h"
vfwcap_indev_deps="capCreateCaptureWindow"
vfwcap_indev_extralibs="-lvfw32"
x11_grab_device_indev_deps="x11grab XShmCreateImage"
x11_grab_device_indev_extralibs="-lX11 -lXext"
1178

D
Diego Biurrun 已提交
1179
# protocols
1180
gopher_protocol_deps="network"
1181 1182 1183 1184 1185
http_protocol_deps="network"
rtp_protocol_deps="udp_protocol"
tcp_protocol_deps="network"
udp_protocol_deps="network"

1186
# filters
1187
movie_filter_deps="avfilter_lavf"
1188

D
Diego Biurrun 已提交
1189
# programs
M
Måns Rullgård 已提交
1190
ffplay_deps="sdl"
1191
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1192
ffserver_extralibs='$ldl'
M
Måns Rullgård 已提交
1193

D
Diego Biurrun 已提交
1194

F
Fabrice Bellard 已提交
1195
# default parameters
1196

1197
logfile="config.err"
1198 1199

# installation paths
1200 1201
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
1202
datadir_default='${prefix}/share/ffmpeg'
1203 1204 1205 1206
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
1207 1208

# toolchain
D
Diego Biurrun 已提交
1209
ar="ar"
1210
cc_default="gcc"
1211
host_cc_default="gcc"
D
Diego Biurrun 已提交
1212
ln_s="ln -sf"
1213
nm_default="nm"
D
Diego Biurrun 已提交
1214
objformat="elf"
M
Michael Niedermayer 已提交
1215
ranlib="ranlib"
1216
strip="strip"
D
Diego Biurrun 已提交
1217
yasmexe="yasm"
1218 1219

# machine
1220
arch=$(uname -m)
1221
cpu="generic"
1222 1223

# OS
1224
target_os=$(tolower $(uname -s))
1225
host_os=$target_os
1226 1227

# configurable options
1228
enable debug
1229
enable fastdiv
1230 1231 1232 1233 1234 1235
enable ffmpeg
enable ffplay
enable ffserver
enable ipv6
enable mpegaudio_hp
enable network
1236
enable optimizations
1237
enable protocols
D
Diego Biurrun 已提交
1238
enable static
1239
enable stripping
1240
enable swscale_alpha
1241 1242

# build settings
1243
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
M
Måns Rullgård 已提交
1244
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1245
FFSERVERLDFLAGS=-Wl,-E
1246 1247
LIBPREF="lib"
LIBSUF=".a"
1248 1249
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1250 1251
SLIBPREF="lib"
SLIBSUF=".so"
1252
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1253 1254
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1255
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1256

1257 1258 1259
host_cflags='-O3 -g -Wall'
host_libs='-lm'

1260 1261
target_path='.'

1262 1263
# gcc stupidly only outputs the basename of targets with -MM, but we need the
# full relative path for objects in subdirectories for non-recursive Make.
1264
DEPEND_CMD='$(CC) $(CFLAGS) -MM $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1265

1266
# find source path
1267
source_path="$(dirname "$0")"
1268
enable source_path_used
1269
if test -z "$source_path" -o "$source_path" = "." ; then
1270
    source_path="$(pwd)"
1271
    disable source_path_used
1272
else
1273
    source_path="$(cd "$source_path"; pwd)"
1274
    echo "$source_path" | grep -q '[[:blank:]]' &&
1275
        die "Out of tree builds are impossible with whitespace in source path."
1276 1277
    test -e "$source_path/config.h" &&
        die "Out of tree builds are impossible with config.h in source dir."
1278 1279
fi

1280
for v in "$@"; do
1281 1282 1283
    r=${v#*=}
    l=${v%"$r"}
    r=$(sh_quote "$r")
1284 1285
    FFMPEG_CONFIGURATION="${FFMPEG_CONFIGURATION# } ${l}${r}"
done
1286

1287 1288 1289 1290
find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
M
Måns Rullgård 已提交
1291
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1292 1293 1294 1295
}

ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
1296
HWACCEL_LIST=$(find_things  hwaccel  HWACCEL  libavcodec/allcodecs.c)
1297 1298 1299 1300
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)
1301 1302
OUTDEV_LIST=$(find_things   outdev   OUTDEV   libavdevice/alldevices.c)
INDEV_LIST=$(find_things    indev    _IN      libavdevice/alldevices.c)
1303
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1304
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1305

1306 1307 1308
enable $ARCH_EXT_LIST \
       $DECODER_LIST \
       $ENCODER_LIST \
1309
       $HWACCEL_LIST \
1310 1311 1312 1313
       $PARSER_LIST \
       $BSF_LIST \
       $DEMUXER_LIST \
       $MUXER_LIST \
1314
       $FILTER_LIST \
1315 1316 1317
       $PROTOCOL_LIST \
       $INDEV_LIST \
       $OUTDEV_LIST \
1318 1319 1320 1321 1322 1323 1324

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

1325
show_list() {
R
Ramiro Polla 已提交
1326 1327 1328
    suffix=_$1
    shift
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1329 1330 1331
    exit 0
}

1332
for opt do
1333 1334
    optval="${opt#*=}"
    case "$opt" in
1335
    --extra-cflags=*) add_cflags $optval
1336
    ;;
1337
    --extra-ldflags=*) add_ldflags $optval
1338
    ;;
1339
    --extra-libs=*) add_extralibs $optval
1340
    ;;
D
Diego Biurrun 已提交
1341
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1342
    ;;
1343 1344
    --enable-debug=*) debuglevel="$optval"
    ;;
1345
    --enable-*=*|--disable-*=*)
1346
    eval $(echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/')
1347
    case "$thing" in
1348
        encoder|decoder|hwaccel|muxer|demuxer|indev|outdev|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1349 1350 1351 1352
        *) die_unknown "$opt" ;;
    esac
    ;;
    --enable-?*|--disable-?*)
1353
    eval $(echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g')
1354 1355 1356 1357 1358 1359 1360
    if is_in $option $COMPONENT_LIST; then
        eval $action \$$(toupper ${option%s})_LIST
    elif is_in $option $CMDLINE_SELECT; then
        $action $option
    else
        die_unknown $opt
    fi
1361 1362 1363 1364 1365 1366 1367 1368 1369 1370
    ;;
    --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
    ;;
    *)
1371
    optname="${opt%%=*}"
1372 1373 1374 1375
    optname="${optname#--}"
    optname=$(echo "$optname" | sed 's/-/_/g')
    is_in $optname $CMDLINE_SET || die_unknown $opt
    eval $optname='$optval'
1376 1377
    ;;
    esac
1378 1379
done

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

1382
echo "# $0 $FFMPEG_CONFIGURATION" > $logfile
M
Måns Rullgård 已提交
1383 1384
set >> $logfile

1385 1386
test -n "$cross_prefix" && enable cross_compile

1387
ar="${cross_prefix}${ar}"
D
Diego Biurrun 已提交
1388
cc_default="${cross_prefix}${cc_default}"
M
Måns Rullgård 已提交
1389
nm_default="${cross_prefix}${nm_default}"
1390 1391 1392
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1393 1394
sysinclude_default="${sysroot}/usr/include"

1395 1396
set_default cc nm sysinclude
as_default=$cc
1397 1398
enabled cross_compile || host_cc_default=$cc
set_default host_cc
1399

1400 1401 1402 1403 1404 1405 1406 1407
exesuf() {
    case $1 in
        mingw32*|cygwin*|*-dos|freedos|opendos|os/2*) echo .exe ;;
    esac
}

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

1409
# set temporary file name
1410
: ${TMPDIR:=$TEMPDIR}
1411
: ${TMPDIR:=$TMP}
1412
: ${TMPDIR:=/tmp}
1413

1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440
if ! check_cmd type mktemp; then
    # simple replacement for missing mktemp
    # NOT SAFE FOR GENERAL USE
    mktemp(){
        echo "${2%XXX*}.${HOSTNAME}.${UID}.$$"
    }
fi

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

trap 'rm -f -- $TMPFILES' EXIT
trap exit HUP INT TERM

tmpfile TMPC  .c
tmpfile TMPE  $EXESUF
tmpfile TMPH  .h
tmpfile TMPO  .o
tmpfile TMPS  .S
tmpfile TMPSH .sh

unset -f mktemp
1441

1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454
# 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

1455
if   $cc --version 2>/dev/null | grep -qi gcc; then
1456 1457 1458 1459 1460
    cc_type=gcc
elif $cc --version 2>/dev/null | grep -q Intel; then
    cc_type=icc
elif $cc -v 2>&1 | grep -q xlc; then
    cc_type=xlc
1461 1462 1463
elif $cc -V 2>/dev/null | grep -q Compaq; then
    cc_type=ccc
    DEPEND_CMD='$(CC) $(CFLAGS) -M $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o,"'
1464
    debuglevel=3
1465
    add_ldflags -Wl,-z,now # calls to libots crash without this
1466 1467 1468 1469 1470 1471 1472 1473 1474 1475
elif $cc --vsn 2>/dev/null | grep -q RVCT; then
    test -d "$sysroot" || die "No valid sysroot specified."
    cc_type=armcc
    armcc_conf="$PWD/armcc.conf"
    $cc --arm_linux_configure                 \
        --arm_linux_config_file="$armcc_conf" \
        --configure_sysroot="$sysroot"        \
        --configure_cpp_headers="$sysinclude" >>$logfile 2>&1 ||
        die "Error creating armcc configuration file."
    cc="$cc --arm_linux_config_file=$armcc_conf --translate_gcc"
1476
    as_default="${cross_prefix}gcc"
1477 1478 1479 1480
fi

test -n "$cc_type" && enable $cc_type || echolog "Unknown C compiler $cc"

1481 1482
set_default as

M
Måns Rullgård 已提交
1483 1484 1485 1486 1487 1488 1489 1490 1491
if test -n "$sysroot"; then
    case "$cc_type" in
        gcc)
            add_cflags  --sysroot="$sysroot"
            add_ldflags --sysroot="$sysroot"
        ;;
    esac
fi

1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504
# 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

1505
check_cflags -std=c99
1506 1507 1508 1509 1510 1511
check_cc -D_FILE_OFFSET_BITS=64 <<EOF && add_cflags -D_FILE_OFFSET_BITS=64
#include <stdlib.h>
EOF
check_cc -D_LARGEFILE_SOURCE <<EOF && add_cflags -D_LARGEFILE_SOURCE
#include <stdlib.h>
EOF
1512

R
Ramiro Polla 已提交
1513 1514 1515 1516
case "$arch" in
    alpha)
        arch="alpha"
        enable fast_64bit
M
Måns Rullgård 已提交
1517
        check_cflags -mieee
R
Ramiro Polla 已提交
1518
    ;;
1519 1520
    arm|armv[4567]*l)
        arch="arm"
R
Ramiro Polla 已提交
1521
    ;;
1522 1523
    avr32)
    ;;
1524 1525 1526 1527 1528
    bfin)
        arch="bfin"
    ;;
    ia64)
        arch="ia64"
R
Ramiro Polla 已提交
1529
        enable fast_64bit
1530 1531 1532
    ;;
    m68k)
        arch="m68k"
R
Ramiro Polla 已提交
1533
    ;;
1534
    mips|mipsel|IP*)
R
Ramiro Polla 已提交
1535 1536
        arch="mips"
    ;;
1537 1538
    mips64)
        arch="mips"
1539
        subarch="mips64"
1540 1541
        enable fast_64bit
    ;;
1542
    parisc|hppa)
R
Ramiro Polla 已提交
1543 1544
        arch="parisc"
    ;;
1545
    parisc64|hppa64)
R
Ramiro Polla 已提交
1546 1547 1548
        arch="parisc"
        enable fast_64bit
    ;;
1549 1550 1551 1552 1553 1554
    "Power Macintosh"|ppc|powerpc)
        arch="ppc"
        enable fast_unaligned
    ;;
    ppc64)
        arch="ppc"
1555
        subarch="ppc64"
1556 1557 1558
        enable fast_64bit
        enable fast_unaligned
    ;;
R
Ramiro Polla 已提交
1559 1560 1561
    s390|s390x)
        arch="s390"
    ;;
1562 1563
    sh4|sh)
        arch="sh4"
R
Ramiro Polla 已提交
1564
    ;;
1565 1566 1567 1568 1569 1570
    sparc)
        arch="sparc"
    ;;
    sun4u|sparc64)
        arch="sparc"
        subarch="sparc64"
R
Ramiro Polla 已提交
1571 1572
        enable fast_64bit
    ;;
1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586
    i386|i486|i586|i686|i86pc|BePC)
        arch="x86"
        subarch="x86_32"
        enable fast_unaligned
    ;;
    x86_64|amd64)
        arch="x86"
        subarch="x86_32"
        enable cmov
        enable fast_cmov
        enable fast_unaligned
        check_cc <<EOF && enable fast_64bit && subarch="x86_64"
        int test[sizeof(char*) - 7];
EOF
R
Ramiro Polla 已提交
1587 1588 1589 1590 1591 1592
    ;;
    *)
        arch="unknown"
    ;;
esac

1593
enable $arch $subarch
R
Ramiro Polla 已提交
1594

1595
# OS specific
1596
case $target_os in
1597
    beos|haiku|zeta)
1598
        prefix_default="$HOME/config"
1599
        # helps building libavcodec
1600
        add_cflags -DPIC -fomit-frame-pointer
1601
        # 3 gcc releases known for BeOS, each with ugly bugs
1602
        gcc_version="$($cc -v 2>&1 | grep version | cut -d ' ' -f3-)"
1603 1604 1605 1606 1607
        case "$gcc_version" in
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
            disable mmx
            ;;
          *20010315*) echo "BeBits gcc"
1608
            add_cflags -fno-expensive-optimizations
1609 1610 1611 1612 1613 1614 1615 1616
            ;;
        esac
        SHFLAGS=-nostart
        # enable BeOS things
        enable audio_beos
        # no need for libm, but the inet stuff
        # Check for BONE
        # XXX: actually should check for NOT net_server
1617
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1618 1619 1620 1621 1622 1623 1624
            network_extralibs="-lbind -lsocket"
        else
            enable beos_netserver
            network_extralibs="-lnet"
        fi ;;
    sunos)
        FFSERVERLDFLAGS=""
M
Måns Rullgård 已提交
1625
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1626
        network_extralibs="-lsocket -lnsl"
1627
        add_cflags -D__EXTENSIONS__
1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639
        ;;
    netbsd)
        oss_demuxer_extralibs="-lossaudio"
        oss_muxer_extralibs="-lossaudio"
        ;;
    openbsd)
        disable need_memalign
        LIBOBJFLAGS='$(PIC)'
        SHFLAGS='-shared'
        oss_demuxer_extralibs="-lossaudio"
        oss_muxer_extralibs="-lossaudio"
        ;;
1640
    freebsd|dragonfly)
1641 1642 1643 1644 1645 1646 1647 1648
        disable need_memalign
        ;;
    bsd/os)
        osextralibs="-lpoll -lgnugetopt"
        strip="strip -d"
        ;;
    darwin)
        disable need_memalign
1649
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
1650 1651 1652 1653 1654 1655
        strip="strip -x"
        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
        SLIBSUF=".dylib"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
        FFSERVERLDFLAGS=-Wl,-bind_at_load
L
Loren Merritt 已提交
1656
        objformat="macho"
1657
        enabled x86_64 && objformat="macho64"
1658 1659
        ;;
    mingw32*)
1660
        target_os=mingw32
R
Ramiro Polla 已提交
1661
        LIBTARGET=i386
1662
        if enabled x86_64; then
R
Ramiro Polla 已提交
1663 1664 1665
            disable need_memalign
            LIBTARGET=x64
        fi
1666
        shlibdir_default="$bindir_default"
1667 1668 1669 1670 1671
        disable ffserver
        SLIBPREF=""
        SLIBSUF=".dll"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
1672
        SLIB_EXTRA_CMD='-lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1673 1674
        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"; \
            install -m 644 $(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)"'
1675
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
1676
        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 已提交
1677
        objformat="win32"
1678
        enable dos_paths
1679
        check_cflags -fno-common
1680
        if ! enabled x86_64; then
R
Ramiro Polla 已提交
1681 1682 1683 1684 1685 1686
            check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
                die "ERROR: MinGW runtime version must be >= 3.15."
            enabled_any avisynth vfwcap_demuxer &&
                { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
                  die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
            fi
1687 1688
        ;;
    cygwin*)
1689
        target_os=cygwin
1690
        shlibdir_default="$bindir_default"
1691 1692 1693 1694 1695
        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 已提交
1696
        objformat="win32"
1697
        enable dos_paths
1698
        check_cflags -fno-common
1699
        ;;
M
Michael Kostylev 已提交
1700
    *-dos|freedos|opendos)
1701
        disable ffplay ffserver
M
Michael Kostylev 已提交
1702 1703
        disable $INDEV_LIST $OUTDEV_LIST
        network_extralibs="-lsocket"
1704
        objformat="coff"
1705
        enable dos_paths
M
Michael Kostylev 已提交
1706
        ;;
1707 1708 1709 1710
    linux)
        enable dv1394
        ;;
    irix*)
1711
        target_os=irix
1712 1713
        ranlib="echo ignoring ranlib"
        ;;
D
Dave Yeo 已提交
1714 1715 1716 1717
    os/2*)
        strip="lxlite"
        ln_s="cp -f"
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
M
Måns Rullgård 已提交
1718
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
D
Dave Yeo 已提交
1719
        FFSERVERLDFLAGS=""
1720
        LIBSUF="_s.a"
D
Dave Yeo 已提交
1721 1722 1723 1724
        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 已提交
1725 1726 1727 1728 1729 1730 1731 1732 1733
        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 已提交
1734
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
1735
        enable dos_paths
D
Dave Yeo 已提交
1736
        ;;
1737 1738
    gnu/kfreebsd)
        ;;
1739 1740
    gnu)
        ;;
D
Dave Yeo 已提交
1741

1742
    *)
1743
        die "Unknown OS '$target_os'."
1744 1745 1746
        ;;
esac

1747 1748
set_default $PATHS_LIST

1749
add_extralibs $osextralibs
F
Fabrice Bellard 已提交
1750

1751 1752
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1753

1754
# we need to build at least one lib type
1755
if ! enabled_any static shared; then
1756 1757 1758 1759 1760 1761 1762 1763 1764
    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 已提交
1765
disabled static && LIBNAME=""
R
Ramiro Polla 已提交
1766

1767 1768
if enabled_any libfaad libfaadbin ; then
    if check_header faad.h; then
D
Diego Biurrun 已提交
1769
        check_cc <<EOF
1770 1771 1772 1773
#include <faad.h>
#ifndef FAAD2_VERSION
ok faad1
#endif
D
Diego Biurrun 已提交
1774
int main(void) { return 0; }
1775 1776 1777
EOF
        test $? = 0 && enable libfaad2
    else
D
Diego Biurrun 已提交
1778
        die "FAAD test failed."
1779 1780 1781 1782
    fi
fi


1783
die_license_disabled() {
1784
    enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; }
1785 1786 1787 1788 1789 1790 1791 1792 1793 1794
}

die_license_disabled gpl libfaad2
die_license_disabled gpl libx264
die_license_disabled gpl libxvid
die_license_disabled gpl postproc
die_license_disabled gpl x11grab

die_license_disabled nonfree libamr_nb
die_license_disabled nonfree libamr_wb
1795
die_license_disabled nonfree libfaac
1796

1797 1798 1799
die_license_disabled version3 libopencore_amrnb
die_license_disabled version3 libopencore_amrwb

1800
enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; }
1801

1802
check_deps $ARCH_EXT_LIST
1803

1804 1805
test -z "$need_memalign" && need_memalign="$mmx"

1806
#Darwin CC versions
1807
if test $target_os = darwin; then
1808
    if enabled xlc; then
1809
        add_cflags -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto
1810
    else
1811 1812 1813
        add_cflags -pipe
        check_cflags -force_cpusubtype_ALL
        check_cflags -Wno-sign-compare
1814
        enabled shared || check_cflags -mdynamic-no-pic
1815
    fi
1816 1817
fi

1818
disabled optimizations || check_cflags -fomit-frame-pointer
1819

1820
# Add processor-specific flags
1821
if test $cpu != "generic"; then
M
Måns Rullgård 已提交
1822 1823
    warn_altivec(){
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1824
    }
1825
    case $cpu in
1826
        601|ppc601|PowerPC601)
1827
            add_cflags -mcpu=601
M
Måns Rullgård 已提交
1828
            warn_altivec enabled PPC601
1829 1830
        ;;
        603*|ppc603*|PowerPC603*)
1831
            add_cflags -mcpu=603
M
Måns Rullgård 已提交
1832
            warn_altivec enabled PPC603
1833 1834
        ;;
        604*|ppc604*|PowerPC604*)
1835
            add_cflags -mcpu=604
M
Måns Rullgård 已提交
1836
            warn_altivec enabled PPC604
1837 1838
        ;;
        G3|g3|75*|ppc75*|PowerPC75*)
1839
            add_cflags -mcpu=750 -mpowerpc-gfxopt
M
Måns Rullgård 已提交
1840
            warn_altivec enabled PPC75x
1841 1842
        ;;
        G4|g4|745*|ppc745*|PowerPC745*)
1843
            add_cflags -mcpu=7450 -mpowerpc-gfxopt
M
Måns Rullgård 已提交
1844
            warn_altivec disabled PPC745x
1845 1846
        ;;
        74*|ppc74*|PowerPC74*)
1847
            add_cflags -mcpu=7400 -mpowerpc-gfxopt
M
Måns Rullgård 已提交
1848
            warn_altivec disabled PPC74xx
1849 1850
        ;;
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1851
            add_cflags -mcpu=970 -mpowerpc-gfxopt -mpowerpc64
M
Måns Rullgård 已提交
1852
            warn_altivec disabled PPC970
1853
        ;;
1854
        Cell|CELL|cell)
1855
            add_cflags -mcpu=cell
1856
            warn_altivec disabled Cell
1857
            enable ldbrx
1858
        ;;
1859 1860
        # targets that do NOT support conditional mov (cmov)
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1861
            add_cflags -march=$cpu
1862
            disable cmov
1863 1864
        ;;
        # targets that do support conditional mov (cmov)
1865
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1866
            add_cflags -march=$cpu
1867 1868
            enable cmov
            enable fast_cmov
1869 1870
        ;;
        # targets that do support conditional mov but on which it's slow
1871
        pentium4|pentium4m|prescott|nocona)
1872
            add_cflags -march=$cpu
1873 1874
            enable cmov
            disable fast_cmov
1875
        ;;
1876
        sparc64)
1877
            add_cflags -mcpu=v9
1878
        ;;
1879
        arm11*|cortex*)
1880
            add_cflags -mcpu=$cpu
1881 1882
            enable fast_unaligned
        ;;
1883
        armv*)
1884
            add_cflags -march=$cpu
1885
        ;;
1886
        arm*)
1887
            add_cflags -mcpu=$cpu
M
Måns Rullgård 已提交
1888
        ;;
M
Måns Rullgård 已提交
1889
        ev4|ev45|ev5|ev56|pca56|ev6|ev67)
1890
            enabled ccc && add_cflags -arch $cpu || add_cflags -mcpu=$cpu
M
Måns Rullgård 已提交
1891
        ;;
1892 1893 1894
        bf*)
            add_cflags -mcpu=$cpu
        ;;
M
Måns Rullgård 已提交
1895 1896 1897
        mips*|[45]k*|[237]4k*|m4k|r*000|loongson2[ef])
            add_cflags -march=$cpu
        ;;
1898
        *)
1899
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1900
        ;;
1901 1902 1903
    esac
fi

1904 1905 1906
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
1907
sym=$($nm -P -g $TMPO | grep ff_extern)
1908 1909
extern_prefix=${sym%%ff_extern*}

1910 1911 1912
check_cc <<EOF && enable inline_asm
void foo(void) { __asm__ volatile ("" ::); }
EOF
M
Måns Rullgård 已提交
1913

1914
if enabled x86; then
1915 1916 1917 1918
    # 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.
1919
    check_exec_crash <<EOF && enable ebp_available
1920
    volatile int i=0;
D
Diego Pettenò 已提交
1921
    __asm__ volatile (
1922 1923 1924 1925 1926 1927
        "xorl %%ebp, %%ebp"
    ::: "%ebp");
    return i;
EOF

    # check wether EBX is available on x86
1928
    check_asm ebx_available '"":::"%ebx"'
1929

1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941
    # 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

1942
    # check whether binutils is new enough to compile SSSE3/MMX2
1943
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1944
    enabled mmx2  && check_asm mmx2  '"pmaxub %mm0, %mm1"'
1945 1946

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

1948
    YASMFLAGS="-f $objformat -DARCH_$(toupper $subarch)"
L
Loren Merritt 已提交
1949 1950 1951 1952
    enabled     x86_64        && append YASMFLAGS "-m amd64"
    enabled_all x86_64 shared && append YASMFLAGS "-DPIC"
    case "$objformat" in
        elf) enabled debug && append YASMFLAGS "-g dwarf2" ;;
1953
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
L
Loren Merritt 已提交
1954 1955
        *)                    append YASMFLAGS "-DPREFIX"  ;;
    esac
1956
    disabled yasm || { check_yasm "pabsw xmm0, xmm0" && enable yasm; }
1957 1958
fi

1959 1960
# check for assembler specific support

1961 1962
enabled mips && check_asm loongson '"dmult.g $1, $2, $3"'

1963
enabled ppc && check_asm dcbzl '"dcbzl 0, 1"'
1964
enabled ppc && check_asm ppc4xx '"maclhw r10, r11, r12"'
1965
enabled ppc && check_asm xform_asm '"lwzx 0, %y0" :: "Z"(*(int*)0)'
1966

1967 1968
# check for SIMD availability

1969
# AltiVec flags: The FSF version of GCC differs from the Apple version
1970
if enabled altivec; then
1971 1972
    check_cflags -maltivec -mabi=altivec &&
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1973
        check_cflags -faltivec
1974

M
indent  
Måns Rullgård 已提交
1975
    # check if our compiler supports Motorola AltiVec C API
1976
    check_cc <<EOF || disable altivec
1977
$inc_altivec_h
1978 1979 1980 1981 1982
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
1983 1984 1985
EOF

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

1992
# We have to check if pld is a nop and disable it.
M
Måns Rullgård 已提交
1993
enabled arm     && check_asm pld     '"pld [r0]"'
1994 1995
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
1996
enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
M
Måns Rullgård 已提交
1997
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1998 1999
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
2000
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
2001
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
2002

2003
enabled vis && add_cflags -mcpu=ultrasparc -mtune=ultrasparc
2004

2005 2006
# ---
# big/little-endian test
2007 2008
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
2009
EOF
2010
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
F
Fabrice Bellard 已提交
2011

N
Nick Kurshev 已提交
2012 2013 2014
# ---
# check availability of some header files

2015 2016 2017 2018
if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
2019 2020
fi

2021 2022 2023
# Solaris has nanosleep in -lrt, OpenSolaris no longer needs that
check_func nanosleep || { check_func nanosleep -lrt && add_extralibs -lrt; }

2024 2025 2026
check_func  fork
check_func  gethrtime
check_func  getrusage
2027
check_func  inet_aton $network_extralibs
2028 2029
check_func  memalign
check_func  mkstemp
2030
check_func  posix_memalign
2031
check_func_headers io.h setmode
2032
check_func_headers lzo/lzo1x.h lzo1x_999_compress
2033
check_func_headers windows.h GetProcessTimes
2034
check_func_headers windows.h VirtualAlloc
R
Ramiro Polla 已提交
2035

2036
check_header conio.h
2037 2038
check_header dlfcn.h
check_header malloc.h
2039
check_header poll.h
2040
check_header sys/mman.h
2041
check_header sys/resource.h
2042
check_header sys/select.h
2043
check_header termios.h
2044 2045
check_header vdpau/vdpau.h
check_header vdpau/vdpau_x11.h
D
Diego Biurrun 已提交
2046
check_header X11/extensions/XvMClib.h
2047

2048 2049
if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
2050
fi
2051

2052
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
2053
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
2054 2055 2056 2057

# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if enabled pthreads; then
M
Måns Rullgård 已提交
2058 2059 2060 2061
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
2062
        add_extralibs -pthread
M
Måns Rullgård 已提交
2063 2064
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
2065
        add_extralibs -pthreads
G
Gianluigi Tiesi 已提交
2066 2067
    elif check_func pthread_create -lpthreadGC2; then
        add_extralibs -lpthreadGC2
M
Måns Rullgård 已提交
2068 2069 2070
    elif ! check_lib pthread.h pthread_create -lpthread; then
        die "ERROR: can't find pthreads library"
    fi
2071 2072
fi

2073
for thread in $THREADS_LIST; do
2074
    if enabled $thread; then
2075 2076
        test -n "$thread_type" &&
            die "ERROR: Only one thread type must be selected." ||
2077 2078 2079 2080
            thread_type="$thread"
    fi
done

M
Måns Rullgård 已提交
2081
check_lib math.h sin -lm
G
Gwenole Beauchesne 已提交
2082
check_lib va/va.h vaInitialize -lva
M
Måns Rullgård 已提交
2083

2084
# test for C99 functions in math.h
2085
for func in llrint lrint lrintf round roundf truncf; do
2086
    check_exec <<EOF && enable $func || disable $func
2087
#include <math.h>
2088
int main(void) { return ($func(3.999f) > 0)?0:1; }
2089
EOF
2090
done
2091

2092
# these are off by default, so fail if requested and not available
2093
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
2094
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Decoder_Interface_init -lamrnb -lm
2095
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
2096
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
D
Diego Biurrun 已提交
2097 2098
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
2099 2100
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
2101
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
2102
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
2103
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
2104 2105
enabled libopencore_amrnb  && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb -lm
enabled libopencore_amrwb  && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -lm
2106
enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version -lopenjpeg
D
Diego Biurrun 已提交
2107 2108
enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
                           require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
D
David Conrad 已提交
2109
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
2110 2111
enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
2112
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
2113 2114
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
                        die "ERROR: libx264 version must be >= 0.65."; }
2115
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
2116
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2117

2118 2119 2120 2121 2122 2123 2124 2125 2126 2127
# 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


F
Falk Hüffner 已提交
2128 2129
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
2130
    check_cc <<EOF && _restrict=$restrict_keyword && break
2131 2132
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
2133 2134
done

2135
##########################################
D
Diego Biurrun 已提交
2136
# SDL check
2137

2138 2139
disable sdl_too_old
disable sdl
2140
SDL_CONFIG="${cross_prefix}sdl-config"
2141
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
2142
    sdl_cflags=$("${SDL_CONFIG}" --cflags)
M
Måns Rullgård 已提交
2143
    temp_cflags $sdl_cflags
2144
    temp_extralibs $("${SDL_CONFIG}" --libs)
2145
    if check_lib2 SDL.h SDL_Init; then
2146
        _sdlversion=$("${SDL_CONFIG}" --version | sed 's/[^0-9]//g')
2147
        if test "$_sdlversion" -lt 121 ; then
2148
            enable sdl_too_old
2149
        else
2150
            enable sdl
M
Måns Rullgård 已提交
2151
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
2152
#include <SDL.h>
2153
int main(int argc, char **argv){
2154 2155 2156 2157 2158
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
    int w = vi->current_w;
    return 0;
}
EOF
2159 2160
        fi
    fi
2161
    restore_flags
M
Michael Niedermayer 已提交
2162
fi
2163

2164
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
2165

R
Ramiro Polla 已提交
2166 2167 2168 2169
##########################################
# Network check

if enabled network; then
2170
    check_type "sys/types.h sys/socket.h" socklen_t
R
Ramiro Polla 已提交
2171 2172 2173 2174
    # Prefer arpa/inet.h over winsock2
    if check_header arpa/inet.h ; then
        check_func closesocket
    elif check_header winsock2.h ; then
2175
        network_extralibs="-lws2_32"
2176
        check_type ws2tcpip.h socklen_t
2177
        check_func_headers winsock2.h closesocket
2178 2179
    else
        disable network
R
Ramiro Polla 已提交
2180 2181 2182
    fi
fi

2183
##########################################
D
Diego Biurrun 已提交
2184
# IPv6 check
2185

2186
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
2187 2188 2189 2190
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
D
Diego Biurrun 已提交
2191
int main(void) {
2192 2193 2194 2195 2196
    struct sockaddr_storage saddr;
    struct ipv6_mreq mreq6;
    getaddrinfo(0,0,0,0);
    getnameinfo(0,0,0,0,0,0,0);
    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
2197 2198 2199
}
EOF

2200 2201
check_header linux/videodev.h
check_header linux/videodev2.h
2202
check_header sys/videoio.h
2203

2204
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
R
Ramiro Polla 已提交
2205

2206
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
R
Indent  
Ramiro Polla 已提交
2207 2208 2209 2210 2211 2212 2213
{ 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
2214

2215 2216
check_header sys/soundcard.h
check_header soundcard.h
M
Måns Rullgård 已提交
2217

2218
enabled alsa_demuxer || enabled alsa_muxer && check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
2219

2220
enabled jack_demuxer && check_lib2 jack/jack.h jack_client_open -ljack
O
Olivier Guilyardi 已提交
2221

2222
# deal with the X11 frame grabber
2223
enabled x11grab                         &&
2224 2225 2226
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
check_func XOpenDisplay -lX11           &&
2227
check_func XShmCreateImage -lX11 -lXext
2228

2229
enabled debug && add_cflags -g"$debuglevel"
2230 2231 2232

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
2233 2234
check_cflags -Wall
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
2235 2236 2237
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
2238
check_cflags -Wno-pointer-sign
2239
check_cflags -Wcast-qual
2240
check_cflags -Wwrite-strings
2241
check_cflags -Wtype-limits
2242
check_cflags -Wundef
2243
enabled extra_warnings && check_cflags -Winline
2244

2245
# add some linker flags
2246
check_ldflags -Wl,--warn-common
2247 2248
check_ldflags -Wl,--as-needed
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'
2249
check_ldflags -Wl,-Bsymbolic
F
Fabrice Bellard 已提交
2250

2251 2252
if enabled small; then
    check_cflags -Os            # not all compilers support -Os
2253 2254
    optimizations="small"
elif enabled optimizations; then
2255
    if enabled xlc; then
2256 2257
        add_cflags  -O5
        add_ldflags -O5
2258 2259
    elif enabled ccc; then
        add_cflags -fast
2260
    else
2261
        add_cflags -O3
2262
    fi
2263
fi
2264
check_cflags -fno-math-errno
2265
check_cflags -fno-signed-zeros
2266

C
Carl Eugen Hoyos 已提交
2267
# add some flags for Intel C Compiler
2268
if enabled icc; then
M
Måns Rullgård 已提交
2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280
    # Just warnings, no remarks
    check_cflags -w1
    # -wd: Disable following warnings
    # 144, 167, 556: -Wno-pointer-sign
    # 10006: ignoring unknown option -fno-signed-zeros
    # 10156: ignoring option '-W'; no argument required
    check_cflags -wd144,167,556,10006,10156
    # 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 已提交
2281 2282
    # icc 11.0 and 11.1 work with ebp_available, but don't pass the test
    enable ebp_available
2283 2284 2285 2286 2287 2288 2289 2290
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
C
Carl Eugen Hoyos 已提交
2291 2292
fi

2293
# PIC flags for shared library objects where they are needed
2294
if enabled shared; then
2295 2296
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
2297
        case "${subarch-$arch}" in
2298
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2299 2300
        esac
    fi
2301 2302
fi

2303
if enabled gprof; then
2304 2305
    add_cflags  -p
    add_ldflags -p
2306 2307
fi

D
Diego Biurrun 已提交
2308
# Find out if the .align argument is a power of two or not.
2309
check_asm asmalign_pot '".align 3"'
2310

2311 2312
enabled_any $DECODER_LIST      && enable decoders
enabled_any $ENCODER_LIST      && enable encoders
2313
enabled_any $HWACCEL_LIST      && enable hwaccels
2314 2315 2316
enabled_any $BSF_LIST          && enable bsfs
enabled_any $DEMUXER_LIST      && enable demuxers
enabled_any $MUXER_LIST        && enable muxers
2317
enabled_any $FILTER_LIST       && enable filters
2318 2319 2320 2321 2322 2323 2324
enabled_any $INDEV_LIST        && enable demuxers
enabled_any $OUTDEV_LIST       && enable muxers
enabled_any $PROTOCOL_LIST     && enable protocols

enabled_any $THREADS_LIST      && enable threads

check_deps $CONFIG_LIST       \
2325
           $CONFIG_EXTRA      \
2326 2327 2328
           $HAVE_LIST         \
           $DECODER_LIST      \
           $ENCODER_LIST      \
2329
           $HWACCEL_LIST      \
2330 2331 2332 2333
           $PARSER_LIST       \
           $BSF_LIST          \
           $DEMUXER_LIST      \
           $MUXER_LIST        \
2334
           $FILTER_LIST       \
2335 2336 2337
           $INDEV_LIST        \
           $OUTDEV_LIST       \
           $PROTOCOL_LIST     \
2338

2339
echo "install prefix            $prefix"
D
Diego Biurrun 已提交
2340 2341
echo "source path               $source_path"
echo "C compiler                $cc"
D
Diego Biurrun 已提交
2342
echo ".align is power-of-two    $asmalign_pot"
D
Diego Biurrun 已提交
2343
echo "ARCH                      $arch ($cpu)"
2344 2345
if test "$build_suffix" != ""; then
    echo "build suffix              $build_suffix"
2346
fi
2347 2348 2349
if test "$extra_version" != ""; then
    echo "version string suffix     $extra_version"
fi
M
Måns Rullgård 已提交
2350
echo "big-endian                ${bigendian-no}"
2351
echo "runtime cpu detection     ${runtime_cpudetect-no}"
2352
if enabled x86; then
C
Carl Eugen Hoyos 已提交
2353
    echo "yasm                      ${yasm-no}"
M
Måns Rullgård 已提交
2354
    echo "MMX enabled               ${mmx-no}"
2355
    echo "MMX2 enabled              ${mmx2-no}"
2356
    echo "3DNow! enabled            ${amd3dnow-no}"
2357
    echo "3DNow! extended enabled   ${amd3dnowext-no}"
2358
    echo "SSE enabled               ${sse-no}"
2359
    echo "SSSE3 enabled             ${ssse3-no}"
M
Måns Rullgård 已提交
2360 2361
    echo "CMOV enabled              ${cmov-no}"
    echo "CMOV is fast              ${fast_cmov-no}"
M
Michael Niedermayer 已提交
2362 2363
    echo "EBX available             ${ebx_available-no}"
    echo "EBP available             ${ebp_available-no}"
2364
    echo "10 operands supported     ${ten_operands-no}"
F
Fabrice Bellard 已提交
2365
fi
2366
if enabled arm; then
M
Måns Rullgård 已提交
2367 2368
    echo "ARMv5TE enabled           ${armv5te-no}"
    echo "ARMv6 enabled             ${armv6-no}"
2369
    echo "ARMv6T2 enabled           ${armv6t2-no}"
M
Måns Rullgård 已提交
2370
    echo "ARM VFP enabled           ${armvfp-no}"
M
Måns Rullgård 已提交
2371
    echo "IWMMXT enabled            ${iwmmxt-no}"
2372
    echo "NEON enabled              ${neon-no}"
2373
fi
2374
if enabled mips; then
M
Måns Rullgård 已提交
2375
    echo "MMI enabled               ${mmi-no}"
F
Fabrice Bellard 已提交
2376
fi
2377
if enabled ppc; then
M
Måns Rullgård 已提交
2378
    echo "AltiVec enabled           ${altivec-no}"
2379
    echo "PPC 4xx optimizations     ${ppc4xx-no}"
M
Måns Rullgård 已提交
2380
    echo "dcbzl available           ${dcbzl-no}"
2381 2382 2383 2384
    echo "performance report        ${powerpc_perf-no}"
fi
if enabled sparc; then
    echo "VIS enabled               ${vis-no}"
F
Fabrice Bellard 已提交
2385
fi
M
Måns Rullgård 已提交
2386 2387
echo "gprof enabled             ${gprof-no}"
echo "debug symbols             ${debug-no}"
2388
echo "strip symbols             ${stripping-no}"
2389
echo "optimizations             ${optimizations-no}"
M
Måns Rullgård 已提交
2390 2391
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
2392
echo "postprocessing support    ${postproc-no}"
2393
echo "new filter support        ${avfilter-no}"
2394
echo "filters using lavformat   ${avfilter_lavf-no}"
M
Måns Rullgård 已提交
2395
echo "network support           ${network-no}"
2396
if enabled network; then
M
Måns Rullgård 已提交
2397
    echo "IPv6 support              ${ipv6-no}"
D
Diego Biurrun 已提交
2398
fi
M
Måns Rullgård 已提交
2399 2400
echo "threading support         ${thread_type-no}"
echo "SDL support               ${sdl-no}"
2401
if enabled sdl_too_old; then
D
Diego Biurrun 已提交
2402 2403
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
fi
M
Måns Rullgård 已提交
2404 2405 2406 2407
echo "Sun medialib support      ${mlib-no}"
echo "AVISynth enabled          ${avisynth-no}"
echo "libamr-nb support         ${libamr_nb-no}"
echo "libamr-wb support         ${libamr_wb-no}"
R
Ramiro Polla 已提交
2408
echo "libdc1394 support         ${libdc1394-no}"
2409
echo "libdirac enabled          ${libdirac-no}"
M
Måns Rullgård 已提交
2410 2411
echo "libfaac enabled           ${libfaac-no}"
echo "libfaad enabled           ${libfaad-no}"
2412
echo "libfaad dlopened          ${libfaadbin-no}"
M
Måns Rullgård 已提交
2413 2414 2415
echo "libgsm enabled            ${libgsm-no}"
echo "libmp3lame enabled        ${libmp3lame-no}"
echo "libnut enabled            ${libnut-no}"
2416 2417
echo "libopencore-amrnb support ${libopencore_amrnb-no}"
echo "libopencore-amrwb support ${libopencore_amrwb-no}"
J
Jai Menon 已提交
2418
echo "libopenjpeg enabled       ${libopenjpeg-no}"
2419
echo "libschroedinger enabled   ${libschroedinger-no}"
D
David Conrad 已提交
2420
echo "libspeex enabled          ${libspeex-no}"
M
Måns Rullgård 已提交
2421 2422
echo "libtheora enabled         ${libtheora-no}"
echo "libvorbis enabled         ${libvorbis-no}"
2423 2424
echo "libx264 enabled           ${libx264-no}"
echo "libxvid enabled           ${libxvid-no}"
M
Måns Rullgård 已提交
2425
echo "zlib enabled              ${zlib-no}"
2426
echo "bzlib enabled             ${bzlib-no}"
2427
echo
F
Fabrice Bellard 已提交
2428

2429
for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do
2430
    echo "Enabled ${type}s:"
2431
    eval list=\$$(toupper $type)_LIST
2432
    for part in $list; do
2433 2434 2435
        enabled $part && echo ${part%_*}
    done | sort | pr -3 -t
    echo
2436 2437
done

2438
license="LGPL version 2.1 or later"
2439
if enabled nonfree; then
2440
    license="nonfree and unredistributable"
2441 2442 2443 2444
elif enabled gplv3; then
    license="GPL version 3 or later"
elif enabled lgplv3; then
    license="LGPL version 3 or later"
2445
elif enabled gpl; then
2446
    license="GPL version 2 or later"
2447 2448 2449
fi

echo "License: $license"
2450

2451 2452
echo "Creating config.mak and config.h..."

D
Diego Biurrun 已提交
2453 2454
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2455 2456
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
echo "#define FFMPEG_CONFIG_H" >> $TMPH
2457
echo "#define FFMPEG_CONFIGURATION \"$(c_escape $FFMPEG_CONFIGURATION)\"" >> $TMPH
2458
echo "#define FFMPEG_DATADIR \"$(eval c_escape $datadir)\"" >> $TMPH
F
Fabrice Bellard 已提交
2459

2460
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2461
echo "prefix=$prefix" >> config.mak
2462 2463 2464 2465
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
2466
echo "DATADIR=\$(DESTDIR)$datadir" >> config.mak
2467
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2468 2469 2470
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2471
echo "CC=$cc" >> config.mak
2472
echo "AS=$as" >> config.mak
L
Loren Merritt 已提交
2473
echo "YASM=$yasmexe" >> config.mak
2474
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
2475
echo "RANLIB=$ranlib" >> config.mak
2476
echo "LN_S=$ln_s" >> config.mak
2477
enabled stripping &&
2478
    echo "STRIP=$strip" >> config.mak ||
M
Måns Rullgård 已提交
2479
    echo "STRIP=echo ignoring strip" >> config.mak
2480

N
Nick Kurshev 已提交
2481
echo "OPTFLAGS=$CFLAGS" >> config.mak
2482
echo "LDFLAGS=$LDFLAGS" >> config.mak
2483
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2484
echo "SHFLAGS=$SHFLAGS" >> config.mak
L
Loren Merritt 已提交
2485
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2486
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2487
echo "BUILD_STATIC=$static" >> config.mak
2488
echo "BUILDSUF=$build_suffix" >> config.mak
2489
echo "FULLNAME=$FULLNAME" >> config.mak
2490
echo "LIBPREF=$LIBPREF" >> config.mak
2491
echo "LIBSUF=$LIBSUF" >> config.mak
2492
echo "LIBNAME=$LIBNAME" >> config.mak
2493
echo "SLIBPREF=$SLIBPREF" >> config.mak
2494 2495
echo "SLIBSUF=$SLIBSUF" >> config.mak
echo "EXESUF=$EXESUF" >> config.mak
2496
echo "EXTRA_VERSION=$extra_version" >> config.mak
2497
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2498 2499
echo "HOSTCC=$host_cc" >> config.mak
echo "HOSTCFLAGS=$host_cflags" >> config.mak
2500
echo "HOSTEXESUF=$HOSTEXESUF" >> config.mak
2501 2502
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
echo "HOSTLIBS=$host_libs" >> config.mak
2503 2504
echo "TARGET_EXEC=$target_exec" >> config.mak
echo "TARGET_PATH=$target_path" >> config.mak
M
Måns Rullgård 已提交
2505

2506
if enabled bigendian; then
2507 2508
    echo "WORDS_BIGENDIAN=yes" >> config.mak
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2509
fi
2510

2511
if enabled sdl; then
2512 2513
    echo "SDL_LIBS=$("${SDL_CONFIG}" --libs)" >> config.mak
    echo "SDL_CFLAGS=$("${SDL_CONFIG}" --cflags)" >> config.mak
2514
fi
2515
if enabled texi2html; then
2516
    echo "BUILD_DOC=yes" >> config.mak
2517
fi
L
Luca Barbato 已提交
2518

2519 2520 2521
get_version(){
    name=$1
    file=$source_path/$2
2522 2523
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2524 2525 2526
    lcname=$(tolower $name)
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2527 2528
}

2529 2530 2531 2532 2533 2534
get_version LIBSWSCALE  libswscale/swscale.h
get_version LIBPOSTPROC libpostproc/postprocess.h
get_version LIBAVCODEC  libavcodec/avcodec.h
get_version LIBAVDEVICE libavdevice/avdevice.h
get_version LIBAVFORMAT libavformat/avformat.h
get_version LIBAVUTIL   libavutil/avutil.h
2535
get_version LIBAVFILTER libavfilter/avfilter.h
L
Luca Barbato 已提交
2536

2537
if enabled shared; then
2538 2539
    echo "BUILD_SHARED=yes" >> config.mak
    echo "PIC=-fPIC -DPIC" >> config.mak
R
Ramiro Polla 已提交
2540
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2541 2542 2543
    echo "SLIBNAME=${SLIBNAME}" >> config.mak
    echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
    echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
D
Dave Yeo 已提交
2544
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2545 2546 2547
    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
N
Nick Kurshev 已提交
2548
fi
2549
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2550
echo "EXTRALIBS=$extralibs" >> config.mak
2551

2552 2553
echo "ARCH=$arch" >> config.mak

2554 2555
print_config ARCH_   $TMPH config.mak $ARCH_LIST
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2556
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2557
                                      $CONFIG_EXTRA      \
2558 2559
                                      $DECODER_LIST      \
                                      $ENCODER_LIST      \
2560
                                      $HWACCEL_LIST      \
2561 2562 2563 2564
                                      $PARSER_LIST       \
                                      $BSF_LIST          \
                                      $DEMUXER_LIST      \
                                      $MUXER_LIST        \
2565
                                      $FILTER_LIST       \
2566 2567 2568
                                      $PROTOCOL_LIST     \
                                      $INDEV_LIST        \
                                      $OUTDEV_LIST       \
2569

F
Falk Hüffner 已提交
2570 2571
echo "#define restrict $_restrict" >> $TMPH

2572
if enabled small; then
2573
    echo "#define av_always_inline"  >> $TMPH
2574 2575
fi

2576

2577
# Apparently it's not possible to portably echo a backslash.
2578
enabled asmalign_pot &&
2579
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
D
Diego Biurrun 已提交
2580
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2581

2582
echo "#define EXTERN_PREFIX \"${extern_prefix}\"" >> $TMPH
Z
Zdenek Kabelac 已提交
2583

2584 2585
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH

D
Diego Biurrun 已提交
2586
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2587 2588 2589
cmp -s $TMPH config.h &&
    echo "config.h is unchanged" ||
    mv -f $TMPH config.h
N
Nick Kurshev 已提交
2590

2591
# build tree in object directory if source path is different from current one
2592
if enabled source_path_used; then
2593
    DIRS="\
2594 2595 2596
        doc               \
        libavcodec        \
        libavcodec/alpha  \
M
Måns Rullgård 已提交
2597
        libavcodec/arm    \
2598 2599 2600 2601 2602
        libavcodec/bfin   \
        libavcodec/mlib   \
        libavcodec/ppc    \
        libavcodec/sh4    \
        libavcodec/sparc  \
2603
        libavcodec/x86    \
2604
        libavdevice       \
2605
        libavfilter       \
2606 2607 2608 2609
        libavformat       \
        libavutil         \
        libpostproc       \
        libswscale        \
2610 2611 2612 2613 2614
        libswscale/bfin   \
        libswscale/mlib   \
        libswscale/ppc    \
        libswscale/sparc  \
        libswscale/x86    \
2615 2616 2617
        tests             \
        tools             \
        "
2618
    FILES="\
2619 2620
        Makefile             \
        common.mak           \
M
Måns Rullgård 已提交
2621
        subdir.mak           \
2622 2623
        doc/texi2pod.pl      \
        libavcodec/Makefile  \
2624
        libavdevice/Makefile \
2625
        libavfilter/Makefile \
2626 2627 2628 2629 2630
        libavformat/Makefile \
        libavutil/Makefile   \
        libpostproc/Makefile \
        libswscale/Makefile  \
        "
2631
    for dir in $DIRS ; do
2632
        mkdir -p $dir
2633 2634
    done
    for f in $FILES ; do
2635
        $ln_s "$source_path/$f" $f
2636 2637
    done
fi
2638 2639


2640
# build pkg-config files
2641

2642 2643
pkgconfig_generate(){
name=$1
2644
shortname=${name#lib}${build_suffix}
2645 2646 2647 2648
comment=$2
version=$3
libs=$4
requires=$5
2649
cat <<EOF > $name/$name.pc
2650
prefix=$prefix
2651
exec_prefix=\${prefix}
2652
libdir=$libdir
2653
includedir=$incdir
2654

2655 2656 2657
Name: $name
Description: $comment
Version: $version
2658 2659
Requires: $(disabled shared && echo $requires)
Requires.private: $(enabled shared && echo $requires)
2660
Conflicts:
2661 2662
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
Libs.private: $(enabled shared && echo $libs)
2663
Cflags: -I\${includedir}
2664
EOF
2665
cat <<EOF > $name/$name-uninstalled.pc
2666 2667
prefix=
exec_prefix=
2668
libdir=\${pcfiledir}
2669
includedir=${source_path}
2670

2671 2672 2673 2674
Name: $name
Description: $comment
Version: $version
Requires: $requires
2675
Conflicts:
2676
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2677 2678
Cflags: -I\${includedir}
EOF
2679
}
2680

2681
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
2682 2683 2684
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
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"
2685
enabled avfilter &&
2686
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
2687
enabled postproc &&
2688
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
D
Diego Biurrun 已提交
2689
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"