configure 69.7 KB
Newer Older
1
#!/bin/sh
2
#
3 4
# FFmpeg configure script
#
Diego Biurrun's avatar
Diego Biurrun committed
5 6 7
# Copyright (c) 2000-2002 Fabrice Bellard
# Copyright (c) 2005-2008 Diego Biurrun
# Copyright (c) 2005-2008 Mans Rullgard
8
#
9

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

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

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

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

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

if test "$E1" != 0 || test "$E2" = 0; then
    echo "Broken shell detected.  Trying alternatives."
31 32 33 34 35 36 37 38 39 40 41 42
    export FF_CONF_EXEC
    if test "0$FF_CONF_EXEC" -lt 1; then
        FF_CONF_EXEC=1
        try_exec bash "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 2; then
        FF_CONF_EXEC=2
        try_exec ksh "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 3; then
        FF_CONF_EXEC=3
        try_exec /usr/xpg4/bin/sh "$0" "$@"
43 44
    fi
    echo "No compatible shell script interpreter found."
Diego Biurrun's avatar
typo  
Diego Biurrun committed
45
    echo "This configure script requires a POSIX-compatible shell"
46
    echo "such as bash or ksh."
Diego Biurrun's avatar
Diego Biurrun committed
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 "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
68
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
69
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
70
  echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
71 72 73 74
  echo "  --enable-static          build static libraries [yes]"
  echo "  --disable-static         do not build static libraries [no]"
  echo "  --enable-shared          build shared libraries [no]"
  echo "  --disable-shared         do not build shared libraries [yes]"
75 76 77 78
  echo "  --enable-gpl             allow use of GPL code, the resulting libs"
  echo "                           and binaries will be under GPL [no]"
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
  echo "                           and binaries will be unredistributable [no]"
79
  echo "  --enable-postproc        enable GPLed postprocessing support [no]"
80
  echo "  --enable-swscale         enable GPLed software scaler support [no]"
81
  echo "  --enable-avfilter        video filter support (replaces vhook) [no]"
82
  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
83
  echo "  --disable-vhook          disable video hooking support"
84 85 86 87 88
  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]"
89 90
  echo
  echo "External library support:"
91 92
  echo "  --enable-mlib            enable Sun medialib [no]"
  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
93
  echo "  --enable-bzlib           enable bzlib [no]"
94 95
  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
Ramiro Polla's avatar
Ramiro Polla committed
96
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
97 98 99 100 101 102 103
  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]"
104
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
105
  echo "                           native (de)muxer exists [no]"
106 107 108
  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]"
109
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
110 111
  echo "                           native implementation exists [no]"
  echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
112
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
113
  echo "                           native MPEG-4/Xvid encoder exists [no]"
114
  echo "  --enable-zlib            enable zlib [no]"
115 116 117 118
  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]"
119
  echo "  --enable-cross-compile   assume a cross-compiler is used"
120
  echo "  --target-os=OS           compiler targets OS [$target_os]"
121 122 123 124
  echo "  --cc=CC                  use C compiler CC [$cc]"
  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]"
125
  echo "  --extra-version=STRING   version string suffix []"
126 127 128
  echo "  --build-suffix=SUFFIX    library name suffix []"
  echo "  --arch=ARCH              select architecture [$arch]"
  echo "  --cpu=CPU                select the minimum required CPU (affects"
129
  echo "                           instruction selection, may crash on older CPUs)"
130
  echo "  --enable-powerpc-perf    enable performance report on PPC"
131
  echo "                           (requires enabling PMC)"
132
  echo "  --disable-altivec        disable AltiVec optimizations"
133 134 135 136 137 138 139
  echo "  --disable-mmx            disable MMX optimizations"
  echo "  --disable-mmx2           disable MMX2 optimizations"
  echo "  --disable-ssse3          disable SSSE3 optimizations"
  echo "  --disable-armv5te        disable armv5te optimizations"
  echo "  --disable-armv6          disable armv6 optimizations"
  echo "  --disable-armvfp         disable ARM VFP optimizations"
  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
140 141 142
  echo "  --disable-mmi            disable MMI optimizations"
  echo "  --disable-neon           disable neon optimizations"
  echo "  --disable-vis            disable VIS optimizations"
143
  echo "  --disable-network        disable network support [no]"
144
  echo "  --disable-ipv6           disable IPv6 support [no]"
145
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
146
  echo "                           MPEG audio decoding [no]"
147 148 149
  echo "  --disable-fft            disable FFT code"
  echo "  --disable-golomb         disable Golomb code"
  echo "  --disable-mdct           disable MDCT code"
150
  echo "  --enable-gray            enable full grayscale support (slower color)"
151
  echo "  --disable-ffmpeg         disable ffmpeg build"
152
  echo "  --disable-ffplay         disable ffplay build"
153
  echo "  --disable-ffserver       disable ffserver build"
154
  echo "  --enable-small           optimize for size instead of speed"
Aurelien Jacobs's avatar
Aurelien Jacobs committed
155
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
156
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
157
  echo "  --enable-beos-netserver  enable BeOS netserver"
158 159
  echo "  --disable-encoder=NAME   disable encoder NAME"
  echo "  --enable-encoder=NAME    enable encoder NAME"
160
  echo "  --disable-encoders       disable all encoders"
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
  echo "  --disable-decoder=NAME   disable decoder NAME"
  echo "  --enable-decoder=NAME    enable decoder NAME"
  echo "  --disable-decoders       disable all decoders"
  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"
179 180
  echo "  --disable-indevs         disable input devices"
  echo "  --disable-outdevs        disable output devices"
181 182 183 184
  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"
185 186 187 188 189 190 191
  echo "  --list-decoders          show all available decoders"
  echo "  --list-encoders          show all available encoders"
  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"
192 193
  echo "  --list-indevs            show all available input devices"
  echo "  --list-outdevs           show all available output devices"
194
  echo "  --list-filters           show all available filters"
195 196
  echo
  echo "Developer options (useful when working on FFmpeg itself):"
197
  echo "  --disable-debug          disable debugging symbols"
198
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
199
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
200
  echo "  --disable-optimizations  disable compiler optimizations"
201
  echo "  --enable-extra-warnings  enable more compiler warnings"
202
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
203 204
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
205
  exit 0
206
}
207

208
log(){
209
    echo "$@" >> $logfile
210 211
}

212
log_file(){
Måns Rullgård's avatar
Måns Rullgård committed
213
    log BEGIN $1
214
    pr -n -t $1 >> $logfile
Måns Rullgård's avatar
Måns Rullgård committed
215 216 217
    log END $1
}

218
echolog(){
Måns Rullgård's avatar
Måns Rullgård committed
219
    log "$@"
220
    echo "$@"
221 222 223 224 225 226 227
}

die(){
    echolog "$@"
    cat <<EOF
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
228
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
229
EOF
230
    if disabled logging; then
231
        cat <<EOF
232 233
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
234 235 236
EOF
    else
cat <<EOF
237 238
Include the log file "$logfile" produced by configure as this will help
solving the problem.
239 240
EOF
    fi
241
    rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
242 243 244
    exit 1
}

245
# Avoid locale weirdness, besides we really just want to translate ASCII.
246
toupper(){
247
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
248 249
}

Måns Rullgård's avatar
Måns Rullgård committed
250
tolower(){
251
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
Måns Rullgård's avatar
Måns Rullgård committed
252 253
}

254 255 256 257 258 259 260 261
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

262 263 264 265 266 267 268 269
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
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
}

289 290 291 292 293 294 295 296
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

297 298 299 300 301 302 303 304
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

305 306 307 308
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
309 310
        eval sgs="\$${var}_suggest"
        pushvar var sgs
311
        enable_deep $sel
312 313
        popvar sgs
        enable_deep_weak $sgs
314 315 316 317 318 319 320 321 322
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

323 324 325 326 327
enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

328
enabled(){
329 330
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
331 332
}

333
disabled(){
334 335
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
336 337
}

338 339 340 341 342 343
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

344 345 346 347 348 349
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

350 351 352 353 354 355
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

356 357 358 359
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
360
    return 1
361 362
}

363 364 365 366 367 368
set_default(){
    for opt; do
        eval test -z "\$$opt" && eval $opt=\$${opt}_default
    done
}

369 370 371 372 373 374 375 376 377
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

378 379
check_deps(){
    for cfg; do
380
        cfg="${cfg#!}"
381 382 383 384
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking

385 386
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
387
        eval dep_sel="\$${cfg}_select"
388
        eval dep_sgs="\$${cfg}_suggest"
389

390 391 392
        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
393

Måns Rullgård's avatar
Måns Rullgård committed
394 395
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
396
        disabled_any $dep_sel && disable $cfg
397

398 399 400
        if enabled $cfg; then
            eval dep_extralibs="\$${cfg}_extralibs"
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
401
            enable_deep $dep_sel
402
            enable_deep_weak $dep_sgs
403 404
        fi

405
        disable ${cfg}_checking
406 407 408
    done
}

409 410 411 412 413 414
print_config(){
    pfx=$1
    header=$2
    makefile=$3
    shift 3
    for cfg; do
415
        ucname="`toupper $cfg`"
416
        if enabled $cfg; then
417 418 419 420 421
            echo "#define ${pfx}${ucname} 1" >> $header
            echo "#define ENABLE_${ucname} 1" >> $header
            echo "${pfx}${ucname}=yes" >> $makefile
        else
            echo "#define ENABLE_${ucname} 0" >> $header
422 423
        fi
    done
424 425 426
}

flags_saved(){
427
    (: ${SAVE_CFLAGS?}) 2> /dev/null
428 429
}

430
save_flags(){
431
    flags_saved && return
432 433 434 435 436 437
    SAVE_CFLAGS="$CFLAGS"
    SAVE_LDFLAGS="$LDFLAGS"
    SAVE_extralibs="$extralibs"
}

restore_flags(){
438
    flags_saved || return
439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461
    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 $*"
}

462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480
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 "$@"
}

481
check_cmd(){
Måns Rullgård's avatar
Måns Rullgård committed
482
    log "$@"
483
    "$@" >> $logfile 2>&1
484 485
}

486
check_cc(){
487
    log check_cc "$@"
488
    cat > $TMPC
489
    log_file $TMPC
490
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
491 492 493 494
}

check_cpp(){
    log check_cpp "$@"
495
    cat > $TMPC
496
    log_file $TMPC
497
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
498 499
}

500 501 502 503 504 505
check_asm(){
    log check_asm "$@"
    name="$1"
    asm="$2"
    shift 2
    check_cc "$@" <<EOF && enable $name || disable $name
506
int foo(void){ __asm__ volatile($asm); }
507 508 509
EOF
}

Loren Merritt's avatar
Loren Merritt committed
510 511 512 513 514 515 516 517
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

518
check_ld(){
519
    log check_ld "$@"
520
    check_cc || return
521 522 523 524 525 526
    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
527 528 529
}

check_cflags(){
530 531
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
532 533 534 535 536
int x;
EOF
}

check_ldflags(){
537 538
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
539
int main(void){ return 0; }
540 541 542 543
EOF
}

check_header(){
544
    log check_header "$@"
545 546
    header=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
547 548 549
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
    disable $var
    check_cpp "$@" <<EOF && enable $var
550 551 552 553 554 555
#include <$header>
int x;
EOF
}

check_func(){
556
    log check_func "$@"
557 558
    func=$1
    shift
Måns Rullgård's avatar
Måns Rullgård committed
559 560
    disable $func
    check_ld "$@" <<EOF && enable $func
561
extern int $func();
562
int main(void){ $func(); }
563 564 565
EOF
}

566 567
check_func_headers(){
    log check_func_headers "$@"
568 569 570 571 572 573 574 575 576 577 578
    headers=$1
    func=$2
    shift 2
    disable $func
    incs=""
    for hdr in $headers; do
        incs="$incs
#include <$hdr>"
    done
    check_ld "$@" <<EOF && enable $func
$incs
579
int main(int argc, char **argv){
580 581 582 583 584 585
    (void) $func;
    return 0;
}
EOF
}

586 587 588 589 590 591 592 593 594 595 596 597
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
    check_cpp <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

598 599 600 601 602
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
603 604 605 606 607
    temp_extralibs "$@"
    check_header $header && check_func $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
608 609
}

610 611 612 613 614 615
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
    func="$2"
    shift 2
    temp_extralibs "$@"
616
    check_func_headers "$headers" $func && add_extralibs "$@"
617 618 619 620 621
    err=$?
    restore_flags
    return $err
}

622
check_exec(){
623
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
624 625
}

626 627 628 629 630 631 632 633 634
check_exec_crash(){
    code=`cat`

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

635
    (check_exec "$@") >> $logfile 2>&1 <<EOF
636 637 638 639
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
Diego Biurrun's avatar
Diego Biurrun committed
640
int main(void){
641 642 643 644 645 646 647 648 649 650 651
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
    { $code }
}
EOF
}

652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668
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
}

669 670 671 672 673 674
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
675 676
}

677 678 679 680 681 682 683 684
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701
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
        temp_cflags `${pkg}-config --cflags`
        temp_extralibs `${pkg}-config --libs`
        check_lib "$@" $header $func && enable $cfg
    fi
    return $err
}

702 703 704 705 706 707
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

708 709 710
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

711 712 713 714 715
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
Vitor Sessak's avatar
Vitor Sessak committed
716
    filters
717
    indevs
718
    muxers
719
    outdevs
720 721 722 723 724 725
    parsers
    protocols
"

CONFIG_LIST="
    $COMPONENT_LIST
726 727
    avfilter
    avfilter_lavf
728 729
    avisynth
    beos_netserver
730
    bzlib
731 732 733
    ffmpeg
    ffplay
    ffserver
734
    fft
735
    golomb
736
    gpl
737
    gprof
738
    gray
Aurelien Jacobs's avatar
Aurelien Jacobs committed
739
    hardcoded_tables
740
    ipv6
741 742
    libamr_nb
    libamr_wb
Ramiro Polla's avatar
Ramiro Polla committed
743
    libdc1394
744
    libdirac
745 746 747
    libfaac
    libfaad
    libfaadbin
748
    libgsm
749
    libmp3lame
750
    libnut
751
    libschroedinger
David Conrad's avatar
David Conrad committed
752
    libspeex
Diego Biurrun's avatar
Diego Biurrun committed
753
    libtheora
754
    libvorbis
755 756
    libx264
    libxvid
757
    mdct
758
    memalign_hack
759
    mlib
760 761
    mpegaudio_hp
    network
762
    nonfree
763
    postproc
764
    powerpc_perf
765
    small
766
    swscale
767
    vhook
768
    x11grab
769
    zlib
770
"
771

772 773
THREADS_LIST='
    beosthreads
774
    os2threads
775 776 777 778
    pthreads
    w32threads
'

779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797
ARCH_LIST='
    alpha
    armv4l
    bfin
    ia64
    m68k
    mips
    parisc
    powerpc
    s390
    sh4
    sparc
    sparc64
    x86
    x86_32
    x86_64
'

ARCH_EXT_LIST='
798 799
    altivec
    armv5te
800
    armv6
Måns Rullgård's avatar
Måns Rullgård committed
801
    armvfp
802 803 804
    iwmmxt
    mmi
    mmx
805
    mmx2
806
    neon
807
    ssse3
808
    vis
809 810 811 812 813 814
'

HAVE_LIST="
    $ARCH_EXT_LIST
    $THREADS_LIST
    altivec_h
815
    arpa_inet_h
816
    bswap
Alex Beregszaszi's avatar
Alex Beregszaszi committed
817
    closesocket
818
    cmov
819
    conio_h
820
    dcbzl
821 822 823 824 825
    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
826
    dlfcn_h
827
    dlopen
828
    dos_paths
829 830
    ebp_available
    ebx_available
831
    fast_64bit
832
    fast_cmov
833
    fast_unaligned
Måns Rullgård's avatar
Måns Rullgård committed
834
    fork
835
    freetype2
836
    gethrtime
837
    GetProcessTimes
Ramiro Polla's avatar
Ramiro Polla committed
838
    getrusage
839
    imlib2
840
    inet_aton
Måns Rullgård's avatar
Måns Rullgård committed
841
    inline_asm
842 843
    libdc1394_1
    libdc1394_2
844 845
    llrint
    lrint
846
    lrintf
847 848
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
849 850
    malloc_h
    memalign
Ramiro Polla's avatar
Ramiro Polla committed
851
    mkstemp
852
    pld
Måns Rullgård's avatar
Måns Rullgård committed
853
    ppc64
854 855
    round
    roundf
856 857
    sdl
    sdl_video_size
858
    socklen_t
Måns Rullgård's avatar
Måns Rullgård committed
859
    soundcard_h
860
    poll_h
861
    sys_mman_h
862
    sys_resource_h
863
    sys_select_h
Måns Rullgård's avatar
Måns Rullgård committed
864
    sys_soundcard_h
865
    sys_videoio_h
866
    termios_h
867
    threads
868
    winsock2_h
Loren Merritt's avatar
Loren Merritt committed
869
    yasm
870
"
871

872 873 874
# options emitted with CONFIG_ prefix but not available on command line
CONFIG_EXTRA="
    fft_mmx
875
    oldscaler
876 877
"

878
CMDLINE_SELECT="
879
    $ARCH_EXT_LIST
880
    $CONFIG_LIST
881
    $THREADS_LIST
882
    cross_compile
883 884
    debug
    extra_warnings
885
    logging
886
    optimizations
887 888
    shared
    static
889
    stripping
890
"
891 892

PATHS_LIST='
893
    bindir
894 895 896 897 898
    incdir
    libdir
    mandir
    prefix
    shlibdir
899 900 901 902 903 904 905 906 907
'

CMDLINE_SET="
    $PATHS_LIST
    arch
    build_suffix
    cc
    cpu
    cross_prefix
908
    extra_version
909
    logfile
910 911
    source_path
    target_os
912
"
913

914 915
# code dependency declarations

916 917 918 919
# architecture extensions
altivec_deps="powerpc"
armv5te_deps="armv4l"
armv6_deps="armv4l"
Måns Rullgård's avatar
Måns Rullgård committed
920
armvfp_deps="armv4l"
921
iwmmxt_deps="armv4l"
922
mmi_deps="mips"
923
mmx_deps="x86"
Diego Biurrun's avatar
Diego Biurrun committed
924
mmx2_deps="x86 mmx"
925
neon_deps="armv4l"
926
ssse3_deps="x86"
927
vis_deps="sparc"
928

929 930 931
# common features
fft_suggest="fft_mmx"
fft_mmx_deps="mmx yasm"
932
oldscaler_deps="!swscale"
933

934
# decoders / encoders
935
aac_decoder_select="fft mdct"
936
ac3_decoder_deps="gpl"