configure 71.1 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 "  --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]"
M
Måns Rullgård 已提交
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"
R
Ramiro Polla 已提交
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
  echo "  --target-exec=CMD        command to run executables on target"
  echo "  --target-path=DIR        path to view of build directory on target"
123
  echo "  --cc=CC                  use C compiler CC [$cc]"
124 125 126 127
  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"
128 129 130
  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]"
131
  echo "  --extra-version=STRING   version string suffix []"
132 133 134
  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 已提交
135
  echo "                           instruction selection, may crash on older CPUs)"
136
  echo "  --enable-powerpc-perf    enable performance report on PPC"
137
  echo "                           (requires enabling PMC)"
138
  echo "  --disable-altivec        disable AltiVec optimizations"
139 140 141 142 143 144 145
  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"
146 147 148
  echo "  --disable-mmi            disable MMI optimizations"
  echo "  --disable-neon           disable neon optimizations"
  echo "  --disable-vis            disable VIS optimizations"
149
  echo "  --disable-network        disable network support [no]"
150
  echo "  --disable-ipv6           disable IPv6 support [no]"
151
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
152
  echo "                           MPEG audio decoding [no]"
153
  echo "  --disable-aandct         disable AAN DCT code"
154 155 156
  echo "  --disable-fft            disable FFT code"
  echo "  --disable-golomb         disable Golomb code"
  echo "  --disable-mdct           disable MDCT code"
157
  echo "  --enable-gray            enable full grayscale support (slower color)"
158
  echo "  --disable-ffmpeg         disable ffmpeg build"
159
  echo "  --disable-ffplay         disable ffplay build"
160
  echo "  --disable-ffserver       disable ffserver build"
161
  echo "  --enable-small           optimize for size instead of speed"
A
Aurelien Jacobs 已提交
162
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
163
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
164
  echo "  --enable-beos-netserver  enable BeOS netserver"
165 166
  echo "  --disable-encoder=NAME   disable encoder NAME"
  echo "  --enable-encoder=NAME    enable encoder NAME"
167
  echo "  --disable-encoders       disable all encoders"
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
  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"
186 187
  echo "  --disable-indevs         disable input devices"
  echo "  --disable-outdevs        disable output devices"
188 189 190 191
  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"
192 193 194 195 196 197 198
  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"
199 200
  echo "  --list-indevs            show all available input devices"
  echo "  --list-outdevs           show all available output devices"
201
  echo "  --list-filters           show all available filters"
M
Måns Rullgård 已提交
202 203
  echo
  echo "Developer options (useful when working on FFmpeg itself):"
204
  echo "  --disable-debug          disable debugging symbols"
205
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
M
Måns Rullgård 已提交
206
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
207
  echo "  --disable-optimizations  disable compiler optimizations"
M
Måns Rullgård 已提交
208
  echo "  --enable-extra-warnings  enable more compiler warnings"
209
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
210 211
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
S
Stefano Sabatini 已提交
212
  exit 0
213
}
214

215
log(){
216
    echo "$@" >> $logfile
217 218
}

219
log_file(){
M
Måns Rullgård 已提交
220
    log BEGIN $1
221
    pr -n -t $1 >> $logfile
M
Måns Rullgård 已提交
222 223 224
    log END $1
}

225
echolog(){
M
Måns Rullgård 已提交
226
    log "$@"
227
    echo "$@"
228 229 230 231 232 233 234
}

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

252
# Avoid locale weirdness, besides we really just want to translate ASCII.
253
toupper(){
254
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
255 256
}

M
Måns Rullgård 已提交
257
tolower(){
258
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
M
Måns Rullgård 已提交
259 260
}

261 262 263 264 265 266 267 268
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

269 270 271 272 273 274 275 276
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295
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
}

296 297 298 299 300 301 302 303
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

304 305 306 307 308 309 310 311
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

312 313 314 315
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
316 317
        eval sgs="\$${var}_suggest"
        pushvar var sgs
318
        enable_deep $sel
319 320
        popvar sgs
        enable_deep_weak $sgs
321 322 323 324 325 326 327 328 329
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

330 331 332 333 334
enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

335
enabled(){
336 337
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
338 339
}

340
disabled(){
341 342
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
343 344
}

345 346 347 348 349 350
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

351 352 353 354 355 356
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

357 358 359 360 361 362
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

363 364 365 366
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
367
    return 1
368 369
}

370 371
set_default(){
    for opt; do
372
        eval : \${$opt:=\$${opt}_default}
373 374 375
    done
}

376 377 378 379 380 381 382 383 384
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

385 386
check_deps(){
    for cfg; do
387
        cfg="${cfg#!}"
388 389 390 391
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking

392 393
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
394
        eval dep_sel="\$${cfg}_select"
395
        eval dep_sgs="\$${cfg}_suggest"
396

397 398 399
        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
400

M
Måns Rullgård 已提交
401 402
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
403
        disabled_any $dep_sel && disable $cfg
404

405 406 407
        if enabled $cfg; then
            eval dep_extralibs="\$${cfg}_extralibs"
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
408
            enable_deep $dep_sel
409
            enable_deep_weak $dep_sgs
410 411
        fi

412
        disable ${cfg}_checking
413 414 415
    done
}

416 417 418 419 420 421
print_config(){
    pfx=$1
    header=$2
    makefile=$3
    shift 3
    for cfg; do
422
        ucname="`toupper $cfg`"
423
        if enabled $cfg; then
424 425 426 427 428
            echo "#define ${pfx}${ucname} 1" >> $header
            echo "#define ENABLE_${ucname} 1" >> $header
            echo "${pfx}${ucname}=yes" >> $makefile
        else
            echo "#define ENABLE_${ucname} 0" >> $header
429 430
        fi
    done
431 432 433
}

flags_saved(){
434
    (: ${SAVE_CFLAGS?}) 2> /dev/null
435 436
}

437
save_flags(){
438
    flags_saved && return
439 440 441 442 443 444
    SAVE_CFLAGS="$CFLAGS"
    SAVE_LDFLAGS="$LDFLAGS"
    SAVE_extralibs="$extralibs"
}

restore_flags(){
445
    flags_saved || return
446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468
    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 $*"
}

469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487
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 "$@"
}

488
check_cmd(){
M
Måns Rullgård 已提交
489
    log "$@"
490
    "$@" >> $logfile 2>&1
491 492
}

493
check_cc(){
494
    log check_cc "$@"
495
    cat > $TMPC
496
    log_file $TMPC
497
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
498 499 500 501
}

check_cpp(){
    log check_cpp "$@"
502
    cat > $TMPC
503
    log_file $TMPC
504
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
505 506
}

507 508 509 510 511 512
check_asm(){
    log check_asm "$@"
    name="$1"
    asm="$2"
    shift 2
    check_cc "$@" <<EOF && enable $name || disable $name
D
Diego Pettenò 已提交
513
int foo(void){ __asm__ volatile($asm); }
514 515 516
EOF
}

L
Loren Merritt 已提交
517 518 519 520 521 522 523 524
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

525
check_ld(){
526
    log check_ld "$@"
527
    check_cc || return
528 529 530 531 532 533
    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
534 535 536
}

check_cflags(){
537 538
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
539 540 541 542 543
int x;
EOF
}

check_ldflags(){
544 545
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
546
int main(void){ return 0; }
547 548 549 550
EOF
}

check_header(){
551
    log check_header "$@"
552 553
    header=$1
    shift
M
Måns Rullgård 已提交
554 555 556
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
    disable $var
    check_cpp "$@" <<EOF && enable $var
557 558 559 560 561 562
#include <$header>
int x;
EOF
}

check_func(){
563
    log check_func "$@"
564 565
    func=$1
    shift
M
Måns Rullgård 已提交
566 567
    disable $func
    check_ld "$@" <<EOF && enable $func
568
extern int $func();
569
int main(void){ $func(); }
570 571 572
EOF
}

573 574
check_func_headers(){
    log check_func_headers "$@"
575 576 577 578 579 580 581 582 583 584 585
    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
586
int main(int argc, char **argv){
587 588 589 590 591 592
    (void) $func;
    return 0;
}
EOF
}

593 594 595 596 597 598 599 600 601 602 603 604
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
    check_cpp <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

605 606 607 608 609
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
610 611 612 613 614
    temp_extralibs "$@"
    check_header $header && check_func $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
615 616
}

617 618 619 620 621 622
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
    func="$2"
    shift 2
    temp_extralibs "$@"
623
    check_func_headers "$headers" $func && add_extralibs "$@"
624 625 626 627 628
    err=$?
    restore_flags
    return $err
}

629
check_exec(){
630
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
631 632
}

633 634 635 636 637 638 639 640 641
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.

642
    (check_exec "$@") >> $logfile 2>&1 <<EOF
643 644 645 646
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
D
Diego Biurrun 已提交
647
int main(void){
648 649 650 651 652 653 654 655 656 657 658
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
    { $code }
}
EOF
}

659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675
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
}

676 677 678 679 680 681
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
682 683
}

684 685 686 687 688 689 690 691
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708
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
}

709 710 711 712 713 714
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

715 716 717
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

718 719 720 721 722
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
V
Vitor Sessak 已提交
723
    filters
724
    indevs
725
    muxers
726
    outdevs
727 728 729 730 731 732
    parsers
    protocols
"

CONFIG_LIST="
    $COMPONENT_LIST
733
    aandct
734 735
    avfilter
    avfilter_lavf
736 737
    avisynth
    beos_netserver
738
    bzlib
739 740 741
    ffmpeg
    ffplay
    ffserver
742
    fft
743
    golomb
744
    gpl
745
    gprof
746
    gray
A
Aurelien Jacobs 已提交
747
    hardcoded_tables
748
    ipv6
749 750
    libamr_nb
    libamr_wb
R
Ramiro Polla 已提交
751
    libdc1394
752
    libdirac
753 754 755
    libfaac
    libfaad
    libfaadbin
756
    libgsm
757
    libmp3lame
758
    libnut
759
    libschroedinger
D
David Conrad 已提交
760
    libspeex
D
Diego Biurrun 已提交
761
    libtheora
762
    libvorbis
763 764
    libx264
    libxvid
765
    mdct
766
    memalign_hack
767
    mlib
768 769
    mpegaudio_hp
    network
770
    nonfree
771
    postproc
772
    powerpc_perf
773
    small
774
    swscale
775
    vhook
776
    x11grab
777
    zlib
778
"
779

780 781
THREADS_LIST='
    beosthreads
D
Dave Yeo 已提交
782
    os2threads
783 784 785 786
    pthreads
    w32threads
'

787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805
ARCH_LIST='
    alpha
    armv4l
    bfin
    ia64
    m68k
    mips
    parisc
    powerpc
    s390
    sh4
    sparc
    sparc64
    x86
    x86_32
    x86_64
'

ARCH_EXT_LIST='
806 807
    altivec
    armv5te
808
    armv6
M
Måns Rullgård 已提交
809
    armvfp
810 811 812
    iwmmxt
    mmi
    mmx
813
    mmx2
814
    neon
815
    ssse3
816
    vis
817 818 819 820 821 822
'

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

880 881 882
# options emitted with CONFIG_ prefix but not available on command line
CONFIG_EXTRA="
    fft_mmx
883
    oldscaler
884 885
"

886
CMDLINE_SELECT="
887
    $ARCH_EXT_LIST
888
    $CONFIG_LIST
889
    $THREADS_LIST
890
    cross_compile
891 892
    debug
    extra_warnings
893
    logging
894
    optimizations
895 896
    shared
    static
897
    stripping
898
"
899 900

PATHS_LIST='
901
    bindir
902 903 904 905 906
    incdir
    libdir
    mandir
    prefix
    shlibdir
907 908 909 910 911 912 913 914 915
'

CMDLINE_SET="
    $PATHS_LIST
    arch
    build_suffix
    cc
    cpu
    cross_prefix
916
    extra_version
917 918 919 920
    host_cc
    host_cflags
    host_ldflags
    host_libs
921
    logfile
922
    source_path
923
    target_exec
924
    target_os
925
    target_path
926
"
927

D
Diego Biurrun 已提交
928 929
# code dependency declarations

930 931 932 933
# architecture extensions
altivec_deps="powerpc"
armv5te_deps="armv4l"
armv6_deps="armv4l"
M
Måns Rullgård 已提交
934
armvfp_deps="armv4l"
935
iwmmxt_deps="armv4l"
936
mmi_deps="mips"
937
mmx_deps="x86"
D
Diego Biurrun 已提交
938
mmx2_deps="x86 mmx"
939
neon_deps="armv4l"
940
ssse3_deps="x86"
941
vis_deps="sparc"
942

943 944 945
# common features
fft_suggest="fft_mmx"
fft_mmx_deps="mmx yasm"
946
oldscaler_deps="!swscale"
947

D
Diego Biurrun 已提交
948
# decoders / encoders
949
aac_decoder_select="fft mdct"
950
ac3_decoder_deps="gpl"
951 952
ac3_decoder_select="fft mdct"
atrac3_decoder_select="fft mdct"
953
cavs_decoder_select="golomb"
954
cook_decoder_select="fft mdct"
955
cscd_decoder_suggest="zlib"
956
dca_decoder_select="fft mdct"
957
dnxhd_encoder_select="aandct"
958
dxa_decoder_select="zlib"
959
eac3_decoder_deps="gpl"
960
eac3_decoder_select="fft mdct"
961
eatgq_decoder_select="aandct"
962 963 964
ffv1_decoder_select="golomb"
flac_decoder_select="golomb"
flac_encoder_select="golomb"
965 966
flashsv_decoder_select="zlib"
flashsv_encoder_select="zlib"
967 968 969 970
flv_encoder_select="aandct"
h261_encoder_select="aandct"
h263_encoder_select="aandct"
h263p_encoder_select="aandct"
971
h264_decoder_select="golomb"
972
imc_decoder_select="fft mdct"
973 974
jpegls_decoder_select="golomb"
jpegls_encoder_select="golomb"
975
ljpeg_encoder_select="aandct"
976
loco_decoder_select="golomb"
977 978 979 980 981 982 983
mjpeg_encoder_select="aandct"
mpeg1video_encoder_select="aandct"
mpeg2video_encoder_select="aandct"
mpeg4_encoder_select="aandct"
msmpeg4v1_encoder_select="aandct"
msmpeg4v2_encoder_select="aandct"
msmpeg4v3_encoder_select="aandct"
984
mpeg_xvmc_decoder_deps="xvmc"
985 986
nellymoser_decoder_select="fft mdct"
nellymoser_encoder_select="fft mdct"
987 988
png_decoder_select="zlib"
png_encoder_select="zlib"
989
qdm2_decoder_select="fft mdct"
990 991
rv10_encoder_select="aandct"
rv20_encoder_select="aandct"
992 993 994 995 996
shorten_decoder_select="golomb"
sonic_decoder_select="golomb"
sonic_encoder_select="golomb"
sonic_ls_encoder_select="golomb"
svq3_decoder_select="golomb"
B
Baptiste Coudurier 已提交
997
svq3_decoder_suggest="zlib"
998 999 1000
tiff_decoder_suggest="zlib"
tiff_encoder_suggest="zlib"
tscc_decoder_select="zlib"
1001 1002 1003 1004 1005 1006
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"
1007 1008
wmv1_encoder_select="aandct"
wmv2_encoder_select="aandct"
1009 1010 1011 1012
zlib_decoder_select="zlib"
zlib_encoder_select="zlib"
zmbv_decoder_select="zlib"
zmbv_encoder_select="zlib"
1013

D
Diego Biurrun 已提交
1014
# external libraries
1015 1016 1017 1018
libamr_nb_decoder_deps="libamr_nb"
libamr_nb_encoder_deps="libamr_nb"
libamr_wb_decoder_deps="libamr_wb"
libamr_wb_encoder_deps="libamr_wb"
1019
libdirac_decoder_deps="libdirac !libschroedinger"
1020
libdirac_encoder_deps="libdirac"
1021
libfaac_encoder_deps="libfaac"
1022
libfaad_decoder_deps="libfaad"
1023
libfaadbin_decoder_extralibs='$ldl'
1024 1025
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
1026 1027
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
1028
libmp3lame_encoder_deps="libmp3lame"
1029 1030
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
D
David Conrad 已提交
1031
libspeex_decoder_deps="libspeex"
D
Diego Biurrun 已提交
1032
libtheora_encoder_deps="libtheora"
1033
libvorbis_encoder_deps="libvorbis"
1034 1035
libx264_encoder_deps="libx264"
libxvid_encoder_deps="libxvid"
D
Diego Biurrun 已提交
1036
mpeg4aac_decoder_deps="libfaad"
1037

D
Diego Biurrun 已提交
1038
# demuxers / muxers
1039
ac3_demuxer_deps="ac3_parser"
1040
audio_beos_demuxer_deps="audio_beos"
1041
audio_beos_demuxer_extralibs="-lmedia -lbe"
1042
audio_beos_muxer_deps="audio_beos"
1043
audio_beos_muxer_extralibs="-lmedia -lbe"
1044
avisynth_demuxer_deps="avisynth"
1045
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
1046
dirac_demuxer_deps="dirac_parser"
1047
dv1394_demuxer_deps="dv1394 dv_demuxer"
R
Ramiro Polla 已提交
1048
libdc1394_demuxer_deps="libdc1394"
1049 1050
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
1051 1052
matroska_demuxer_suggest="zlib bzlib"
mov_demuxer_suggest="zlib"
1053
mp3_demuxer_deps="mpegaudio_parser"
1054 1055
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1056
redir_demuxer_deps="network"
1057
rtp_muxer_deps="network rtp_protocol"
1058 1059
rtsp_demuxer_deps="sdp_demuxer"
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1060
v4l_demuxer_deps="linux_videodev_h"
1061
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
R
Ramiro Polla 已提交
1062 1063
vfwcap_demuxer_deps="capCreateCaptureWindow"
vfwcap_demuxer_extralibs="-lvfw32"
1064
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1065
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1066

D
Diego Biurrun 已提交
1067
# protocols
1068 1069 1070 1071 1072
http_protocol_deps="network"
rtp_protocol_deps="udp_protocol"
tcp_protocol_deps="network"
udp_protocol_deps="network"

1073
# filters
1074
movie_filter_deps="avfilter_lavf"
1075

D
Diego Biurrun 已提交
1076
# programs
M
Måns Rullgård 已提交
1077
ffplay_deps="sdl"
1078
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1079 1080
ffserver_extralibs='$ldl'
vhook_extralibs='$ldl'
M
Måns Rullgård 已提交
1081

D
Diego Biurrun 已提交
1082

F
Fabrice Bellard 已提交
1083
# default parameters
1084

1085
logfile="config.err"
1086 1087

# installation paths
1088 1089 1090 1091 1092 1093
prefix_default="/usr/local"
bindir_default='${prefix}/bin'
incdir_default='${prefix}/include'
libdir_default='${prefix}/lib'
mandir_default='${prefix}/share/man'
shlibdir_default="$libdir_default"
1094 1095

# toolchain
1096
cc_default="gcc"
1097
host_cc_default="gcc"
L
Loren Merritt 已提交
1098
yasmexe="yasm"
F
Fabrice Bellard 已提交
1099
ar="ar"
1100
nm="nm"
M
Michael Niedermayer 已提交
1101
ranlib="ranlib"
1102
strip="strip"
1103
ln_s="ln -sf"
L
Loren Merritt 已提交
1104
objformat="elf"
1105 1106

# machine
1107
arch=`uname -m`
1108
cpu="generic"
1109 1110

# OS
1111
target_os=$(tolower $(uname -s))
1112 1113

# configurable options
1114 1115 1116 1117 1118 1119 1120
enable debug
enable ffmpeg
enable ffplay
enable ffserver
enable ipv6
enable mpegaudio_hp
enable network
1121
enable oldscaler
1122
enable optimizations
1123
enable protocols
D
Diego Biurrun 已提交
1124
enable static
1125
enable stripping
1126 1127 1128
vhook="default"

# build settings
1129
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
M
Måns Rullgård 已提交
1130
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1131
VHOOKSHFLAGS='$(SHFLAGS)'
1132
FFSERVERLDFLAGS=-Wl,-E
1133 1134
LIBPREF="lib"
LIBSUF=".a"
1135 1136
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1137 1138
SLIBPREF="lib"
SLIBSUF=".so"
1139
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1140 1141
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1142
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1143

1144 1145 1146
host_cflags='-O3 -g -Wall'
host_libs='-lm'

1147 1148
target_path='.'

1149 1150
# 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.
1151
DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
1152

1153 1154
# find source path
source_path="`dirname \"$0\"`"
1155
enable source_path_used
1156 1157
if test -z "$source_path" -o "$source_path" = "." ; then
    source_path="`pwd`"
1158
    disable source_path_used
1159 1160 1161
else
    source_path="`cd \"$source_path\"; pwd`"
    echo "$source_path" | grep -q '[[:blank:]]' &&
1162
        die "Out of tree builds are impossible with whitespace in source path."
1163 1164 1165 1166
fi

FFMPEG_CONFIGURATION="$@"

1167 1168 1169 1170
find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
M
Måns Rullgård 已提交
1171
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182
}

ENCODER_LIST=$(find_things  encoder  ENC      libavcodec/allcodecs.c)
DECODER_LIST=$(find_things  decoder  DEC      libavcodec/allcodecs.c)
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)
OUTDEV_LIST=$(find_things   muxer    _MUX     libavdevice/alldevices.c)
INDEV_LIST=$(find_things    demuxer  DEMUX    libavdevice/alldevices.c)
PROTOCOL_LIST=$(find_things protocol PROTOCOL libavformat/allformats.c)
1183
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1184

1185 1186 1187 1188 1189 1190 1191
enable $ARCH_EXT_LIST \
       $DECODER_LIST \
       $ENCODER_LIST \
       $PARSER_LIST \
       $BSF_LIST \
       $DEMUXER_LIST \
       $MUXER_LIST \
1192
       $FILTER_LIST \
1193 1194 1195
       $PROTOCOL_LIST \
       $INDEV_LIST \
       $OUTDEV_LIST \
1196 1197 1198 1199 1200 1201 1202

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

1203
show_list() {
R
Ramiro Polla 已提交
1204 1205 1206
    suffix=_$1
    shift
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1207 1208 1209
    exit 0
}

1210
for opt do
1211 1212 1213 1214 1215 1216 1217 1218
    optval="${opt#*=}"
    case "$opt" in
    --extra-cflags=*) add_cflags "$optval"
    ;;
    --extra-ldflags=*) add_ldflags "$optval"
    ;;
    --extra-libs=*) add_extralibs "$optval"
    ;;
D
Diego Biurrun 已提交
1219
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1220
    ;;
1221 1222
    --enable-debug=*) debuglevel="$optval"
    ;;
1223 1224 1225
    --enable-*=*|--disable-*=*)
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
    case "$thing" in
1226
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1227 1228 1229 1230 1231
        *) die_unknown "$opt" ;;
    esac
    ;;
    --enable-?*|--disable-?*)
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1232 1233 1234 1235 1236 1237 1238
    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
1239 1240 1241 1242 1243 1244 1245 1246 1247 1248
    ;;
    --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
    ;;
    *)
1249
    optname="${opt%%=*}"
1250 1251 1252 1253
    optname="${optname#--}"
    optname=$(echo "$optname" | sed 's/-/_/g')
    is_in $optname $CMDLINE_SET || die_unknown $opt
    eval $optname='$optval'
1254 1255
    ;;
    esac
1256 1257
done

M
Måns Rullgård 已提交
1258 1259 1260 1261 1262
disabled logging && logfile=/dev/null

echo "# $0 $@" > $logfile
set >> $logfile

1263 1264
test -n "$cross_prefix" && enable cross_compile

1265
cc_default="${cross_prefix}${cc_default}"
L
Loren Merritt 已提交
1266
yasmexe="${cross_prefix}${yasmexe}"
1267 1268 1269 1270 1271
ar="${cross_prefix}${ar}"
nm="${cross_prefix}${nm}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1272
set_default cc
1273 1274
enabled cross_compile || host_cc_default=$cc
set_default host_cc
1275

1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291
# set temporary file name
if test ! -z "$TMPDIR" ; then
    TMPDIR1="${TMPDIR}"
elif test ! -z "$TEMPDIR" ; then
    TMPDIR1="${TEMPDIR}"
else
    TMPDIR1="/tmp"
fi

TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"

1292 1293
check_cflags -std=c99

R
Ramiro Polla 已提交
1294 1295 1296 1297 1298 1299 1300
case "$arch" in
    i386|i486|i586|i686|i86pc|BePC)
        arch="x86_32"
        enable fast_unaligned
    ;;
    x86_64|amd64)
        arch="x86_32"
1301 1302
        enable cmov
        enable fast_cmov
R
Ramiro Polla 已提交
1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317
        enable fast_unaligned
        check_cc <<EOF && enable fast_64bit && arch="x86_64"
        int test[sizeof(char*) - 7];
EOF
    ;;
    # armv4l is a subset of armv[567]*l
    arm|armv[4567]*l)
        arch="armv4l"
    ;;
    alpha)
        arch="alpha"
        enable fast_64bit
    ;;
    "Power Macintosh"|ppc|powerpc)
        arch="powerpc"
M
Måns Rullgård 已提交
1318
        enable fast_unaligned
R
Ramiro Polla 已提交
1319 1320 1321 1322
    ;;
    ppc64)
        arch="powerpc"
        enable fast_64bit
M
Måns Rullgård 已提交
1323
        enable fast_unaligned
R
Ramiro Polla 已提交
1324
    ;;
1325
    mips|mipsel|IP*)
R
Ramiro Polla 已提交
1326 1327
        arch="mips"
    ;;
1328 1329 1330 1331
    mips64)
        arch="mips"
        enable fast_64bit
    ;;
R
Ramiro Polla 已提交
1332 1333 1334 1335 1336 1337 1338
    sun4u|sparc64)
        arch="sparc64"
        enable fast_64bit
    ;;
    sparc)
        arch="sparc"
    ;;
1339
    sh4|sh)
R
Ramiro Polla 已提交
1340 1341
        arch="sh4"
    ;;
1342
    parisc|hppa)
R
Ramiro Polla 已提交
1343 1344
        arch="parisc"
    ;;
1345
    parisc64|hppa64)
R
Ramiro Polla 已提交
1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370
        arch="parisc"
        enable fast_64bit
    ;;
    s390|s390x)
        arch="s390"
    ;;
    m68k)
        arch="m68k"
    ;;
    ia64)
        arch="ia64"
        enable fast_64bit
    ;;
    bfin)
        arch="bfin"
    ;;
    *)
        arch="unknown"
    ;;
esac

enable $arch
enabled_any x86_32 x86_64 && enable x86
enabled     sparc64       && enable sparc

1371
# OS specific
1372
case $target_os in
1373
    beos|haiku|zeta)
1374
        prefix_default="$HOME/config"
1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392
        # helps building libavcodec
        add_cflags "-DPIC -fomit-frame-pointer"
        # 3 gcc releases known for BeOS, each with ugly bugs
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
        case "$gcc_version" in
          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
            disable mmx
            ;;
          *20010315*) echo "BeBits gcc"
            add_cflags "-fno-expensive-optimizations"
            ;;
        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
1393
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1394 1395 1396 1397 1398 1399 1400
            network_extralibs="-lbind -lsocket"
        else
            enable beos_netserver
            network_extralibs="-lnet"
        fi ;;
    sunos)
        FFSERVERLDFLAGS=""
M
Måns Rullgård 已提交
1401
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423
        network_extralibs="-lsocket -lnsl"
        ;;
    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"
        ;;
    freebsd)
        disable need_memalign
        ;;
    bsd/os)
        osextralibs="-lpoll -lgnugetopt"
        strip="strip -d"
        ;;
    darwin)
        disable need_memalign
1424
        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR) -Wl,-read_only_relocs,suppress'
M
Måns Rullgård 已提交
1425
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1426 1427 1428 1429 1430 1431
        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 已提交
1432
        objformat="macho"
1433
        enabled x86_64 && objformat="macho64"
1434 1435
        ;;
    mingw32*)
1436
        target_os=mingw32
R
Ramiro Polla 已提交
1437 1438 1439 1440 1441
        LIBTARGET=i386
        if test $arch = x86_64; then
            disable need_memalign
            LIBTARGET=x64
        fi
1442
        shlibdir_default="$bindir_default"
1443 1444
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1445
        if enabled swscale; then
1446 1447 1448 1449 1450 1451 1452 1453 1454
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
        fi
        disable ffserver
        SLIBPREF=""
        SLIBSUF=".dll"
        EXESUF=".exe"
        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
R
Ramiro Polla 已提交
1455
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1456 1457
        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)"'
1458
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
M
Måns Rullgård 已提交
1459
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
L
Loren Merritt 已提交
1460
        objformat="win32"
1461
        enable dos_paths
1462 1463 1464
        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 &&
R
Ramiro Polla 已提交
1465 1466
            { 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."; }
1467 1468
        ;;
    cygwin*)
1469
        target_os=cygwin
1470
        shlibdir_default="$bindir_default"
1471 1472
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1473
        if enabled swscale; then
1474 1475 1476 1477 1478 1479 1480 1481 1482
            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
        fi
        EXESUF=".exe"
        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 已提交
1483
        objformat="win32"
1484
        enable dos_paths
1485
        ;;
M
Michael Kostylev 已提交
1486 1487 1488 1489 1490
    *-dos|freedos|opendos)
        disable ffplay ffserver vhook
        disable $INDEV_LIST $OUTDEV_LIST
        network_extralibs="-lsocket"
        EXESUF=".exe"
L
Loren Merritt 已提交
1491
        objformat="win32"
1492
        enable dos_paths
M
Michael Kostylev 已提交
1493
        ;;
1494 1495 1496 1497
    linux)
        enable dv1394
        ;;
    irix*)
1498
        target_os=irix
1499 1500
        ranlib="echo ignoring ranlib"
        ;;
D
Dave Yeo 已提交
1501 1502 1503 1504 1505
    os/2*)
        strip="lxlite"
        ln_s="cp -f"
        EXESUF=".exe"
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
M
Måns Rullgård 已提交
1506
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
D
Dave Yeo 已提交
1507
        FFSERVERLDFLAGS=""
1508
        LIBSUF="_s.a"
D
Dave Yeo 已提交
1509 1510 1511 1512
        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 已提交
1513 1514 1515 1516 1517 1518 1519 1520 1521
        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 已提交
1522
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
R
Ramiro Polla 已提交
1523
        disable vhook
1524
        enable dos_paths
D
Dave Yeo 已提交
1525
        ;;
1526 1527 1528
    interix)
        disable vhook
        ;;
D
Dave Yeo 已提交
1529

1530
    *)
1531
        target_os="${target_os}-UNKNOWN"
1532 1533 1534
        ;;
esac

1535 1536
set_default $PATHS_LIST

1537
add_extralibs $osextralibs
F
Fabrice Bellard 已提交
1538

1539 1540
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1541

1542
# we need to build at least one lib type
1543
if ! enabled_any static shared; then
1544 1545 1546 1547 1548 1549 1550 1551 1552
    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 已提交
1553
disabled static && LIBNAME=""
R
Ramiro Polla 已提交
1554

1555 1556
if enabled_any libfaad libfaadbin ; then
    if check_header faad.h; then
D
Diego Biurrun 已提交
1557
        check_cc <<EOF
1558 1559 1560 1561
#include <faad.h>
#ifndef FAAD2_VERSION
ok faad1
#endif
D
Diego Biurrun 已提交
1562
int main(void) { return 0; }
1563 1564 1565
EOF
        test $? = 0 && enable libfaad2
    else
D
Diego Biurrun 已提交
1566
        die "FAAD test failed."
1567 1568 1569 1570
    fi
fi


1571
if ! enabled gpl; then
R
Ramiro Polla 已提交
1572 1573 1574 1575 1576
    die_gpl_disabled(){
        name=$1
        shift
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
    }
1577
    die_gpl_disabled "The Postprocessing code" postproc
1578 1579
    die_gpl_disabled "libx264"                 libx264
    die_gpl_disabled "libxvidcore"             libxvid
R
Ramiro Polla 已提交
1580 1581
    die_gpl_disabled "FAAD2"                   libfaad2
    die_gpl_disabled "The X11 grabber"         x11grab
1582
    die_gpl_disabled "The software scaler"     swscale
1583
fi
1584

1585 1586 1587 1588
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
    die "libamr is nonfree and --enable-nonfree is not specified."
fi

1589
check_deps $ARCH_EXT_LIST
1590

1591 1592
test -z "$need_memalign" && need_memalign="$mmx"

1593
#Darwin CC versions
1594
if test $target_os = darwin; then
1595
    if $cc -v 2>&1 | grep -q xlc; then
1596
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1597
    else
1598
        add_cflags "-pipe"
1599 1600
        check_cflags "-force_cpusubtype_ALL"
        check_cflags "-Wno-sign-compare"
1601
        enabled shared || check_cflags -mdynamic-no-pic
1602
    fi
1603 1604
fi

1605
disabled optimizations || check_cflags -fomit-frame-pointer
1606

1607
# Add processor-specific flags
1608
if test $cpu != "generic"; then
M
Måns Rullgård 已提交
1609 1610
    warn_altivec(){
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1611
    }
1612
    case $cpu in
1613
        601|ppc601|PowerPC601)
1614
            add_cflags "-mcpu=601"
M
Måns Rullgård 已提交
1615
            warn_altivec enabled PPC601
1616 1617
        ;;
        603*|ppc603*|PowerPC603*)
1618
            add_cflags "-mcpu=603"
M
Måns Rullgård 已提交
1619
            warn_altivec enabled PPC603
1620 1621
        ;;
        604*|ppc604*|PowerPC604*)
1622
            add_cflags "-mcpu=604"
M
Måns Rullgård 已提交
1623
            warn_altivec enabled PPC604
1624 1625
        ;;
        G3|g3|75*|ppc75*|PowerPC75*)
1626
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
M
Måns Rullgård 已提交
1627
            warn_altivec enabled PPC75x
1628 1629
        ;;
        G4|g4|745*|ppc745*|PowerPC745*)
1630
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
M
Måns Rullgård 已提交
1631
            warn_altivec disabled PPC745x
1632 1633
        ;;
        74*|ppc74*|PowerPC74*)
1634
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
M
Måns Rullgård 已提交
1635
            warn_altivec disabled PPC74xx
1636 1637
        ;;
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1638
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
M
Måns Rullgård 已提交
1639
            warn_altivec disabled PPC970
M
Måns Rullgård 已提交
1640
            enable ppc64
1641
        ;;
1642 1643 1644
        Cell|CELL|cell)
            add_cflags "-mcpu=cell"
            warn_altivec disabled Cell
M
Måns Rullgård 已提交
1645
            enable ppc64
1646
        ;;
1647 1648
        # targets that do NOT support conditional mov (cmov)
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1649
            add_cflags "-march=$cpu"
1650
            disable cmov
1651 1652
        ;;
        # targets that do support conditional mov (cmov)
1653
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1654
            add_cflags "-march=$cpu"
1655 1656
            enable cmov
            enable fast_cmov
1657 1658
        ;;
        # targets that do support conditional mov but on which it's slow
1659
        pentium4|pentium4m|prescott|nocona)
1660
            add_cflags "-march=$cpu"
1661 1662
            enable cmov
            disable fast_cmov
1663
        ;;
1664
        sparc64)
1665
            add_cflags "-mcpu=v9"
1666
        ;;
1667 1668 1669 1670
        arm11*|cortex*)
            add_cflags "-mcpu=$cpu"
            enable fast_unaligned
        ;;
1671 1672 1673
        armv*)
            add_cflags "-march=$cpu"
        ;;
1674
        arm*)
M
Måns Rullgård 已提交
1675 1676
            add_cflags "-mcpu=$cpu"
        ;;
1677
        *)
1678
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1679
        ;;
1680 1681 1682
    esac
fi

1683
# make sure we can execute files in $TMPDIR
1684
cat > $TMPSH 2>> $logfile <<EOF
1685 1686
#! /bin/sh
EOF
1687 1688
chmod +x $TMPSH >> $logfile 2>&1
if ! $TMPSH >> $logfile 2>&1; then
1689 1690
    cat <<EOF
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1691 1692
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
1693 1694 1695
EOF
    die "Sanity test failed."
fi
1696
rm $TMPSH
1697

M
Måns Rullgård 已提交
1698 1699
# compiler sanity check
check_exec <<EOF
1700
int main(void){ return 0; }
M
Måns Rullgård 已提交
1701 1702 1703
EOF
if test "$?" != 0; then
    echo "$cc is unable to create an executable file."
1704
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1705
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1706
        echo "Only do this if you know what cross compiling means."
M
Måns Rullgård 已提交
1707 1708 1709 1710
    fi
    die "C compiler test failed."
fi

1711 1712 1713
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
1714
sym=$($nm -P -g $TMPO | grep ff_extern)
1715 1716
extern_prefix=${sym%%ff_extern*}

M
Måns Rullgård 已提交
1717 1718
check_asm inline_asm '""'

1719
if enabled x86; then
1720 1721 1722 1723
    # 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.
1724
    check_exec_crash <<EOF && enable ebp_available
1725
    volatile int i=0;
D
Diego Pettenò 已提交
1726
    __asm__ volatile (
1727 1728 1729 1730 1731 1732
        "xorl %%ebp, %%ebp"
    ::: "%ebp");
    return i;
EOF

    # check wether EBX is available on x86
1733
    check_asm ebx_available '"":::"%ebx"'
1734

1735
    # check whether binutils is new enough to compile SSSE3/MMX2
1736
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1737
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1738 1739

    check_asm bswap '"bswap %%eax" ::: "%eax"'
L
Loren Merritt 已提交
1740 1741 1742 1743 1744 1745

    YASMFLAGS="-f $objformat -DARCH_$(toupper $arch)"
    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" ;;
1746
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
L
Loren Merritt 已提交
1747 1748 1749
        *)                    append YASMFLAGS "-DPREFIX"  ;;
    esac
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1750 1751
fi

1752 1753
# check for assembler specific support

1754
if test $arch = "powerpc"; then
1755
    check_asm dcbzl '"dcbzl 0, 1"'
1756 1757
fi

1758 1759
# check for SIMD availability

1760
# AltiVec flags: The FSF version of GCC differs from the Apple version
1761
if enabled altivec; then
1762 1763
    check_cflags -maltivec -mabi=altivec &&
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1764
        check_cflags -faltivec
1765

M
indent  
Måns Rullgård 已提交
1766
    # check if our compiler supports Motorola AltiVec C API
1767
    check_cc <<EOF || disable altivec
1768
$inc_altivec_h
1769 1770 1771 1772 1773
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
1774 1775 1776
EOF

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

1783 1784
# We have to check if pld is a nop and disable it.
enabled armv4l  && check_asm pld     '"pld [r0]"'
1785 1786
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
M
Måns Rullgård 已提交
1787
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1788 1789
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1790
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1791
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1792

1793 1794
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"

1795 1796
# ---
# big/little-endian test
1797 1798
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1799
EOF
1800
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
F
Fabrice Bellard 已提交
1801

N
Nick Kurshev 已提交
1802 1803 1804
# ---
# check availability of some header files

1805 1806 1807 1808
if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
1809 1810
fi

1811 1812 1813
check_func  fork
check_func  gethrtime
check_func  getrusage
1814
check_func  inet_aton $network_extralibs
1815 1816
check_func  memalign
check_func  mkstemp
1817
check_func_headers windows.h GetProcessTimes
R
Ramiro Polla 已提交
1818

1819
check_header conio.h
1820 1821
check_header dlfcn.h
check_header malloc.h
1822
check_header poll.h
1823
check_header sys/mman.h
1824
check_header sys/resource.h
1825
check_header sys/select.h
1826 1827 1828 1829 1830
check_header termios.h

if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
fi
1831

1832
disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
1833
disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1834 1835 1836 1837

# 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 已提交
1838 1839 1840 1841
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
1842
        add_extralibs -pthread
M
Måns Rullgård 已提交
1843 1844
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
1845
        add_extralibs -pthreads
G
Gianluigi Tiesi 已提交
1846 1847
    elif check_func pthread_create -lpthreadGC2; then
        add_extralibs -lpthreadGC2
M
Måns Rullgård 已提交
1848 1849 1850
    elif ! check_lib pthread.h pthread_create -lpthread; then
        die "ERROR: can't find pthreads library"
    fi
1851 1852
fi

1853
for thread in $THREADS_LIST; do
1854
    if enabled $thread; then
1855 1856
        test -n "$thread_type" &&
            die "ERROR: Only one thread type must be selected." ||
1857 1858 1859 1860
            thread_type="$thread"
    fi
done

M
Måns Rullgård 已提交
1861 1862
check_lib math.h sin -lm

1863 1864 1865
# test for C99 functions in math.h
for func in llrint lrint lrintf round roundf; do
    check_exec <<EOF && enable $func || disable $func
1866
#include <math.h>
1867
int main(void) { return ($func(3.999f) > 0)?0:1; }
1868
EOF
1869
done
1870

1871
# these are off by default, so fail if requested and not available
1872
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1873 1874
enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
1875
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
D
Diego Biurrun 已提交
1876 1877
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1878 1879
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1880
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
1881
enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
1882
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
D
Diego Biurrun 已提交
1883 1884
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 已提交
1885
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1886 1887
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
1888
enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
1889 1890
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
                        die "ERROR: libx264 version must be >= 0.65."; }
1891
enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
1892
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1893

1894 1895 1896 1897 1898 1899 1900 1901 1902 1903
# 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 已提交
1904 1905
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1906
    check_cc <<EOF && _restrict=$restrict_keyword && break
1907 1908
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
1909 1910
done

1911
test "$vhook" = "default" && vhook="$dlopen"
1912

1913
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1914
    disable vhook
1915
    echo
1916
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1917 1918 1919 1920
    echo "Patches welcome."
    echo
fi

1921 1922 1923 1924
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
M
Michael Niedermayer 已提交
1925

1926 1927
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1928

1929
##########################################
D
Diego Biurrun 已提交
1930
# SDL check
1931

1932 1933
disable sdl_too_old
disable sdl
1934
SDL_CONFIG="${cross_prefix}sdl-config"
1935
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
M
Måns Rullgård 已提交
1936 1937
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
    temp_cflags $sdl_cflags
1938
    temp_extralibs `"${SDL_CONFIG}" --libs`
1939
    if check_lib2 SDL.h SDL_Init; then
1940
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1941
        if test "$_sdlversion" -lt 121 ; then
1942
            enable sdl_too_old
1943
        else
1944
            enable sdl
M
Måns Rullgård 已提交
1945
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1946
#include <SDL.h>
1947
int main(int argc, char **argv){
1948 1949 1950 1951 1952
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
    int w = vi->current_w;
    return 0;
}
EOF
1953 1954
        fi
    fi
1955
    restore_flags
M
Michael Niedermayer 已提交
1956
fi
1957

1958
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1959

R
Ramiro Polla 已提交
1960 1961 1962 1963
##########################################
# Network check

if enabled network; then
1964
    check_type "sys/types.h sys/socket.h" socklen_t
R
Ramiro Polla 已提交
1965 1966 1967 1968
    # Prefer arpa/inet.h over winsock2
    if check_header arpa/inet.h ; then
        check_func closesocket
    elif check_header winsock2.h ; then
1969
        network_extralibs="-lws2_32"
1970
        check_type ws2tcpip.h socklen_t
1971
        check_func_headers winsock2.h closesocket
R
Ramiro Polla 已提交
1972 1973 1974
    fi
fi

1975
##########################################
D
Diego Biurrun 已提交
1976
# IPv6 check
1977

1978
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1979 1980 1981 1982
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
D
Diego Biurrun 已提交
1983
int main(void) {
1984 1985 1986 1987 1988
    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);
1989 1990 1991
}
EOF

1992 1993
check_header linux/videodev.h
check_header linux/videodev2.h
1994
check_header sys/videoio.h
1995

1996
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
R
Ramiro Polla 已提交
1997

1998
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
R
Indent  
Ramiro Polla 已提交
1999 2000 2001 2002 2003 2004 2005
{ 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
2006

2007 2008
check_header sys/soundcard.h
check_header soundcard.h
M
Måns Rullgård 已提交
2009

2010
# deal with the X11 frame grabber
2011
enabled x11grab                         &&
2012 2013 2014
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
check_func XOpenDisplay -lX11           &&
2015
check_func XShmCreateImage -lX11 -lXext
2016

2017
enabled debug && add_cflags -g"$debuglevel"
2018 2019 2020

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
2021 2022
check_cflags -Wall
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
2023 2024 2025
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
2026
check_cflags -Wno-pointer-sign
2027
check_cflags -Wcast-qual
2028
check_cflags -Wwrite-strings
2029
check_cflags -Wtype-limits
2030
enabled extra_warnings && check_cflags -Winline
2031

2032
# add some linker flags
2033
check_ldflags -Wl,--warn-common
2034 2035
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'
2036
check_ldflags -Wl,-Bsymbolic
F
Fabrice Bellard 已提交
2037

2038 2039
if enabled small; then
    check_cflags -Os            # not all compilers support -Os
2040 2041
    optimizations="small"
elif enabled optimizations; then
2042
    if $cc -v 2>&1 | grep -q xlc; then
2043 2044
        add_cflags  "-O5"
        add_ldflags "-O5"
2045
    else
2046
        add_cflags "-O3"
2047
    fi
2048
fi
2049
check_cflags -fno-math-errno
2050
check_cflags -fno-signed-zeros
2051

C
Carl Eugen Hoyos 已提交
2052
# add some flags for Intel C Compiler
2053
if $cc --version 2> /dev/null | grep -q Intel; then
C
Carl Eugen Hoyos 已提交
2054 2055 2056 2057 2058 2059 2060 2061 2062 2063
  # 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
2064 2065
  # Allow to compile with optimizations
  check_ldflags -march=$cpu
C
Carl Eugen Hoyos 已提交
2066 2067
fi

2068
# PIC flags for shared library objects where they are needed
2069
if enabled shared; then
2070 2071 2072
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
        case "$arch" in
2073
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2074 2075
        esac
    fi
2076 2077
fi

2078
if enabled gprof; then
2079 2080
    add_cflags  "-p"
    add_ldflags "-p"
2081 2082
fi

2083
VHOOKCFLAGS="-fPIC"
2084

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

2088 2089 2090 2091 2092
enabled_any $DECODER_LIST      && enable decoders
enabled_any $ENCODER_LIST      && enable encoders
enabled_any $BSF_LIST          && enable bsfs
enabled_any $DEMUXER_LIST      && enable demuxers
enabled_any $MUXER_LIST        && enable muxers
2093
enabled_any $FILTER_LIST       && enable filters
2094 2095 2096 2097 2098 2099 2100
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       \
2101
           $CONFIG_EXTRA      \
2102 2103 2104 2105 2106 2107 2108
           $HAVE_LIST         \
           $DECODER_LIST      \
           $ENCODER_LIST      \
           $PARSER_LIST       \
           $BSF_LIST          \
           $DEMUXER_LIST      \
           $MUXER_LIST        \
2109
           $FILTER_LIST       \
2110 2111 2112
           $INDEV_LIST        \
           $OUTDEV_LIST       \
           $PROTOCOL_LIST     \
2113

R
Ramiro Polla 已提交
2114
enabled libdc1394 && append pkg_requires "libraw1394"
2115
enabled libdirac  && append pkg_requires "dirac"
2116
enabled libtheora && append pkg_requires "theora"
2117
enabled libvorbis && append pkg_requires "vorbisenc"
2118

2119
echo "install prefix            $prefix"
D
Diego Biurrun 已提交
2120 2121
echo "source path               $source_path"
echo "C compiler                $cc"
D
Diego Biurrun 已提交
2122
echo ".align is power-of-two    $asmalign_pot"
D
Diego Biurrun 已提交
2123
echo "ARCH                      $arch ($cpu)"
2124 2125
if test "$build_suffix" != ""; then
    echo "build suffix              $build_suffix"
2126
fi
2127 2128 2129
if test "$extra_version" != ""; then
    echo "version string suffix     $extra_version"
fi
M
Måns Rullgård 已提交
2130
echo "big-endian                ${bigendian-no}"
2131
if test $arch = "x86_32" -o $arch = "x86_64"; then
C
Carl Eugen Hoyos 已提交
2132
    echo "yasm                      ${yasm-no}"
M
Måns Rullgård 已提交
2133 2134 2135
    echo "MMX enabled               ${mmx-no}"
    echo "CMOV enabled              ${cmov-no}"
    echo "CMOV is fast              ${fast_cmov-no}"
M
Michael Niedermayer 已提交
2136 2137
    echo "EBX available             ${ebx_available-no}"
    echo "EBP available             ${ebp_available-no}"
F
Fabrice Bellard 已提交
2138
fi
2139
if test $arch = "armv4l"; then
M
Måns Rullgård 已提交
2140 2141
    echo "ARMv5TE enabled           ${armv5te-no}"
    echo "ARMv6 enabled             ${armv6-no}"
M
Måns Rullgård 已提交
2142
    echo "ARM VFP enabled           ${armvfp-no}"
M
Måns Rullgård 已提交
2143
    echo "IWMMXT enabled            ${iwmmxt-no}"
2144
    echo "NEON enabled              ${neon-no}"
2145
fi
2146
if test $arch = "mips"; then
M
Måns Rullgård 已提交
2147
    echo "MMI enabled               ${mmi-no}"
F
Fabrice Bellard 已提交
2148
fi
2149
if test $arch = "powerpc"; then
M
Måns Rullgård 已提交
2150 2151
    echo "AltiVec enabled           ${altivec-no}"
    echo "dcbzl available           ${dcbzl-no}"
F
Fabrice Bellard 已提交
2152
fi
M
Måns Rullgård 已提交
2153 2154
echo "gprof enabled             ${gprof-no}"
echo "debug symbols             ${debug-no}"
2155
echo "strip symbols             ${stripping-no}"
2156
echo "optimizations             ${optimizations-no}"
M
Måns Rullgård 已提交
2157 2158
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
2159
echo "postprocessing support    ${postproc-no}"
2160
echo "software scaler enabled   ${swscale-no}"
2161
echo "new filter support        ${avfilter-no}"
2162
echo "filters using lavformat   ${avfilter_lavf-no}"
M
Måns Rullgård 已提交
2163
echo "video hooking             ${vhook-no}"
2164
if enabled vhook; then
M
Måns Rullgård 已提交
2165 2166
    echo "Imlib2 support            ${imlib2-no}"
    echo "FreeType support          ${freetype2-no}"
2167
fi
M
Måns Rullgård 已提交
2168
echo "network support           ${network-no}"
2169
if enabled network; then
M
Måns Rullgård 已提交
2170
    echo "IPv6 support              ${ipv6-no}"
D
Diego Biurrun 已提交
2171
fi
M
Måns Rullgård 已提交
2172 2173
echo "threading support         ${thread_type-no}"
echo "SDL support               ${sdl-no}"
2174
if enabled sdl_too_old; then
D
Diego Biurrun 已提交
2175 2176
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
fi
M
Måns Rullgård 已提交
2177 2178 2179 2180
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 已提交
2181
echo "libdc1394 support         ${libdc1394-no}"
2182
echo "libdirac enabled          ${libdirac-no}"
M
Måns Rullgård 已提交
2183 2184
echo "libfaac enabled           ${libfaac-no}"
echo "libfaad enabled           ${libfaad-no}"
2185
echo "libfaad dlopened          ${libfaadbin-no}"
M
Måns Rullgård 已提交
2186 2187 2188
echo "libgsm enabled            ${libgsm-no}"
echo "libmp3lame enabled        ${libmp3lame-no}"
echo "libnut enabled            ${libnut-no}"
2189
echo "libschroedinger enabled   ${libschroedinger-no}"
D
David Conrad 已提交
2190
echo "libspeex enabled          ${libspeex-no}"
M
Måns Rullgård 已提交
2191 2192
echo "libtheora enabled         ${libtheora-no}"
echo "libvorbis enabled         ${libvorbis-no}"
2193 2194
echo "libx264 enabled           ${libx264-no}"
echo "libxvid enabled           ${libxvid-no}"
M
Måns Rullgård 已提交
2195
echo "zlib enabled              ${zlib-no}"
2196
echo "bzlib enabled             ${bzlib-no}"
2197
echo
F
Fabrice Bellard 已提交
2198

2199
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2200
    echo "Enabled ${type}s:"
2201
    eval list=\$$(toupper $type)_LIST
2202
    for part in $list; do
2203 2204 2205
        enabled $part && echo ${part%_*}
    done | sort | pr -3 -t
    echo
2206 2207
done

2208 2209 2210 2211 2212 2213 2214 2215
license="LGPL"
if enabled nonfree; then
    license="unredistributable"
elif enabled gpl; then
    license="GPL"
fi

echo "License: $license"
2216

2217 2218
echo "Creating config.mak and config.h..."

D
Diego Biurrun 已提交
2219 2220
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2221 2222
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
echo "#define FFMPEG_CONFIG_H" >> $TMPH
D
Diego Biurrun 已提交
2223
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
F
Fabrice Bellard 已提交
2224

2225
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2226
echo "prefix=$prefix" >> config.mak
2227 2228 2229 2230 2231
echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak
echo "INCDIR=\$(DESTDIR)$incdir" >> config.mak
echo "BINDIR=\$(DESTDIR)$bindir" >> config.mak
echo "MANDIR=\$(DESTDIR)$mandir" >> config.mak
2232
echo "CC=$cc" >> config.mak
L
Loren Merritt 已提交
2233
echo "YASM=$yasmexe" >> config.mak
2234
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
2235
echo "RANLIB=$ranlib" >> config.mak
2236
echo "LN_S=$ln_s" >> config.mak
2237
enabled stripping &&
2238
    echo "STRIP=$strip" >> config.mak ||
M
Måns Rullgård 已提交
2239
    echo "STRIP=echo ignoring strip" >> config.mak
2240

N
Nick Kurshev 已提交
2241
echo "OPTFLAGS=$CFLAGS" >> config.mak
2242
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2243
echo "LDFLAGS=$LDFLAGS" >> config.mak
2244
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2245
echo "SHFLAGS=$SHFLAGS" >> config.mak
L
Loren Merritt 已提交
2246
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2247
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2248
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2249
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2250
echo "BUILD_STATIC=$static" >> config.mak
2251
echo "BUILDSUF=$build_suffix" >> config.mak
2252
echo "FULLNAME=$FULLNAME" >> config.mak
2253
echo "LIBPREF=$LIBPREF" >> config.mak
2254
echo "LIBSUF=$LIBSUF" >> config.mak
2255
echo "LIBNAME=$LIBNAME" >> config.mak
2256
echo "SLIBPREF=$SLIBPREF" >> config.mak
2257 2258
echo "SLIBSUF=$SLIBSUF" >> config.mak
echo "EXESUF=$EXESUF" >> config.mak
2259
echo "EXTRA_VERSION=$extra_version" >> config.mak
2260
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
2261 2262 2263 2264
echo "HOSTCC=$host_cc" >> config.mak
echo "HOSTCFLAGS=$host_cflags" >> config.mak
echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
echo "HOSTLIBS=$host_libs" >> config.mak
2265 2266
echo "TARGET_EXEC=$target_exec" >> config.mak
echo "TARGET_PATH=$target_path" >> config.mak
M
Måns Rullgård 已提交
2267

2268
if enabled bigendian; then
2269 2270
    echo "WORDS_BIGENDIAN=yes" >> config.mak
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2271
fi
2272

2273
if enabled sdl; then
2274 2275
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2276
fi
2277
if enabled texi2html; then
2278
    echo "BUILD_DOC=yes" >> config.mak
2279
fi
L
Luca Barbato 已提交
2280

2281 2282 2283
get_version(){
    name=$1
    file=$source_path/$2
2284 2285
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2286 2287 2288
    lcname=$(tolower $name)
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2289 2290
}

2291 2292 2293 2294 2295 2296
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
2297
get_version LIBAVFILTER libavfilter/avfilter.h
L
Luca Barbato 已提交
2298

2299
if enabled shared; then
2300 2301
    echo "BUILD_SHARED=yes" >> config.mak
    echo "PIC=-fPIC -DPIC" >> config.mak
R
Ramiro Polla 已提交
2302
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2303 2304 2305
    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 已提交
2306
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2307 2308 2309
    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 已提交
2310
fi
2311
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2312
echo "EXTRALIBS=$extralibs" >> config.mak
2313

2314 2315
print_config ARCH_   $TMPH config.mak $ARCH_LIST
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2316
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2317
                                      $CONFIG_EXTRA      \
2318 2319 2320 2321 2322 2323
                                      $DECODER_LIST      \
                                      $ENCODER_LIST      \
                                      $PARSER_LIST       \
                                      $BSF_LIST          \
                                      $DEMUXER_LIST      \
                                      $MUXER_LIST        \
2324
                                      $FILTER_LIST       \
2325 2326 2327
                                      $PROTOCOL_LIST     \
                                      $INDEV_LIST        \
                                      $OUTDEV_LIST       \
2328

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

2331
if enabled small; then
2332
    echo "#define av_always_inline"  >> $TMPH
2333 2334
fi

2335 2336 2337
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2338

2339
# Apparently it's not possible to portably echo a backslash.
2340
enabled asmalign_pot &&
2341
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
D
Diego Biurrun 已提交
2342
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2343

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

2346 2347
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH

D
Diego Biurrun 已提交
2348
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2349 2350 2351
cmp -s $TMPH config.h &&
    echo "config.h is unchanged" ||
    mv -f $TMPH config.h
N
Nick Kurshev 已提交
2352

2353
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2354

2355
# build tree in object directory if source path is different from current one
2356
if enabled source_path_used; then
2357
    DIRS="\
2358 2359 2360 2361 2362 2363 2364 2365 2366 2367
        doc               \
        libavcodec        \
        libavcodec/alpha  \
        libavcodec/armv4l \
        libavcodec/bfin   \
        libavcodec/i386   \
        libavcodec/mlib   \
        libavcodec/ppc    \
        libavcodec/sh4    \
        libavcodec/sparc  \
2368
        libavdevice       \
2369
        libavfilter       \
2370 2371 2372 2373 2374 2375 2376 2377
        libavformat       \
        libavutil         \
        libpostproc       \
        libswscale        \
        tests             \
        tools             \
        vhook             \
        "
2378
    FILES="\
2379 2380
        Makefile             \
        common.mak           \
M
Måns Rullgård 已提交
2381
        subdir.mak           \
2382 2383
        doc/texi2pod.pl      \
        libavcodec/Makefile  \
2384
        libavdevice/Makefile \
2385
        libavfilter/Makefile \
2386 2387 2388 2389 2390
        libavformat/Makefile \
        libavutil/Makefile   \
        libpostproc/Makefile \
        libswscale/Makefile  \
        "
2391
    for dir in $DIRS ; do
2392
        mkdir -p $dir
2393 2394
    done
    for f in $FILES ; do
2395
        $ln_s "$source_path/$f" $f
2396 2397
    done
fi
2398 2399


2400
# build pkg-config files
2401

2402 2403
pkgconfig_generate(){
name=$1
2404
shortname=${name#lib}${build_suffix}
2405 2406 2407 2408
comment=$2
version=$3
libs=$4
requires=$5
2409
cat <<EOF > $name/$name.pc
2410
prefix=$prefix
2411
exec_prefix=\${prefix}
2412
libdir=$libdir
2413
includedir=$incdir
2414

2415 2416 2417
Name: $name
Description: $comment
Version: $version
2418 2419
Requires: $(disabled shared && echo $requires)
Requires.private: $(enabled shared && echo $requires)
2420
Conflicts:
2421 2422
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
Libs.private: $(enabled shared && echo $libs)
2423
Cflags: -I\${includedir}
2424
EOF
2425
cat <<EOF > $name/$name-uninstalled.pc
2426 2427
prefix=
exec_prefix=
2428
libdir=\${pcfiledir}
2429
includedir=${source_path}
2430

2431 2432 2433 2434
Name: $name
Description: $comment
Version: $version
Requires: $requires
2435
Conflicts:
2436
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2437 2438
Cflags: -I\${includedir}
EOF
2439
}
2440

2441 2442 2443 2444
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
2445
enabled avfilter &&
2446
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2447
enabled postproc &&
2448
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2449
if enabled swscale; then
2450
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2451
else
M
Måns Rullgård 已提交
2452
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2453
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2454
fi