configure 57.2 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
7 8 9 10 11 12
# try to make this part work with most shells

try_exec(){
    type "$1" >/dev/null 2>&1 && exec "$@"
}

M
Måns Rullgård 已提交
13 14
unset foo
(: ${foo%%bar}) 2>/dev/null && ! (: ${foo?}) 2>/dev/null
15
if test "$?" != 0; then
16 17 18 19 20 21 22 23 24 25 26 27
    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" "$@"
28 29
    fi
    echo "No compatible shell script interpreter found."
30 31 32 33 34 35
    echo "This configure script requires a POSIX compatible shell"
    echo "such as bash or ksh."
    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
36 37 38
    exit 1
fi

39 40 41 42 43 44
show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
45
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
46
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
47
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
48
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
49 50 51
  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]"
52
  echo "  --enable-libnut          enable NUT support via libnut [default=no]"
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
  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 已提交
79
  echo "  --enable-swscaler        software scaler support [default=no]"
80
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
81 82 83 84 85 86
  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]"
87
  echo "  --cross-compile          assume a cross-compiler is used"
88 89 90 91 92 93
  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 []"
94
  echo "  --arch=ARCH              select architecture  [$arch]"
95 96
  echo "  --cpu=CPU                selects the minimum cpu required (affects
                                   instruction selection, may crash on older CPUs)"
97 98 99
  echo "  --powerpc-perf-enable    enable performance report on PPC"
  echo "                           (requires enabling PMC)"
  echo "  --disable-mmx            disable MMX usage"
100
  echo "  --disable-armv5te        disable armv5te usage"
101 102 103 104 105 106 107 108 109
  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]"
110
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
111 112 113 114 115
  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"
116
  echo "  --enable-extra-warnings  enable more compiler warnings"
117 118 119
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
  echo "                           MPEG audio decoding [default=no]"
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
120
  echo "  --disable-ffmpeg         disable ffmpeg build"
121 122 123 124 125 126 127 128 129 130 131
  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"
132 133
  echo "  --disable-muxer=NAME     disables muxer NAME"
  echo "  --enable-muxer=NAME      enables muxer NAME"
134
  echo "  --disable-muxers         disables all muxers"
135 136
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
137
  echo "  --disable-demuxers       disables all demuxers"
138 139 140
  echo "  --enable-parser=NAME     enables parser NAME"
  echo "  --disable-parser=NAME    disables parser NAME"
  echo "  --disable-parsers        disables all parsers"
141 142 143 144
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
  exit 1
}
145

146 147 148 149
log(){
    echo "$@" >>$logfile
}

150
log_file(){
M
Måns Rullgård 已提交
151 152 153 154 155
    log BEGIN $1
    cat -n $1 >>$logfile
    log END $1
}

156
echolog(){
M
Måns Rullgård 已提交
157
    log "$@"
158
    echo "$@"
159 160 161 162 163 164 165 166 167
}

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
168
    if enabled logging; then
169 170 171 172 173 174 175 176 177 178
        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
179 180 181 182
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
    exit 1
}

183
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
184 185 186 187
toupper(){
    echo "$@" | tr '[a-z]' '[A-Z]'
}

188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

204
enabled(){
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
    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
232 233 234 235 236 237
}

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

238
save_flags(){
239
    flags_saved && return
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
    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 $*"
}

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

288
check_cmd(){
M
Måns Rullgård 已提交
289
    log "$@"
290
    "$@" >>$logfile 2>&1
291 292
}

293
check_cc(){
294 295
    log check_cc "$@"
    cat >$TMPC
296
    log_file $TMPC
297
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
298 299 300 301
}

check_cpp(){
    log check_cpp "$@"
302
    cat >$TMPC
303
    log_file $TMPC
304
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
305 306 307
}

check_ld(){
308
    log check_ld "$@"
309
    check_cc || return
310
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
311 312 313
}

check_cflags(){
314 315
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
316 317 318 319 320
int x;
EOF
}

check_ldflags(){
321 322 323 324 325
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
int main(){
    return 0;
}
326 327 328 329
EOF
}

check_header(){
330
    log check_header "$@"
331 332
    header=$1
    shift
333
    check_cpp "$@" <<EOF
334 335 336 337 338 339
#include <$header>
int x;
EOF
}

check_func(){
340
    log check_func "$@"
341 342 343 344 345 346 347 348 349 350
    func=$1
    shift
    check_ld "$@" <<EOF
extern int $func();
int main(){
    $func();
}
EOF
}

351 352 353 354 355 356 357 358 359 360 361 362
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
}

363
check_exec(){
364
    check_ld "$@" && { test "$cross_compile" = yes || $TMPE >>$logfile 2>&1; }
365 366 367 368 369 370 371 372
}

require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
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 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423
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
424
    beosthreads
425 426 427 428 429 430 431
    byteswap_h
    dcbzl
    dlfcn
    dlopen
    freetype2
    gprof
    imlib2
M
Måns Rullgård 已提交
432
    inet_aton
433 434 435 436 437
    localtime_r
    lrintf
    malloc_h
    memalign
    mlib
438 439
    os2threads
    pthreads
440 441
    sdl
    sdl_video_size
442 443
    threads
    w32threads
444
'
445

446
# set temporary file name
Z
Zdenek Kabelac 已提交
447
if test ! -z "$TMPDIR" ; then
448
    TMPDIR1="${TMPDIR}"
Z
Zdenek Kabelac 已提交
449
elif test ! -z "$TEMPDIR" ; then
450
    TMPDIR1="${TEMPDIR}"
N
Nick Kurshev 已提交
451
else
452
    TMPDIR1="/tmp"
N
Nick Kurshev 已提交
453 454
fi

455 456
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
457
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
458 459 460
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"

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

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

792
# find source path
793
source_path="`dirname \"$0\"`"
794 795
source_path_used="yes"
if test -z "$source_path" -o "$source_path" = "." ; then
796
    source_path="`pwd`"
797
    source_path_used="no"
798 799
else
    source_path="`cd \"$source_path\"; pwd`"
800 801
    echo "$source_path" | grep -q '[[:blank:]]' &&
      die "Out of tree builds are impossible with whitespace in source path."
F
Fabrice Bellard 已提交
802 803
fi

804 805 806 807
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    show_help
fi

808 809 810 811 812
FFMPEG_CONFIGURATION=" "
for opt do
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
done

813 814 815 816 817
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/'`
818

819 820
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST

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

1017 1018
if test "$logging" != no; then
    test "$logging" = yes || logfile="$logging"
1019 1020
    echo "# $0 $@" >$logfile
    set >>$logfile
1021 1022
else
    logfile=/dev/null
1023
fi
1024

1025 1026 1027 1028 1029 1030 1031 1032 1033 1034
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
1035 1036
    video4linux="no"
    video4linux2="no"
1037 1038 1039 1040 1041 1042
    bktr="no"
    audio_oss="no"
    dv1394="no"
    dc1394="no"
    ffserver="no"
    network="no"
1043 1044 1045
    if enabled mingw32; then
        w32threads="yes"
    fi
1046 1047 1048 1049 1050 1051
    if test "$mingwce" = "yes"; then
        protocols="no"
    fi
    SLIBPREF=""
    SLIBSUF=".dll"
    EXESUF=".exe"
1052 1053
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1054
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1055
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a)"
1056
    if test "$force_prefix" != yes; then PREFIX="$PROGRAMFILES/FFmpeg"; fi
1057 1058
    if test "$force_libdir" != yes; then bindir='${PREFIX}'; fi
    shlibdir='${PREFIX}'
1059 1060
fi

1061 1062
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1063

1064
test -n "$cross_prefix" && cross_compile=yes
1065 1066 1067 1068 1069
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080
# 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

1081
if test "$libvorbis" = "yes" ; then
1082
    if test "$libogg" = "no"; then
D
Diego Biurrun 已提交
1083
        echo "libogg must be enabled to enable Vorbis."
N
Nilesh Bansal 已提交
1084 1085 1086 1087
        fail="yes"
    fi
fi

1088
if test "$gpl" != "yes"; then
1089
    if test "$pp" != "no"; then
D
Diego Biurrun 已提交
1090
        echo "The Postprocessing code is under GPL and --enable-gpl is not specified."
1091 1092 1093 1094
        fail="yes"
    fi

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

1099
    if test "$xvid" != "no"; then
D
Diego Biurrun 已提交
1100
        echo "libxvidcore is under GPL and --enable-gpl is not specified."
1101 1102 1103
        fail="yes"
    fi

1104
    if test "$x264" != "no"; then
D
Diego Biurrun 已提交
1105
        echo "x264 is under GPL and --enable-gpl is not specified."
1106 1107 1108
        fail="yes"
    fi

1109
    if test "$dts" != "no"; then
D
Diego Biurrun 已提交
1110
        echo "libdts is under GPL and --enable-gpl is not specified."
1111 1112
        fail="yes"
    fi
1113

1114
    if test "$faad" != "no" -o "$faadbin" != "no"; then
1115 1116
        if check_header faad.h; then
            check_cc << EOF
1117 1118 1119 1120 1121 1122
                #include <faad.h>
                #ifndef FAAD2_VERSION
                ok faad1
                #endif
                int main( void ) { return 0; }
EOF
1123
            if test $? = 0 ; then
D
Diego Biurrun 已提交
1124
                echo "FAAD2 is under GPL and --enable-gpl is not specified."
1125 1126 1127 1128 1129
                fail="yes"
            fi
        else
            faad="no"
            faadbin="no"
D
Diego Biurrun 已提交
1130
            echo "FAAD test failed."
1131 1132
        fi
    fi
1133

L
Luca Abeni 已提交
1134 1135 1136 1137
    if test "$swscaler" != "no"; then
        echo "The software scaler is under GPL and --enable-gpl is not specified."
        fail="yes"
    fi
1138
fi
1139

1140 1141
if test "$fail" = "yes"; then
    exit 1
1142 1143
fi

D
Diego Biurrun 已提交
1144
# compute MMX state
1145
if test $mmx = "default"; then
1146
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1147 1148 1149 1150 1151 1152
        mmx="yes"
    else
        mmx="no"
    fi
fi

1153
#Darwin CC versions
1154
needmdynamicnopic="no"
1155
if test $targetos = Darwin; then
1156
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1157
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1158
    else
1159 1160 1161
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
        case "$gcc_version" in
            *2.95*)
1162
                add_cflags "-no-cpp-precomp -pipe"
1163 1164
                ;;
            *[34].*)
1165
                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1166 1167 1168 1169 1170
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
            *)
1171
                add_cflags "-no-cpp-precomp -pipe"
1172 1173 1174 1175 1176
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
        esac
1177
    fi
1178 1179 1180 1181
fi

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

1184 1185
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
1186
    if test $arch = "powerpc"; then
1187 1188 1189 1190 1191 1192
        altivec="yes"
    else
        altivec="no"
    fi
fi

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

1274 1275 1276 1277 1278 1279 1280 1281
# 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
1282 1283
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
1284 1285 1286
EOF
    die "Sanity test failed."
fi
1287
rm $TMPE
1288

M
Måns Rullgård 已提交
1289 1290 1291 1292 1293 1294 1295 1296 1297 1298
# 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."
1299
        echo "Only do this if you know what cross compiling means."
M
Måns Rullgård 已提交
1300 1301 1302 1303
    fi
    die "C compiler test failed."
fi

1304 1305
# check for assembler specific support

1306
if test $arch = "powerpc"; then
1307 1308 1309 1310 1311 1312 1313 1314 1315 1316
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

1317 1318
# check for SIMD availability

1319
# AltiVec flags: The FSF version of GCC differs from the Apple version
1320
if test $arch = "powerpc"; then
1321
    if test $altivec = "yes"; then
1322
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1323
            add_cflags "-faltivec"
1324
        else
1325
            add_cflags "-maltivec -mabi=altivec"
1326 1327 1328 1329
        fi
    fi
fi

1330
check_header altivec.h && altivec_h=yes || altivec_h=no
1331

D
Diego Biurrun 已提交
1332
# check if our compiler supports Motorola AltiVec C API
1333
if test $altivec = "yes"; then
1334
    if test $altivec_h = "yes"; then
M
Måns Rullgård 已提交
1335 1336 1337 1338 1339
        inc_altivec_h="#include <altivec.h>"
    else
        inc_altivec_h=
    fi
    check_cc <<EOF || altivec=no
1340
$inc_altivec_h
1341 1342 1343 1344 1345 1346 1347
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
EOF
fi
1348

1349
# check armv5te instructions support
1350
if test $armv5te = "default" -a $arch = "armv4l"; then
1351 1352 1353 1354 1355 1356 1357 1358 1359
    armv5te=no
    check_cc <<EOF && armv5te=yes
        int main(void) {
        __asm__ __volatile__ ("qadd r0, r0, r0");
        }
EOF
fi

# check iwmmxt support
1360
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1361 1362 1363 1364 1365 1366 1367 1368
    iwmmxt=no
    check_cc <<EOF && iwmmxt=yes
        int main(void) {
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
        }
EOF
fi

D
Diego Biurrun 已提交
1369
# mmi only available on mips
1370
if test $mmi = "default"; then
1371
    if test $arch = "mips"; then
1372 1373 1374 1375 1376 1377
        mmi="yes"
    else
        mmi="no"
    fi
fi

D
Diego Biurrun 已提交
1378
# check if our compiler supports mmi
1379
enabled mmi && check_cc <<EOF || mmi="no"
1380 1381 1382 1383 1384
int main(void) {
    __asm__ ("lq \$2, 0(\$2)");
    return 0;
}
EOF
1385 1386 1387

# ---
# big/little-endian test
1388
if test "$cross_compile" = "no"; then
1389
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1390 1391
#include <inttypes.h>
int main(int argc, char ** argv){
1392 1393
        volatile uint32_t i=0x01234567;
        return (*((uint8_t*)(&i))) == 0x67;
1394 1395
}
EOF
F
Fabrice Bellard 已提交
1396
else
M
Måns Rullgård 已提交
1397
    # programs cannot be launched if cross compiling, so make a static guess
1398
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
M
Måns Rullgård 已提交
1399 1400
        bigendian="yes"
    fi
F
Fabrice Bellard 已提交
1401 1402
fi

N
Nick Kurshev 已提交
1403 1404 1405
# ---
# check availability of some header files

1406
memalign=no
1407
malloc_h=no
1408
if check_header malloc.h; then
1409
    malloc_h=yes
1410 1411
    memalign=yes
    check_func memalign || memalign="no"
N
Nick Kurshev 已提交
1412 1413
fi

1414
if test "$memalign" = "no" -a "$mmx" = "yes" -a \
1415
        "$memalign_hack" != "yes" -a "$targetos" != "Darwin" -a \
1416
        "$targetos" != "FreeBSD" ; then
1417
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1418 1419
fi

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

M
Måns Rullgård 已提交
1422
check_func inet_aton && inet_aton=yes || inet_aton=no
1423
check_func localtime_r && localtime_r=yes || localtime_r=no
1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436
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
1437
enabled dts     && require libdts dts.h dts_init -ldts -lm
1438
enabled libgsm  && require libgsm gsm.h gsm_create -lgsm
1439
enabled mp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1440
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1441
enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
1442
enabled libnut  && require libnut libnut.h nut_demuxer_init -lnut
1443 1444 1445
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
1446
enabled mlib    && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1447

1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464
# 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

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

1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495
# 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


1496
# test for lrintf in math.h
M
Måns Rullgård 已提交
1497
check_exec <<EOF && lrintf=yes || lrintf=no
1498 1499 1500 1501 1502
#define _ISOC9X_SOURCE  1
#include <math.h>
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
EOF

F
Falk Hüffner 已提交
1503 1504
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1505
    check_cc <<EOF && _restrict=$restrict_keyword && break
1506 1507
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
1508 1509
done

1510 1511
# dlopen/dlfcn.h probing

1512
check_header dlfcn.h && dlfcn=yes
1513

1514 1515 1516 1517
temp_extralibs -ldl
if check_func dlopen; then
    dlopen=yes
    ldl=-ldl
1518
fi
1519
restore_flags
1520

1521 1522 1523
if check_func dlopen; then
    dlopen=yes
    ldl=
1524 1525
fi

M
Måns Rullgård 已提交
1526 1527
if test "$vhook" = "default"; then
    vhook="$dlopen"
1528 1529
fi

M
Måns Rullgård 已提交
1530
if enabled_any vhook a52bin faadbin; then
1531
    add_extralibs $ldl
M
Michael Niedermayer 已提交
1532 1533
fi

1534 1535 1536 1537 1538 1539 1540 1541
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

1542 1543 1544 1545
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
M
Michael Niedermayer 已提交
1546

1547
##########################################
D
Diego Biurrun 已提交
1548
# imlib check
1549

1550 1551
temp_extralibs -lImlib2
check_ld <<EOF && imlib2=yes || imlib2=no
1552 1553 1554 1555
#include <X11/Xlib.h>
#include <Imlib2.h>
int main( void ) { return (int) imlib_load_font("foo"); }
EOF
1556
restore_flags
1557

1558
##########################################
D
Diego Biurrun 已提交
1559
# FreeType check
1560

1561
freetype2=no
1562
if test "x$targetos" != "xBeOS"; then
1563
  if (freetype-config --version) >/dev/null 2>&1 ; then
1564 1565 1566 1567 1568 1569 1570
      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
1571
  fi
1572 1573
fi

1574
##########################################
D
Diego Biurrun 已提交
1575
# SDL check
1576 1577 1578

sdl_too_old=no
sdl=no
1579 1580
SDL_CONFIG="${cross_prefix}sdl-config"
if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
1581 1582 1583 1584 1585 1586 1587 1588 1589
    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'`
1590
        if test "$_sdlversion" -lt 121 ; then
1591 1592 1593
            sdl_too_old=yes
        else
            sdl=yes
1594 1595 1596 1597 1598 1599 1600 1601
            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
1602 1603
        fi
    fi
1604
    restore_flags
M
Michael Niedermayer 已提交
1605
fi
1606

1607 1608
enabled sdl || ffplay=no

1609
##########################################
D
Diego Biurrun 已提交
1610
# texi2html check
1611 1612

texi2html=no
1613
if (texi2html -version) >/dev/null 2>&1; then
1614 1615 1616
texi2html=yes
fi

1617
##########################################
D
Diego Biurrun 已提交
1618
# IPv6 check
1619

1620
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1621 1622 1623 1624 1625 1626 1627 1628 1629
#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);
1630
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1631 1632 1633
}
EOF

1634
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1635
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1636
#include <sys/time.h>
1637 1638
#include <asm/types.h>
#include <linux/videodev2.h>
1639
int dummy = V4L2_PIX_FMT_YUV420;
1640
struct v4l2_buffer dummy1;
1641 1642
EOF

1643 1644 1645 1646
enabled debug && add_cflags -g

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
1647 1648
check_cflags -Wall
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
1649 1650 1651
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
1652
enabled extrawarnings && check_cflags -Winline
1653

1654
# add some linker flags
1655
check_ldflags $LDLATEFLAGS
F
Fabrice Bellard 已提交
1656

1657 1658
# not all compilers support -Os
test "$optimize" = "small" && check_cflags -Os
1659

1660
if enabled optimize; then
1661
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1662 1663
        add_cflags  "-O5"
        add_ldflags "-O5"
1664
    else
1665
        add_cflags "-O3"
1666
    fi
1667 1668
fi

1669 1670
# PIC flags for shared library objects where they are needed
if test "$lshared" = "yes" ; then
M
Måns Rullgård 已提交
1671 1672
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
1673
        case "$arch" in
1674 1675
            x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
        esac
1676 1677 1678
    fi
fi

1679
if test "$gprof" = "yes" ; then
1680 1681
    add_cflags  "-p"
    add_ldflags "-p"
1682 1683
fi

1684 1685 1686
VHOOKCFLAGS="-fPIC $CFLAGS"
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic

1687 1688 1689 1690 1691 1692
# 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

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

M
Måns Rullgård 已提交
1747 1748 1749
if test "$vhook" = "yes"; then
    echo "Imlib2 support   $imlib2"
    echo "FreeType support $freetype2"
1750
fi
1751
echo "Sun medialib support"  $mlib
1752
echo "pthreads support"      $pthreads
Z
Zdenek Kabelac 已提交
1753 1754
echo "AMR-NB float support"  $amr_nb
echo "AMR-NB fixed support"  $amr_nb_fixed
1755
echo "AMR-WB float support"  $amr_wb
1756
echo "AMR-WB IF2 support"    $amr_if2
1757 1758
echo "network support      $network"
if test "$network" = "yes" ; then
M
Måns Rullgård 已提交
1759
    echo "IPv6 support         $ipv6"
1760
fi
1761
echo ".align is power-of-two" $asmalign_pot
1762
if test "$gpl" = "no" ; then
M
Måns Rullgård 已提交
1763
    echo "License: LGPL"
1764
else
M
Måns Rullgård 已提交
1765
    echo "License: GPL"
1766
fi
F
Fabrice Bellard 已提交
1767

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

1770 1771
date >> config.log
echo "   $0 $FFMPEG_CONFIGURATION" >> config.log
D
Diego Biurrun 已提交
1772 1773
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1774
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
F
Fabrice Bellard 已提交
1775

1776 1777
echo "PREFIX=$PREFIX" >> config.mak
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1778
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1779
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
D
Diego Biurrun 已提交
1780
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1781 1782
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1783
echo "MAKE=$make" >> config.mak
1784 1785
echo "CC=$cc" >> config.mak
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
1786
echo "RANLIB=$ranlib" >> config.mak
1787
if test "$dostrip" = "yes" ; then
M
Måns Rullgård 已提交
1788 1789
    echo "STRIP=$strip" >> config.mak
    echo "INSTALLSTRIP=$installstrip" >> config.mak
1790
else
M
Måns Rullgård 已提交
1791 1792
    echo "STRIP=echo ignoring strip" >> config.mak
    echo "INSTALLSTRIP=" >> config.mak
1793
fi
1794

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

1905 1906 1907
if test "$altivec" = "yes" ; then
  echo "TARGET_ALTIVEC=yes" >> config.mak
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1908
fi
1909

1910
if test "$sdl" = "yes" ; then
1911 1912
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1913
fi
1914 1915 1916
if test "$texi2html" = "yes"; then
  echo "BUILD_DOC=yes" >> config.mak
fi
L
Luca Barbato 已提交
1917

L
Luca Abeni 已提交
1918
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1919
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
L
Luca Barbato 已提交
1920 1921 1922 1923 1924 1925
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 已提交
1926
if test "$lshared" = "yes" ; then
1927
  echo "#define BUILD_SHARED_AV 1" >> $TMPH
N
Nick Kurshev 已提交
1928
  echo "BUILD_SHARED=yes" >> config.mak
1929
  echo "PIC=-fPIC -DPIC" >> config.mak
1930
  echo "SPPMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1931
  echo "SPPVERSION=$lavc_version" >> config.mak
1932
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1933
  echo "LAVCVERSION=$lavc_version" >> config.mak
1934
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1935
  echo "LAVFVERSION=$lavf_version" >> config.mak
1936
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1937
  echo "LAVUVERSION=$lavu_version" >> config.mak
L
Luca Abeni 已提交
1938 1939
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
  echo "SWSVERSION=$sws_version" >> config.mak
1940
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1941 1942
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1943
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
N
Nick Kurshev 已提交
1944
fi
1945
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1946
echo "EXTRALIBS=$extralibs" >> config.mak
1947

1948 1949 1950 1951
enabled_any $ENCODER_LIST && enable encoders
enabled_any $DECODER_LIST && enable decoders
enabled_any $MUXER_LIST   && enable muxers
enabled_any $DEMUXER_LIST && enable demuxers
1952

1953 1954
enabled_any pthreads beosthreads os2threads w32threads && enable threads

1955 1956
print_config HAVE_   $TMPH config.mak $HAVE_LIST
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1957

1958
if test "$mingw32" = "yes" ; then
1959
  echo "#ifndef __MINGW32__" >> $TMPH
1960
  echo "#define __MINGW32__ 1" >> $TMPH
1961
  echo "#endif" >> $TMPH
1962 1963
fi

G
Gildas Bazin 已提交
1964 1965 1966 1967 1968 1969 1970
if test "$mingwce" = "yes" ; then
  echo "#define CONFIG_WINCE 1" >> $TMPH
  echo "#ifndef __MINGW32__" >> $TMPH
  echo "#define __MINGW32__ 1" >> $TMPH
  echo "#endif" >> $TMPH
fi

1971 1972
if test "$os2" = "yes" ; then
  echo "#define CONFIG_OS2 1" >> $TMPH
1973 1974
fi

1975
if test "$targetos" = "Darwin"; then
1976 1977 1978
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
fi

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

1981 1982
if test "$optimize" = "small"; then
  echo "#define always_inline"  >> $TMPH
1983
  echo "#define CONFIG_SMALL 1" >> $TMPH
1984 1985
fi

1986 1987 1988
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1989

1990 1991 1992 1993
if test "$amr_if2" = "yes" ; then
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi

1994
# Apparently it's not possible to portably echo a backslash.
1995
if test "$asmalign_pot" = "yes" ; then
1996
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1997
else
1998
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1999 2000
fi

Z
Zdenek Kabelac 已提交
2001

2002
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2003
    ucname="`toupper $codec`"
2004 2005 2006 2007 2008 2009 2010 2011 2012
    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
2013 2014
done

2015
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
M
Måns Rullgård 已提交
2016
if ! cmp -s $TMPH config.h; then
2017 2018 2019 2020
        mv -f $TMPH config.h
else
        echo "config.h is unchanged"
fi
N
Nick Kurshev 已提交
2021

2022
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2023

2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063
# 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
2064

D
Diego Biurrun 已提交
2065
# build pkg-config files libav*.pc and libpostproc.pc
2066 2067
# libavutil.pc
cat <<EOF >libavutil.pc
2068
prefix=$PREFIX
2069
exec_prefix=\${prefix}
2070
libdir=\${exec_prefix}/lib
2071
includedir=\${prefix}/include
2072 2073 2074 2075

Name: libavutil
Description: FFmpeg utility library
Version: $lavu_version
2076
Requires:
2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090
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
2091
Requires:
2092 2093 2094 2095
Conflicts:
Libs: \${libdir}/${LIBPREF}avutil${LIBSUF}
Cflags: -I\${includedir}
EOF
2096 2097 2098

# libavcodec.pc
cat <<EOF >libavcodec.pc
2099
prefix=$PREFIX
2100
exec_prefix=\${prefix}
2101
libdir=\${exec_prefix}/lib
2102
includedir=\${prefix}/include
2103 2104 2105

Name: libavcodec
Description: FFmpeg codec library
2106
Version: $lavc_version
2107
Requires: $pkg_requires libavutil = $lavu_version
2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120
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
2121
Version: $lavc_version
2122
Requires: $pkg_requires libavutil = $lavu_version
2123 2124 2125 2126 2127 2128 2129
Conflicts:
Libs: \${libdir}/${LIBPREF}avcodec${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF

# libavformat.pc
cat <<EOF >libavformat.pc
2130
prefix=$PREFIX
2131
exec_prefix=\${prefix}
2132
libdir=\${exec_prefix}/lib
2133
includedir=\${prefix}/include
2134 2135 2136

Name: libavformat
Description: FFmpeg container format library
2137
Version: $lavf_version
2138
Requires: $pkg_requires libavcodec = $lavc_version
2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151
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
2152
Version: $lavf_version
2153
Requires: $pkg_requires libavcodec = $lavc_version
2154 2155 2156 2157 2158 2159 2160 2161
Conflicts:
Libs: \${libdir}/${LIBPREF}avformat${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF


# libpostproc.pc
cat <<EOF >libpostproc.pc
2162
prefix=$PREFIX
2163
exec_prefix=\${prefix}
2164
libdir=\${exec_prefix}/lib
2165
includedir=\${prefix}/include
2166 2167 2168

Name: libpostproc
Description: FFmpeg post processing library
2169
Version: $lavc_version
2170
Requires:
2171 2172 2173 2174 2175 2176 2177 2178
Conflicts:
Libs: -L\${libdir} -lpostproc
Cflags: -I\${includedir} -I\${includedir}/postproc
EOF

cat <<EOF >libpostproc-uninstalled.pc
prefix=
exec_prefix=
2179 2180
libdir=\${pcfiledir}/libpostproc
includedir=\${pcfiledir}/libpostproc
2181 2182 2183

Name: libpostproc
Description: FFmpeg post processing library
2184
Version: $lavc_version
2185
Requires:
2186 2187 2188 2189
Conflicts:
Libs: \${libdir}/${LIBPREF}postproc${LIBSUF}
Cflags: -I\${includedir}
EOF
L
Luca Abeni 已提交
2190

2191 2192 2193 2194 2195 2196 2197 2198 2199
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 已提交
2200 2201 2202 2203 2204 2205 2206 2207 2208 2209
# 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
2210
Requires: $sws_pc_requires
L
Luca Abeni 已提交
2211
Conflicts:
2212
Libs: $sws_pc_libs
L
Luca Abeni 已提交
2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224
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
2225
Requires: $sws_pc_requires
L
Luca Abeni 已提交
2226
Conflicts:
2227
Libs: $sws_pc_uninstalled_libs
L
Luca Abeni 已提交
2228 2229
Cflags: -I\${includedir}
EOF