configure 68.6 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 [default=yes]"
  echo "  --disable-static         do not build static libraries [default=no]"
  echo "  --enable-shared          build shared libraries [default=no]"
  echo "  --disable-shared         do not build shared libraries [default=yes]"
M
Måns Rullgård 已提交
75 76
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
  echo "                           and ffmpeg will be under GPL [default=no]"
77 78
  echo "  --enable-nonfree         allow use of nonfree code, the resulting libav*"
  echo "                           and ffmpeg will be unredistributable [default=no]"
79
  echo "  --enable-postproc        enable GPLed postprocessing support [default=no]"
80
  echo "  --enable-swscale         software scaler support [default=no]"
81 82
  echo "  --enable-avfilter        video filter support (replaces vhook) [default=no]"
  echo "  --enable-avfilter-lavf   video filters dependant on avformat [default=no]"
83
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
D
Dave Yeo 已提交
84
  echo "  --enable-os2threads      use OS/2 threads [default=no]"
85
  echo "  --enable-pthreads        use pthreads [default=no]"
D
Diego Biurrun 已提交
86
  echo "  --enable-w32threads      use Win32 threads [default=no]"
87
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
M
Måns Rullgård 已提交
88 89
  echo
  echo "External library support:"
90
  echo "  --enable-mlib            use Sun medialib [default=no]"
91
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
92 93
  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 已提交
94 95
  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
  echo "                           and libraw1394 [default=no]"
96
  echo "  --enable-libdirac        enable Dirac support via libdirac [default=no]"
97 98
  echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
  echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
99
  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [default=no]"
D
Diego Biurrun 已提交
100
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
101
  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
102 103
  echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
  echo "                           native demuxer exists [default=no]"
104
  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [default=no]"
D
David Conrad 已提交
105
  echo "  --enable-libspeex        enable Speex decoding via libspeex [default=no]"
106
  echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
107 108
  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
  echo "                           native implementation exists [default=no]"
109 110
  echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
  echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
111
  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
112 113 114 115
  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]"
116
  echo "  --enable-cross-compile   assume a cross-compiler is used"
117
  echo "  --target-os=OS           compiler targets OS [$target_os]"
118 119 120 121
  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]"
122
  echo "  --extra-version=STRING   version string suffix []"
123
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
124
  echo "  --arch=ARCH              select architecture  [$arch]"
D
Diego Biurrun 已提交
125 126
  echo "  --cpu=CPU                selects the minimum cpu required (affects"
  echo "                           instruction selection, may crash on older CPUs)"
127
  echo "  --enable-powerpc-perf    enable performance report on PPC"
128 129
  echo "                           (requires enabling PMC)"
  echo "  --disable-mmx            disable MMX usage"
130 131
  echo "  --disable-mmx2           disable MMX2 usage"
  echo "  --disable-ssse3          disable SSSE3 usage"
132
  echo "  --disable-armv5te        disable armv5te usage"
133
  echo "  --disable-armv6          disable armv6 usage"
M
Måns Rullgård 已提交
134
  echo "  --disable-armvfp         disable ARM VFP usage"
135 136 137
  echo "  --disable-iwmmxt         disable iwmmxt usage"
  echo "  --disable-altivec        disable AltiVec usage"
  echo "  --disable-network        disable network support [default=no]"
138
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
139
  echo "  --disable-zlib           disable zlib [default=no]"
140
  echo "  --disable-bzlib          disable bzlib [default=no]"
141 142 143
  echo "  --disable-vhook          disable video hooking support"
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
  echo "                           MPEG audio decoding [default=no]"
144
  echo "  --enable-gray            enable full grayscale support (slower color)"
145
  echo "  --disable-ffmpeg         disable ffmpeg build"
146 147 148
  echo "  --disable-ffserver       disable ffserver build"
  echo "  --disable-ffplay         disable ffplay build"
  echo "  --enable-small           optimize for size instead of speed"
A
Aurelien Jacobs 已提交
149
  echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
150 151 152 153 154 155 156
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
  echo "  --disable-encoder=NAME   disables encoder NAME"
  echo "  --enable-encoder=NAME    enables encoder NAME"
  echo "  --disable-decoder=NAME   disables decoder NAME"
  echo "  --enable-decoder=NAME    enables decoder NAME"
  echo "  --disable-encoders       disables all encoders"
  echo "  --disable-decoders       disables all decoders"
157 158
  echo "  --disable-muxer=NAME     disables muxer NAME"
  echo "  --enable-muxer=NAME      enables muxer NAME"
159
  echo "  --disable-muxers         disables all muxers"
160 161
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
162
  echo "  --disable-demuxers       disables all demuxers"
163 164 165
  echo "  --enable-parser=NAME     enables parser NAME"
  echo "  --disable-parser=NAME    disables parser NAME"
  echo "  --disable-parsers        disables all parsers"
166 167 168
  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
  echo "  --disable-bsfs           disables all bitstream filters"
169 170 171
  echo "  --enable-protocol=NAME   enables protocol NAME"
  echo "  --disable-protocol=NAME  disables protocol NAME"
  echo "  --disable-protocols      disables all protocols"
172
  echo "  --disable-devices        disables all devices"
173 174 175
  echo "  --enable-filter=NAME     enables filter NAME"
  echo "  --disable-filter=NAME    disables filter NAME"
  echo "  --disable-filters        disables all filters"
176 177 178 179 180 181 182
  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"
183 184
  echo "  --list-indevs            show all available input devices"
  echo "  --list-outdevs           show all available output devices"
185
  echo "  --list-filters           show all available filters"
M
Måns Rullgård 已提交
186 187
  echo
  echo "Developer options (useful when working on FFmpeg itself):"
188
  echo "  --disable-debug          disable debugging symbols"
189
  echo "  --enable-debug=LEVEL     set the debug level [$debuglevel]"
M
Måns Rullgård 已提交
190
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
191
  echo "  --disable-optimizations  disable compiler optimizations"
M
Måns Rullgård 已提交
192
  echo "  --enable-extra-warnings  enable more compiler warnings"
193
  echo "  --disable-stripping      disable stripping of executables and shared libraries"
194 195
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
S
Stefano Sabatini 已提交
196
  exit 0
197
}
198

199
log(){
200
    echo "$@" >> $logfile
201 202
}

203
log_file(){
M
Måns Rullgård 已提交
204
    log BEGIN $1
205
    pr -n -t $1 >> $logfile
M
Måns Rullgård 已提交
206 207 208
    log END $1
}

209
echolog(){
M
Måns Rullgård 已提交
210
    log "$@"
211
    echo "$@"
212 213 214 215 216 217 218
}

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
219
ffmpeg-user@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
220
EOF
221
    if disabled logging; then
222
        cat <<EOF
223 224
Rerun configure with logging enabled (do not use --disable-logging), and
include the log this produces with your report.
225 226 227
EOF
    else
cat <<EOF
228 229
Include the log file "$logfile" produced by configure as this will help
solving the problem.
230 231
EOF
    fi
232
    rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
233 234 235
    exit 1
}

236
# Avoid locale weirdness, besides we really just want to translate ASCII.
237
toupper(){
238
    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
239 240
}

M
Måns Rullgård 已提交
241
tolower(){
242
    echo "$@" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz
M
Måns Rullgård 已提交
243 244
}

245 246 247 248 249 250 251 252
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

253 254 255 256 257 258 259 260
set_weak(){
    value=$1
    shift
    for var; do
        eval : \${$var:=$value}
    done
}

261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
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
}

280 281 282 283 284 285 286 287
enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

288 289 290 291 292 293 294 295
enable_weak(){
    set_weak yes $*
}

disable_weak(){
    set_weak no $*
}

296 297 298 299
do_enable_deep(){
    for var; do
        enabled $var && continue
        eval sel="\$${var}_select"
300 301
        eval sgs="\$${var}_suggest"
        pushvar var sgs
302
        enable_deep $sel
303 304
        popvar sgs
        enable_deep_weak $sgs
305 306 307 308 309 310 311 312 313
        popvar var
    done
}

enable_deep(){
    do_enable_deep $*
    enable $*
}

314 315 316 317 318
enable_deep_weak(){
    do_enable_deep $*
    enable_weak $*
}

319
enabled(){
320 321
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xyes"
322 323
}

324
disabled(){
325 326
    test "${1#!}" = "$1" && op== || op=!=
    eval test "x\$${1#!}" $op "xno"
327 328
}

329 330 331 332 333 334
enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

335 336 337 338 339 340
disabled_all(){
    for opt; do
        disabled $opt || return 1
    done
}

341 342 343 344 345 346
enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

347 348 349 350
disabled_any(){
    for opt; do
        disabled $opt && return 0
    done
351
    return 1
352 353
}

354 355 356 357 358 359
set_default(){
    for opt; do
        eval test -z "\$$opt" && eval $opt=\$${opt}_default
    done
}

360 361 362 363 364 365 366 367 368
is_in(){
    value=$1
    shift
    for var in $*; do
        [ $var = $value ] && return 0
    done
    return 1
}

369 370
check_deps(){
    for cfg; do
371
        cfg="${cfg#!}"
372 373 374 375
        enabled ${cfg}_checking && die "Circular dependency for $cfg."
        disabled ${cfg}_checking && continue
        enable ${cfg}_checking

376 377
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
378
        eval dep_sel="\$${cfg}_select"
379
        eval dep_sgs="\$${cfg}_suggest"
380

381 382 383
        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
384

M
Måns Rullgård 已提交
385 386
        enabled_all  $dep_all || disable $cfg
        enabled_any  $dep_any || disable $cfg
387
        disabled_any $dep_sel && disable $cfg
388

389 390 391
        if enabled $cfg; then
            eval dep_extralibs="\$${cfg}_extralibs"
            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
392
            enable_deep $dep_sel
393
            enable_deep_weak $dep_sgs
394 395
        fi

396
        disable ${cfg}_checking
397 398 399
    done
}

400 401 402 403 404 405
print_config(){
    pfx=$1
    header=$2
    makefile=$3
    shift 3
    for cfg; do
406
        ucname="`toupper $cfg`"
407
        if enabled $cfg; then
408 409 410 411 412
            echo "#define ${pfx}${ucname} 1" >> $header
            echo "#define ENABLE_${ucname} 1" >> $header
            echo "${pfx}${ucname}=yes" >> $makefile
        else
            echo "#define ENABLE_${ucname} 0" >> $header
413 414
        fi
    done
415 416 417
}

flags_saved(){
418
    (: ${SAVE_CFLAGS?}) 2> /dev/null
419 420
}

421
save_flags(){
422
    flags_saved && return
423 424 425 426 427 428
    SAVE_CFLAGS="$CFLAGS"
    SAVE_LDFLAGS="$LDFLAGS"
    SAVE_extralibs="$extralibs"
}

restore_flags(){
429
    flags_saved || return
430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452
    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 $*"
}

453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471
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 "$@"
}

472
check_cmd(){
M
Måns Rullgård 已提交
473
    log "$@"
474
    "$@" >> $logfile 2>&1
475 476
}

477
check_cc(){
478
    log check_cc "$@"
479
    cat > $TMPC
480
    log_file $TMPC
481
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
482 483 484 485
}

check_cpp(){
    log check_cpp "$@"
486
    cat > $TMPC
487
    log_file $TMPC
488
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
489 490
}

491 492 493 494 495 496
check_asm(){
    log check_asm "$@"
    name="$1"
    asm="$2"
    shift 2
    check_cc "$@" <<EOF && enable $name || disable $name
D
Diego Pettenò 已提交
497
int foo(void){ __asm__ volatile($asm); }
498 499 500
EOF
}

L
Loren Merritt 已提交
501 502 503 504 505 506 507 508
check_yasm(){
    log check_yasm "$@"
    echo "$1" > $TMPS
    log_file $TMPS
    shift 1
    check_cmd $yasmexe $YASMFLAGS "$@" -o $TMPO $TMPS
}

509
check_ld(){
510
    log check_ld "$@"
511
    check_cc || return
512 513 514 515 516 517
    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
518 519 520
}

check_cflags(){
521 522
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
523 524 525 526 527
int x;
EOF
}

check_ldflags(){
528 529
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
530
int main(void){ return 0; }
531 532 533 534
EOF
}

check_header(){
535
    log check_header "$@"
536 537
    header=$1
    shift
M
Måns Rullgård 已提交
538 539 540
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
    disable $var
    check_cpp "$@" <<EOF && enable $var
541 542 543 544 545 546
#include <$header>
int x;
EOF
}

check_func(){
547
    log check_func "$@"
548 549
    func=$1
    shift
M
Måns Rullgård 已提交
550 551
    disable $func
    check_ld "$@" <<EOF && enable $func
552
extern int $func();
553
int main(void){ $func(); }
554 555 556
EOF
}

557 558
check_func_headers(){
    log check_func_headers "$@"
559 560 561 562 563 564 565 566 567 568 569
    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
570
int main(int argc, char **argv){
571 572 573 574 575 576
    (void) $func;
    return 0;
}
EOF
}

577 578 579 580 581 582 583 584 585 586 587 588
check_cpp_condition(){
    log check_cpp_condition "$@"
    header=$1
    condition=$2
    check_cpp <<EOF
#include <$header>
#if !($condition)
#error "unsatisfied condition: $condition"
#endif
EOF
}

589 590 591 592 593
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
594 595 596 597 598
    temp_extralibs "$@"
    check_header $header && check_func $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
599 600
}

601 602 603 604 605 606
check_lib2(){
    log check_lib2 "$@"
    headers="$1"
    func="$2"
    shift 2
    temp_extralibs "$@"
607
    check_func_headers "$headers" $func && add_extralibs "$@"
608 609 610 611 612
    err=$?
    restore_flags
    return $err
}

613
check_exec(){
614
    check_ld "$@" && { enabled cross_compile || $TMPE >> $logfile 2>&1; }
615 616
}

617 618 619 620 621 622 623 624 625
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.

626
    (check_exec "$@") >> $logfile 2>&1 <<EOF
627 628 629 630
#include <signal.h>
static void sighandler(int sig){
    raise(SIGTERM);
}
D
Diego Biurrun 已提交
631
int main(void){
632 633 634 635 636 637 638 639 640 641 642
    signal(SIGILL, sighandler);
    signal(SIGFPE, sighandler);
    signal(SIGSEGV, sighandler);
#ifdef SIGBUS
    signal(SIGBUS, sighandler);
#endif
    { $code }
}
EOF
}

643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659
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
}

660 661 662 663 664 665
require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
666 667
}

668 669 670 671 672 673 674 675
require2(){
    name="$1"
    headers="$2"
    func="$3"
    shift 3
    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
}

676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692
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
}

693 694 695 696 697 698
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

699 700 701
# CONFIG_LIST contains configurable options, while HAVE_LIST is for
# system-dependent things.

702 703 704 705 706
COMPONENT_LIST="
    bsfs
    decoders
    demuxers
    encoders
V
Vitor Sessak 已提交
707
    filters
708
    indevs
709
    muxers
710
    outdevs
711 712 713 714 715 716
    parsers
    protocols
"

CONFIG_LIST="
    $COMPONENT_LIST
717 718
    avfilter
    avfilter_lavf
719 720
    avisynth
    beos_netserver
721
    bzlib
722 723 724
    ffmpeg
    ffplay
    ffserver
725
    fft
726
    golomb
727
    gpl
728
    gprof
729
    gray
A
Aurelien Jacobs 已提交
730
    hardcoded_tables
731
    ipv6
732 733
    libamr_nb
    libamr_wb
R
Ramiro Polla 已提交
734
    libdc1394
735
    libdirac
736 737 738
    libfaac
    libfaad
    libfaadbin
739
    libgsm
740
    libmp3lame
741
    libnut
742
    libschroedinger
D
David Conrad 已提交
743
    libspeex
D
Diego Biurrun 已提交
744
    libtheora
745
    libvorbis
746 747
    libx264
    libxvid
748
    mdct
749
    memalign_hack
750
    mlib
751 752
    mpegaudio_hp
    network
753
    nonfree
754
    postproc
755
    powerpc_perf
756
    small
757
    swscale
758
    vhook
759
    x11grab
760
    zlib
761
"
762

763 764
THREADS_LIST='
    beosthreads
D
Dave Yeo 已提交
765
    os2threads
766 767 768 769
    pthreads
    w32threads
'

770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788
ARCH_LIST='
    alpha
    armv4l
    bfin
    ia64
    m68k
    mips
    parisc
    powerpc
    s390
    sh4
    sparc
    sparc64
    x86
    x86_32
    x86_64
'

ARCH_EXT_LIST='
789 790
    altivec
    armv5te
791
    armv6
M
Måns Rullgård 已提交
792
    armvfp
793 794 795
    iwmmxt
    mmi
    mmx
796
    mmx2
797
    neon
798
    ssse3
799
    vis
800 801 802 803 804 805
'

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

863 864 865 866 867
# options emitted with CONFIG_ prefix but not available on command line
CONFIG_EXTRA="
    fft_mmx
"

868
CMDLINE_SELECT="
869
    $ARCH_EXT_LIST
870
    $CONFIG_LIST
871
    $THREADS_LIST
872
    cross_compile
873 874
    debug
    extra_warnings
875
    logging
876
    optimizations
877 878
    shared
    static
879
    stripping
880
"
881 882

PATHS_LIST='
883
    bindir
884 885 886 887 888
    incdir
    libdir
    mandir
    prefix
    shlibdir
889 890 891 892 893 894 895 896 897
'

CMDLINE_SET="
    $PATHS_LIST
    arch
    build_suffix
    cc
    cpu
    cross_prefix
898
    extra_version
899
    logfile
900 901
    source_path
    target_os
902
"
903

D
Diego Biurrun 已提交
904 905
# code dependency declarations

906 907 908 909
# architecture extensions
altivec_deps="powerpc"
armv5te_deps="armv4l"
armv6_deps="armv4l"
M
Måns Rullgård 已提交
910
armvfp_deps="armv4l"
911
iwmmxt_deps="armv4l"
912
mmi_deps="mips"
913
mmx_deps="x86"
D
Diego Biurrun 已提交
914
mmx2_deps="x86 mmx"
915
neon_deps="armv4l"
916
ssse3_deps="x86"
917
vis_deps="sparc"
918

919 920 921 922
# common features
fft_suggest="fft_mmx"
fft_mmx_deps="mmx yasm"

D
Diego Biurrun 已提交
923
# decoders / encoders
924
aac_decoder_select="fft mdct"
925
ac3_decoder_deps="gpl"
926 927
ac3_decoder_select="fft mdct"
atrac3_decoder_select="fft mdct"
928
cavs_decoder_select="golomb"
929 930
cook_decoder_select="fft mdct"
dca_decoder_select="fft mdct"
K
Kostya Shishkov 已提交
931
dxa_decoder_deps="zlib"
932
eac3_decoder_deps="gpl"
933
eac3_decoder_select="fft mdct"
934 935 936
ffv1_decoder_select="golomb"
flac_decoder_select="golomb"
flac_encoder_select="golomb"
937
flashsv_decoder_deps="zlib"
938
flashsv_encoder_deps="zlib"
939
h264_decoder_select="golomb"
940
imc_decoder_select="fft mdct"
941 942 943
jpegls_decoder_select="golomb"
jpegls_encoder_select="golomb"
loco_decoder_select="golomb"
944
mpeg_xvmc_decoder_deps="xvmc"
945 946
nellymoser_decoder_select="fft mdct"
nellymoser_encoder_select="fft mdct"
947 948
png_decoder_deps="zlib"
png_encoder_deps="zlib"
949
qdm2_decoder_select="fft mdct"
950 951 952 953 954
shorten_decoder_select="golomb"
sonic_decoder_select="golomb"
sonic_encoder_select="golomb"
sonic_ls_encoder_select="golomb"
svq3_decoder_select="golomb"
955 956 957 958 959 960
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"
961 962 963
zmbv_decoder_deps="zlib"
zmbv_encoder_deps="zlib"

D
Diego Biurrun 已提交
964
# external libraries
965 966 967 968
libamr_nb_decoder_deps="libamr_nb"
libamr_nb_encoder_deps="libamr_nb"
libamr_wb_decoder_deps="libamr_wb"
libamr_wb_encoder_deps="libamr_wb"
969
libdirac_decoder_deps="libdirac !libschroedinger"
970
libdirac_encoder_deps="libdirac"
971
libfaac_encoder_deps="libfaac"
972
libfaad_decoder_deps="libfaad"
973
libfaadbin_decoder_extralibs='$ldl'
974 975
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
976 977
libgsm_ms_decoder_deps="libgsm"
libgsm_ms_encoder_deps="libgsm"
978
libmp3lame_encoder_deps="libmp3lame"
979 980
libschroedinger_decoder_deps="libschroedinger"
libschroedinger_encoder_deps="libschroedinger"
D
David Conrad 已提交
981
libspeex_decoder_deps="libspeex"
D
Diego Biurrun 已提交
982
libtheora_encoder_deps="libtheora"
983
libvorbis_encoder_deps="libvorbis"
984 985
libx264_encoder_deps="libx264"
libxvid_encoder_deps="libxvid"
D
Diego Biurrun 已提交
986
mpeg4aac_decoder_deps="libfaad"
987

D
Diego Biurrun 已提交
988
# demuxers / muxers
989
ac3_demuxer_deps="ac3_parser"
990
audio_beos_demuxer_deps="audio_beos"
991
audio_beos_demuxer_extralibs="-lmedia -lbe"
992
audio_beos_muxer_deps="audio_beos"
993
audio_beos_muxer_extralibs="-lmedia -lbe"
994
avisynth_demuxer_deps="avisynth"
995
bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
996
dirac_demuxer_deps="dirac_parser"
997
dv1394_demuxer_deps="dv1394 dv_demuxer"
R
Ramiro Polla 已提交
998
libdc1394_demuxer_deps="libdc1394"
999 1000
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
1001
mp3_demuxer_deps="mpegaudio_parser"
1002 1003
oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
oss_muxer_deps_any="soundcard_h sys_soundcard_h"
1004
redir_demuxer_deps="network"
1005
rtp_muxer_deps="network rtp_protocol"
1006 1007
rtsp_demuxer_deps="sdp_demuxer"
sdp_demuxer_deps="rtp_protocol mpegts_demuxer"
1008
v4l_demuxer_deps="linux_videodev_h"
1009
v4l2_demuxer_deps_any="linux_videodev2_h sys_videoio_h"
R
Ramiro Polla 已提交
1010 1011
vfwcap_demuxer_deps="capCreateCaptureWindow"
vfwcap_demuxer_extralibs="-lvfw32"
1012
x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
1013
x11_grab_device_demuxer_extralibs="-lX11 -lXext"
1014

D
Diego Biurrun 已提交
1015
# protocols
1016 1017 1018 1019 1020
http_protocol_deps="network"
rtp_protocol_deps="udp_protocol"
tcp_protocol_deps="network"
udp_protocol_deps="network"

1021
# filters
1022
movie_filter_deps="avfilter_lavf"
1023

D
Diego Biurrun 已提交
1024
# programs
M
Måns Rullgård 已提交
1025
ffplay_deps="sdl"
1026
ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
1027 1028
ffserver_extralibs='$ldl'
vhook_extralibs='$ldl'
M
Måns Rullgård 已提交
1029

D
Diego Biurrun 已提交
1030

F
Fabrice Bellard 已提交
1031
# default parameters
1032

1033
logfile="config.err"
1034 1035

# installation paths
1036 1037 1038 1039 1040 1041
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"
1042 1043

# toolchain
1044
cc_default="gcc"
L
Loren Merritt 已提交
1045
yasmexe="yasm"
F
Fabrice Bellard 已提交
1046
ar="ar"
1047
nm="nm"
M
Michael Niedermayer 已提交
1048
ranlib="ranlib"
1049
strip="strip"
1050
asmalign_pot="unknown"
1051
ln_s="ln -sf"
L
Loren Merritt 已提交
1052
objformat="elf"
1053 1054

# machine
1055
arch=`uname -m`
1056
cpu="generic"
1057 1058

# OS
1059
target_os=$(tolower $(uname -s))
1060 1061

# libraries
1062
enable bzlib
1063
enable zlib
1064 1065

# configurable options
1066 1067 1068 1069 1070 1071 1072
enable debug
enable ffmpeg
enable ffplay
enable ffserver
enable ipv6
enable mpegaudio_hp
enable network
1073
enable optimizations
1074
enable protocols
D
Diego Biurrun 已提交
1075
enable static
1076
enable stripping
1077 1078 1079
vhook="default"

# build settings
1080
add_cflags -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112
M
Måns Rullgård 已提交
1081
SHFLAGS='-shared -Wl,-soname,$$(@F)'
1082
VHOOKSHFLAGS='$(SHFLAGS)'
1083
FFSERVERLDFLAGS=-Wl,-E
1084 1085
LIBPREF="lib"
LIBSUF=".a"
1086 1087
FULLNAME='$(NAME)$(BUILDSUF)'
LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
1088 1089
SLIBPREF="lib"
SLIBSUF=".so"
1090
SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
1091 1092
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
1093
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
1094

1095 1096
# 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.
1097
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,"'
1098

1099 1100
# find source path
source_path="`dirname \"$0\"`"
1101
enable source_path_used
1102 1103
if test -z "$source_path" -o "$source_path" = "." ; then
    source_path="`pwd`"
1104
    disable source_path_used
1105 1106 1107
else
    source_path="`cd \"$source_path\"; pwd`"
    echo "$source_path" | grep -q '[[:blank:]]' &&
1108
        die "Out of tree builds are impossible with whitespace in source path."
1109 1110 1111 1112
fi

FFMPEG_CONFIGURATION="$@"

1113 1114 1115 1116
find_things(){
    thing=$1
    pattern=$2
    file=$source_path/$3
M
Måns Rullgård 已提交
1117
    sed -n "s/^[^#]*$pattern.*([^,]*, *\([^,]*\)\(,.*\)*).*/\1_$thing/p" "$file"
1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128
}

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)
1129
FILTER_LIST=$(find_things   filter   FILTER   libavfilter/allfilters.c)
1130

1131 1132 1133 1134 1135 1136 1137
enable $ARCH_EXT_LIST \
       $DECODER_LIST \
       $ENCODER_LIST \
       $PARSER_LIST \
       $BSF_LIST \
       $DEMUXER_LIST \
       $MUXER_LIST \
1138
       $FILTER_LIST \
1139 1140 1141
       $PROTOCOL_LIST \
       $INDEV_LIST \
       $OUTDEV_LIST \
1142 1143 1144 1145 1146 1147 1148

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

1149
show_list() {
R
Ramiro Polla 已提交
1150 1151 1152
    suffix=_$1
    shift
    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
1153 1154 1155
    exit 0
}

1156
for opt do
1157 1158 1159 1160 1161 1162 1163 1164
    optval="${opt#*=}"
    case "$opt" in
    --extra-cflags=*) add_cflags "$optval"
    ;;
    --extra-ldflags=*) add_ldflags "$optval"
    ;;
    --extra-libs=*) add_extralibs "$optval"
    ;;
D
Diego Biurrun 已提交
1165
    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
1166
    ;;
1167 1168
    --enable-debug=*) debuglevel="$optval"
    ;;
1169 1170 1171
    --enable-*=*|--disable-*=*)
    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
    case "$thing" in
1172
        encoder|decoder|muxer|demuxer|parser|bsf|protocol|filter) $action ${optval}_${thing} ;;
1173 1174 1175 1176 1177
        *) die_unknown "$opt" ;;
    esac
    ;;
    --enable-?*|--disable-?*)
    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
1178 1179 1180 1181 1182 1183 1184
    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
1185 1186 1187 1188 1189 1190 1191 1192 1193 1194
    ;;
    --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
    ;;
    *)
1195
    optname="${opt%%=*}"
1196 1197 1198 1199
    optname="${optname#--}"
    optname=$(echo "$optname" | sed 's/-/_/g')
    is_in $optname $CMDLINE_SET || die_unknown $opt
    eval $optname='$optval'
1200 1201
    ;;
    esac
1202 1203
done

M
Måns Rullgård 已提交
1204 1205 1206 1207 1208
disabled logging && logfile=/dev/null

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

1209
cc_default="${cross_prefix}${cc_default}"
L
Loren Merritt 已提交
1210
yasmexe="${cross_prefix}${yasmexe}"
1211 1212 1213 1214 1215
ar="${cross_prefix}${ar}"
nm="${cross_prefix}${nm}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1216 1217
set_default cc

1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233
# 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"

1234 1235
check_cflags -std=c99

R
Ramiro Polla 已提交
1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257
case "$arch" in
    i386|i486|i586|i686|i86pc|BePC)
        arch="x86_32"
        enable fast_unaligned
    ;;
    x86_64|amd64)
        arch="x86_32"
        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 已提交
1258
        enable fast_unaligned
R
Ramiro Polla 已提交
1259 1260 1261 1262
    ;;
    ppc64)
        arch="powerpc"
        enable fast_64bit
M
Måns Rullgård 已提交
1263
        enable fast_unaligned
R
Ramiro Polla 已提交
1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306
    ;;
    mips|mipsel|IP*)
        arch="mips"
    ;;
    sun4u|sparc64)
        arch="sparc64"
        enable fast_64bit
    ;;
    sparc)
        arch="sparc"
    ;;
    sh4)
        arch="sh4"
    ;;
    parisc)
        arch="parisc"
    ;;
    parisc64)
        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

1307
# OS specific
1308
case $target_os in
1309
    beos|haiku|zeta)
1310
        prefix_default="$HOME/config"
1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328
        # 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
1329
        if echo $BEINCLUDES | grep -q 'headers/be/bone'; then
1330 1331 1332 1333 1334 1335 1336
            network_extralibs="-lbind -lsocket"
        else
            enable beos_netserver
            network_extralibs="-lnet"
        fi ;;
    sunos)
        FFSERVERLDFLAGS=""
M
Måns Rullgård 已提交
1337
        SHFLAGS='-shared -Wl,-h,$$(@F)'
1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362
        network_extralibs="-lsocket -lnsl"
        ;;
    netbsd)
        oss_demuxer_extralibs="-lossaudio"
        oss_muxer_extralibs="-lossaudio"
        ;;
    openbsd)
        disable need_memalign
        LIBOBJFLAGS='$(PIC)'
        SHFLAGS='-shared'
        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
        oss_demuxer_extralibs="-lossaudio"
        oss_muxer_extralibs="-lossaudio"
        ;;
    freebsd)
        disable need_memalign
        ;;
    bsd/os)
        osextralibs="-lpoll -lgnugetopt"
        strip="strip -d"
        ;;
    darwin)
        disable need_memalign
1363
        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 已提交
1364
        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$$(@F)'
1365 1366 1367 1368 1369 1370
        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 已提交
1371
        objformat="macho"
1372
        enabled x86_64 && objformat="macho64"
1373 1374
        ;;
    mingw32*)
1375
        target_os=mingw32
R
Ramiro Polla 已提交
1376 1377 1378 1379 1380
        LIBTARGET=i386
        if test $arch = x86_64; then
            disable need_memalign
            LIBTARGET=x64
        fi
1381
        shlibdir_default="$bindir_default"
1382 1383
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1384
        if enabled swscale; then
1385 1386 1387 1388 1389 1390 1391 1392 1393
            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 已提交
1394
        SLIB_EXTRA_CMD='-lib /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib)'
1395 1396
        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)"'
1397
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
M
Måns Rullgård 已提交
1398
        SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
L
Loren Merritt 已提交
1399
        objformat="win32"
1400
        enable dos_paths
1401 1402
        ;;
    cygwin*)
1403
        target_os=cygwin
1404
        shlibdir_default="$bindir_default"
1405 1406
        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
1407
        if enabled swscale; then
1408 1409 1410 1411 1412 1413 1414 1415 1416
            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 已提交
1417
        objformat="win32"
1418
        enable dos_paths
1419
        ;;
M
Michael Kostylev 已提交
1420 1421 1422 1423 1424
    *-dos|freedos|opendos)
        disable ffplay ffserver vhook
        disable $INDEV_LIST $OUTDEV_LIST
        network_extralibs="-lsocket"
        EXESUF=".exe"
L
Loren Merritt 已提交
1425
        objformat="win32"
1426
        enable dos_paths
M
Michael Kostylev 已提交
1427
        ;;
1428 1429 1430 1431
    linux)
        enable dv1394
        ;;
    irix*)
1432
        target_os=irix
1433 1434
        ranlib="echo ignoring ranlib"
        ;;
D
Dave Yeo 已提交
1435 1436 1437 1438 1439
    os/2*)
        strip="lxlite"
        ln_s="cp -f"
        EXESUF=".exe"
        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
M
Måns Rullgård 已提交
1440
        SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf'
D
Dave Yeo 已提交
1441
        FFSERVERLDFLAGS=""
1442
        LIBSUF="_s.a"
D
Dave Yeo 已提交
1443 1444 1445 1446
        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 已提交
1447 1448 1449 1450 1451 1452 1453 1454 1455
        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 已提交
1456
        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
R
Ramiro Polla 已提交
1457
        disable vhook
1458
        enable dos_paths
D
Dave Yeo 已提交
1459
        ;;
1460 1461 1462
    interix)
        disable vhook
        ;;
D
Dave Yeo 已提交
1463

1464
    *)
1465
        target_os="${target_os}-UNKNOWN"
1466 1467 1468
        ;;
esac

1469 1470
set_default $PATHS_LIST

1471
add_extralibs $osextralibs
F
Fabrice Bellard 已提交
1472

1473 1474
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1475

1476
test -n "$cross_prefix" && enable cross_compile
1477

1478
# we need to build at least one lib type
1479
if ! enabled_any static shared; then
1480 1481 1482 1483 1484 1485 1486 1487 1488
    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 已提交
1489
disabled static && LIBNAME=""
R
Ramiro Polla 已提交
1490

1491 1492
if enabled_any libfaad libfaadbin ; then
    if check_header faad.h; then
D
Diego Biurrun 已提交
1493
        check_cc <<EOF
1494 1495 1496 1497
#include <faad.h>
#ifndef FAAD2_VERSION
ok faad1
#endif
D
Diego Biurrun 已提交
1498
int main(void) { return 0; }
1499 1500 1501
EOF
        test $? = 0 && enable libfaad2
    else
D
Diego Biurrun 已提交
1502
        die "FAAD test failed."
1503 1504 1505 1506
    fi
fi


1507
if ! enabled gpl; then
R
Ramiro Polla 已提交
1508 1509 1510 1511 1512
    die_gpl_disabled(){
        name=$1
        shift
        enabled_any $@ && die "$name is under GPL and --enable-gpl is not specified."
    }
1513
    die_gpl_disabled "The Postprocessing code" postproc
1514 1515
    die_gpl_disabled "libx264"                 libx264
    die_gpl_disabled "libxvidcore"             libxvid
R
Ramiro Polla 已提交
1516 1517
    die_gpl_disabled "FAAD2"                   libfaad2
    die_gpl_disabled "The X11 grabber"         x11grab
1518
    die_gpl_disabled "The software scaler"     swscale
1519
fi
1520

1521 1522 1523 1524
if ! enabled nonfree && enabled_any libamr_nb libamr_wb; then
    die "libamr is nonfree and --enable-nonfree is not specified."
fi

1525
check_deps $ARCH_EXT_LIST
1526

1527 1528
test -z "$need_memalign" && need_memalign="$mmx"

1529
#Darwin CC versions
1530
if test $target_os = darwin; then
1531
    if $cc -v 2>&1 | grep -q xlc; then
1532
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1533
    else
1534
        add_cflags "-pipe"
1535 1536
        check_cflags "-force_cpusubtype_ALL"
        check_cflags "-Wno-sign-compare"
1537
        enabled shared || check_cflags -mdynamic-no-pic
1538
    fi
1539 1540
fi

1541
disabled optimizations || check_cflags -fomit-frame-pointer
1542

1543
# Add processor-specific flags
1544
if test $cpu != "generic"; then
M
Måns Rullgård 已提交
1545 1546
    warn_altivec(){
        $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
1547
    }
1548
    case $cpu in
1549
        601|ppc601|PowerPC601)
1550
            add_cflags "-mcpu=601"
M
Måns Rullgård 已提交
1551
            warn_altivec enabled PPC601
1552 1553
        ;;
        603*|ppc603*|PowerPC603*)
1554
            add_cflags "-mcpu=603"
M
Måns Rullgård 已提交
1555
            warn_altivec enabled PPC603
1556 1557
        ;;
        604*|ppc604*|PowerPC604*)
1558
            add_cflags "-mcpu=604"
M
Måns Rullgård 已提交
1559
            warn_altivec enabled PPC604
1560 1561
        ;;
        G3|g3|75*|ppc75*|PowerPC75*)
1562
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
M
Måns Rullgård 已提交
1563
            warn_altivec enabled PPC75x
1564 1565
        ;;
        G4|g4|745*|ppc745*|PowerPC745*)
1566
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
M
Måns Rullgård 已提交
1567
            warn_altivec disabled PPC745x
1568 1569
        ;;
        74*|ppc74*|PowerPC74*)
1570
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
M
Måns Rullgård 已提交
1571
            warn_altivec disabled PPC74xx
1572 1573
        ;;
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1574
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
M
Måns Rullgård 已提交
1575
            warn_altivec disabled PPC970
M
Måns Rullgård 已提交
1576
            enable ppc64
1577
        ;;
1578 1579 1580
        Cell|CELL|cell)
            add_cflags "-mcpu=cell"
            warn_altivec disabled Cell
M
Måns Rullgård 已提交
1581
            enable ppc64
1582
        ;;
1583 1584
        # targets that do NOT support conditional mov (cmov)
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1585
            add_cflags "-march=$cpu"
1586
            disable cmov
1587 1588
        ;;
        # targets that do support conditional mov (cmov)
1589
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1590
            add_cflags "-march=$cpu"
1591 1592
            enable cmov
            enable fast_cmov
1593 1594
        ;;
        # targets that do support conditional mov but on which it's slow
1595
        pentium4|pentium4m|prescott|nocona)
1596
            add_cflags "-march=$cpu"
1597 1598
            enable cmov
            disable fast_cmov
1599
        ;;
1600
        sparc64)
1601
            add_cflags "-mcpu=v9"
1602
        ;;
1603 1604 1605 1606
        arm11*|cortex*)
            add_cflags "-mcpu=$cpu"
            enable fast_unaligned
        ;;
1607 1608 1609
        armv*)
            add_cflags "-march=$cpu"
        ;;
1610
        arm*)
M
Måns Rullgård 已提交
1611 1612
            add_cflags "-mcpu=$cpu"
        ;;
1613
        *)
1614
            echo "WARNING: Unknown CPU \"$cpu\", ignored."
1615
        ;;
1616 1617 1618
    esac
fi

1619
# make sure we can execute files in $TMPDIR
1620
cat > $TMPSH 2>> $logfile <<EOF
1621 1622
#! /bin/sh
EOF
1623 1624
chmod +x $TMPSH >> $logfile 2>&1
if ! $TMPSH >> $logfile 2>&1; then
1625 1626
    cat <<EOF
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1627 1628
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
1629 1630 1631
EOF
    die "Sanity test failed."
fi
1632
rm $TMPSH
1633

M
Måns Rullgård 已提交
1634 1635
# compiler sanity check
check_exec <<EOF
1636
int main(void){ return 0; }
M
Måns Rullgård 已提交
1637 1638 1639
EOF
if test "$?" != 0; then
    echo "$cc is unable to create an executable file."
1640
    if test -z "$cross_prefix" && ! enabled cross_compile ; then
1641
        echo "If $cc is a cross-compiler, use the --enable-cross-compile option."
1642
        echo "Only do this if you know what cross compiling means."
M
Måns Rullgård 已提交
1643 1644 1645 1646
    fi
    die "C compiler test failed."
fi

1647 1648 1649
check_cc <<EOF || die "Symbol mangling check failed."
int ff_extern;
EOF
1650
sym=$($nm -P -g $TMPO | grep ff_extern)
1651 1652
extern_prefix=${sym%%ff_extern*}

M
Måns Rullgård 已提交
1653 1654
check_asm inline_asm '""'

1655
if enabled x86; then
1656 1657 1658 1659
    # 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.
1660
    check_exec_crash <<EOF && enable ebp_available
1661
    volatile int i=0;
D
Diego Pettenò 已提交
1662
    __asm__ volatile (
1663 1664 1665 1666 1667 1668
        "xorl %%ebp, %%ebp"
    ::: "%ebp");
    return i;
EOF

    # check wether EBX is available on x86
1669
    check_asm ebx_available '"":::"%ebx"'
1670

1671
    # check whether binutils is new enough to compile SSSE3/MMX2
1672
    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
1673
    enabled mmx2  && check_asm mmx2  '"movss %xmm0, %xmm0"'
1674 1675

    check_asm bswap '"bswap %%eax" ::: "%eax"'
L
Loren Merritt 已提交
1676 1677 1678 1679 1680 1681

    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" ;;
1682
        macho64)              append YASMFLAGS "-DPIC -DPREFIX" ;;
L
Loren Merritt 已提交
1683 1684 1685
        *)                    append YASMFLAGS "-DPREFIX"  ;;
    esac
    check_yasm "pabsw xmm0, xmm0" && enable yasm
1686 1687
fi

1688 1689
# check for assembler specific support

1690
if test $arch = "powerpc"; then
1691
    check_asm dcbzl '"dcbzl 0, 1"'
1692 1693
fi

1694 1695
# check for SIMD availability

1696
# AltiVec flags: The FSF version of GCC differs from the Apple version
1697
if enabled altivec; then
1698 1699
    check_cflags -maltivec -mabi=altivec &&
        { check_header altivec.h && inc_altivec_h="#include <altivec.h>" ; } ||
1700
        check_cflags -faltivec
1701

M
indent  
Måns Rullgård 已提交
1702
    # check if our compiler supports Motorola AltiVec C API
1703
    check_cc <<EOF || disable altivec
1704
$inc_altivec_h
1705 1706 1707 1708 1709
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
1710 1711 1712
EOF

    # check if our compiler supports braces for vector declarations
1713
    check_cc <<EOF || die "You need a compiler that supports {} in AltiVec vector declarations."
1714
$inc_altivec_h
1715
int main (void) { (vector int) {1}; return 0; }
1716 1717
EOF
fi
1718

1719 1720
# We have to check if pld is a nop and disable it.
enabled armv4l  && check_asm pld     '"pld [r0]"'
1721 1722
enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
M
Måns Rullgård 已提交
1723
enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
1724 1725
enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
1726
enabled neon    && check_asm neon    '"vadd.i16 q0, q0, q0"'
1727
enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
1728

1729 1730
enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"

1731 1732
# ---
# big/little-endian test
1733 1734
check_cc <<EOF || die "endian test failed"
unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
1735
EOF
1736
od -A n -t x1 $TMPO | grep -q '42 *49 *47 *45' && enable bigendian
F
Fabrice Bellard 已提交
1737

N
Nick Kurshev 已提交
1738 1739 1740
# ---
# check availability of some header files

1741 1742 1743 1744
if check_func dlopen; then
    ldl=
elif check_func dlopen -ldl; then
    ldl=-ldl
1745 1746
fi

1747 1748 1749
check_func  fork
check_func  gethrtime
check_func  getrusage
1750
check_func  inet_aton $network_extralibs
1751 1752
check_func  memalign
check_func  mkstemp
1753
check_func_headers windows.h GetProcessTimes
R
Ramiro Polla 已提交
1754

1755
check_header conio.h
1756 1757
check_header dlfcn.h
check_header malloc.h
1758
check_header poll.h
1759
check_header sys/mman.h
1760
check_header sys/resource.h
1761
check_header sys/select.h
1762 1763 1764 1765 1766
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
1767

A
Aurelien Jacobs 已提交
1768
enabled  zlib && check_lib  zlib.h      zlibVersion -lz   || disable  zlib
1769
enabled bzlib && check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
1770 1771 1772 1773

# 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 已提交
1774 1775 1776 1777
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
1778
        add_extralibs -pthread
M
Måns Rullgård 已提交
1779 1780
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
1781
        add_extralibs -pthreads
G
Gianluigi Tiesi 已提交
1782 1783
    elif check_func pthread_create -lpthreadGC2; then
        add_extralibs -lpthreadGC2
M
Måns Rullgård 已提交
1784 1785 1786
    elif ! check_lib pthread.h pthread_create -lpthread; then
        die "ERROR: can't find pthreads library"
    fi
1787 1788
fi

1789
for thread in $THREADS_LIST; do
1790
    if enabled $thread; then
1791 1792
        test -n "$thread_type" &&
            die "ERROR: Only one thread type must be selected." ||
1793 1794 1795 1796
            thread_type="$thread"
    fi
done

M
Måns Rullgård 已提交
1797 1798
check_lib math.h sin -lm

1799 1800 1801
# test for C99 functions in math.h
for func in llrint lrint lrintf round roundf; do
    check_exec <<EOF && enable $func || disable $func
1802
#include <math.h>
1803
int main(void) { return ($func(3.999f) > 0)?0:1; }
1804
EOF
1805
done
1806

1807
# these are off by default, so fail if requested and not available
1808
enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
1809 1810
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
1811
enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
D
Diego Biurrun 已提交
1812 1813
                      require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
                      require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
1814 1815
enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
1816 1817 1818
enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
D
Diego Biurrun 已提交
1819 1820
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 已提交
1821
enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
1822 1823
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
D
Diego Biurrun 已提交
1824
enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm &&
1825 1826
                      { check_cpp_condition x264.h "X264_BUILD >= 65" ||
                        die "ERROR: libx264 version must be >= 0.65."; }
1827 1828
enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1829

1830 1831 1832 1833 1834 1835 1836 1837 1838 1839
# 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 已提交
1840 1841
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1842
    check_cc <<EOF && _restrict=$restrict_keyword && break
1843 1844
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
1845 1846
done

1847
test "$vhook" = "default" && vhook="$dlopen"
1848

1849
if test "$target_os" = cygwin -o "$target_os" = mingw32 && enabled_all static vhook ; then
1850
    disable vhook
1851
    echo
1852
    echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
1853 1854 1855 1856
    echo "Patches welcome."
    echo
fi

1857 1858 1859 1860
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
M
Michael Niedermayer 已提交
1861

1862 1863
check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
1864

1865
##########################################
D
Diego Biurrun 已提交
1866
# SDL check
1867

1868 1869
disable sdl_too_old
disable sdl
1870
SDL_CONFIG="${cross_prefix}sdl-config"
1871
if "${SDL_CONFIG}" --version > /dev/null 2>&1; then
M
Måns Rullgård 已提交
1872 1873
    sdl_cflags=`"${SDL_CONFIG}" --cflags`
    temp_cflags $sdl_cflags
1874
    temp_extralibs `"${SDL_CONFIG}" --libs`
1875
    if check_lib2 SDL.h SDL_Init; then
1876
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1877
        if test "$_sdlversion" -lt 121 ; then
1878
            enable sdl_too_old
1879
        else
1880
            enable sdl
M
Måns Rullgård 已提交
1881
            check_cc $sdl_cflags <<EOF && enable sdl_video_size
1882
#include <SDL.h>
1883
int main(int argc, char **argv){
1884 1885 1886 1887 1888
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
    int w = vi->current_w;
    return 0;
}
EOF
1889 1890
        fi
    fi
1891
    restore_flags
M
Michael Niedermayer 已提交
1892
fi
1893

1894
texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
1895

R
Ramiro Polla 已提交
1896 1897 1898 1899
##########################################
# Network check

if enabled network; then
1900
    check_type sys/socket.h socklen_t
R
Ramiro Polla 已提交
1901 1902 1903 1904
    # Prefer arpa/inet.h over winsock2
    if check_header arpa/inet.h ; then
        check_func closesocket
    elif check_header winsock2.h ; then
1905
        network_extralibs="-lws2_32"
1906
        check_type ws2tcpip.h socklen_t
1907
        check_func_headers winsock2.h closesocket
R
Ramiro Polla 已提交
1908 1909 1910
    fi
fi

1911
##########################################
D
Diego Biurrun 已提交
1912
# IPv6 check
1913

1914
enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
1915 1916 1917 1918
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
D
Diego Biurrun 已提交
1919
int main(void) {
1920 1921 1922 1923 1924
    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);
1925 1926 1927
}
EOF

1928 1929
check_header linux/videodev.h
check_header linux/videodev2.h
1930
check_header sys/videoio.h
1931

1932
check_func_headers "windows.h vfw.h" capCreateCaptureWindow -lvfw32
R
Ramiro Polla 已提交
1933

1934
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
R
Indent  
Ramiro Polla 已提交
1935 1936 1937 1938 1939 1940 1941
{ 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
1942

1943 1944
check_header sys/soundcard.h
check_header soundcard.h
M
Måns Rullgård 已提交
1945

1946
# deal with the X11 frame grabber
1947
enabled x11grab                         &&
1948 1949 1950
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
check_func XOpenDisplay -lX11           &&
1951
check_func XShmCreateImage -lX11 -lXext
1952

1953
enabled debug && add_cflags -g"$debuglevel"
1954 1955 1956

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
1957 1958
check_cflags -Wall
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
1959 1960 1961
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
1962
check_cflags -Wno-pointer-sign
1963
check_cflags -Wcast-qual
1964
check_cflags -Wwrite-strings
1965
check_cflags -Wtype-limits
1966
enabled extra_warnings && check_cflags -Winline
1967

1968
# add some linker flags
1969
check_ldflags -Wl,--warn-common
1970 1971
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'
1972
check_ldflags -Wl,-Bsymbolic
F
Fabrice Bellard 已提交
1973

1974 1975
if enabled small; then
    check_cflags -Os            # not all compilers support -Os
1976 1977
    optimizations="small"
elif enabled optimizations; then
1978
    if $cc -v 2>&1 | grep -q xlc; then
1979 1980
        add_cflags  "-O5"
        add_ldflags "-O5"
1981
    else
1982
        add_cflags "-O3"
1983
    fi
1984
fi
1985
check_cflags -fno-math-errno
1986
check_cflags -fno-signed-zeros
1987

C
Carl Eugen Hoyos 已提交
1988
# add some flags for Intel C Compiler
1989
if $cc --version 2> /dev/null | grep -q Intel; then
C
Carl Eugen Hoyos 已提交
1990 1991 1992 1993 1994 1995 1996 1997 1998 1999
  # 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
2000 2001
  # Allow to compile with optimizations
  check_ldflags -march=$cpu
C
Carl Eugen Hoyos 已提交
2002 2003
fi

2004
# PIC flags for shared library objects where they are needed
2005
if enabled shared; then
2006 2007 2008
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
        case "$arch" in
2009
            x86_64|ia64|alpha|sparc*|power*|parisc*|mips*) LIBOBJFLAGS='$(PIC)' ;;
2010 2011
        esac
    fi
2012 2013
fi

2014
if enabled gprof; then
2015 2016
    add_cflags  "-p"
    add_ldflags "-p"
2017 2018
fi

2019
VHOOKCFLAGS="-fPIC"
2020

D
Diego Biurrun 已提交
2021
# Find out if the .align argument is a power of two or not.
2022
if test $asmalign_pot = "unknown"; then
2023
    disable asmalign_pot
D
Diego Pettenò 已提交
2024
    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
2025 2026
fi

2027 2028 2029 2030 2031
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
2032
enabled_any $FILTER_LIST       && enable filters
2033 2034 2035 2036 2037 2038 2039
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       \
2040
           $CONFIG_EXTRA      \
2041 2042 2043 2044 2045 2046 2047
           $HAVE_LIST         \
           $DECODER_LIST      \
           $ENCODER_LIST      \
           $PARSER_LIST       \
           $BSF_LIST          \
           $DEMUXER_LIST      \
           $MUXER_LIST        \
2048
           $FILTER_LIST       \
2049 2050 2051
           $INDEV_LIST        \
           $OUTDEV_LIST       \
           $PROTOCOL_LIST     \
2052

R
Ramiro Polla 已提交
2053
enabled libdc1394 && append pkg_requires "libraw1394"
2054
enabled libdirac  && append pkg_requires "dirac"
2055
enabled libtheora && append pkg_requires "theora"
2056
enabled libvorbis && append pkg_requires "vorbisenc"
2057

2058
echo "install prefix            $prefix"
D
Diego Biurrun 已提交
2059 2060
echo "source path               $source_path"
echo "C compiler                $cc"
D
Diego Biurrun 已提交
2061
echo ".align is power-of-two    $asmalign_pot"
D
Diego Biurrun 已提交
2062
echo "ARCH                      $arch ($cpu)"
2063 2064
if test "$build_suffix" != ""; then
    echo "build suffix              $build_suffix"
2065
fi
2066 2067 2068
if test "$extra_version" != ""; then
    echo "version string suffix     $extra_version"
fi
M
Måns Rullgård 已提交
2069
echo "big-endian                ${bigendian-no}"
2070
if test $arch = "x86_32" -o $arch = "x86_64"; then
C
Carl Eugen Hoyos 已提交
2071
    echo "yasm                      ${yasm-no}"
M
Måns Rullgård 已提交
2072 2073 2074
    echo "MMX enabled               ${mmx-no}"
    echo "CMOV enabled              ${cmov-no}"
    echo "CMOV is fast              ${fast_cmov-no}"
M
Michael Niedermayer 已提交
2075 2076
    echo "EBX available             ${ebx_available-no}"
    echo "EBP available             ${ebp_available-no}"
F
Fabrice Bellard 已提交
2077
fi
2078
if test $arch = "armv4l"; then
M
Måns Rullgård 已提交
2079 2080
    echo "ARMv5TE enabled           ${armv5te-no}"
    echo "ARMv6 enabled             ${armv6-no}"
M
Måns Rullgård 已提交
2081
    echo "ARM VFP enabled           ${armvfp-no}"
M
Måns Rullgård 已提交
2082
    echo "IWMMXT enabled            ${iwmmxt-no}"
2083
    echo "NEON enabled              ${neon-no}"
2084
fi
2085
if test $arch = "mips"; then
M
Måns Rullgård 已提交
2086
    echo "MMI enabled               ${mmi-no}"
F
Fabrice Bellard 已提交
2087
fi
2088
if test $arch = "powerpc"; then
M
Måns Rullgård 已提交
2089 2090
    echo "AltiVec enabled           ${altivec-no}"
    echo "dcbzl available           ${dcbzl-no}"
F
Fabrice Bellard 已提交
2091
fi
M
Måns Rullgård 已提交
2092 2093
echo "gprof enabled             ${gprof-no}"
echo "debug symbols             ${debug-no}"
2094
echo "strip symbols             ${stripping-no}"
2095
echo "optimizations             ${optimizations-no}"
M
Måns Rullgård 已提交
2096 2097
echo "static                    ${static-no}"
echo "shared                    ${shared-no}"
2098
echo "postprocessing support    ${postproc-no}"
2099
echo "software scaler enabled   ${swscale-no}"
2100
echo "new filter support        ${avfilter-no}"
2101
echo "filters using lavformat   ${avfilter_lavf-no}"
M
Måns Rullgård 已提交
2102
echo "video hooking             ${vhook-no}"
2103
if enabled vhook; then
M
Måns Rullgård 已提交
2104 2105
    echo "Imlib2 support            ${imlib2-no}"
    echo "FreeType support          ${freetype2-no}"
2106
fi
M
Måns Rullgård 已提交
2107
echo "network support           ${network-no}"
2108
if enabled network; then
M
Måns Rullgård 已提交
2109
    echo "IPv6 support              ${ipv6-no}"
D
Diego Biurrun 已提交
2110
fi
M
Måns Rullgård 已提交
2111 2112
echo "threading support         ${thread_type-no}"
echo "SDL support               ${sdl-no}"
2113
if enabled sdl_too_old; then
D
Diego Biurrun 已提交
2114 2115
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
fi
M
Måns Rullgård 已提交
2116 2117 2118 2119
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 已提交
2120
echo "libdc1394 support         ${libdc1394-no}"
2121
echo "libdirac enabled          ${libdirac-no}"
M
Måns Rullgård 已提交
2122 2123
echo "libfaac enabled           ${libfaac-no}"
echo "libfaad enabled           ${libfaad-no}"
2124
echo "libfaad dlopened          ${libfaadbin-no}"
M
Måns Rullgård 已提交
2125 2126 2127
echo "libgsm enabled            ${libgsm-no}"
echo "libmp3lame enabled        ${libmp3lame-no}"
echo "libnut enabled            ${libnut-no}"
2128
echo "libschroedinger enabled   ${libschroedinger-no}"
D
David Conrad 已提交
2129
echo "libspeex enabled          ${libspeex-no}"
M
Måns Rullgård 已提交
2130 2131
echo "libtheora enabled         ${libtheora-no}"
echo "libvorbis enabled         ${libvorbis-no}"
2132 2133
echo "libx264 enabled           ${libx264-no}"
echo "libxvid enabled           ${libxvid-no}"
M
Måns Rullgård 已提交
2134
echo "zlib enabled              ${zlib-no}"
2135
echo "bzlib enabled             ${bzlib-no}"
2136
echo
F
Fabrice Bellard 已提交
2137

2138
for type in decoder encoder parser demuxer muxer protocol filter bsf indev outdev; do
2139
    echo "Enabled ${type}s:"
2140
    eval list=\$$(toupper $type)_LIST
2141
    for part in $list; do
2142 2143 2144
        enabled $part && echo ${part%_*}
    done | sort | pr -3 -t
    echo
2145 2146
done

2147 2148 2149 2150 2151 2152 2153 2154
license="LGPL"
if enabled nonfree; then
    license="unredistributable"
elif enabled gpl; then
    license="GPL"
fi

echo "License: $license"
2155

2156 2157
echo "Creating config.mak and config.h..."

D
Diego Biurrun 已提交
2158 2159
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
2160 2161
echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
echo "#define FFMPEG_CONFIG_H" >> $TMPH
D
Diego Biurrun 已提交
2162
echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
F
Fabrice Bellard 已提交
2163

2164
echo "FFMPEG_CONFIGURATION=$FFMPEG_CONFIGURATION" >> config.mak
2165
echo "prefix=$prefix" >> config.mak
2166 2167 2168 2169 2170
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
2171
echo "CC=$cc" >> config.mak
L
Loren Merritt 已提交
2172
echo "YASM=$yasmexe" >> config.mak
2173
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
2174
echo "RANLIB=$ranlib" >> config.mak
2175
echo "LN_S=$ln_s" >> config.mak
2176
enabled stripping &&
2177
    echo "STRIP=$strip" >> config.mak ||
M
Måns Rullgård 已提交
2178
    echo "STRIP=echo ignoring strip" >> config.mak
2179

N
Nick Kurshev 已提交
2180
echo "OPTFLAGS=$CFLAGS" >> config.mak
2181
echo "VHOOKCFLAGS=$VHOOKCFLAGS" >> config.mak
2182
echo "LDFLAGS=$LDFLAGS" >> config.mak
2183
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
2184
echo "SHFLAGS=$SHFLAGS" >> config.mak
L
Loren Merritt 已提交
2185
echo "YASMFLAGS=$YASMFLAGS" >> config.mak
2186
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
2187
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
2188
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
2189
echo "BUILD_STATIC=$static" >> config.mak
2190
echo "BUILDSUF=$build_suffix" >> config.mak
2191
echo "FULLNAME=$FULLNAME" >> config.mak
2192
echo "LIBPREF=$LIBPREF" >> config.mak
2193
echo "LIBSUF=$LIBSUF" >> config.mak
2194
echo "LIBNAME=$LIBNAME" >> config.mak
2195
echo "SLIBPREF=$SLIBPREF" >> config.mak
2196 2197
echo "SLIBSUF=$SLIBSUF" >> config.mak
echo "EXESUF=$EXESUF" >> config.mak
2198
echo "EXTRA_VERSION=$extra_version" >> config.mak
2199
echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
M
Måns Rullgård 已提交
2200

2201
if enabled bigendian; then
2202 2203
    echo "WORDS_BIGENDIAN=yes" >> config.mak
    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
2204
fi
2205

2206
if enabled sdl; then
2207 2208
    echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
    echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2209
fi
2210
if enabled texi2html; then
2211
    echo "BUILD_DOC=yes" >> config.mak
2212
fi
L
Luca Barbato 已提交
2213

2214 2215 2216
get_version(){
    name=$1
    file=$source_path/$2
2217 2218
    eval $(grep "#define ${name}_VERSION_M" "$file" | awk '{ print $2"="$3 }')
    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
2219 2220 2221
    lcname=$(tolower $name)
    eval echo "${lcname}_VERSION=\$${name}_VERSION" >> config.mak
    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> config.mak
2222 2223
}

2224 2225 2226 2227 2228 2229
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
2230
get_version LIBAVFILTER libavfilter/avfilter.h
L
Luca Barbato 已提交
2231

2232
if enabled shared; then
2233 2234
    echo "BUILD_SHARED=yes" >> config.mak
    echo "PIC=-fPIC -DPIC" >> config.mak
R
Ramiro Polla 已提交
2235
    echo "LIBTARGET=${LIBTARGET}" >> config.mak
2236 2237 2238
    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 已提交
2239
    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
2240 2241 2242
    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 已提交
2243
fi
2244
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2245
echo "EXTRALIBS=$extralibs" >> config.mak
2246

2247 2248
print_config ARCH_   $TMPH config.mak $ARCH_LIST
print_config HAVE_   $TMPH config.mak $HAVE_LIST
2249
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
2250
                                      $CONFIG_EXTRA      \
2251 2252 2253 2254 2255 2256
                                      $DECODER_LIST      \
                                      $ENCODER_LIST      \
                                      $PARSER_LIST       \
                                      $BSF_LIST          \
                                      $DEMUXER_LIST      \
                                      $MUXER_LIST        \
2257
                                      $FILTER_LIST       \
2258 2259 2260
                                      $PROTOCOL_LIST     \
                                      $INDEV_LIST        \
                                      $OUTDEV_LIST       \
2261

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

2264
if enabled small; then
2265
    echo "#define av_always_inline"  >> $TMPH
2266 2267
fi

2268 2269 2270
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2271

2272
# Apparently it's not possible to portably echo a backslash.
2273
enabled asmalign_pot &&
2274
    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
D
Diego Biurrun 已提交
2275
    printf '#define ASMALIGN(ZEROBITS) ".align 1 << " #ZEROBITS "\\n\\t"\n' >> $TMPH
2276

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

2279 2280
echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH

D
Diego Biurrun 已提交
2281
# Do not overwrite an unchanged config.h to avoid superfluous rebuilds.
2282 2283 2284
cmp -s $TMPH config.h &&
    echo "config.h is unchanged" ||
    mv -f $TMPH config.h
N
Nick Kurshev 已提交
2285

2286
rm -f $TMPC $TMPE $TMPH $TMPO $TMPS $TMPSH
2287

2288
# build tree in object directory if source path is different from current one
2289
if enabled source_path_used; then
2290
    DIRS="\
2291 2292 2293 2294 2295 2296 2297 2298 2299 2300
        doc               \
        libavcodec        \
        libavcodec/alpha  \
        libavcodec/armv4l \
        libavcodec/bfin   \
        libavcodec/i386   \
        libavcodec/mlib   \
        libavcodec/ppc    \
        libavcodec/sh4    \
        libavcodec/sparc  \
2301
        libavdevice       \
2302
        libavfilter       \
2303 2304 2305 2306 2307 2308 2309 2310
        libavformat       \
        libavutil         \
        libpostproc       \
        libswscale        \
        tests             \
        tools             \
        vhook             \
        "
2311
    FILES="\
2312 2313
        Makefile             \
        common.mak           \
M
Måns Rullgård 已提交
2314
        subdir.mak           \
2315 2316
        doc/texi2pod.pl      \
        libavcodec/Makefile  \
2317
        libavdevice/Makefile \
2318
        libavfilter/Makefile \
2319 2320 2321 2322 2323
        libavformat/Makefile \
        libavutil/Makefile   \
        libpostproc/Makefile \
        libswscale/Makefile  \
        "
2324
    for dir in $DIRS ; do
2325
        mkdir -p $dir
2326 2327
    done
    for f in $FILES ; do
2328
        $ln_s "$source_path/$f" $f
2329 2330
    done
fi
2331 2332


2333
# build pkg-config files
2334

2335 2336
pkgconfig_generate(){
name=$1
2337
shortname=${name#lib}
2338 2339 2340 2341
comment=$2
version=$3
libs=$4
requires=$5
2342
cat <<EOF > $name/$name.pc
2343
prefix=$prefix
2344
exec_prefix=\${prefix}
2345
libdir=$libdir
2346
includedir=$incdir
2347

2348 2349 2350
Name: $name
Description: $comment
Version: $version
2351 2352
Requires: $(disabled shared && echo $requires)
Requires.private: $(enabled shared && echo $requires)
2353
Conflicts:
2354 2355
Libs: -L\${libdir} -l${shortname} $(disabled shared && echo $libs)
Libs.private: $(enabled shared && echo $libs)
2356
Cflags: -I\${includedir}
2357
EOF
2358
cat <<EOF > $name/$name-uninstalled.pc
2359 2360
prefix=
exec_prefix=
2361
libdir=\${pcfiledir}
2362
includedir=${source_path}
2363

2364 2365 2366 2367
Name: $name
Description: $comment
Version: $version
Requires: $requires
2368
Conflicts:
2369
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2370 2371
Cflags: -I\${includedir}
EOF
2372
}
2373

2374 2375 2376 2377
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"
2378
enabled avfilter &&
2379
    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
2380
enabled postproc &&
2381
    pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
2382
if enabled swscale; then
2383
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
2384
else
M
Måns Rullgård 已提交
2385
    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
2386
    apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
2387
fi