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

10
# make sure we are running under a compatible shell
11 12 13
# try to make this part work with most shells

try_exec(){
14
    echo "Trying shell $1"
15 16 17
    type "$1" >/dev/null 2>&1 && exec "$@"
}

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

(: ${foo?}) 2>/dev/null
E2="$?"

if test "$E1" != 0 || test "$E2" = 0; then
    echo "Broken shell detected.  Trying alternatives."
27 28 29 30 31 32 33 34 35 36 37 38
    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" "$@"
39 40
    fi
    echo "No compatible shell script interpreter found."
D
typo  
Diego Biurrun 已提交
41
    echo "This configure script requires a POSIX-compatible shell"
42
    echo "such as bash or ksh."
D
Diego Biurrun 已提交
43 44 45
    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."
46 47 48 49
    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
50 51 52
    exit 1
fi

53 54 55 56 57 58
show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
59
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
60
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
61
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
62
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
63 64 65 66 67 68 69 70
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
  echo "  --mandir=DIR             install man page in DIR [PREFIX/man]"
  echo "  --enable-mingw32         enable MinGW native/cross Windows compile"
  echo "  --enable-mingwce         enable MinGW native/cross WinCE compile"
  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]"
D
Diego Biurrun 已提交
71 72
  echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
  echo "  --enable-swscaler        software scaler support [default=no]"
73
  echo "  --enable-sunmlib         use Sun medialib [default=no]"
74 75
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
  echo "  --enable-os2threads      use OS/2 threads [default=no]"
76
  echo "  --enable-pthreads        use pthreads [default=no]"
D
Diego Biurrun 已提交
77
  echo "  --enable-w32threads      use Win32 threads [default=no]"
78
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
79 80
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
  echo "                           and libraw1394 [default=no]"
D
Diego Biurrun 已提交
81 82
  echo "  --enable-a52             enable GPLed liba52 support [default=no]"
  echo "  --enable-a52bin          open liba52.so.0 at runtime [default=no]"
83
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
D
Diego Biurrun 已提交
84 85 86 87 88 89 90 91
  echo "  --enable-dts             enable GPLed libdts support [default=no]"
  echo "  --enable-faac            enable FAAC support via libfaac [default=no]"
  echo "  --enable-faad            enable FAAD support via libfaad [default=no]"
  echo "  --enable-faadbin         build FAAD support with runtime linking [default=no]"
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
  echo "  --enable-mp3lame         enable MP3 encoding via libmp3lame [default=no]"
  echo "  --enable-libnut          enable NUT support via libnut [default=no]"
  echo "  --enable-libogg          enable Ogg support via libogg [default=no]"
D
Diego Biurrun 已提交
92
  echo "  --enable-libtheora       enable Theora support via libtheora [default=no]"
D
Diego Biurrun 已提交
93 94
  echo "  --enable-vorbis          enable Vorbis support via libvorbis [default=no]"
  echo "  --enable-x264            enable H.264 encoding via x264 [default=no]"
95
  echo "  --enable-xvid            enable Xvid encoding via xvidcore [default=no]"
D
Diego Biurrun 已提交
96 97 98 99
  echo "  --enable-amr_nb          enable amr_nb float audio codec"
  echo "  --enable-amr_nb-fixed    use fixed point for amr-nb codec"
  echo "  --enable-amr_wb          enable amr_wb float audio codec"
  echo "  --enable-amr_if2         enable amr_wb IF2 audio codec"
100 101 102 103 104 105
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
  echo "                           and ffmpeg will be under GPL [default=no]"
  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]"
106
  echo "  --cross-compile          assume a cross-compiler is used"
107 108 109 110 111 112
  echo "  --cc=CC                  use C compiler CC [$cc]"
  echo "  --make=MAKE              use specified make [$make]"
  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]"
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
113
  echo "  --arch=ARCH              select architecture  [$arch]"
114 115
  echo "  --cpu=CPU                selects the minimum cpu required (affects
                                   instruction selection, may crash on older CPUs)"
116 117 118
  echo "  --powerpc-perf-enable    enable performance report on PPC"
  echo "                           (requires enabling PMC)"
  echo "  --disable-mmx            disable MMX usage"
119
  echo "  --disable-armv5te        disable armv5te usage"
120
  echo "  --disable-armv6          disable armv6 usage"
121 122 123 124 125 126 127 128 129
  echo "  --disable-iwmmxt         disable iwmmxt usage"
  echo "  --disable-altivec        disable AltiVec usage"
  echo "  --disable-audio-oss      disable OSS audio support [default=no]"
  echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
  echo "  --disable-v4l            disable video4linux grabbing [default=no]"
  echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
  echo "  --disable-bktr           disable bktr video grabbing [default=no]"
  echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
  echo "  --disable-network        disable network support [default=no]"
130
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
131 132 133 134 135
  echo "  --disable-zlib           disable zlib [default=no]"
  echo "  --disable-vhook          disable video hooking support"
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
  echo "  --disable-debug          disable debugging symbols"
  echo "  --disable-opts           disable compiler optimizations"
136
  echo "  --enable-extra-warnings  enable more compiler warnings"
137 138 139
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
  echo "                           MPEG audio decoding [default=no]"
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
140
  echo "  --disable-ffmpeg         disable ffmpeg build"
141 142 143 144 145 146 147 148 149 150 151
  echo "  --disable-ffserver       disable ffserver build"
  echo "  --disable-ffplay         disable ffplay build"
  echo "  --enable-small           optimize for size instead of speed"
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
  echo "  --disable-strip          disable stripping of executables and shared libraries"
  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"
152 153
  echo "  --disable-muxer=NAME     disables muxer NAME"
  echo "  --enable-muxer=NAME      enables muxer NAME"
154
  echo "  --disable-muxers         disables all muxers"
155 156
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
157
  echo "  --disable-demuxers       disables all demuxers"
158 159 160
  echo "  --enable-parser=NAME     enables parser NAME"
  echo "  --disable-parser=NAME    disables parser NAME"
  echo "  --disable-parsers        disables all parsers"
161 162 163 164
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
  exit 1
}
165

166 167 168 169
log(){
    echo "$@" >>$logfile
}

170
log_file(){
M
Måns Rullgård 已提交
171 172 173 174 175
    log BEGIN $1
    cat -n $1 >>$logfile
    log END $1
}

176
echolog(){
M
Måns Rullgård 已提交
177
    log "$@"
178
    echo "$@"
179 180 181 182 183 184 185 186 187
}

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
ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
EOF
188
    if enabled logging; then
189 190 191 192 193 194 195 196 197 198
        cat <<EOF
Include the log file "$logfile" produced by configure as this will help
solving the problem.
EOF
    else
cat <<EOF
Rerun configure with logging enabled (do not use --log=no), and include the
log this produces with your report.
EOF
    fi
199 200 201 202
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
    exit 1
}

203
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
204 205 206 207
toupper(){
    echo "$@" | tr '[a-z]' '[A-Z]'
}

208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

224
enabled(){
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
    eval test "x\$$1" = "xyes"
}

enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

240 241 242 243 244 245 246 247 248
check_deps(){
    for cfg; do
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
        enabled_all $dep_all || disable $cfg
        enabled_any $dep_any || disable $cfg
    done
}

249 250 251 252 253 254 255 256 257 258 259 260
print_config(){
    pfx=$1
    header=$2
    makefile=$3
    shift 3
    for cfg; do
        if enabled $cfg; then
            ucname="${pfx}`toupper $cfg`"
            echo "#define ${ucname} 1" >> $header
            echo "${ucname}=yes" >> $makefile
        fi
    done
261 262 263 264 265 266
}

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

267
save_flags(){
268
    flags_saved && return
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297
    SAVE_CFLAGS="$CFLAGS"
    SAVE_LDFLAGS="$LDFLAGS"
    SAVE_extralibs="$extralibs"
}

restore_flags(){
    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 $*"
}

298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316
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 "$@"
}

317
check_cmd(){
M
Måns Rullgård 已提交
318
    log "$@"
319
    "$@" >>$logfile 2>&1
320 321
}

322
check_cc(){
323 324
    log check_cc "$@"
    cat >$TMPC
325
    log_file $TMPC
326
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
327 328 329 330
}

check_cpp(){
    log check_cpp "$@"
331
    cat >$TMPC
332
    log_file $TMPC
333
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
334 335 336
}

check_ld(){
337
    log check_ld "$@"
338
    check_cc || return
339
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
340 341 342
}

check_cflags(){
343 344
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
345 346 347 348 349
int x;
EOF
}

check_ldflags(){
350 351 352 353 354
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
int main(){
    return 0;
}
355 356 357 358
EOF
}

check_header(){
359
    log check_header "$@"
360 361
    header=$1
    shift
362
    check_cpp "$@" <<EOF
363 364 365
#include <$header>
int x;
EOF
366
    err=$?
367
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
368 369
    test "$err" = 0 && enable $var || disable $var
    return $err
370 371 372
}

check_func(){
373
    log check_func "$@"
374 375 376 377 378 379 380 381
    func=$1
    shift
    check_ld "$@" <<EOF
extern int $func();
int main(){
    $func();
}
EOF
382 383 384
    err=$?
    test "$err" = 0 && enable $func || disable $func
    return $err
385 386
}

387 388 389 390 391 392 393 394 395 396 397 398
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
    temp_extralibs "$@"
    check_header $header && check_func $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
}

399
check_exec(){
400
    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
401 402 403 404 405 406 407 408
}

require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
409 410
}

411 412 413 414 415 416
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438
CONFIG_LIST='
    encoders
    decoders
    parsers
    muxers
    demuxers
    amr
    amr_nb
    amr_nb_fixed
    amr_wb
    audio_beos
    audio_oss
    avisynth
    beos_netserver
    bktr
    dc1394
    dv1394
    ffmpeg
    ffplay
    ffserver
    gpl
    ipv6
439 440
    liba52
    liba52bin
441
    libdts
442 443 444
    libfaac
    libfaad
    libfaadbin
445
    libgsm
446
    libmp3lame
447 448
    libnut
    libogg
D
Diego Biurrun 已提交
449
    libtheora
450 451 452 453 454 455 456 457 458 459
    libvorbis
    memalign_hack
    mpegaudio_hp
    network
    pp
    protocols
    swscaler
    vhook
    video4linux
    video4linux2
460
    wince
461
    x11grab
462 463 464 465 466 467 468
    x264
    xvid
    zlib
'

HAVE_LIST='
    altivec_h
469
    armv6
470
    beosthreads
471 472
    byteswap_h
    dcbzl
473 474 475 476 477
    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
478
    dlfcn_h
479 480 481 482
    dlopen
    freetype2
    gprof
    imlib2
M
Måns Rullgård 已提交
483
    inet_aton
484 485
    localtime_r
    lrintf
486 487
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
488 489 490
    malloc_h
    memalign
    mlib
M
Måns Rullgård 已提交
491
    os2
492 493
    os2threads
    pthreads
494 495
    sdl
    sdl_video_size
496 497
    threads
    w32threads
498
'
499

500
flashsv_decoder_deps="zlib"
501
flashsv_encoder_deps="zlib"
502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518
mpeg_xvmc_decoder_deps="xvmc"
png_decoder_deps="zlib"
png_encoder_deps="zlib"
x264_encoder_deps="x264"
xvid_encoder_deps="xvid"
zmbv_decoder_deps="zlib"
zmbv_encoder_deps="zlib"

aac_decoder_deps="libfaad"
mpeg4aac_decoder_deps="libfaad"
ac3_decoder_deps="liba52"
amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
amr_wb_decoder_deps="amr_wb"
amr_wb_encoder_deps="amr_wb"
dts_decoder_deps="libdts"
faac_encoder_deps="libfaac"
519 520
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
D
Diego Biurrun 已提交
521
libtheora_encoder_deps="libtheora"
522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537
mp3lame_encoder_deps="libmp3lame"
oggvorbis_decoder_deps="libvorbis"
oggvorbis_encoder_deps="libvorbis"

audio_demuxer_deps_any="audio_oss audio_beos"
audio_muxer_deps_any="audio_oss audio_beos"
dc1394_demuxer_deps="dc1394"
dv1394_demuxer_deps="dv1394"
gxf_muxer_deps="gpl"
nut_muxer_deps="libnut"
ogg_muxer_deps="libogg"
redir_demuxer_deps="network"
rtp_muxer_deps="network"
rtsp_demuxer_deps="network"
sdp_demuxer_deps="network"
v4l2_demuxer_deps="video4linux2"
A
Aurelien Jacobs 已提交
538
video_grab_device_demuxer_deps_any="video4linux bktr"
539 540
x11_grab_device_demuxer_deps="x11grab"

541
# set temporary file name
Z
Zdenek Kabelac 已提交
542
if test ! -z "$TMPDIR" ; then
543
    TMPDIR1="${TMPDIR}"
Z
Zdenek Kabelac 已提交
544
elif test ! -z "$TEMPDIR" ; then
545
    TMPDIR1="${TEMPDIR}"
N
Nick Kurshev 已提交
546
else
547
    TMPDIR1="/tmp"
N
Nick Kurshev 已提交
548 549
fi

550 551
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
552
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
553 554 555
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"

F
Fabrice Bellard 已提交
556
# default parameters
557
logging="yes"
558
logfile="config.err"
559 560
PREFIX="/usr/local"
libdir='${PREFIX}/lib'
561
shlibdir="$libdir"
562 563 564
incdir='${PREFIX}/include/ffmpeg'
mandir='${PREFIX}/man'
bindir='${PREFIX}/bin'
565
cross_prefix=""
566
cross_compile="no"
F
Fabrice Bellard 已提交
567 568
cc="gcc"
ar="ar"
M
Michael Niedermayer 已提交
569
ranlib="ranlib"
570
make="make"
571
strip="strip"
572
arch=`uname -m`
573
cpu="generic"
574
powerpc_perf="no"
575
mmx="default"
576
cmov="no"
577
cmov_is_fast="no"
578
armv5te="default"
579
armv6="default"
580
iwmmxt="default"
581
altivec="default"
582
dcbzl="no"
583
mmi="default"
584
case "$arch" in
585
  i386|i486|i586|i686|i86pc|BePC)
586
    arch="x86_32"
F
Fabrice Bellard 已提交
587
  ;;
588
  x86_64|amd64)
D
typo  
Diego Biurrun 已提交
589
    arch="x86_32"
590
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
591 592
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
593
        arch="x86_64"
594
      fi
595 596
    fi
  ;;
D
Diego Biurrun 已提交
597 598
  # armv4l is a subset of armv[567]*l
  arm|armv[4567]*l)
599
    arch="armv4l"
600
  ;;
601
  alpha)
602
    arch="alpha"
603
  ;;
604
  "Power Macintosh"|ppc|ppc64|powerpc)
605
    arch="powerpc"
606
  ;;
607
  mips|mipsel|IP*)
608
    arch="mips"
609
  ;;
610
  sun4u|sparc64)
611
    arch="sparc64"
612
  ;;
613
  sparc)
614
    arch="sparc"
615
  ;;
A
Alex Beregszaszi 已提交
616
  sh4)
617
    arch="sh4"
A
Alex Beregszaszi 已提交
618
  ;;
619
  parisc|parisc64)
620
    arch="parisc"
621 622
  ;;
  s390|s390x)
623
    arch="s390"
624 625
  ;;
  m68k)
626
    arch="m68k"
627 628
  ;;
  ia64)
629
    arch="ia64"
630
  ;;
M
Michael Benjamin 已提交
631
  bfin)
632
    arch="bfin"
M
Michael Benjamin 已提交
633
  ;;
F
Fabrice Bellard 已提交
634
  *)
635
    arch="unknown"
F
Fabrice Bellard 已提交
636 637 638
  ;;
esac
gprof="no"
639 640
video4linux="yes"
video4linux2="yes"
641
bktr="no"
F
Fabrice Bellard 已提交
642
audio_oss="yes"
643
audio_beos="no"
644
x11grab="no"
645
dv1394="yes"
646
dc1394="no"
F
Fabrice Bellard 已提交
647
network="yes"
648
ipv6="yes"
649
zlib="yes"
650 651
liba52="no"
liba52bin="no"
D
Diego Biurrun 已提交
652
libdts="no"
653 654 655
libfaac="no"
libfaad="no"
libfaadbin="no"
656
libgsm="no"
657
libmp3lame="no"
658
libnut="no"
659
libogg="no"
D
Diego Biurrun 已提交
660
libtheora="no"
661
libvorbis="no"
662
xvid="no"
663
x264="no"
664
pp="no"
665
mingw32="no"
666
wince="no"
667
os2="no"
668
lstatic="yes"
669
lshared="no"
670 671
optimize="yes"
debug="yes"
672
extrawarnings="no"
673
dostrip="yes"
674
extralibs="-lm"
675
bigendian="no"
676
vhook="default"
677
avisynth="no"
678
dlfcn_h="no"
679
dlopen="no"
680
mpegaudio_hp="yes"
681
SHFLAGS='-shared -Wl,-soname,$@'
682
VHOOKSHFLAGS='$(SHFLAGS)'
683
beos_netserver="no"
684
protocols="yes"
685
ffmpeg="yes"
686
ffserver="yes"
687
ffplay="yes"
688
LIBOBJFLAGS=""
689
FFLDFLAGS=-Wl,--warn-common
690
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
691
FFSERVERLDFLAGS=-Wl,-E
692
LDCONFIG="ldconfig"
693 694
LIBPREF="lib"
LIBSUF=".a"
695
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
696 697
SLIBPREF="lib"
SLIBSUF=".so"
698
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
699 700
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
F
Fabrice Bellard 已提交
701
EXESUF=""
702
BUILDSUF=""
703
amr_nb="no"
704
amr_wb="no"
Z
Zdenek Kabelac 已提交
705
amr_nb_fixed="no"
706
amr_if2="no"
707
mlib="no"
708 709
beosthreads="no"
os2threads="no"
710
pthreads="no"
D
Diego Biurrun 已提交
711
w32threads="no"
712
thread_type="no"
L
Luca Abeni 已提交
713
swscaler="no"
714
gpl="no"
715
memalign_hack="no"
716
asmalign_pot="unknown"
717
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
718 719 720 721 722

# OS specific
targetos=`uname -s`
case $targetos in
BeOS)
723
PREFIX="/boot/home/config"
724
# helps building libavcodec
725
add_cflags "-DPIC -fomit-frame-pointer"
726
# 3 gcc releases known for BeOS, each with ugly bugs
727
gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
728 729 730 731 732
case "$gcc_version" in
2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
mmx="no"
;;
*20010315*) echo "BeBits gcc"
733
add_cflags "-fno-expensive-optimizations"
734 735
;;
esac
736
SHFLAGS=-nostart
D
Diego Biurrun 已提交
737
# disable Linux things
738
audio_oss="no"
739 740
video4linux="no"
video4linux2="no"
741
dv1394="no"
D
Diego Biurrun 已提交
742
# enable BeOS things
743
audio_beos="yes"
744 745 746 747 748
# no need for libm, but the inet stuff
# Check for BONE
if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
extralibs="-lbind -lsocket"
else
749
beos_netserver="yes"
750
extralibs="-lnet"
751
fi ;;
752
SunOS)
753 754
video4linux="no"
video4linux2="no"
755
audio_oss="no"
756
dv1394="no"
757
make="gmake"
758
FFLDFLAGS=""
759
FFSERVERLDFLAGS=""
760
SHFLAGS="-shared -Wl,-h,\$@"
761
add_extralibs "-lsocket -lnsl"
762
;;
763
NetBSD)
764 765
video4linux="no"
video4linux2="no"
766
bktr="yes"
767 768 769
audio_oss="yes"
dv1394="no"
make="gmake"
770
add_extralibs "-lossaudio"
771
;;
772
OpenBSD)
773 774
video4linux="no"
video4linux2="no"
775
bktr="yes"
776 777
audio_oss="yes"
dv1394="no"
778
need_memalign="no"
779
make="gmake"
780
LIBOBJFLAGS="\$(PIC)"
781
LDCONFIG="ldconfig -m \$(shlibdir)"
782 783 784 785
SHFLAGS='-shared'
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
SLIBNAME_WITH_VERSION='$(SLIBNAME)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
786
add_extralibs "-lossaudio"
787
;;
788
FreeBSD)
789 790
video4linux="no"
video4linux2="no"
791
bktr="yes"
792
audio_oss="yes"
793
dv1394="no"
794
make="gmake"
795
need_memalign="no"
796
add_cflags "-pthread"
797
;;
798
GNU/kFreeBSD)
799 800
video4linux="no"
video4linux2="no"
801 802 803
bktr="yes"
audio_oss="yes"
dv1394="no"
804
add_cflags "-pthread"
805
;;
806
BSD/OS)
807 808
video4linux="no"
video4linux2="no"
809
bktr="yes"
F
Fabrice Bellard 已提交
810
audio_oss="yes"
811
dv1394="no"
812 813
extralibs="-lpoll -lgnugetopt -lm"
make="gmake"
814
strip="strip -d"
815
;;
816
Darwin)
817
cc="cc"
818 819
video4linux="no"
video4linux2="no"
820
audio_oss="no"
821
dv1394="no"
822
need_memalign="no"
823
SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
824
VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
825
extralibs=""
826
strip="strip -x"
827
FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
828
SLIBSUF=".dylib"
829
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
830
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
831
FFSERVERLDFLAGS=-Wl,-bind_at_load
832
;;
833
MINGW32*)
F
Fabrice Bellard 已提交
834
# Note: the rest of the mingw32 config is done afterwards as mingw32
D
Diego Biurrun 已提交
835
# can be forced on the command line for Linux cross compilation.
836 837
mingw32="yes"
;;
838
CYGWIN*)
839
targetos=CYGWIN
840
shlibdir="$bindir"
841 842
video4linux="no"
video4linux2="no"
843
audio_oss="yes"
844
dv1394="no"
D
Diego Biurrun 已提交
845
VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
846
VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
847
extralibs=""
848
EXESUF=".exe"
849 850 851 852 853
SLIBPREF="cyg"
SLIBSUF=".dll"
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
854
;;
855
Linux)
856
LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
857
;;
858
IRIX*)
859
targetos=IRIX
860
ranlib="echo ignoring ranlib"
861 862
video4linux="no"
video4linux2="no"
863 864 865
audio_oss="no"
make="gmake"
;;
866 867
OS/2)
TMPE=$TMPE".exe"
868
ar="emxomfar -p128"
869 870
ranlib="echo ignoring ranlib"
strip="echo ignoring strip"
871
add_cflags "-Zomf"
872
FFLDFLAGS="-Zomf -Zstack 16384 -s"
873
SHFLAGS="-Zdll -Zomf"
874
FFSERVERLDFLAGS=""
875 876 877 878
LIBPREF=""
LIBSUF=".lib"
SLIBPREF=""
SLIBSUF=".dll"
F
Fabrice Bellard 已提交
879
EXESUF=".exe"
880
extralibs=""
881
pkg_requires=""
882 883
video4linux="no"
video4linux2="no"
884
audio_oss="no"
885
dv1394="no"
886
ffserver="no"
887
vhook="no"
888 889
os2="yes"
;;
890 891 892
*)
targetos="${targetos}-UNKNOWN"
;;
893
esac
F
Fabrice Bellard 已提交
894

895
# find source path
896
source_path="`dirname \"$0\"`"
897 898
source_path_used="yes"
if test -z "$source_path" -o "$source_path" = "." ; then
899
    source_path="`pwd`"
900
    source_path_used="no"
901 902
else
    source_path="`cd \"$source_path\"; pwd`"
903 904
    echo "$source_path" | grep -q '[[:blank:]]' &&
      die "Out of tree builds are impossible with whitespace in source path."
F
Fabrice Bellard 已提交
905 906
fi

907 908 909 910
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    show_help
fi

911 912 913 914 915
FFMPEG_CONFIGURATION=" "
for opt do
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
done

916 917 918
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
919 920
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
921

922 923
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST

F
Fabrice Bellard 已提交
924
for opt do
M
Måns Rullgård 已提交
925
  optval="${opt#*=}"
F
Fabrice Bellard 已提交
926
  case "$opt" in
927 928
  --log)
  ;;
M
Måns Rullgård 已提交
929
  --log=*) logging="$optval"
930
  ;;
931
  --prefix=*) PREFIX="$optval"
F
Fabrice Bellard 已提交
932
  ;;
933
  --libdir=*) libdir="$optval"
934
  ;;
935 936
  --shlibdir=*) shlibdir="$optval"
  ;;
M
Måns Rullgård 已提交
937
  --incdir=*) incdir="$optval"
D
Diego Biurrun 已提交
938
  ;;
M
Måns Rullgård 已提交
939
  --mandir=*) mandir="$optval"
F
Fabrice Bellard 已提交
940
  ;;
M
Måns Rullgård 已提交
941
  --source-path=*) source_path="$optval"
942
  ;;
M
Måns Rullgård 已提交
943
  --cross-prefix=*) cross_prefix="$optval"
944
  ;;
945 946
  --cross-compile) cross_compile=yes
  ;;
M
Måns Rullgård 已提交
947
  --cc=*) cc="$optval"
F
Fabrice Bellard 已提交
948
  ;;
M
Måns Rullgård 已提交
949
  --make=*) make="$optval"
950
  ;;
951
  --extra-cflags=*) add_cflags "$optval"
952
  ;;
953
  --extra-ldflags=*) add_ldflags "$optval"
954
  ;;
955
  --extra-libs=*) add_extralibs "$optval"
956
  ;;
M
Måns Rullgård 已提交
957
  --build-suffix=*) BUILDSUF="$optval"
958
  ;;
959
  --arch=*) arch="$optval"
F
Fabrice Bellard 已提交
960
  ;;
961
  --cpu=*) cpu="$optval"
962
  ;;
963 964
  --powerpc-perf-enable) powerpc_perf="yes"
  ;;
F
Fabrice Bellard 已提交
965 966
  --disable-mmx) mmx="no"
  ;;
967 968
  --disable-armv5te) armv5te="no"
  ;;
969 970
  --disable-armv6) armv6="no"
  ;;
971 972
  --disable-iwmmxt) iwmmxt="no"
  ;;
973 974
  --disable-altivec) altivec="no"
  ;;
F
Fabrice Bellard 已提交
975 976
  --enable-gprof) gprof="yes"
  ;;
977
  --disable-v4l) video4linux="no"
F
Fabrice Bellard 已提交
978
  ;;
979
  --disable-v4l2) video4linux2="no"
L
Luca Abeni 已提交
980
  ;;
981 982
  --disable-bktr) bktr="no"
  ;;
F
Fabrice Bellard 已提交
983 984
  --disable-audio-oss) audio_oss="no"
  ;;
985 986
  --disable-audio-beos) audio_beos="no"
  ;;
987 988
  --disable-dv1394) dv1394="no"
  ;;
989
  --disable-network) network="no"; ffserver="no"
F
Fabrice Bellard 已提交
990
  ;;
991 992
  --disable-ipv6) ipv6="no";
  ;;
993 994
  --disable-zlib) zlib="no"
  ;;
995
  --enable-a52) liba52="yes"
996
  ;;
997
  --enable-a52bin) liba52bin="yes"
Z
Zdenek Kabelac 已提交
998
  ;;
999
  --enable-dts) libdts="yes"
1000
  ;;
1001
  --enable-pp) pp="yes"
1002
  ;;
1003 1004
  --enable-libgsm) libgsm="yes"
  ;;
1005
  --enable-mp3lame) libmp3lame="yes"
1006
  ;;
1007 1008
  --enable-libnut) libnut="yes"
  ;;
1009
  --enable-libogg) libogg="yes"
1010
    pkg_requires="$pkg_requires ogg >= 1.1"
N
Nilesh Bansal 已提交
1011
  ;;
D
Diego Biurrun 已提交
1012 1013 1014
  --enable-libtheora) libtheora="yes"
    pkg_requires="$pkg_requires theora"
  ;;
1015
  --enable-vorbis) libvorbis="yes"
1016
    pkg_requires="$pkg_requires vorbis vorbisenc"
1017
  ;;
1018
  --enable-faad) libfaad="yes"
Z
Zdenek Kabelac 已提交
1019
  ;;
1020
  --enable-faadbin) libfaadbin="yes"
Z
Zdenek Kabelac 已提交
1021
  ;;
1022
  --enable-faac) libfaac="yes"
1023
  ;;
1024 1025
  --enable-xvid) xvid="yes"
  ;;
1026
  --enable-x264) x264="yes"
1027
  ;;
1028 1029
  --enable-avisynth) avisynth="yes";
  ;;
1030 1031
  --enable-x11grab) x11grab="yes";
  ;;
1032
  --enable-dc1394) dc1394="yes"
1033
    pkg_requires="$pkg_requires libraw1394"
1034
  ;;
1035 1036
  --disable-vhook) vhook="no"
  ;;
1037 1038
  --enable-mingw32) mingw32="yes"
  ;;
1039
  --enable-mingwce) wince="yes"
G
Gildas Bazin 已提交
1040
  ;;
1041 1042 1043 1044
  --enable-static) lstatic="yes"
  ;;
  --disable-static) lstatic="no"
  ;;
1045
  --enable-shared) lshared="yes"
N
Nick Kurshev 已提交
1046
  ;;
1047 1048
  --disable-shared) lshared="no"
  ;;
1049 1050 1051 1052
  --disable-debug) debug="no"
  ;;
  --disable-opts) optimize="no"
  ;;
1053 1054
  --enable-extra-warnings) extrawarnings="yes"
  ;;
1055 1056
  --disable-mpegaudio-hp) mpegaudio_hp="no"
  ;;
1057 1058
  --disable-protocols) protocols="no"; network="no"; ffserver="no"
  ;;
1059 1060
  --disable-ffmpeg) ffmpeg="no"
  ;;
1061 1062
  --disable-ffserver) ffserver="no"
  ;;
1063 1064
  --disable-ffplay) ffplay="no"
  ;;
1065
  --enable-small) optimize="small"
1066
  ;;
D
Diego Biurrun 已提交
1067
  --enable-amr_nb) amr="yes"; amr_nb="yes"; amr_nb_fixed="no"
1068
  ;;
D
Diego Biurrun 已提交
1069
  --enable-amr_nb-fixed) amr="yes"; amr_nb_fixed="yes"; amr_nb="no"
Z
Zdenek Kabelac 已提交
1070
  ;;
D
Diego Biurrun 已提交
1071
  --enable-amr_wb) amr="yes"; amr_wb="yes"
1072
  ;;
D
Diego Biurrun 已提交
1073
  --enable-amr_if2) amr="yes"; amr_if2="yes"
1074
  ;;
1075
  --enable-sunmlib) mlib="yes"
1076
  ;;
1077 1078
  --enable-pthreads) pthreads="yes"
  ;;
D
Diego Biurrun 已提交
1079 1080
  --enable-w32threads) w32threads="yes"
  ;;
1081 1082 1083 1084
  --enable-beosthreads) beosthreads="yes"
  ;;
  --enable-os2threads) os2threads="yes"
  ;;
L
Luca Abeni 已提交
1085 1086
  --enable-swscaler) swscaler="yes"
  ;;
1087 1088
  --enable-gpl) gpl="yes"
  ;;
1089
  --enable-memalign-hack) memalign_hack="yes"
1090
  ;;
1091 1092
  --disable-strip) dostrip="no"
  ;;
1093
  --enable-encoder=*) enable ${optval}_encoder
1094
  ;;
1095
  --enable-decoder=*) enable ${optval}_decoder
1096
  ;;
1097
  --disable-encoder=*) disable ${optval}_encoder
1098
  ;;
1099
  --disable-decoder=*) disable ${optval}_decoder
1100
  ;;
1101
  --disable-encoders) disable $ENCODER_LIST
1102
  ;;
1103
  --disable-decoders) disable $DECODER_LIST
1104
  ;;
1105
  --enable-muxer=*) enable ${optval}_muxer
1106
  ;;
1107
  --disable-muxer=*) disable ${optval}_muxer
1108
  ;;
1109
  --disable-muxers) disable $MUXER_LIST; ffserver="no"
1110
  ;;
1111
  --enable-demuxer=*) enable ${optval}_demuxer
1112
  ;;
1113
  --disable-demuxer=*) disable ${optval}_demuxer
1114
  ;;
1115
  --disable-demuxers) disable $DEMUXER_LIST
1116
  ;;
1117
  --enable-parser=*) enable ${optval}_parser
1118
  ;;
1119
  --disable-parser=*) disable ${optval}_parser
1120
  ;;
1121
  --disable-parsers) disable $PARSER_LIST
1122
  ;;
1123 1124
  --help) show_help
  ;;
1125 1126 1127 1128 1129
  *)
  echo "Unknown option \"$opt\"."
  echo "See $0 --help for available options."
  exit 1
  ;;
F
Fabrice Bellard 已提交
1130 1131 1132
  esac
done

1133
if test "$logging" != no; then
1134
    enabled logging || logfile="$logging"
1135 1136
    echo "# $0 $@" >$logfile
    set >>$logfile
1137 1138
else
    logfile=/dev/null
1139
fi
1140

1141 1142
if enabled_any mingw32 wince; then
    if enabled_all lshared lstatic; then
1143 1144 1145 1146 1147 1148 1149 1150
        cat <<EOF
You can only build one library type at once on MinGW.
Specify --disable-static --enable-shared to only build
the shared libraries. To build only the static libraries
you do not need to pass additional options.
EOF
        exit 1
    fi
1151 1152
    video4linux="no"
    video4linux2="no"
1153 1154 1155 1156 1157
    audio_oss="no"
    dv1394="no"
    dc1394="no"
    ffserver="no"
    network="no"
1158
    if enabled wince; then
1159 1160 1161 1162 1163
        protocols="no"
    fi
    SLIBPREF=""
    SLIBSUF=".dll"
    EXESUF=".exe"
1164 1165
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1166
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
D
Diego Biurrun 已提交
1167
    SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1168
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1169 1170
fi

1171 1172
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1173

1174
test -n "$cross_prefix" && cross_compile=yes
1175 1176 1177 1178 1179
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190
# we need to build at least one lib type
if test "$lstatic" = "no" && test "$lshared" = "no" ; then
    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

1191
if enabled libtheora && test "$libogg" = "no"; then
D
Diego Biurrun 已提交
1192 1193 1194
    die "libogg must be enabled to enable libtheora."
fi

1195
if enabled libvorbis && test "$libogg" = "no"; then
1196
    die "libogg must be enabled to enable libvorbis."
N
Nilesh Bansal 已提交
1197 1198
fi

1199
if test "$gpl" != "yes"; then
1200
    if test "$pp" != "no"; then
1201
        die "The Postprocessing code is under GPL and --enable-gpl is not specified."
1202 1203
    fi

1204
    if test "$liba52" != "no" -o "$liba52bin" != "no"; then
1205
        die "liba52 is under GPL and --enable-gpl is not specified."
1206
    fi
1207

1208
    if test "$xvid" != "no"; then
1209
        die "libxvidcore is under GPL and --enable-gpl is not specified."
1210 1211
    fi

1212
    if test "$x264" != "no"; then
1213
        die "x264 is under GPL and --enable-gpl is not specified."
1214 1215
    fi

1216
    if test "$libdts" != "no"; then
1217
        die "libdts is under GPL and --enable-gpl is not specified."
1218
    fi
1219

1220
    if test "$libfaad" != "no" -o "$libfaadbin" != "no"; then
1221 1222
        if check_header faad.h; then
            check_cc << EOF
1223 1224 1225 1226 1227 1228
                #include <faad.h>
                #ifndef FAAD2_VERSION
                ok faad1
                #endif
                int main( void ) { return 0; }
EOF
1229
            if test $? = 0 ; then
1230
                die "FAAD2 is under GPL and --enable-gpl is not specified."
1231 1232
            fi
        else
1233 1234
            libfaad="no"
            libfaadbin="no"
D
Diego Biurrun 已提交
1235
            echo "FAAD test failed."
1236 1237
        fi
    fi
1238 1239

    if test "$x11grab" != "no"; then
1240
        die "The X11 grabber is under GPL and --enable-gpl is not specified."
1241
    fi
1242 1243

    if test "$swscaler" != "no"; then
1244
        die "The software scaler is under GPL and --enable-gpl is not specified."
1245
    fi
1246
fi
1247

D
Diego Biurrun 已提交
1248
# compute MMX state
1249
if test $mmx = "default"; then
1250
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1251 1252 1253 1254 1255 1256
        mmx="yes"
    else
        mmx="no"
    fi
fi

1257 1258
test -z "$need_memalign" && need_memalign="$mmx"

1259
#Darwin CC versions
1260
needmdynamicnopic="no"
1261
if test $targetos = Darwin; then
1262
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1263
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1264
    else
1265 1266 1267
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
        case "$gcc_version" in
            *2.95*)
1268
                add_cflags "-no-cpp-precomp -pipe"
1269 1270
                ;;
            *[34].*)
1271
                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1272 1273 1274 1275 1276
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
            *)
1277
                add_cflags "-no-cpp-precomp -pipe"
1278 1279 1280 1281 1282
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
        esac
1283
    fi
1284 1285 1286 1287
fi

if test $optimize != "no"; then
    add_cflags "-fomit-frame-pointer"
1288 1289
fi

1290 1291
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
1292
    if test $arch = "powerpc"; then
1293 1294 1295 1296 1297 1298
        altivec="yes"
    else
        altivec="no"
    fi
fi

1299
# Add processor-specific flags
1300
POWERPCMODE="32bits"
1301 1302
if test $cpu != "generic"; then
    case $cpu in
1303
        601|ppc601|PowerPC601)
1304
            add_cflags "-mcpu=601"
1305
            if enabled altivec; then
1306 1307 1308 1309
                echo "WARNING: Tuning for PPC601 but AltiVec enabled!";
            fi
        ;;
        603*|ppc603*|PowerPC603*)
1310
            add_cflags "-mcpu=603"
1311
            if enabled altivec; then
1312 1313 1314 1315
                echo "WARNING: Tuning for PPC603 but AltiVec enabled!";
            fi
        ;;
        604*|ppc604*|PowerPC604*)
1316
            add_cflags "-mcpu=604"
1317
            if enabled altivec; then
1318 1319 1320 1321
                echo "WARNING: Tuning for PPC604 but AltiVec enabled!";
            fi
        ;;
        G3|g3|75*|ppc75*|PowerPC75*)
1322
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1323
            if enabled altivec; then
1324 1325 1326 1327
                echo "WARNING: Tuning for PPC75x but AltiVec enabled!";
            fi
        ;;
        G4|g4|745*|ppc745*|PowerPC745*)
1328
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1329 1330 1331 1332 1333
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC745x but AltiVec disabled!";
            fi
        ;;
        74*|ppc74*|PowerPC74*)
1334
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1335 1336 1337 1338 1339
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC74xx but AltiVec disabled!";
            fi
        ;;
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1340
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1341 1342 1343
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC970 but AltiVec disabled!";
            fi
1344
            POWERPCMODE="64bits"
1345
        ;;
1346 1347
        # targets that do NOT support conditional mov (cmov)
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1348
            add_cflags "-march=$cpu"
1349 1350 1351
            cmov="no"
        ;;
        # targets that do support conditional mov (cmov)
1352
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1353
            add_cflags "-march=$cpu"
1354
            cmov="yes"
1355 1356 1357 1358 1359 1360 1361
            cmov_is_fast="yes"
        ;;
        # targets that do support conditional mov but on which it's slow
        pentium4|prescott|nocona)
            add_cflags "-march=$cpu"
            cmov="yes"
            cmov_is_fast="no"
1362
        ;;
1363
        sparc64)
1364
            add_cflags "-mcpu=v9"
1365
        ;;
1366
        *)
1367
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1368
        ;;
1369 1370 1371
    esac
fi

1372 1373 1374 1375 1376 1377 1378 1379
# make sure we can execute files in $TMPDIR
cat >$TMPE 2>>$logfile <<EOF
#! /bin/sh
EOF
chmod +x $TMPE >>$logfile 2>&1
if ! $TMPE >>$logfile 2>&1; then
    cat <<EOF
Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
1380 1381
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
1382 1383 1384
EOF
    die "Sanity test failed."
fi
1385
rm $TMPE
1386

M
Måns Rullgård 已提交
1387 1388 1389 1390 1391 1392 1393 1394 1395 1396
# compiler sanity check
check_exec <<EOF
int main(){
    return 0;
}
EOF
if test "$?" != 0; then
    echo "$cc is unable to create an executable file."
    if test -z "$cross_prefix" -a "$cross_compile" = no; then
        echo "If $cc is a cross-compiler, use the --cross-compile option."
1397
        echo "Only do this if you know what cross compiling means."
M
Måns Rullgård 已提交
1398 1399 1400 1401
    fi
    die "C compiler test failed."
fi

1402 1403
# check for assembler specific support

1404
if test $arch = "powerpc"; then
1405 1406 1407 1408 1409 1410 1411 1412 1413 1414
check_cc <<EOF && dcbzl=yes
int main(void) {
    register long zero = 0;
    char data[1024];
    asm volatile("dcbzl %0, %1" : : "b" (data), "r" (zero));
return 0;
}
EOF
fi

1415 1416
# check for SIMD availability

1417
# AltiVec flags: The FSF version of GCC differs from the Apple version
1418
if test $arch = "powerpc"; then
1419
    if enabled altivec; then
1420
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1421
            add_cflags "-faltivec"
1422
        else
1423
            add_cflags "-maltivec -mabi=altivec"
1424 1425 1426 1427
        fi
    fi
fi

1428
check_header altivec.h
1429

D
Diego Biurrun 已提交
1430
# check if our compiler supports Motorola AltiVec C API
1431 1432
if enabled altivec; then
    if enabled altivec_h; then
M
Måns Rullgård 已提交
1433 1434 1435 1436 1437
        inc_altivec_h="#include <altivec.h>"
    else
        inc_altivec_h=
    fi
    check_cc <<EOF || altivec=no
1438
$inc_altivec_h
1439 1440 1441 1442 1443 1444 1445
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
EOF
fi
1446

1447
# check armv5te instructions support
1448
if test $armv5te = "default" -a $arch = "armv4l"; then
1449 1450 1451 1452 1453 1454 1455 1456
    armv5te=no
    check_cc <<EOF && armv5te=yes
        int main(void) {
        __asm__ __volatile__ ("qadd r0, r0, r0");
        }
EOF
fi

1457 1458 1459 1460 1461 1462 1463 1464
if test $armv6 = "default" -a $arch = "armv4l"; then
    check_cc <<EOF && armv6=yes || armv6=no
int main(void) {
    __asm__ __volatile__ ("sadd16 r0, r0, r0");
}
EOF
fi

1465
# check iwmmxt support
1466
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1467 1468 1469 1470 1471 1472 1473 1474
    iwmmxt=no
    check_cc <<EOF && iwmmxt=yes
        int main(void) {
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
        }
EOF
fi

D
Diego Biurrun 已提交
1475
# mmi only available on mips
1476
if test $mmi = "default"; then
1477
    if test $arch = "mips"; then
1478 1479 1480 1481 1482 1483
        mmi="yes"
    else
        mmi="no"
    fi
fi

D
Diego Biurrun 已提交
1484
# check if our compiler supports mmi
1485
enabled mmi && check_cc <<EOF || mmi="no"
1486 1487 1488 1489 1490
int main(void) {
    __asm__ ("lq \$2, 0(\$2)");
    return 0;
}
EOF
1491 1492 1493

# ---
# big/little-endian test
1494
if test "$cross_compile" = "no"; then
1495
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1496 1497
#include <inttypes.h>
int main(int argc, char ** argv){
1498 1499
        volatile uint32_t i=0x01234567;
        return (*((uint8_t*)(&i))) == 0x67;
1500 1501
}
EOF
F
Fabrice Bellard 已提交
1502
else
M
Måns Rullgård 已提交
1503
    # programs cannot be launched if cross compiling, so make a static guess
1504
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
M
Måns Rullgård 已提交
1505 1506
        bigendian="yes"
    fi
F
Fabrice Bellard 已提交
1507 1508
fi

N
Nick Kurshev 已提交
1509 1510 1511
# ---
# check availability of some header files

1512 1513
check_header malloc.h
check_func memalign
N
Nick Kurshev 已提交
1514

1515 1516
if test "$memalign" = "no" -a "$need_memalign" = "yes" -a \
        "$memalign_hack" != "yes"; then
1517
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1518 1519
fi

1520
check_header byteswap.h
M
Måns Rullgård 已提交
1521

1522 1523
check_func inet_aton
check_func localtime_r
1524 1525 1526 1527 1528
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"

# 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 已提交
1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
        add_ldflags -pthread
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
        add_ldflags -pthreads
    elif ! check_lib pthread.h pthread_create -lpthread; then
        die "ERROR: can't find pthreads library"
    fi
1540 1541
fi

1542 1543 1544 1545 1546 1547 1548 1549 1550 1551
for thread in pthreads beosthreads os2threads w32threads; do
    if enabled $thread; then
        if test $thread_type != "no"; then
            die "ERROR: Only one thread type must be selected."
        else
            thread_type="$thread"
        fi
    fi
done

1552
# these are off by default, so fail if requested and not available
1553
enabled libdts  && require libdts dts.h dts_init -ldts -lm
1554
enabled libgsm  && require libgsm gsm.h gsm_create -lgsm
1555
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
D
Diego Biurrun 已提交
1556
enabled libtheora && require libtheora theora/theora.h theora_info_init -ltheora -logg
1557
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1558
enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
1559
enabled libnut  && require libnut libnut.h nut_demuxer_init -lnut
1560 1561 1562
enabled xvid    && require XviD xvid.h xvid_global -lxvidcore
enabled x264    && require x264 x264.h x264_encoder_open -lx264
enabled dc1394  && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
1563
enabled mlib    && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1564

1565
# Ugh, libfaac uses stdcall calling convention on win32 so we can't use
1566
# the generic test functions
1567
if enabled libfaac; then
1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581
    save_flags
    temp_extralibs -lfaac
    check_ld <<EOF && add_extralibs -lfaac || die "ERROR: libfaac not found"
#include <stdint.h>
#include <faac.h>
int main(){
    char *id, *cpr;
    faacEncGetVersion(&id, &cpr);
    return 0;
}
EOF
    restore_flags
fi

1582 1583
# Ugh, recent faad2 versions have renamed all functions and #define the
# old names in faad.h.  Generic tests won't work.
1584
if enabled libfaad; then
1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596
    save_flags
    temp_extralibs -lfaad
    check_ld <<EOF && add_extralibs -lfaad || die "ERROR: libfaad not found"
#include <faad.h>
int main(){
    faacDecOpen();
    return 0;
}
EOF
    restore_flags
fi

1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612
# Ugh, avisynth uses WINAPI calls. Generic tests won't work.
if enabled avisynth; then
    save_flags
    temp_extralibs -lvfw32
    check_ld <<EOF && add_extralibs -lvfw32 || die "ERROR: vfw32 not found"
#include <windows.h>
#include <vfw.h>
int main(){
    AVIFileInit();
    return 0;
}
EOF
    restore_flags
fi


1613
# test for lrintf in math.h
M
Måns Rullgård 已提交
1614
check_exec <<EOF && lrintf=yes || lrintf=no
1615 1616 1617 1618 1619
#define _ISOC9X_SOURCE  1
#include <math.h>
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
EOF

F
Falk Hüffner 已提交
1620 1621
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1622
    check_cc <<EOF && _restrict=$restrict_keyword && break
1623 1624
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
1625 1626
done

1627 1628
# dlopen/dlfcn.h probing

1629
check_header dlfcn.h
1630

1631 1632
if check_func dlopen; then
    ldl=
1633 1634
elif check_func dlopen -ldl; then
    ldl=-ldl
1635 1636
fi

M
Måns Rullgård 已提交
1637 1638
if test "$vhook" = "default"; then
    vhook="$dlopen"
1639 1640
fi

1641
if enabled_any vhook liba52bin libfaadbin; then
1642
    add_extralibs $ldl
M
Michael Niedermayer 已提交
1643 1644
fi

1645 1646 1647 1648 1649 1650 1651 1652
if test "$targetos" = "CYGWIN" -a "$lstatic" = "yes" ; then
    vhook="no"
    echo
    echo "At the moment vhooks don't work on Cygwin static builds."
    echo "Patches welcome."
    echo
fi

1653 1654 1655 1656
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
M
Michael Niedermayer 已提交
1657

1658 1659 1660 1661
if enabled audio_beos; then
    add_extralibs "-lmedia -lbe"
fi

1662
##########################################
D
Diego Biurrun 已提交
1663
# imlib check
1664

1665 1666
temp_extralibs -lImlib2
check_ld <<EOF && imlib2=yes || imlib2=no
1667 1668 1669 1670
#include <X11/Xlib.h>
#include <Imlib2.h>
int main( void ) { return (int) imlib_load_font("foo"); }
EOF
1671
restore_flags
1672

1673
##########################################
D
Diego Biurrun 已提交
1674
# FreeType check
1675

1676
freetype2=no
1677
if test "x$targetos" != "xBeOS"; then
1678
  if (freetype-config --version) >/dev/null 2>&1 ; then
1679 1680 1681 1682 1683 1684 1685
      temp_cflags `freetype-config --cflags`
      temp_extralibs `freetype-config --libs`
      check_ld <<EOF && freetype2=yes
#include <ft2build.h>
int main( void ) { return (int) FT_Init_FreeType(0); }
EOF
      restore_flags
1686
  fi
1687 1688
fi

1689
##########################################
D
Diego Biurrun 已提交
1690
# SDL check
1691 1692 1693

sdl_too_old=no
sdl=no
1694 1695
SDL_CONFIG="${cross_prefix}sdl-config"
if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
1696 1697 1698 1699 1700 1701 1702 1703 1704
    temp_cflags `"${SDL_CONFIG}" --cflags`
    temp_extralibs `"${SDL_CONFIG}" --libs`
    check_ld <<EOF
#include <SDL.h>
#undef main /* We don't want SDL to override our main() */
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF
    if test $? = 0; then
        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
1705
        if test "$_sdlversion" -lt 121 ; then
1706 1707 1708
            sdl_too_old=yes
        else
            sdl=yes
1709 1710 1711 1712 1713 1714 1715 1716
            check_cc <<EOF && sdl_video_size=yes || sdl_video_size=no
#include <SDL.h>
int main(void){
    const SDL_VideoInfo *vi = SDL_GetVideoInfo();
    int w = vi->current_w;
    return 0;
}
EOF
1717 1718
        fi
    fi
1719
    restore_flags
M
Michael Niedermayer 已提交
1720
fi
1721

1722 1723
enabled sdl || ffplay=no

1724
##########################################
D
Diego Biurrun 已提交
1725
# texi2html check
1726 1727

texi2html=no
1728
if (texi2html -version) >/dev/null 2>&1; then
1729 1730 1731
texi2html=yes
fi

1732
##########################################
D
Diego Biurrun 已提交
1733
# IPv6 check
1734

1735
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1736 1737 1738 1739 1740 1741 1742 1743 1744
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
int main( void ) {
  struct sockaddr_storage saddr;
  struct ipv6_mreq mreq6;
  getaddrinfo(0,0,0,0);
  getnameinfo(0,0,0,0,0,0,0);
1745
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1746 1747 1748
}
EOF

1749
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1750
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1751
#include <sys/time.h>
1752 1753
#include <asm/types.h>
#include <linux/videodev2.h>
1754
int dummy = V4L2_PIX_FMT_YUV420;
1755
struct v4l2_buffer dummy1;
1756 1757
EOF

1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
if enabled bktr; then
    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
fi

1772
# Deal with the x11 frame grabber
1773
enabled x11grab                         &&
1774 1775 1776 1777 1778 1779 1780 1781 1782
enabled gpl                             &&
enabled x11_grab_device_demuxer         &&
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
check_func XOpenDisplay -lX11           &&
check_func XShmCreateImage -lX11 -lXext &&
add_extralibs -lX11 -lXext              ||
disable x11_grab_device_demuxer

1783 1784 1785 1786
enabled debug && add_cflags -g

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
1787 1788
check_cflags -Wall
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
1789 1790 1791
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
1792
check_cflags -Wno-pointer-sign
1793
enabled extrawarnings && check_cflags -Winline
1794

1795
# add some linker flags
1796
check_ldflags $LDLATEFLAGS
F
Fabrice Bellard 已提交
1797

1798 1799
# not all compilers support -Os
test "$optimize" = "small" && check_cflags -Os
1800

1801
if enabled optimize; then
1802
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1803 1804
        add_cflags  "-O5"
        add_ldflags "-O5"
1805
    else
1806
        add_cflags "-O3"
1807
    fi
1808 1809
fi

1810
# PIC flags for shared library objects where they are needed
1811
if enabled lshared; then
M
Måns Rullgård 已提交
1812 1813
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
1814
        case "$arch" in
1815 1816
            x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
        esac
1817 1818 1819
    fi
fi

1820
if enabled gprof; then
1821 1822
    add_cflags  "-p"
    add_ldflags "-p"
1823 1824
fi

1825
VHOOKCFLAGS="-fPIC $CFLAGS"
1826
enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
1827

1828 1829 1830 1831 1832 1833
# find if .align arg is power-of-two or not
if test $asmalign_pot = "unknown"; then
    asmalign_pot="no"
    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
fi

D
Diego Biurrun 已提交
1834 1835 1836 1837
echo "install prefix            $PREFIX"
echo "source path               $source_path"
echo "C compiler                $cc"
echo "make                      $make"
D
Diego Biurrun 已提交
1838
echo ".align is power-of-two    $asmalign_pot"
D
Diego Biurrun 已提交
1839
echo "ARCH                      $arch ($cpu)"
1840
if test "$BUILDSUF" != ""; then
D
Diego Biurrun 已提交
1841
    echo "build suffix              $BUILDSUF"
1842
fi
D
Diego Biurrun 已提交
1843
echo "big-endian                $bigendian"
1844
if test $arch = "x86_32" -o $arch = "x86_64"; then
D
Diego Biurrun 已提交
1845 1846 1847
    echo "MMX enabled               $mmx"
    echo "CMOV enabled              $cmov"
    echo "CMOV is fast              $cmov_is_fast"
F
Fabrice Bellard 已提交
1848
fi
1849
if test $arch = "armv4l"; then
D
Diego Biurrun 已提交
1850
    echo "ARMv5TE enabled           $armv5te"
1851
    echo "ARMv6 enabled             $armv6"
D
Diego Biurrun 已提交
1852
    echo "IWMMXT enabled            $iwmmxt"
1853
fi
1854
if test $arch = "mips"; then
D
Diego Biurrun 已提交
1855
    echo "MMI enabled               $mmi"
F
Fabrice Bellard 已提交
1856
fi
1857
if test $arch = "powerpc"; then
D
Diego Biurrun 已提交
1858 1859
    echo "AltiVec enabled           $altivec"
    echo "dcbzl available           $dcbzl"
F
Fabrice Bellard 已提交
1860
fi
D
Diego Biurrun 已提交
1861 1862 1863 1864 1865 1866
echo "gprof enabled             $gprof"
echo "debug symbols             $debug"
echo "strip symbols             $dostrip"
echo "optimize                  $optimize"
echo "static                    $lstatic"
echo "shared                    $lshared"
D
Diego Biurrun 已提交
1867 1868
echo "postprocessing support    $pp"
echo "software scaler enabled   $swscaler"
D
Diego Biurrun 已提交
1869
echo "video hooking             $vhook"
1870
if enabled vhook; then
D
Diego Biurrun 已提交
1871 1872
    echo "Imlib2 support            $imlib2"
    echo "FreeType support          $freetype2"
1873
fi
D
Diego Biurrun 已提交
1874
echo "network support           $network"
1875
if enabled network; then
D
Diego Biurrun 已提交
1876 1877
    echo "IPv6 support              $ipv6"
fi
1878
echo "threading support         $thread_type"
D
Diego Biurrun 已提交
1879
echo "SDL support               $sdl"
1880
if enabled sdl_too_old; then
D
Diego Biurrun 已提交
1881 1882 1883 1884
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
fi
echo "Sun medialib support      $mlib"
echo "AVISynth enabled          $avisynth"
1885 1886
echo "liba52 support            $liba52"
echo "liba52 dlopened           $liba52bin"
1887
echo "libdts support            $libdts"
1888 1889 1890
echo "libfaac enabled           $libfaac"
echo "libfaad enabled           $libfaad"
echo "faadbin enabled           $libfaadbin"
D
Diego Biurrun 已提交
1891
echo "libgsm enabled            $libgsm"
1892
echo "libmp3lame enabled        $libmp3lame"
D
Diego Biurrun 已提交
1893 1894
echo "libnut enabled            $libnut"
echo "libogg enabled            $libogg"
D
Diego Biurrun 已提交
1895
echo "libtheora enabled         $libtheora"
D
Diego Biurrun 已提交
1896 1897
echo "libvorbis enabled         $libvorbis"
echo "x264 enabled              $x264"
D
Diego Biurrun 已提交
1898
echo "XviD enabled              $xvid"
D
Diego Biurrun 已提交
1899
echo "zlib enabled              $zlib"
D
Diego Biurrun 已提交
1900 1901 1902 1903
echo "AMR-NB float support      $amr_nb"
echo "AMR-NB fixed support      $amr_nb_fixed"
echo "AMR-WB float support      $amr_wb"
echo "AMR-WB IF2 support        $amr_if2"
1904
if test "$gpl" = "no" ; then
M
Måns Rullgård 已提交
1905
    echo "License: LGPL"
1906
else
M
Måns Rullgård 已提交
1907
    echo "License: GPL"
1908
fi
F
Fabrice Bellard 已提交
1909

D
Diego Biurrun 已提交
1910
echo "Creating config.mak and config.h..."
F
Fabrice Bellard 已提交
1911

D
Diego Biurrun 已提交
1912 1913
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1914
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
F
Fabrice Bellard 已提交
1915

1916 1917
echo "PREFIX=$PREFIX" >> config.mak
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1918
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1919
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
D
Diego Biurrun 已提交
1920
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1921 1922
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1923
echo "MAKE=$make" >> config.mak
1924 1925
echo "CC=$cc" >> config.mak
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
1926
echo "RANLIB=$ranlib" >> config.mak
1927
if enabled dostrip; then
M
Måns Rullgård 已提交
1928
    echo "STRIP=$strip" >> config.mak
1929
else
M
Måns Rullgård 已提交
1930
    echo "STRIP=echo ignoring strip" >> config.mak
1931
fi
1932

N
Nick Kurshev 已提交
1933
echo "OPTFLAGS=$CFLAGS" >> config.mak
1934
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1935
echo "LDFLAGS=$LDFLAGS" >> config.mak
1936
echo "LDCONFIG=$LDCONFIG" >> config.mak
1937
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1938
echo "SHFLAGS=$SHFLAGS" >> config.mak
1939
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1940
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1941
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1942
echo "BUILD_STATIC=$lstatic" >> config.mak
1943
echo "BUILDSUF=$BUILDSUF" >> config.mak
1944
echo "LIBPREF=$LIBPREF" >> config.mak
1945
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1946
if enabled lstatic; then
1947
  echo "LIB=$LIB" >> config.mak
1948 1949
else # Some Make complain if this variable does not exist.
  echo "LIB=" >> config.mak
1950
fi
1951
echo "SLIBPREF=$SLIBPREF" >> config.mak
1952 1953
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1954
echo "TARGET_OS=$targetos" >> config.mak
M
Måns Rullgård 已提交
1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969

ucarch=`toupper $arch`
echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
echo "#define ARCH_${ucarch} 1" >> $TMPH

# special cases
case "$arch" in
    x86_32|x86_64)
        echo "TARGET_ARCH_X86=yes" >> config.mak
        echo "#define ARCH_X86 1" >> $TMPH
        ;;
    powerpc)
        if test "$POWERPCMODE" = "64bits"; then
            echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
        fi
1970
        if enabled powerpc_perf; then
M
Måns Rullgård 已提交
1971 1972 1973 1974 1975 1976 1977 1978 1979
            echo "#define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
        fi
        ;;
    sparc64)
        echo "TARGET_ARCH_SPARC=yes" >> config.mak
        echo "#define ARCH_SPARC 1" >> $TMPH
        ;;
esac

1980
if enabled bigendian; then
1981 1982
  echo "WORDS_BIGENDIAN=yes" >> config.mak
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1983
fi
1984
if enabled mmx; then
1985
  echo "TARGET_MMX=yes" >> config.mak
1986
  echo "#define HAVE_MMX 1" >> $TMPH
M
Michael Niedermayer 已提交
1987
  echo "#define __CPU__ 586" >> $TMPH
F
Fabrice Bellard 已提交
1988
fi
1989
if enabled cmov; then
1990 1991 1992
  echo "TARGET_CMOV=yes" >> config.mak
  echo "#define HAVE_CMOV 1" >> $TMPH
fi
1993
if enabled cmov_is_fast; then
1994 1995 1996
  echo "TARGET_CMOV_IS_FAST=yes" >> config.mak
  echo "#define CMOV_IS_FAST 1" >> $TMPH
fi
1997
if enabled armv5te; then
1998 1999 2000
  echo "TARGET_ARMV5TE=yes" >> config.mak
  echo "#define HAVE_ARMV5TE 1" >> $TMPH
fi
2001
if enabled iwmmxt; then
2002 2003 2004
  echo "TARGET_IWMMXT=yes" >> config.mak
  echo "#define HAVE_IWMMXT 1" >> $TMPH
fi
2005
if enabled mmi; then
2006 2007 2008
  echo "TARGET_MMI=yes" >> config.mak
  echo "#define HAVE_MMI 1" >> $TMPH
fi
2009

2010
if enabled altivec; then
2011 2012
  echo "TARGET_ALTIVEC=yes" >> config.mak
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
2013
fi
2014

2015
if enabled sdl; then
2016 2017
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
2018
fi
2019
if enabled texi2html; then
2020 2021
  echo "BUILD_DOC=yes" >> config.mak
fi
L
Luca Barbato 已提交
2022

L
Luca Abeni 已提交
2023
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
2024
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
L
Luca Barbato 已提交
2025 2026 2027 2028 2029 2030
lavc_version=`grep '#define LIBAVCODEC_VERSION ' "$source_path/libavcodec/avcodec.h" | sed 's/[^0-9\.]//g'`
lavf_version=`grep '#define LIBAVFORMAT_VERSION ' "$source_path/libavformat/avformat.h" | sed 's/[^0-9\.]//g'`
lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h" | sed 's/[^0-9\.]//g'`



2031
if enabled lshared; then
N
Nick Kurshev 已提交
2032
  echo "BUILD_SHARED=yes" >> config.mak
2033
  echo "PIC=-fPIC -DPIC" >> config.mak
2034 2035
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
  echo "SPPVERSION=$pp_version" >> config.mak
2036
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
2037
  echo "LAVCVERSION=$lavc_version" >> config.mak
2038
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
L
Luca Barbato 已提交
2039
  echo "LAVFVERSION=$lavf_version" >> config.mak
2040
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
L
Luca Barbato 已提交
2041
  echo "LAVUVERSION=$lavu_version" >> config.mak
L
Luca Abeni 已提交
2042 2043
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
  echo "SWSVERSION=$sws_version" >> config.mak
2044
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
2045 2046
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
2047
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
2048
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
N
Nick Kurshev 已提交
2049
fi
2050
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
2051
echo "EXTRALIBS=$extralibs" >> config.mak
2052

2053 2054 2055 2056
enabled_any $ENCODER_LIST && enable encoders
enabled_any $DECODER_LIST && enable decoders
enabled_any $MUXER_LIST   && enable muxers
enabled_any $DEMUXER_LIST && enable demuxers
2057

2058 2059
enabled_any pthreads beosthreads os2threads w32threads && enable threads

2060 2061 2062
check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
    $DEMUXER_LIST $MUXER_LIST

2063 2064
print_config HAVE_   $TMPH config.mak $HAVE_LIST
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
2065

2066
if test "$targetos" = "Darwin"; then
2067 2068 2069
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
fi

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

2072 2073
if test "$optimize" = "small"; then
  echo "#define always_inline"  >> $TMPH
2074
  echo "#define CONFIG_SMALL 1" >> $TMPH
2075 2076
fi

2077 2078 2079
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2080

2081
if enabled amr_if2; then
2082 2083 2084
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi

2085
# Apparently it's not possible to portably echo a backslash.
2086
if enabled asmalign_pot; then
2087
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2088
else
2089
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2090 2091
fi

Z
Zdenek Kabelac 已提交
2092

2093
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2094
    ucname="`toupper $codec`"
2095 2096 2097 2098 2099 2100 2101 2102 2103
    config_name="CONFIG_$ucname"
    enabled_name="ENABLE_$ucname"
    if enabled $codec; then
        echo "#define $config_name 1" >> $TMPH
        echo "#define $enabled_name 1" >> $TMPH
        echo "$config_name=yes" >> config.mak
    else
        echo "#define $enabled_name 0" >> $TMPH
    fi
2104 2105
done

2106
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
M
Måns Rullgård 已提交
2107
if ! cmp -s $TMPH config.h; then
2108 2109 2110 2111
        mv -f $TMPH config.h
else
        echo "config.h is unchanged"
fi
N
Nick Kurshev 已提交
2112

2113
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2114

2115
# build tree in object directory if source path is different from current one
2116
if enabled source_path_used; then
2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128
    DIRS="\
         doc \
         libavformat \
         libavcodec \
         libavcodec/alpha \
         libavcodec/armv4l \
         libavcodec/bfin \
         libavcodec/i386 \
         libavcodec/sparc \
         libavcodec/mlib \
         libavcodec/ppc \
         libavcodec/liba52 \
2129 2130 2131
         libavcodec/amr \
         libavcodec/amr_float \
         libavcodec/amrwb_float \
2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157
         libpostproc \
         libavutil \
         libswscale \
         tests \
         vhook \
         "
    FILES="\
          Makefile \
          common.mak \
          libavformat/Makefile \
          libavcodec/Makefile \
          libpostproc/Makefile \
          libavutil/Makefile \
          libswscale/Makefile \
          tests/Makefile \
          vhook/Makefile \
          doc/Makefile \
          doc/texi2pod.pl \
          "
    for dir in $DIRS ; do
            mkdir -p $dir
    done
    for f in $FILES ; do
        ln -sf "$source_path/$f" $f
    done
fi
2158 2159


2160
# build pkg-config files
2161
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2162

2163 2164 2165 2166 2167 2168 2169 2170
pkgconfig_generate(){
name=$1
comment=$2
version=$3
libs=$4
requires=$5
include=$6
cat <<EOF >$name.pc
2171
prefix=$PREFIX
2172
exec_prefix=\${prefix}
2173
libdir=\${exec_prefix}/lib
2174
includedir=\${prefix}/include
2175

2176 2177 2178 2179
Name: $name
Description: $comment
Version: $version
Requires: $requires
2180
Conflicts:
2181 2182
Libs: -L\${libdir} $libs
Cflags: -I\${includedir} -I\${includedir}/$include
2183
EOF
2184
}
2185

2186 2187
pkgconfig_generate_uninstalled(){
name=$1
2188
shortname=${name#lib}
2189 2190 2191 2192 2193
comment=$2
version=$3
libs=$4
requires=$5
cat <<EOF >$name-uninstalled.pc
2194 2195
prefix=
exec_prefix=
2196 2197
libdir=\${pcfiledir}/$name
includedir=\${pcfiledir}/$name
2198

2199 2200 2201 2202
Name: $name
Description: $comment
Version: $version
Requires: $requires
2203
Conflicts:
2204
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2205 2206
Cflags: -I\${includedir}
EOF
2207
}
2208

M
Måns Rullgård 已提交
2209
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2210
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2211

2212 2213
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2214

2215 2216
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2217

2218
if enabled pp; then
2219 2220 2221
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
fi
L
Luca Abeni 已提交
2222

2223
if test "$swscaler" != "no"; then
2224 2225
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2226
else
2227 2228
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2229 2230
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2231
fi