configure 56.7 KB
Newer Older
F
Fabrice Bellard 已提交
1
#!/bin/sh
2
#
F
Fabrice Bellard 已提交
3
# ffmpeg configure script (c) 2000, 2001, 2002 Fabrice Bellard
4
#
5

6
# make sure we are running under a compatible shell
M
Måns Rullgård 已提交
7 8
unset foo
(: ${foo%%bar}) 2>/dev/null && ! (: ${foo?}) 2>/dev/null
9 10 11 12 13 14 15 16 17 18 19 20
if test "$?" != 0; then
    if test "x$FFMPEG_CONFIGURE_EXEC" = x; then
        FFMPEG_CONFIGURE_EXEC=1
        export FFMPEG_CONFIGURE_EXEC
        exec bash "$0" "$@"
        exec ksh "$0" "$@"
        exec /usr/xpg4/bin/sh "$0" "$@"
    fi
    echo "No compatible shell script interpreter found."
    exit 1
fi

21 22 23 24 25 26
show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
27
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
28
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
29
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
30
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
31 32 33
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
  echo "  --mandir=DIR             install man page in DIR [PREFIX/man]"
  echo "  --enable-mp3lame         enable MP3 encoding via libmp3lame [default=no]"
34
  echo "  --enable-libnut          enable NUT support via libnut [default=no]"
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
  echo "  --enable-libogg          enable Ogg support via libogg [default=no]"
  echo "  --enable-vorbis          enable Vorbis support via libvorbis [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-faac            enable FAAC support via libfaac [default=no]"
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
  echo "  --enable-xvid            enable XviD support via xvidcore [default=no]"
  echo "  --enable-x264            enable H.264 encoding via x264 [default=no]"
  echo "  --enable-mingw32         enable MinGW native/cross Windows compile"
  echo "  --enable-mingwce         enable MinGW native/cross WinCE compile"
  echo "  --enable-a52             enable GPLed A52 support [default=no]"
  echo "  --enable-a52bin          open liba52.so.0 at runtime [default=no]"
  echo "  --enable-dts             enable GPLed DTS support [default=no]"
  echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
  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]"
  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"
  echo "  --enable-sunmlib         use Sun medialib [default=no]"
  echo "  --enable-pthreads        use pthreads [default=no]"
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
  echo "                           and libraw1394 [default=no]"
L
Luca Abeni 已提交
61
  echo "  --enable-swscaler        software scaler support [default=no]"
62
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
63 64 65 66 67 68
  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]"
69
  echo "  --cross-compile          assume a cross-compiler is used"
70 71 72 73 74 75
  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 []"
76
  echo "  --arch=ARCH              select architecture  [$arch]"
77 78
  echo "  --cpu=CPU                selects the minimum cpu required (affects
                                   instruction selection, may crash on older CPUs)"
79 80 81
  echo "  --powerpc-perf-enable    enable performance report on PPC"
  echo "                           (requires enabling PMC)"
  echo "  --disable-mmx            disable MMX usage"
82
  echo "  --disable-armv5te        disable armv5te usage"
83 84 85 86 87 88 89 90 91
  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]"
92
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
93 94 95 96 97
  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"
98
  echo "  --enable-extra-warnings  enable more compiler warnings"
99 100 101
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
  echo "                           MPEG audio decoding [default=no]"
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
102
  echo "  --disable-ffmpeg         disable ffmpeg build"
103 104 105 106 107 108 109 110 111 112 113
  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"
114 115
  echo "  --disable-muxer=NAME     disables muxer NAME"
  echo "  --enable-muxer=NAME      enables muxer NAME"
116
  echo "  --disable-muxers         disables all muxers"
117 118
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
119
  echo "  --disable-demuxers       disables all demuxers"
120 121 122
  echo "  --enable-parser=NAME     enables parser NAME"
  echo "  --disable-parser=NAME    disables parser NAME"
  echo "  --disable-parsers        disables all parsers"
123 124 125 126
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
  exit 1
}
127

128 129 130 131
log(){
    echo "$@" >>$logfile
}

132
log_file(){
M
Måns Rullgård 已提交
133 134 135 136 137
    log BEGIN $1
    cat -n $1 >>$logfile
    log END $1
}

138
echolog(){
M
Måns Rullgård 已提交
139
    log "$@"
140
    echo "$@"
141 142 143 144 145 146 147 148 149
}

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
150
    if enabled logging; then
151 152 153 154 155 156 157 158 159 160
        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
161 162 163 164
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
    exit 1
}

165
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
166 167 168 169
toupper(){
    echo "$@" | tr '[a-z]' '[A-Z]'
}

170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

186
enabled(){
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
    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
}

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
214 215 216 217 218 219
}

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

220
save_flags(){
221
    flags_saved && return
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
    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 $*"
}

251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269
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 "$@"
}

270
check_cmd(){
M
Måns Rullgård 已提交
271
    log "$@"
272
    "$@" >>$logfile 2>&1
273 274
}

275
check_cc(){
276 277
    log check_cc "$@"
    cat >$TMPC
278
    log_file $TMPC
279
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
280 281 282 283
}

check_cpp(){
    log check_cpp "$@"
284
    cat >$TMPC
285
    log_file $TMPC
286
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
287 288 289
}

check_ld(){
290
    log check_ld "$@"
291
    check_cc || return
292
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
293 294 295
}

check_cflags(){
296 297
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
298 299 300 301 302
int x;
EOF
}

check_ldflags(){
303 304 305 306 307
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
int main(){
    return 0;
}
308 309 310 311
EOF
}

check_header(){
312
    log check_header "$@"
313 314
    header=$1
    shift
315
    check_cpp "$@" <<EOF
316 317 318 319 320 321
#include <$header>
int x;
EOF
}

check_func(){
322
    log check_func "$@"
323 324 325 326 327 328 329 330 331 332
    func=$1
    shift
    check_ld "$@" <<EOF
extern int $func();
int main(){
    $func();
}
EOF
}

333 334 335 336 337 338 339 340 341 342 343 344
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
}

345
check_exec(){
346
    check_ld "$@" && { test "$cross_compile" = yes || $TMPE >>$logfile 2>&1; }
347 348 349 350 351 352 353 354
}

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

357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405
CONFIG_LIST='
    encoders
    decoders
    parsers
    muxers
    demuxers
    a52
    a52bin
    amr
    amr_nb
    amr_nb_fixed
    amr_wb
    audio_beos
    audio_oss
    avisynth
    beos_netserver
    bktr
    dc1394
    dts
    dv1394
    faac
    faad
    faadbin
    ffmpeg
    ffplay
    ffserver
    gpl
    ipv6
    libgsm
    libnut
    libogg
    libvorbis
    memalign_hack
    mp3lame
    mpegaudio_hp
    network
    pp
    protocols
    swscaler
    vhook
    video4linux
    video4linux2
    x264
    xvid
    zlib
'

HAVE_LIST='
    altivec_h
406
    beosthreads
407 408 409 410 411 412 413
    byteswap_h
    dcbzl
    dlfcn
    dlopen
    freetype2
    gprof
    imlib2
M
Måns Rullgård 已提交
414
    inet_aton
415 416 417 418 419
    localtime_r
    lrintf
    malloc_h
    memalign
    mlib
420 421
    os2threads
    pthreads
422 423
    sdl
    sdl_video_size
424 425
    threads
    w32threads
426
'
427

428
# set temporary file name
Z
Zdenek Kabelac 已提交
429
if test ! -z "$TMPDIR" ; then
430
    TMPDIR1="${TMPDIR}"
Z
Zdenek Kabelac 已提交
431
elif test ! -z "$TEMPDIR" ; then
432
    TMPDIR1="${TEMPDIR}"
N
Nick Kurshev 已提交
433
else
434
    TMPDIR1="/tmp"
N
Nick Kurshev 已提交
435 436
fi

437 438
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
439
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
440 441 442
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"

F
Fabrice Bellard 已提交
443
# default parameters
444
logging="yes"
445
logfile="config.err"
446 447
PREFIX="/usr/local"
libdir='${PREFIX}/lib'
448
shlibdir="$libdir"
449 450 451
incdir='${PREFIX}/include/ffmpeg'
mandir='${PREFIX}/man'
bindir='${PREFIX}/bin'
452
cross_prefix=""
453
cross_compile="no"
F
Fabrice Bellard 已提交
454 455
cc="gcc"
ar="ar"
M
Michael Niedermayer 已提交
456
ranlib="ranlib"
457
make="make"
458
strip="strip"
459
arch=`uname -m`
460
cpu="generic"
461
powerpc_perf="no"
462
mmx="default"
463
cmov="no"
464
cmov_is_fast="no"
465
armv5te="default"
466
iwmmxt="default"
467
altivec="default"
468
dcbzl="no"
469
mmi="default"
470
case "$arch" in
471
  i386|i486|i586|i686|i86pc|BePC)
472
    arch="x86_32"
F
Fabrice Bellard 已提交
473
  ;;
474
  x86_64|amd64)
D
typo  
Diego Biurrun 已提交
475
    arch="x86_32"
476
    canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
477 478
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
479
        arch="x86_64"
480
      fi
481 482
    fi
  ;;
D
Diego Biurrun 已提交
483 484
  # armv4l is a subset of armv[567]*l
  arm|armv[4567]*l)
485
    arch="armv4l"
486
  ;;
487
  alpha)
488
    arch="alpha"
489
  ;;
490
  "Power Macintosh"|ppc|ppc64|powerpc)
491
    arch="powerpc"
492
  ;;
493
  mips|mipsel|IP*)
494
    arch="mips"
495
  ;;
496
  sun4u|sparc64)
497
    arch="sparc64"
498
  ;;
499
  sparc)
500
    arch="sparc"
501
  ;;
A
Alex Beregszaszi 已提交
502
  sh4)
503
    arch="sh4"
A
Alex Beregszaszi 已提交
504
  ;;
505
  parisc|parisc64)
506
    arch="parisc"
507 508
  ;;
  s390|s390x)
509
    arch="s390"
510 511
  ;;
  m68k)
512
    arch="m68k"
513 514
  ;;
  ia64)
515
    arch="ia64"
516
  ;;
M
Michael Benjamin 已提交
517
  bfin)
518
    arch="bfin"
M
Michael Benjamin 已提交
519
  ;;
F
Fabrice Bellard 已提交
520
  *)
521
    arch="unknown"
F
Fabrice Bellard 已提交
522 523 524
  ;;
esac
gprof="no"
525 526
video4linux="yes"
video4linux2="yes"
527
bktr="no"
F
Fabrice Bellard 已提交
528
audio_oss="yes"
529
audio_beos="no"
530
dv1394="yes"
531
dc1394="no"
F
Fabrice Bellard 已提交
532
network="yes"
533
ipv6="yes"
534
zlib="yes"
535
libgsm="no"
536
mp3lame="no"
537
libnut="no"
538
libogg="no"
539
libvorbis="no"
540 541
faad="no"
faadbin="no"
542
faac="no"
543
xvid="no"
544
x264="no"
545
a52="no"
Z
Zdenek Kabelac 已提交
546
a52bin="no"
547
dts="no"
548
pp="no"
549
mingw32="no"
G
Gildas Bazin 已提交
550
mingwce="no"
551
os2="no"
552
lstatic="yes"
553
lshared="no"
554 555
optimize="yes"
debug="yes"
556
extrawarnings="no"
557
dostrip="yes"
558
installstrip="-s"
559
extralibs="-lm"
560
bigendian="no"
561
vhook="default"
562
avisynth="no"
563 564
dlfcn="no"
dlopen="no"
565
mpegaudio_hp="yes"
566
SHFLAGS='-shared -Wl,-soname,$@'
567
VHOOKSHFLAGS='$(SHFLAGS)'
568
beos_netserver="no"
569
protocols="yes"
570
ffmpeg="yes"
571
ffserver="yes"
572
ffplay="yes"
573
LIBOBJFLAGS=""
574
FFLDFLAGS=-Wl,--warn-common
575
LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
576
FFSERVERLDFLAGS=-Wl,-E
577
LDCONFIG="ldconfig"
578 579
LIBPREF="lib"
LIBSUF=".a"
580
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
581 582
SLIBPREF="lib"
SLIBSUF=".so"
583
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
584 585
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
F
Fabrice Bellard 已提交
586
EXESUF=""
587
BUILDSUF=""
588
amr_nb="no"
589
amr_wb="no"
Z
Zdenek Kabelac 已提交
590
amr_nb_fixed="no"
591
amr_if2="no"
592
mlib="no"
593
pthreads="no"
L
Luca Abeni 已提交
594
swscaler="no"
595
gpl="no"
596
memalign_hack="no"
597
asmalign_pot="unknown"
598
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
599 600 601 602 603

# OS specific
targetos=`uname -s`
case $targetos in
BeOS)
604
PREFIX="/boot/home/config"
605
# helps building libavcodec
606
add_cflags "-DPIC -fomit-frame-pointer"
607
# 3 gcc releases known for BeOS, each with ugly bugs
608
gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
609 610 611 612 613
case "$gcc_version" in
2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
mmx="no"
;;
*20010315*) echo "BeBits gcc"
614
add_cflags "-fno-expensive-optimizations"
615 616
;;
esac
617
SHFLAGS=-nostart
D
Diego Biurrun 已提交
618
# disable Linux things
619
audio_oss="no"
620 621
video4linux="no"
video4linux2="no"
622
dv1394="no"
D
Diego Biurrun 已提交
623
# enable BeOS things
624
audio_beos="yes"
625
beosthreads="yes"
626 627 628 629 630
# 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
631
beos_netserver="yes"
632
extralibs="-lnet"
633
fi ;;
634
SunOS)
635 636
video4linux="no"
video4linux2="no"
637
audio_oss="no"
638
dv1394="no"
639
make="gmake"
640
FFLDFLAGS=""
641
FFSERVERLDFLAGS=""
642
SHFLAGS="-shared -Wl,-h,\$@"
643
add_extralibs "-lsocket -lnsl"
644
;;
645
NetBSD)
646 647
video4linux="no"
video4linux2="no"
648
bktr="yes"
649 650 651
audio_oss="yes"
dv1394="no"
make="gmake"
652
add_extralibs "-lossaudio"
653
;;
654
OpenBSD)
655 656
video4linux="no"
video4linux2="no"
657
bktr="yes"
658 659 660
audio_oss="yes"
dv1394="no"
make="gmake"
661
LIBOBJFLAGS="\$(PIC)"
662
LDCONFIG="ldconfig -m \$(shlibdir)"
663
add_extralibs "-lossaudio"
664
;;
665
FreeBSD)
666 667
video4linux="no"
video4linux2="no"
668
bktr="yes"
669
audio_oss="yes"
670
dv1394="no"
671
make="gmake"
672
add_cflags "-pthread"
673
;;
674
GNU/kFreeBSD)
675 676
video4linux="no"
video4linux2="no"
677 678 679
bktr="yes"
audio_oss="yes"
dv1394="no"
680
add_cflags "-pthread"
681
;;
682
BSD/OS)
683 684
video4linux="no"
video4linux2="no"
685
bktr="yes"
F
Fabrice Bellard 已提交
686
audio_oss="yes"
687
dv1394="no"
688 689
extralibs="-lpoll -lgnugetopt -lm"
make="gmake"
690 691
strip="strip -d"
installstrip=""
692
;;
693
Darwin)
694
cc="cc"
695 696
video4linux="no"
video4linux2="no"
697
audio_oss="no"
698
dv1394="no"
699
SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION)"
700
VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
701
extralibs=""
702
strip="strip -x"
703
installstrip=""
704
FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
705
SLIBSUF=".dylib"
706 707
SLIBNAME_WITH_FULLVERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
708
FFSERVERLDFLAGS=-Wl,-bind_at_load
709
LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
710
;;
711
MINGW32*)
F
Fabrice Bellard 已提交
712
# Note: the rest of the mingw32 config is done afterwards as mingw32
D
Diego Biurrun 已提交
713
# can be forced on the command line for Linux cross compilation.
714 715
mingw32="yes"
;;
716
CYGWIN*)
717
targetos=CYGWIN
718
shlibdir='${PREFIX}/bin'
719 720
video4linux="no"
video4linux2="no"
721
audio_oss="yes"
722
dv1394="no"
D
Diego Biurrun 已提交
723
VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
724
VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
725
extralibs=""
726
EXESUF=".exe"
727 728 729 730 731
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'
732
;;
733
Linux)
734
LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
735
;;
736
IRIX*)
737
targetos=IRIX
738
ranlib="echo ignoring ranlib"
739 740
video4linux="no"
video4linux2="no"
741 742 743
audio_oss="no"
make="gmake"
;;
744 745
OS/2)
TMPE=$TMPE".exe"
746
ar="emxomfar -p128"
747 748
ranlib="echo ignoring ranlib"
strip="echo ignoring strip"
749
add_cflags "-Zomf"
750
FFLDFLAGS="-Zomf -Zstack 16384 -s"
751
SHFLAGS="-Zdll -Zomf"
752
FFSERVERLDFLAGS=""
753 754 755 756
LIBPREF=""
LIBSUF=".lib"
SLIBPREF=""
SLIBSUF=".dll"
F
Fabrice Bellard 已提交
757
EXESUF=".exe"
758
extralibs=""
759
pkg_requires=""
760 761
video4linux="no"
video4linux2="no"
762
audio_oss="no"
763
dv1394="no"
764
ffserver="no"
765
vhook="no"
766
os2="yes"
767
os2threads="yes"
768
;;
769 770 771
*)
targetos="${targetos}-UNKNOWN"
;;
772
esac
F
Fabrice Bellard 已提交
773

774
# find source path
775
source_path="`dirname \"$0\"`"
776 777
source_path_used="yes"
if test -z "$source_path" -o "$source_path" = "." ; then
778
    source_path="`pwd`"
779
    source_path_used="no"
780 781
else
    source_path="`cd \"$source_path\"; pwd`"
782 783
    echo "$source_path" | grep -q '[[:blank:]]' &&
      die "Out of tree builds are impossible with whitespace in source path."
F
Fabrice Bellard 已提交
784 785
fi

786 787 788 789
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    show_help
fi

790 791 792 793 794
FFMPEG_CONFIGURATION=" "
for opt do
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
done

795 796 797 798 799
ENCODER_LIST=`grep 'register_avcodec(&[a-z0-9_]*_encoder)' "$source_path/libavcodec/allcodecs.c"  | sed 's/.*&\(.*\)).*/\1/'`
DECODER_LIST=`grep 'register_avcodec(&[a-z0-9_]*_decoder)' "$source_path/libavcodec/allcodecs.c"  | sed 's/.*&\(.*\)).*/\1/'`
PARSER_LIST=`grep 'av_register_codec_parser(&[a-z]' "$source_path/libavcodec/allcodecs.c"  | sed 's/.*&\(.*\)).*/\1/'`
MUXER_LIST=`grep 'av_register_output_format(&[a-z]' "$source_path/libavformat/allformats.c"  | sed 's/.*&\(.*\)).*/\1/'`
DEMUXER_LIST=`grep 'av_register_input_format(&[a-z]' "$source_path/libavformat/allformats.c"  | sed 's/.*&\(.*\)).*/\1/'`
800

801 802
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST

F
Fabrice Bellard 已提交
803
for opt do
M
Måns Rullgård 已提交
804
  optval="${opt#*=}"
F
Fabrice Bellard 已提交
805
  case "$opt" in
806 807
  --log)
  ;;
M
Måns Rullgård 已提交
808
  --log=*) logging="$optval"
809
  ;;
810
  --prefix=*) PREFIX="$optval"; force_prefix=yes
F
Fabrice Bellard 已提交
811
  ;;
M
Måns Rullgård 已提交
812
  --libdir=*) libdir="$optval"; force_libdir=yes
813
  ;;
814 815
  --shlibdir=*) shlibdir="$optval"
  ;;
M
Måns Rullgård 已提交
816
  --incdir=*) incdir="$optval"
D
Diego Biurrun 已提交
817
  ;;
M
Måns Rullgård 已提交
818
  --mandir=*) mandir="$optval"
F
Fabrice Bellard 已提交
819
  ;;
M
Måns Rullgård 已提交
820
  --source-path=*) source_path="$optval"
821
  ;;
M
Måns Rullgård 已提交
822
  --cross-prefix=*) cross_prefix="$optval"
823
  ;;
824 825
  --cross-compile) cross_compile=yes
  ;;
M
Måns Rullgård 已提交
826
  --cc=*) cc="$optval"
F
Fabrice Bellard 已提交
827
  ;;
M
Måns Rullgård 已提交
828
  --make=*) make="$optval"
829
  ;;
830
  --extra-cflags=*) add_cflags "$optval"
831
  ;;
832
  --extra-ldflags=*) add_ldflags "$optval"
833
  ;;
834
  --extra-libs=*) add_extralibs "$optval"
835
  ;;
M
Måns Rullgård 已提交
836
  --build-suffix=*) BUILDSUF="$optval"
837
  ;;
838
  --arch=*) arch="$optval"
F
Fabrice Bellard 已提交
839
  ;;
840
  --cpu=*) cpu="$optval"
841
  ;;
842 843
  --powerpc-perf-enable) powerpc_perf="yes"
  ;;
F
Fabrice Bellard 已提交
844 845
  --disable-mmx) mmx="no"
  ;;
846 847
  --disable-armv5te) armv5te="no"
  ;;
848 849
  --disable-iwmmxt) iwmmxt="no"
  ;;
850 851
  --disable-altivec) altivec="no"
  ;;
F
Fabrice Bellard 已提交
852 853
  --enable-gprof) gprof="yes"
  ;;
854
  --disable-v4l) video4linux="no"
F
Fabrice Bellard 已提交
855
  ;;
856
  --disable-v4l2) video4linux2="no"
L
Luca Abeni 已提交
857
  ;;
858 859
  --disable-bktr) bktr="no"
  ;;
F
Fabrice Bellard 已提交
860 861
  --disable-audio-oss) audio_oss="no"
  ;;
862 863
  --disable-audio-beos) audio_beos="no"
  ;;
864 865
  --disable-dv1394) dv1394="no"
  ;;
866
  --disable-network) network="no"; ffserver="no"
F
Fabrice Bellard 已提交
867
  ;;
868 869
  --disable-ipv6) ipv6="no";
  ;;
870 871
  --disable-zlib) zlib="no"
  ;;
872
  --enable-a52) a52="yes"
873
  ;;
M
Michael Niedermayer 已提交
874
  --enable-a52bin) a52bin="yes"
Z
Zdenek Kabelac 已提交
875
  ;;
876
  --enable-dts) dts="yes"
877
  ;;
878
  --enable-pp) pp="yes"
879
  ;;
880 881
  --enable-libgsm) libgsm="yes"
  ;;
882
  --enable-mp3lame) mp3lame="yes"
883
  ;;
884 885
  --enable-libnut) libnut="yes"
  ;;
886
  --enable-libogg) libogg="yes"
887
    pkg_requires="$pkg_requires ogg >= 1.1"
N
Nilesh Bansal 已提交
888
  ;;
889
  --enable-vorbis) libvorbis="yes"
890
    pkg_requires="$pkg_requires vorbis vorbisenc"
891
  ;;
Z
Zdenek Kabelac 已提交
892 893 894 895
  --enable-faad) faad="yes"
  ;;
  --enable-faadbin) faadbin="yes"
  ;;
896
  --enable-faac) faac="yes"
897
  ;;
898 899
  --enable-xvid) xvid="yes"
  ;;
900
  --enable-x264) x264="yes"
901
  ;;
902 903
  --enable-avisynth) avisynth="yes";
  ;;
904
  --enable-dc1394) dc1394="yes"
905
    pkg_requires="$pkg_requires libraw1394"
906
  ;;
907 908
  --disable-vhook) vhook="no"
  ;;
909 910
  --enable-mingw32) mingw32="yes"
  ;;
G
Gildas Bazin 已提交
911 912
  --enable-mingwce) mingwce="yes"
  ;;
913 914 915 916
  --enable-static) lstatic="yes"
  ;;
  --disable-static) lstatic="no"
  ;;
917
  --enable-shared) lshared="yes"
N
Nick Kurshev 已提交
918
  ;;
919 920
  --disable-shared) lshared="no"
  ;;
921 922 923 924
  --disable-debug) debug="no"
  ;;
  --disable-opts) optimize="no"
  ;;
925 926
  --enable-extra-warnings) extrawarnings="yes"
  ;;
927 928
  --disable-mpegaudio-hp) mpegaudio_hp="no"
  ;;
929 930
  --disable-protocols) protocols="no"; network="no"; ffserver="no"
  ;;
931 932
  --disable-ffmpeg) ffmpeg="no"
  ;;
933 934
  --disable-ffserver) ffserver="no"
  ;;
935 936
  --disable-ffplay) ffplay="no"
  ;;
937
  --enable-small) optimize="small"
938
  ;;
D
Diego Biurrun 已提交
939
  --enable-amr_nb) amr="yes"; amr_nb="yes"; amr_nb_fixed="no"
940
  ;;
D
Diego Biurrun 已提交
941
  --enable-amr_nb-fixed) amr="yes"; amr_nb_fixed="yes"; amr_nb="no"
Z
Zdenek Kabelac 已提交
942
  ;;
D
Diego Biurrun 已提交
943
  --enable-amr_wb) amr="yes"; amr_wb="yes"
944
  ;;
D
Diego Biurrun 已提交
945
  --enable-amr_if2) amr="yes"; amr_if2="yes"
946
  ;;
947
  --enable-sunmlib) mlib="yes"
948
  ;;
949 950
  --enable-pthreads) pthreads="yes"
  ;;
L
Luca Abeni 已提交
951 952
  --enable-swscaler) swscaler="yes"
  ;;
953 954
  --enable-gpl) gpl="yes"
  ;;
955
  --enable-memalign-hack) memalign_hack="yes"
956
  ;;
957 958
  --disable-strip) dostrip="no"
  ;;
959
  --enable-encoder=*) enable ${optval}_encoder
960
  ;;
961
  --enable-decoder=*) enable ${optval}_decoder
962
  ;;
963
  --disable-encoder=*) disable ${optval}_encoder
964
  ;;
965
  --disable-decoder=*) disable ${optval}_decoder
966
  ;;
967
  --disable-encoders) disable $ENCODER_LIST
968
  ;;
969
  --disable-decoders) disable $DECODER_LIST
970
  ;;
971
  --enable-muxer=*) enable ${optval}_muxer
972
  ;;
973
  --disable-muxer=*) disable ${optval}_muxer
974
  ;;
975
  --disable-muxers) disable $MUXER_LIST; ffserver="no"
976
  ;;
977
  --enable-demuxer=*) enable ${optval}_demuxer
978
  ;;
979
  --disable-demuxer=*) disable ${optval}_demuxer
980
  ;;
981
  --disable-demuxers) disable $DEMUXER_LIST
982
  ;;
983
  --enable-parser=*) enable ${optval}_parser
984
  ;;
985
  --disable-parser=*) disable ${optval}_parser
986
  ;;
987
  --disable-parsers) disable $PARSER_LIST
988
  ;;
989 990
  --help) show_help
  ;;
991 992 993 994 995
  *)
  echo "Unknown option \"$opt\"."
  echo "See $0 --help for available options."
  exit 1
  ;;
F
Fabrice Bellard 已提交
996 997 998
  esac
done

999 1000
if test "$logging" != no; then
    test "$logging" = yes || logfile="$logging"
1001 1002
    echo "# $0 $@" >$logfile
    set >>$logfile
1003 1004
else
    logfile=/dev/null
1005
fi
1006

1007 1008 1009 1010 1011 1012 1013 1014 1015 1016
if test "$mingw32" = "yes" -o "$mingwce" = "yes"; then
    if test "$lshared" = "yes" && test "$lstatic" = "yes" ; then
        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
1017 1018
    video4linux="no"
    video4linux2="no"
1019 1020 1021 1022 1023 1024
    bktr="no"
    audio_oss="no"
    dv1394="no"
    dc1394="no"
    ffserver="no"
    network="no"
1025 1026 1027
    if enabled mingw32; then
        w32threads="yes"
    fi
1028 1029 1030 1031 1032 1033
    if test "$mingwce" = "yes"; then
        protocols="no"
    fi
    SLIBPREF=""
    SLIBSUF=".dll"
    EXESUF=".exe"
1034 1035
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1036
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1037
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a)"
1038
    if test "$force_prefix" != yes; then PREFIX="$PROGRAMFILES/FFmpeg"; fi
1039 1040
    if test "$force_libdir" != yes; then bindir='${PREFIX}'; fi
    shlibdir='${PREFIX}'
1041 1042
fi

1043 1044
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1045

1046
test -n "$cross_prefix" && cross_compile=yes
1047 1048 1049 1050 1051
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062
# 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

1063
if test "$libvorbis" = "yes" ; then
1064
    if test "$libogg" = "no"; then
D
Diego Biurrun 已提交
1065
        echo "libogg must be enabled to enable Vorbis."
N
Nilesh Bansal 已提交
1066 1067 1068 1069
        fail="yes"
    fi
fi

1070
if test "$gpl" != "yes"; then
1071
    if test "$pp" != "no"; then
D
Diego Biurrun 已提交
1072
        echo "The Postprocessing code is under GPL and --enable-gpl is not specified."
1073 1074 1075 1076
        fail="yes"
    fi

    if test "$a52" != "no" -o "$a52bin" != "no"; then
D
Diego Biurrun 已提交
1077
        echo "liba52 is under GPL and --enable-gpl is not specified."
1078 1079
        fail="yes"
    fi
1080

1081
    if test "$xvid" != "no"; then
D
Diego Biurrun 已提交
1082
        echo "libxvidcore is under GPL and --enable-gpl is not specified."
1083 1084 1085
        fail="yes"
    fi

1086
    if test "$x264" != "no"; then
D
Diego Biurrun 已提交
1087
        echo "x264 is under GPL and --enable-gpl is not specified."
1088 1089 1090
        fail="yes"
    fi

1091
    if test "$dts" != "no"; then
D
Diego Biurrun 已提交
1092
        echo "libdts is under GPL and --enable-gpl is not specified."
1093 1094
        fail="yes"
    fi
1095

1096
    if test "$faad" != "no" -o "$faadbin" != "no"; then
1097 1098
        if check_header faad.h; then
            check_cc << EOF
1099 1100 1101 1102 1103 1104
                #include <faad.h>
                #ifndef FAAD2_VERSION
                ok faad1
                #endif
                int main( void ) { return 0; }
EOF
1105
            if test $? = 0 ; then
D
Diego Biurrun 已提交
1106
                echo "FAAD2 is under GPL and --enable-gpl is not specified."
1107 1108 1109 1110 1111
                fail="yes"
            fi
        else
            faad="no"
            faadbin="no"
D
Diego Biurrun 已提交
1112
            echo "FAAD test failed."
1113 1114
        fi
    fi
1115

L
Luca Abeni 已提交
1116 1117 1118 1119
    if test "$swscaler" != "no"; then
        echo "The software scaler is under GPL and --enable-gpl is not specified."
        fail="yes"
    fi
1120
fi
1121

1122 1123
if test "$fail" = "yes"; then
    exit 1
1124 1125
fi

D
Diego Biurrun 已提交
1126
# compute MMX state
1127
if test $mmx = "default"; then
1128
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1129 1130 1131 1132 1133 1134
        mmx="yes"
    else
        mmx="no"
    fi
fi

1135
#Darwin CC versions
1136
needmdynamicnopic="no"
1137
if test $targetos = Darwin; then
1138
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1139
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1140
    else
1141 1142 1143
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
        case "$gcc_version" in
            *2.95*)
1144
                add_cflags "-no-cpp-precomp -pipe"
1145 1146
                ;;
            *[34].*)
1147
                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1148 1149 1150 1151 1152
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
            *)
1153
                add_cflags "-no-cpp-precomp -pipe"
1154 1155 1156 1157 1158
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
        esac
1159
    fi
1160 1161 1162 1163
fi

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

1166 1167
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
1168
    if test $arch = "powerpc"; then
1169 1170 1171 1172 1173 1174
        altivec="yes"
    else
        altivec="no"
    fi
fi

1175 1176
# Add processor-specific flags
TUNECPU="generic"
1177
POWERPCMODE="32bits"
1178 1179
if test $cpu != "generic"; then
    case $cpu in
1180
        601|ppc601|PowerPC601)
1181
            add_cflags "-mcpu=601"
1182 1183 1184 1185 1186 1187
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC601 but AltiVec enabled!";
            fi
            TUNECPU=ppc601
        ;;
        603*|ppc603*|PowerPC603*)
1188
            add_cflags "-mcpu=603"
1189 1190 1191 1192 1193 1194
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC603 but AltiVec enabled!";
            fi
            TUNECPU=ppc603
        ;;
        604*|ppc604*|PowerPC604*)
1195
            add_cflags "-mcpu=604"
1196 1197 1198 1199 1200 1201
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC604 but AltiVec enabled!";
            fi
            TUNECPU=ppc604
        ;;
        G3|g3|75*|ppc75*|PowerPC75*)
1202
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1203 1204 1205 1206 1207 1208
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC75x but AltiVec enabled!";
            fi
            TUNECPU=ppc750
        ;;
        G4|g4|745*|ppc745*|PowerPC745*)
1209
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1210 1211 1212 1213 1214 1215
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC745x but AltiVec disabled!";
            fi
            TUNECPU=ppc7450
        ;;
        74*|ppc74*|PowerPC74*)
1216
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1217 1218 1219 1220 1221 1222
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC74xx but AltiVec disabled!";
            fi
            TUNECPU=ppc7400
        ;;
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1223
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1224 1225 1226 1227
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC970 but AltiVec disabled!";
            fi
            TUNECPU=ppc970
1228
            POWERPCMODE="64bits"
1229
        ;;
1230 1231
        # targets that do NOT support conditional mov (cmov)
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1232
            add_cflags "-march=$cpu"
1233 1234 1235
            cmov="no"
        ;;
        # targets that do support conditional mov (cmov)
1236
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx)
1237
            add_cflags "-march=$cpu"
1238
            cmov="yes"
1239 1240 1241 1242 1243 1244 1245
            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"
1246
        ;;
1247
        sparc64)
1248
            add_cflags "-mcpu=v9"
1249
        ;;
1250
        *)
1251
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1252
        ;;
1253 1254 1255
    esac
fi

1256 1257 1258 1259 1260 1261 1262 1263
# 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
1264 1265
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
1266 1267 1268
EOF
    die "Sanity test failed."
fi
1269
rm $TMPE
1270

M
Måns Rullgård 已提交
1271 1272 1273 1274 1275 1276 1277 1278 1279 1280
# 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."
1281
        echo "Only do this if you know what cross compiling means."
M
Måns Rullgård 已提交
1282 1283 1284 1285
    fi
    die "C compiler test failed."
fi

1286 1287
# check for assembler specific support

1288
if test $arch = "powerpc"; then
1289 1290 1291 1292 1293 1294 1295 1296 1297 1298
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

1299 1300
# check for SIMD availability

1301
# AltiVec flags: The FSF version of GCC differs from the Apple version
1302
if test $arch = "powerpc"; then
1303
    if test $altivec = "yes"; then
1304
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1305
            add_cflags "-faltivec"
1306
        else
1307
            add_cflags "-maltivec -mabi=altivec"
1308 1309 1310 1311
        fi
    fi
fi

1312
check_header altivec.h && altivec_h=yes || altivec_h=no
1313

D
Diego Biurrun 已提交
1314
# check if our compiler supports Motorola AltiVec C API
1315
if test $altivec = "yes"; then
1316
    if test $altivec_h = "yes"; then
M
Måns Rullgård 已提交
1317 1318 1319 1320 1321
        inc_altivec_h="#include <altivec.h>"
    else
        inc_altivec_h=
    fi
    check_cc <<EOF || altivec=no
1322
$inc_altivec_h
1323 1324 1325 1326 1327 1328 1329
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
EOF
fi
1330

1331
# check armv5te instructions support
1332
if test $armv5te = "default" -a $arch = "armv4l"; then
1333 1334 1335 1336 1337 1338 1339 1340 1341
    armv5te=no
    check_cc <<EOF && armv5te=yes
        int main(void) {
        __asm__ __volatile__ ("qadd r0, r0, r0");
        }
EOF
fi

# check iwmmxt support
1342
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1343 1344 1345 1346 1347 1348 1349 1350
    iwmmxt=no
    check_cc <<EOF && iwmmxt=yes
        int main(void) {
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
        }
EOF
fi

D
Diego Biurrun 已提交
1351
# mmi only available on mips
1352
if test $mmi = "default"; then
1353
    if test $arch = "mips"; then
1354 1355 1356 1357 1358 1359
        mmi="yes"
    else
        mmi="no"
    fi
fi

D
Diego Biurrun 已提交
1360
# check if our compiler supports mmi
1361
enabled mmi && check_cc <<EOF || mmi="no"
1362 1363 1364 1365 1366
int main(void) {
    __asm__ ("lq \$2, 0(\$2)");
    return 0;
}
EOF
1367 1368 1369

# ---
# big/little-endian test
1370
if test "$cross_compile" = "no"; then
1371
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1372 1373
#include <inttypes.h>
int main(int argc, char ** argv){
1374 1375
        volatile uint32_t i=0x01234567;
        return (*((uint8_t*)(&i))) == 0x67;
1376 1377
}
EOF
F
Fabrice Bellard 已提交
1378
else
M
Måns Rullgård 已提交
1379
    # programs cannot be launched if cross compiling, so make a static guess
1380
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
M
Måns Rullgård 已提交
1381 1382
        bigendian="yes"
    fi
F
Fabrice Bellard 已提交
1383 1384
fi

N
Nick Kurshev 已提交
1385 1386 1387
# ---
# check availability of some header files

1388
memalign=no
1389
malloc_h=no
1390
if check_header malloc.h; then
1391
    malloc_h=yes
1392 1393
    memalign=yes
    check_func memalign || memalign="no"
N
Nick Kurshev 已提交
1394 1395
fi

1396
if test "$memalign" = "no" -a "$mmx" = "yes" -a \
1397
        "$memalign_hack" != "yes" -a "$targetos" != "Darwin" -a \
1398
        "$targetos" != "FreeBSD" ; then
1399
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1400 1401
fi

M
Måns Rullgård 已提交
1402 1403
check_header byteswap.h && byteswap_h=yes || byteswap_h=no

M
Måns Rullgård 已提交
1404
check_func inet_aton && inet_aton=yes || inet_aton=no
1405
check_func localtime_r && localtime_r=yes || localtime_r=no
1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418
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
    { check_cflags -pthread && check_ldflags -pthread; } ||
    { check_cflags -pthreads && check_ldflags -pthreads; } ||
    check_lib pthread.h pthread_create -lpthread ||
    check_func pthread_create ||
    die "ERROR: can't find pthreads library"
fi

# these are off by default, so fail if requested and not available
1419
enabled dts     && require libdts dts.h dts_init -ldts -lm
1420
enabled libgsm  && require libgsm gsm.h gsm_create -lgsm
1421
enabled mp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1422
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1423
enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
1424
enabled libnut  && require libnut libnut.h nut_demuxer_init -lnut
1425 1426 1427
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
1428
enabled mlib    && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1429

1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446
# Ugh, faac uses stdcall calling convention on win32 so we can't use
# the generic test functions
if enabled faac; then
    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

1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461
# Ugh, recent faad2 versions have renamed all functions and #define the
# old names in faad.h.  Generic tests won't work.
if enabled faad; then
    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

1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477
# 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


1478
# test for lrintf in math.h
M
Måns Rullgård 已提交
1479
check_exec <<EOF && lrintf=yes || lrintf=no
1480 1481 1482 1483 1484
#define _ISOC9X_SOURCE  1
#include <math.h>
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
EOF

F
Falk Hüffner 已提交
1485 1486
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1487
    check_cc <<EOF && _restrict=$restrict_keyword && break
1488 1489
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
1490 1491
done

1492 1493
# dlopen/dlfcn.h probing

1494
check_header dlfcn.h && dlfcn=yes
1495

1496 1497 1498 1499
temp_extralibs -ldl
if check_func dlopen; then
    dlopen=yes
    ldl=-ldl
1500
fi
1501
restore_flags
1502

1503 1504 1505
if check_func dlopen; then
    dlopen=yes
    ldl=
1506 1507
fi

M
Måns Rullgård 已提交
1508 1509
if test "$vhook" = "default"; then
    vhook="$dlopen"
1510 1511
fi

M
Måns Rullgård 已提交
1512
if enabled_any vhook a52bin faadbin; then
1513
    add_extralibs $ldl
M
Michael Niedermayer 已提交
1514 1515
fi

1516 1517 1518 1519 1520 1521 1522 1523
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

1524 1525 1526 1527
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
M
Michael Niedermayer 已提交
1528

1529
##########################################
D
Diego Biurrun 已提交
1530
# imlib check
1531

1532 1533
temp_extralibs -lImlib2
check_ld <<EOF && imlib2=yes || imlib2=no
1534 1535 1536 1537
#include <X11/Xlib.h>
#include <Imlib2.h>
int main( void ) { return (int) imlib_load_font("foo"); }
EOF
1538
restore_flags
1539

1540
##########################################
D
Diego Biurrun 已提交
1541
# FreeType check
1542

1543
freetype2=no
1544
if test "x$targetos" != "xBeOS"; then
1545
  if (freetype-config --version) >/dev/null 2>&1 ; then
1546 1547 1548 1549 1550 1551 1552
      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
1553
  fi
1554 1555
fi

1556
##########################################
D
Diego Biurrun 已提交
1557
# SDL check
1558 1559 1560

sdl_too_old=no
sdl=no
1561 1562
SDL_CONFIG="${cross_prefix}sdl-config"
if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
1563 1564 1565 1566 1567 1568 1569 1570 1571
    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'`
1572
        if test "$_sdlversion" -lt 121 ; then
1573 1574 1575
            sdl_too_old=yes
        else
            sdl=yes
1576 1577 1578 1579 1580 1581 1582 1583
            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
1584 1585
        fi
    fi
1586
    restore_flags
M
Michael Niedermayer 已提交
1587
fi
1588

1589 1590
enabled sdl || ffplay=no

1591
##########################################
D
Diego Biurrun 已提交
1592
# texi2html check
1593 1594

texi2html=no
1595
if (texi2html -version) >/dev/null 2>&1; then
1596 1597 1598
texi2html=yes
fi

1599
##########################################
D
Diego Biurrun 已提交
1600
# IPv6 check
1601

1602
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1603 1604 1605 1606 1607 1608 1609 1610 1611
#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);
1612
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1613 1614 1615
}
EOF

1616
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1617
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1618
#include <sys/time.h>
1619 1620
#include <asm/types.h>
#include <linux/videodev2.h>
1621
int dummy = V4L2_PIX_FMT_YUV420;
1622
struct v4l2_buffer dummy1;
1623 1624
EOF

1625 1626 1627 1628
enabled debug && add_cflags -g

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
1629 1630
check_cflags -Wall
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
1631 1632 1633
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
1634
enabled extrawarnings && check_cflags -Winline
1635

1636
# add some linker flags
1637
check_ldflags $LDLATEFLAGS
F
Fabrice Bellard 已提交
1638

1639 1640
# not all compilers support -Os
test "$optimize" = "small" && check_cflags -Os
1641

1642
if enabled optimize; then
1643
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1644 1645
        add_cflags  "-O5"
        add_ldflags "-O5"
1646
    else
1647
        add_cflags "-O3"
1648
    fi
1649 1650
fi

1651 1652
# PIC flags for shared library objects where they are needed
if test "$lshared" = "yes" ; then
M
Måns Rullgård 已提交
1653 1654
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
1655
        case "$arch" in
1656 1657
            x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
        esac
1658 1659 1660
    fi
fi

1661
if test "$gprof" = "yes" ; then
1662 1663
    add_cflags  "-p"
    add_ldflags "-p"
1664 1665
fi

1666 1667 1668
VHOOKCFLAGS="-fPIC $CFLAGS"
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic

1669 1670 1671 1672 1673 1674
# 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

1675
echo "install prefix   $PREFIX"
D
Diego Biurrun 已提交
1676
echo "source path      $source_path"
F
Fabrice Bellard 已提交
1677
echo "C compiler       $cc"
1678
echo "make             $make"
1679
echo "ARCH             $arch ($cpu)"
1680
if test "$BUILDSUF" != ""; then
M
Måns Rullgård 已提交
1681
    echo "build suffix     $BUILDSUF"
1682
fi
D
Diego Biurrun 已提交
1683
echo "big-endian       $bigendian"
1684
if test $arch = "x86_32" -o $arch = "x86_64"; then
M
Måns Rullgård 已提交
1685
    echo "MMX enabled      $mmx"
1686
    echo "CMOV enabled     $cmov"
1687
    echo "CMOV is fast     $cmov_is_fast"
F
Fabrice Bellard 已提交
1688
fi
1689
if test $arch = "armv4l"; then
1690
    echo "ARMv5TE enabled  $armv5te"
M
Måns Rullgård 已提交
1691
    echo "IWMMXT enabled   $iwmmxt"
1692
fi
1693
if test $arch = "mips"; then
M
Måns Rullgård 已提交
1694
    echo "MMI enabled      $mmi"
F
Fabrice Bellard 已提交
1695
fi
1696
if test $arch = "powerpc"; then
M
Måns Rullgård 已提交
1697
    echo "AltiVec enabled  $altivec"
1698
    echo "dcbzl available  $dcbzl"
F
Fabrice Bellard 已提交
1699
fi
F
Fabrice Bellard 已提交
1700
echo "gprof enabled    $gprof"
1701
echo "zlib enabled     $zlib"
1702
echo "libgsm enabled   $libgsm"
1703
echo "mp3lame enabled  $mp3lame"
1704
echo "libnut enabled   $libnut"
1705
echo "libogg enabled   $libogg"
1706
echo "Vorbis enabled   $libvorbis"
D
Diego Biurrun 已提交
1707
echo "FAAD enabled     $faad"
Z
Zdenek Kabelac 已提交
1708
echo "faadbin enabled  $faadbin"
D
Diego Biurrun 已提交
1709 1710
echo "FAAC enabled     $faac"
echo "XviD enabled     $xvid"
1711
echo "x264 enabled     $x264"
F
Fabrice Bellard 已提交
1712
echo "a52 support      $a52"
Z
Zdenek Kabelac 已提交
1713
echo "a52 dlopened     $a52bin"
D
Diego Biurrun 已提交
1714
echo "DTS support      $dts"
1715
echo "pp support       $pp"
L
Luca Abeni 已提交
1716
echo "Software Scaler enabled $swscaler"
1717
echo "AVISynth enabled $avisynth"
1718
echo "debug symbols    $debug"
1719
echo "strip symbols    $dostrip"
1720
echo "optimize         $optimize"
1721
echo "static           $lstatic"
D
typo  
Diego Biurrun 已提交
1722
echo "shared           $lshared"
D
Diego Biurrun 已提交
1723
echo "video hooking    $vhook"
1724 1725
echo "SDL support      $sdl"
if test $sdl_too_old = "yes"; then
M
Måns Rullgård 已提交
1726
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1727
fi
1728

M
Måns Rullgård 已提交
1729 1730 1731
if test "$vhook" = "yes"; then
    echo "Imlib2 support   $imlib2"
    echo "FreeType support $freetype2"
1732
fi
1733
echo "Sun medialib support"  $mlib
1734
echo "pthreads support"      $pthreads
Z
Zdenek Kabelac 已提交
1735 1736
echo "AMR-NB float support"  $amr_nb
echo "AMR-NB fixed support"  $amr_nb_fixed
1737
echo "AMR-WB float support"  $amr_wb
1738
echo "AMR-WB IF2 support"    $amr_if2
1739 1740
echo "network support      $network"
if test "$network" = "yes" ; then
M
Måns Rullgård 已提交
1741
    echo "IPv6 support         $ipv6"
1742
fi
1743
echo ".align is power-of-two" $asmalign_pot
1744
if test "$gpl" = "no" ; then
M
Måns Rullgård 已提交
1745
    echo "License: LGPL"
1746
else
M
Måns Rullgård 已提交
1747
    echo "License: GPL"
1748
fi
F
Fabrice Bellard 已提交
1749

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

1752 1753
date >> config.log
echo "   $0 $FFMPEG_CONFIGURATION" >> config.log
D
Diego Biurrun 已提交
1754 1755
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1756
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
F
Fabrice Bellard 已提交
1757

1758 1759
echo "PREFIX=$PREFIX" >> config.mak
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1760
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1761
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
D
Diego Biurrun 已提交
1762
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1763 1764
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1765
echo "MAKE=$make" >> config.mak
1766 1767
echo "CC=$cc" >> config.mak
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
1768
echo "RANLIB=$ranlib" >> config.mak
1769
if test "$dostrip" = "yes" ; then
M
Måns Rullgård 已提交
1770 1771
    echo "STRIP=$strip" >> config.mak
    echo "INSTALLSTRIP=$installstrip" >> config.mak
1772
else
M
Måns Rullgård 已提交
1773 1774
    echo "STRIP=echo ignoring strip" >> config.mak
    echo "INSTALLSTRIP=" >> config.mak
1775
fi
1776

N
Nick Kurshev 已提交
1777
echo "OPTFLAGS=$CFLAGS" >> config.mak
1778
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1779
echo "LDFLAGS=$LDFLAGS" >> config.mak
1780
echo "LDCONFIG=$LDCONFIG" >> config.mak
1781
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1782
echo "SHFLAGS=$SHFLAGS" >> config.mak
1783
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1784
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1785
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1786
echo "BUILD_STATIC=$lstatic" >> config.mak
1787
echo "BUILDSUF=$BUILDSUF" >> config.mak
1788
echo "LIBPREF=$LIBPREF" >> config.mak
1789
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1790 1791
if test "$lstatic" = "yes" ; then
  echo "LIB=$LIB" >> config.mak
1792 1793
else # Some Make complain if this variable does not exist.
  echo "LIB=" >> config.mak
1794
fi
1795
echo "SLIBPREF=$SLIBPREF" >> config.mak
1796 1797
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1798
echo "TARGET_OS=$targetos" >> config.mak
1799
if test "$arch" = "x86_32" -o "$arch" = "x86_64" ; then
1800
  echo "TARGET_ARCH_X86=yes" >> config.mak
1801
  echo "#define ARCH_X86 1" >> $TMPH
1802 1803 1804 1805
fi
if test "$arch" = "x86_32" ; then
  echo "TARGET_ARCH_X86_32=yes" >> config.mak
  echo "#define ARCH_X86_32 1" >> $TMPH
1806
elif test "$arch" = "x86_64" ; then
1807 1808
  echo "TARGET_ARCH_X86_64=yes" >> config.mak
  echo "#define ARCH_X86_64 1" >> $TMPH
1809
elif test "$arch" = "armv4l" ; then
1810
  echo "TARGET_ARCH_ARMV4L=yes" >> config.mak
1811
  echo "#define ARCH_ARMV4L 1" >> $TMPH
1812
elif test "$arch" = "alpha" ; then
1813
  echo "TARGET_ARCH_ALPHA=yes" >> config.mak
1814
  echo "#define ARCH_ALPHA 1" >> $TMPH
1815
elif test "$arch" = "sparc64" ; then
1816 1817
  echo "TARGET_ARCH_SPARC64=yes" >> config.mak
  echo "#define ARCH_SPARC64 1" >> $TMPH
1818 1819
  echo "TARGET_ARCH_SPARC=yes" >> config.mak
  echo "#define ARCH_SPARC 1" >> $TMPH
1820
elif test "$arch" = "sparc" ; then
1821 1822
  echo "TARGET_ARCH_SPARC=yes" >> config.mak
  echo "#define ARCH_SPARC 1" >> $TMPH
1823
elif test "$arch" = "powerpc" ; then
1824 1825
  echo "TARGET_ARCH_POWERPC=yes" >> config.mak
  echo "#define ARCH_POWERPC 1" >> $TMPH
1826 1827 1828 1829 1830
  if test $POWERPCMODE = "32bits"; then
    echo "#define POWERPC_MODE_32BITS 1" >> $TMPH
  else
    echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
  fi
1831 1832 1833
  if test "$powerpc_perf" = "yes"; then
    echo "#define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
  fi
1834
elif test "$arch" = "mips" ; then
1835 1836
  echo "TARGET_ARCH_MIPS=yes" >> config.mak
  echo "#define ARCH_MIPS 1" >> $TMPH
1837
elif test "$arch" = "sh4" ; then
A
Alex Beregszaszi 已提交
1838 1839
  echo "TARGET_ARCH_SH4=yes" >> config.mak
  echo "#define ARCH_SH4 1" >> $TMPH
1840
elif test "$arch" = "parisc" ; then
1841 1842
  echo "TARGET_ARCH_PARISC=yes" >> config.mak
  echo "#define ARCH_PARISC 1" >> $TMPH
1843
elif test "$arch" = "s390" ; then
1844 1845
  echo "TARGET_ARCH_S390=yes" >> config.mak
  echo "#define ARCH_S390 1" >> $TMPH
1846
elif test "$arch" = "m68k" ; then
1847 1848
  echo "TARGET_ARCH_M68K=yes" >> config.mak
  echo "#define ARCH_M68K 1" >> $TMPH
1849
elif test "$arch" = "ia64" ; then
1850 1851
  echo "TARGET_ARCH_IA64=yes" >> config.mak
  echo "#define ARCH_IA64 1" >> $TMPH
1852
elif test "$arch" = "bfin" ; then
M
Michael Benjamin 已提交
1853 1854
  echo "TARGET_ARCH_BFIN=yes" >> config.mak
  echo "#define ARCH_BFIN 1" >> $TMPH
A
Alex Beregszaszi 已提交
1855
fi
1856
echo "#define TUNECPU $TUNECPU" >> $TMPH
1857 1858 1859
if test "$bigendian" = "yes" ; then
  echo "WORDS_BIGENDIAN=yes" >> config.mak
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1860
fi
Z
Zdenek Kabelac 已提交
1861
if test "$mmx" = "yes" ; then
1862
  echo "TARGET_MMX=yes" >> config.mak
1863
  echo "#define HAVE_MMX 1" >> $TMPH
M
Michael Niedermayer 已提交
1864
  echo "#define __CPU__ 586" >> $TMPH
F
Fabrice Bellard 已提交
1865
fi
1866 1867 1868 1869
if test "$cmov" = "yes" ; then
  echo "TARGET_CMOV=yes" >> config.mak
  echo "#define HAVE_CMOV 1" >> $TMPH
fi
1870 1871 1872 1873
if test "$cmov_is_fast" = "yes" ; then
  echo "TARGET_CMOV_IS_FAST=yes" >> config.mak
  echo "#define CMOV_IS_FAST 1" >> $TMPH
fi
1874 1875 1876 1877
if test "$armv5te" = "yes" ; then
  echo "TARGET_ARMV5TE=yes" >> config.mak
  echo "#define HAVE_ARMV5TE 1" >> $TMPH
fi
1878 1879 1880 1881
if test "$iwmmxt" = "yes" ; then
  echo "TARGET_IWMMXT=yes" >> config.mak
  echo "#define HAVE_IWMMXT 1" >> $TMPH
fi
1882 1883 1884 1885
if test "$mmi" = "yes" ; then
  echo "TARGET_MMI=yes" >> config.mak
  echo "#define HAVE_MMI 1" >> $TMPH
fi
1886

1887 1888 1889
if test "$altivec" = "yes" ; then
  echo "TARGET_ALTIVEC=yes" >> config.mak
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1890
fi
1891

1892
if test "$sdl" = "yes" ; then
1893 1894
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1895
fi
1896 1897 1898
if test "$texi2html" = "yes"; then
  echo "BUILD_DOC=yes" >> config.mak
fi
L
Luca Barbato 已提交
1899

L
Luca Abeni 已提交
1900
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1901
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
L
Luca Barbato 已提交
1902 1903 1904 1905 1906 1907
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'`



Z
Zdenek Kabelac 已提交
1908
if test "$lshared" = "yes" ; then
1909
  echo "#define BUILD_SHARED_AV 1" >> $TMPH
N
Nick Kurshev 已提交
1910
  echo "BUILD_SHARED=yes" >> config.mak
1911
  echo "PIC=-fPIC -DPIC" >> config.mak
1912
  echo "SPPMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1913
  echo "SPPVERSION=$lavc_version" >> config.mak
1914
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1915
  echo "LAVCVERSION=$lavc_version" >> config.mak
1916
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1917
  echo "LAVFVERSION=$lavf_version" >> config.mak
1918
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1919
  echo "LAVUVERSION=$lavu_version" >> config.mak
L
Luca Abeni 已提交
1920 1921
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
  echo "SWSVERSION=$sws_version" >> config.mak
1922
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1923 1924
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1925
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
N
Nick Kurshev 已提交
1926
fi
1927
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1928
echo "EXTRALIBS=$extralibs" >> config.mak
1929

1930 1931 1932 1933
enabled_any $ENCODER_LIST && enable encoders
enabled_any $DECODER_LIST && enable decoders
enabled_any $MUXER_LIST   && enable muxers
enabled_any $DEMUXER_LIST && enable demuxers
1934

1935 1936
enabled_any pthreads beosthreads os2threads w32threads && enable threads

1937 1938
print_config HAVE_   $TMPH config.mak $HAVE_LIST
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1939

1940
if test "$mingw32" = "yes" ; then
1941
  echo "#ifndef __MINGW32__" >> $TMPH
1942
  echo "#define __MINGW32__ 1" >> $TMPH
1943
  echo "#endif" >> $TMPH
1944 1945
fi

G
Gildas Bazin 已提交
1946 1947 1948 1949 1950 1951 1952
if test "$mingwce" = "yes" ; then
  echo "#define CONFIG_WINCE 1" >> $TMPH
  echo "#ifndef __MINGW32__" >> $TMPH
  echo "#define __MINGW32__ 1" >> $TMPH
  echo "#endif" >> $TMPH
fi

1953 1954
if test "$os2" = "yes" ; then
  echo "#define CONFIG_OS2 1" >> $TMPH
1955 1956
fi

1957
if test "$targetos" = "Darwin"; then
1958 1959 1960
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
fi

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

1963 1964
if test "$optimize" = "small"; then
  echo "#define always_inline"  >> $TMPH
1965
  echo "#define CONFIG_SMALL 1" >> $TMPH
1966 1967
fi

1968 1969 1970
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1971

1972 1973 1974 1975
if test "$amr_if2" = "yes" ; then
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi

1976
# Apparently it's not possible to portably echo a backslash.
1977
if test "$asmalign_pot" = "yes" ; then
1978
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1979
else
1980
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1981 1982
fi

Z
Zdenek Kabelac 已提交
1983

1984
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
1985
    ucname="`toupper $codec`"
1986 1987 1988 1989 1990 1991 1992 1993 1994
    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
1995 1996
done

1997
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
M
Måns Rullgård 已提交
1998
if ! cmp -s $TMPH config.h; then
1999 2000 2001 2002
        mv -f $TMPH config.h
else
        echo "config.h is unchanged"
fi
N
Nick Kurshev 已提交
2003

2004
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2005

2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045
# build tree in object directory if source path is different from current one
if test "$source_path_used" = "yes" ; then
    DIRS="\
         doc \
         libavformat \
         libavcodec \
         libavcodec/alpha \
         libavcodec/armv4l \
         libavcodec/bfin \
         libavcodec/i386 \
         libavcodec/sparc \
         libavcodec/mlib \
         libavcodec/ppc \
         libavcodec/liba52 \
         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
2046

D
Diego Biurrun 已提交
2047
# build pkg-config files libav*.pc and libpostproc.pc
2048 2049
# libavutil.pc
cat <<EOF >libavutil.pc
2050
prefix=$PREFIX
2051
exec_prefix=\${prefix}
2052
libdir=\${exec_prefix}/lib
2053
includedir=\${prefix}/include
2054 2055 2056 2057

Name: libavutil
Description: FFmpeg utility library
Version: $lavu_version
2058
Requires:
2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072
Conflicts:
Libs: -L\${libdir} -lavutil
Cflags: -I\${includedir} -I\${includedir}/ffmpeg
EOF

cat <<EOF >libavutil-uninstalled.pc
prefix=
exec_prefix=
libdir=\${pcfiledir}/libavutil
includedir=\${pcfiledir}/libavutil

Name: libavutil
Description: FFmpeg utility library
Version: $lavu_version
2073
Requires:
2074 2075 2076 2077
Conflicts:
Libs: \${libdir}/${LIBPREF}avutil${LIBSUF}
Cflags: -I\${includedir}
EOF
2078 2079 2080

# libavcodec.pc
cat <<EOF >libavcodec.pc
2081
prefix=$PREFIX
2082
exec_prefix=\${prefix}
2083
libdir=\${exec_prefix}/lib
2084
includedir=\${prefix}/include
2085 2086 2087

Name: libavcodec
Description: FFmpeg codec library
2088
Version: $lavc_version
2089
Requires: $pkg_requires libavutil = $lavu_version
2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102
Conflicts:
Libs: -L\${libdir} -lavcodec $extralibs
Cflags: -I\${includedir} -I\${includedir}/ffmpeg
EOF

cat <<EOF >libavcodec-uninstalled.pc
prefix=
exec_prefix=
libdir=\${pcfiledir}/libavcodec
includedir=\${pcfiledir}/libavcodec

Name: libavcodec
Description: FFmpeg codec library
2103
Version: $lavc_version
2104
Requires: $pkg_requires libavutil = $lavu_version
2105 2106 2107 2108 2109 2110 2111
Conflicts:
Libs: \${libdir}/${LIBPREF}avcodec${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF

# libavformat.pc
cat <<EOF >libavformat.pc
2112
prefix=$PREFIX
2113
exec_prefix=\${prefix}
2114
libdir=\${exec_prefix}/lib
2115
includedir=\${prefix}/include
2116 2117 2118

Name: libavformat
Description: FFmpeg container format library
2119
Version: $lavf_version
2120
Requires: $pkg_requires libavcodec = $lavc_version
2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133
Conflicts:
Libs: -L\${libdir} -lavformat $extralibs
Cflags: -I\${includedir} -I\${includedir}/ffmpeg
EOF

cat <<EOF >libavformat-uninstalled.pc
prefix=
exec_prefix=
libdir=\${pcfiledir}/libavformat
includedir=\${pcfiledir}/libavformat

Name: libavformat
Description: FFmpeg container format library
2134
Version: $lavf_version
2135
Requires: $pkg_requires libavcodec = $lavc_version
2136 2137 2138 2139 2140 2141 2142 2143
Conflicts:
Libs: \${libdir}/${LIBPREF}avformat${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF


# libpostproc.pc
cat <<EOF >libpostproc.pc
2144
prefix=$PREFIX
2145
exec_prefix=\${prefix}
2146
libdir=\${exec_prefix}/lib
2147
includedir=\${prefix}/include
2148 2149 2150

Name: libpostproc
Description: FFmpeg post processing library
2151
Version: $lavc_version
2152
Requires:
2153 2154 2155 2156 2157 2158 2159 2160
Conflicts:
Libs: -L\${libdir} -lpostproc
Cflags: -I\${includedir} -I\${includedir}/postproc
EOF

cat <<EOF >libpostproc-uninstalled.pc
prefix=
exec_prefix=
2161 2162
libdir=\${pcfiledir}/libpostproc
includedir=\${pcfiledir}/libpostproc
2163 2164 2165

Name: libpostproc
Description: FFmpeg post processing library
2166
Version: $lavc_version
2167
Requires:
2168 2169 2170 2171
Conflicts:
Libs: \${libdir}/${LIBPREF}postproc${LIBSUF}
Cflags: -I\${includedir}
EOF
L
Luca Abeni 已提交
2172

2173 2174 2175 2176 2177 2178 2179 2180 2181
if test "$swscaler" != "no"; then
  sws_pc_libs="-L\${libdir} -lswscale"
  sws_pc_uninstalled_libs="\${libdir}/${LIBPREF}swscale${LIBSUF}"
  sws_pc_requires="$pkg_requires libavutil = $lavu_version"
else
  sws_pc_libs=""
  sws_pc_uninstalled_libs=""
  sws_pc_requires="$pkg_requires libavcodec = $lavc_version"
fi
L
Luca Abeni 已提交
2182 2183 2184 2185 2186 2187 2188 2189 2190 2191
# libswscale.pc
cat <<EOF >libswscale.pc
prefix=$PREFIX
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: libswscale
Description: FFmpeg image rescaling library
Version: $sws_version
2192
Requires: $sws_pc_requires
L
Luca Abeni 已提交
2193
Conflicts:
2194
Libs: $sws_pc_libs
L
Luca Abeni 已提交
2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206
Cflags: -I\${includedir} -I\${includedir}/swscale
EOF

cat <<EOF >libswscale-uninstalled.pc
prefix=
exec_prefix=
libdir=\${pcfiledir}/libswscale
includedir=\${pcfiledir}/libswscale

Name: libswscale
Description: FFmpeg image rescaling library
Version: $sws_version
2207
Requires: $sws_pc_requires
L
Luca Abeni 已提交
2208
Conflicts:
2209
Libs: $sws_pc_uninstalled_libs
L
Luca Abeni 已提交
2210 2211
Cflags: -I\${includedir}
EOF