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

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

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

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

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

if test "$E1" != 0 || test "$E2" = 0; then
    echo "Broken shell detected.  Trying alternatives."
27 28 29 30 31 32 33 34 35 36 37 38
    export FF_CONF_EXEC
    if test "0$FF_CONF_EXEC" -lt 1; then
        FF_CONF_EXEC=1
        try_exec bash "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 2; then
        FF_CONF_EXEC=2
        try_exec ksh "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 3; then
        FF_CONF_EXEC=3
        try_exec /usr/xpg4/bin/sh "$0" "$@"
39 40
    fi
    echo "No compatible shell script interpreter found."
41 42 43 44 45 46
    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
47 48 49
    exit 1
fi

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

157 158 159 160
log(){
    echo "$@" >>$logfile
}

161
log_file(){
M
Måns Rullgård 已提交
162 163 164 165 166
    log BEGIN $1
    cat -n $1 >>$logfile
    log END $1
}

167
echolog(){
M
Måns Rullgård 已提交
168
    log "$@"
169
    echo "$@"
170 171 172 173 174 175 176 177 178
}

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
179
    if enabled logging; then
180 181 182 183 184 185 186 187 188 189
        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
190 191 192 193
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
    exit 1
}

194
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
195 196 197 198
toupper(){
    echo "$@" | tr '[a-z]' '[A-Z]'
}

199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

215
enabled(){
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
    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
243 244 245 246 247 248
}

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

249
save_flags(){
250
    flags_saved && return
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
    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 $*"
}

280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298
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 "$@"
}

299
check_cmd(){
M
Måns Rullgård 已提交
300
    log "$@"
301
    "$@" >>$logfile 2>&1
302 303
}

304
check_cc(){
305 306
    log check_cc "$@"
    cat >$TMPC
307
    log_file $TMPC
308
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
309 310 311 312
}

check_cpp(){
    log check_cpp "$@"
313
    cat >$TMPC
314
    log_file $TMPC
315
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
316 317 318
}

check_ld(){
319
    log check_ld "$@"
320
    check_cc || return
321
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
322 323 324
}

check_cflags(){
325 326
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
327 328 329 330 331
int x;
EOF
}

check_ldflags(){
332 333 334 335 336
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
int main(){
    return 0;
}
337 338 339 340
EOF
}

check_header(){
341
    log check_header "$@"
342 343
    header=$1
    shift
344
    check_cpp "$@" <<EOF
345 346 347
#include <$header>
int x;
EOF
348
    err=$?
349
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
350 351
    test "$err" = 0 && enable $var || disable $var
    return $err
352 353 354
}

check_func(){
355
    log check_func "$@"
356 357 358 359 360 361 362 363
    func=$1
    shift
    check_ld "$@" <<EOF
extern int $func();
int main(){
    $func();
}
EOF
364 365 366
    err=$?
    test "$err" = 0 && enable $func || disable $func
    return $err
367 368
}

369 370 371 372 373 374 375 376 377 378 379 380
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
}

381
check_exec(){
382
    check_ld "$@" && { test "$cross_compile" = yes || $TMPE >>$logfile 2>&1; }
383 384 385 386 387 388 389 390
}

require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
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 424 425 426 427 428 429 430 431 432 433 434
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
435
    wince
436 437 438 439 440 441 442
    x264
    xvid
    zlib
'

HAVE_LIST='
    altivec_h
443
    beosthreads
444 445
    byteswap_h
    dcbzl
446
    dlfcn_h
447 448 449 450
    dlopen
    freetype2
    gprof
    imlib2
M
Måns Rullgård 已提交
451
    inet_aton
452 453 454 455 456
    localtime_r
    lrintf
    malloc_h
    memalign
    mlib
M
Måns Rullgård 已提交
457
    os2
458 459
    os2threads
    pthreads
460 461
    sdl
    sdl_video_size
462 463
    threads
    w32threads
464
'
465

466
# set temporary file name
Z
Zdenek Kabelac 已提交
467
if test ! -z "$TMPDIR" ; then
468
    TMPDIR1="${TMPDIR}"
Z
Zdenek Kabelac 已提交
469
elif test ! -z "$TEMPDIR" ; then
470
    TMPDIR1="${TEMPDIR}"
N
Nick Kurshev 已提交
471
else
472
    TMPDIR1="/tmp"
N
Nick Kurshev 已提交
473 474
fi

475 476
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
477
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
478 479 480
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"

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

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

812
# find source path
813
source_path="`dirname \"$0\"`"
814 815
source_path_used="yes"
if test -z "$source_path" -o "$source_path" = "." ; then
816
    source_path="`pwd`"
817
    source_path_used="no"
818 819
else
    source_path="`cd \"$source_path\"; pwd`"
820 821
    echo "$source_path" | grep -q '[[:blank:]]' &&
      die "Out of tree builds are impossible with whitespace in source path."
F
Fabrice Bellard 已提交
822 823
fi

824 825 826 827
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    show_help
fi

828 829 830 831 832
FFMPEG_CONFIGURATION=" "
for opt do
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
done

833 834 835
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
836 837
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
838

839 840
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST

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

1037 1038
if test "$logging" != no; then
    test "$logging" = yes || logfile="$logging"
1039 1040
    echo "# $0 $@" >$logfile
    set >>$logfile
1041 1042
else
    logfile=/dev/null
1043
fi
1044

1045
if test "$mingw32" = "yes" -o "$wince" = "yes"; then
1046 1047 1048 1049 1050 1051 1052 1053 1054
    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
1055 1056
    video4linux="no"
    video4linux2="no"
1057 1058 1059 1060 1061 1062
    bktr="no"
    audio_oss="no"
    dv1394="no"
    dc1394="no"
    ffserver="no"
    network="no"
1063 1064 1065
    if enabled mingw32; then
        w32threads="yes"
    fi
1066
    if test "$wince" = "yes"; then
1067 1068 1069 1070 1071
        protocols="no"
    fi
    SLIBPREF=""
    SLIBSUF=".dll"
    EXESUF=".exe"
1072 1073
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1074
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1075
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1076 1077
fi

1078 1079
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1080

1081
test -n "$cross_prefix" && cross_compile=yes
1082 1083 1084 1085 1086
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097
# 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

1098
if test "$libvorbis" = "yes" ; then
1099
    if test "$libogg" = "no"; then
D
Diego Biurrun 已提交
1100
        echo "libogg must be enabled to enable Vorbis."
N
Nilesh Bansal 已提交
1101 1102 1103 1104
        fail="yes"
    fi
fi

1105
if test "$gpl" != "yes"; then
1106
    if test "$pp" != "no"; then
D
Diego Biurrun 已提交
1107
        echo "The Postprocessing code is under GPL and --enable-gpl is not specified."
1108 1109 1110 1111
        fail="yes"
    fi

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

1116
    if test "$xvid" != "no"; then
D
Diego Biurrun 已提交
1117
        echo "libxvidcore is under GPL and --enable-gpl is not specified."
1118 1119 1120
        fail="yes"
    fi

1121
    if test "$x264" != "no"; then
D
Diego Biurrun 已提交
1122
        echo "x264 is under GPL and --enable-gpl is not specified."
1123 1124 1125
        fail="yes"
    fi

1126
    if test "$dts" != "no"; then
D
Diego Biurrun 已提交
1127
        echo "libdts is under GPL and --enable-gpl is not specified."
1128 1129
        fail="yes"
    fi
1130

1131
    if test "$faad" != "no" -o "$faadbin" != "no"; then
1132 1133
        if check_header faad.h; then
            check_cc << EOF
1134 1135 1136 1137 1138 1139
                #include <faad.h>
                #ifndef FAAD2_VERSION
                ok faad1
                #endif
                int main( void ) { return 0; }
EOF
1140
            if test $? = 0 ; then
D
Diego Biurrun 已提交
1141
                echo "FAAD2 is under GPL and --enable-gpl is not specified."
1142 1143 1144 1145 1146
                fail="yes"
            fi
        else
            faad="no"
            faadbin="no"
D
Diego Biurrun 已提交
1147
            echo "FAAD test failed."
1148 1149
        fi
    fi
1150

L
Luca Abeni 已提交
1151 1152 1153 1154
    if test "$swscaler" != "no"; then
        echo "The software scaler is under GPL and --enable-gpl is not specified."
        fail="yes"
    fi
1155
fi
1156

1157 1158
if test "$fail" = "yes"; then
    exit 1
1159 1160
fi

D
Diego Biurrun 已提交
1161
# compute MMX state
1162
if test $mmx = "default"; then
1163
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1164 1165 1166 1167 1168 1169
        mmx="yes"
    else
        mmx="no"
    fi
fi

1170
#Darwin CC versions
1171
needmdynamicnopic="no"
1172
if test $targetos = Darwin; then
1173
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1174
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1175
    else
1176 1177 1178
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
        case "$gcc_version" in
            *2.95*)
1179
                add_cflags "-no-cpp-precomp -pipe"
1180 1181
                ;;
            *[34].*)
1182
                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1183 1184 1185 1186 1187
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
            *)
1188
                add_cflags "-no-cpp-precomp -pipe"
1189 1190 1191 1192 1193
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
        esac
1194
    fi
1195 1196 1197 1198
fi

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

1201 1202
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
1203
    if test $arch = "powerpc"; then
1204 1205 1206 1207 1208 1209
        altivec="yes"
    else
        altivec="no"
    fi
fi

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

1283 1284 1285 1286 1287 1288 1289 1290
# 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
1291 1292
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
1293 1294 1295
EOF
    die "Sanity test failed."
fi
1296
rm $TMPE
1297

M
Måns Rullgård 已提交
1298 1299 1300 1301 1302 1303 1304 1305 1306 1307
# 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."
1308
        echo "Only do this if you know what cross compiling means."
M
Måns Rullgård 已提交
1309 1310 1311 1312
    fi
    die "C compiler test failed."
fi

1313 1314
# check for assembler specific support

1315
if test $arch = "powerpc"; then
1316 1317 1318 1319 1320 1321 1322 1323 1324 1325
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

1326 1327
# check for SIMD availability

1328
# AltiVec flags: The FSF version of GCC differs from the Apple version
1329
if test $arch = "powerpc"; then
1330
    if test $altivec = "yes"; then
1331
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1332
            add_cflags "-faltivec"
1333
        else
1334
            add_cflags "-maltivec -mabi=altivec"
1335 1336 1337 1338
        fi
    fi
fi

1339
check_header altivec.h
1340

D
Diego Biurrun 已提交
1341
# check if our compiler supports Motorola AltiVec C API
1342
if test $altivec = "yes"; then
1343
    if test $altivec_h = "yes"; then
M
Måns Rullgård 已提交
1344 1345 1346 1347 1348
        inc_altivec_h="#include <altivec.h>"
    else
        inc_altivec_h=
    fi
    check_cc <<EOF || altivec=no
1349
$inc_altivec_h
1350 1351 1352 1353 1354 1355 1356
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
EOF
fi
1357

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

# check iwmmxt support
1369
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1370 1371 1372 1373 1374 1375 1376 1377
    iwmmxt=no
    check_cc <<EOF && iwmmxt=yes
        int main(void) {
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
        }
EOF
fi

D
Diego Biurrun 已提交
1378
# mmi only available on mips
1379
if test $mmi = "default"; then
1380
    if test $arch = "mips"; then
1381 1382 1383 1384 1385 1386
        mmi="yes"
    else
        mmi="no"
    fi
fi

D
Diego Biurrun 已提交
1387
# check if our compiler supports mmi
1388
enabled mmi && check_cc <<EOF || mmi="no"
1389 1390 1391 1392 1393
int main(void) {
    __asm__ ("lq \$2, 0(\$2)");
    return 0;
}
EOF
1394 1395 1396

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

N
Nick Kurshev 已提交
1412 1413 1414
# ---
# check availability of some header files

1415 1416
check_header malloc.h
check_func memalign
N
Nick Kurshev 已提交
1417

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

1424
check_header byteswap.h
M
Måns Rullgård 已提交
1425

1426 1427
check_func inet_aton
check_func localtime_r
1428 1429 1430 1431 1432
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"

# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if enabled pthreads; then
M
Måns Rullgård 已提交
1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
        add_ldflags -pthread
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
        add_ldflags -pthreads
    elif ! check_lib pthread.h pthread_create -lpthread; then
        die "ERROR: can't find pthreads library"
    fi
1444 1445 1446
fi

# these are off by default, so fail if requested and not available
1447
enabled dts     && require libdts dts.h dts_init -ldts -lm
1448
enabled libgsm  && require libgsm gsm.h gsm_create -lgsm
1449
enabled mp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1450
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1451
enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
1452
enabled libnut  && require libnut libnut.h nut_demuxer_init -lnut
1453 1454 1455
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
1456
enabled mlib    && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1457

1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474
# 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

1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489
# 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

1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505
# 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


1506
# test for lrintf in math.h
M
Måns Rullgård 已提交
1507
check_exec <<EOF && lrintf=yes || lrintf=no
1508 1509 1510 1511 1512
#define _ISOC9X_SOURCE  1
#include <math.h>
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
EOF

F
Falk Hüffner 已提交
1513 1514
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1515
    check_cc <<EOF && _restrict=$restrict_keyword && break
1516 1517
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
1518 1519
done

1520 1521
# dlopen/dlfcn.h probing

1522
check_header dlfcn.h
1523

1524 1525
if check_func dlopen; then
    ldl=
1526 1527
elif check_func dlopen -ldl; then
    ldl=-ldl
1528 1529
fi

M
Måns Rullgård 已提交
1530 1531
if test "$vhook" = "default"; then
    vhook="$dlopen"
1532 1533
fi

M
Måns Rullgård 已提交
1534
if enabled_any vhook a52bin faadbin; then
1535
    add_extralibs $ldl
M
Michael Niedermayer 已提交
1536 1537
fi

1538 1539 1540 1541 1542 1543 1544 1545
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

1546 1547 1548 1549
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
M
Michael Niedermayer 已提交
1550

1551 1552 1553 1554
if enabled audio_beos; then
    add_extralibs "-lmedia -lbe"
fi

1555
##########################################
D
Diego Biurrun 已提交
1556
# imlib check
1557

1558 1559
temp_extralibs -lImlib2
check_ld <<EOF && imlib2=yes || imlib2=no
1560 1561 1562 1563
#include <X11/Xlib.h>
#include <Imlib2.h>
int main( void ) { return (int) imlib_load_font("foo"); }
EOF
1564
restore_flags
1565

1566
##########################################
D
Diego Biurrun 已提交
1567
# FreeType check
1568

1569
freetype2=no
1570
if test "x$targetos" != "xBeOS"; then
1571
  if (freetype-config --version) >/dev/null 2>&1 ; then
1572 1573 1574 1575 1576 1577 1578
      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
1579
  fi
1580 1581
fi

1582
##########################################
D
Diego Biurrun 已提交
1583
# SDL check
1584 1585 1586

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

1615 1616
enabled sdl || ffplay=no

1617
##########################################
D
Diego Biurrun 已提交
1618
# texi2html check
1619 1620

texi2html=no
1621
if (texi2html -version) >/dev/null 2>&1; then
1622 1623 1624
texi2html=yes
fi

1625
##########################################
D
Diego Biurrun 已提交
1626
# IPv6 check
1627

1628
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1629 1630 1631 1632 1633 1634 1635 1636 1637
#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);
1638
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1639 1640 1641
}
EOF

1642
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1643
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1644
#include <sys/time.h>
1645 1646
#include <asm/types.h>
#include <linux/videodev2.h>
1647
int dummy = V4L2_PIX_FMT_YUV420;
1648
struct v4l2_buffer dummy1;
1649 1650
EOF

1651 1652 1653 1654
enabled debug && add_cflags -g

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
1655 1656
check_cflags -Wall
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
1657 1658 1659
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
1660
enabled extrawarnings && check_cflags -Winline
1661

1662
# add some linker flags
1663
check_ldflags $LDLATEFLAGS
F
Fabrice Bellard 已提交
1664

1665 1666
# not all compilers support -Os
test "$optimize" = "small" && check_cflags -Os
1667

1668
if enabled optimize; then
1669
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1670 1671
        add_cflags  "-O5"
        add_ldflags "-O5"
1672
    else
1673
        add_cflags "-O3"
1674
    fi
1675 1676
fi

1677 1678
# PIC flags for shared library objects where they are needed
if test "$lshared" = "yes" ; then
M
Måns Rullgård 已提交
1679 1680
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
1681
        case "$arch" in
1682 1683
            x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
        esac
1684 1685 1686
    fi
fi

1687
if test "$gprof" = "yes" ; then
1688 1689
    add_cflags  "-p"
    add_ldflags "-p"
1690 1691
fi

1692 1693 1694
VHOOKCFLAGS="-fPIC $CFLAGS"
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic

1695 1696 1697 1698 1699 1700
# 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

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

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

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

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

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

N
Nick Kurshev 已提交
1801
echo "OPTFLAGS=$CFLAGS" >> config.mak
1802
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1803
echo "LDFLAGS=$LDFLAGS" >> config.mak
1804
echo "LDCONFIG=$LDCONFIG" >> config.mak
1805
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1806
echo "SHFLAGS=$SHFLAGS" >> config.mak
1807
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1808
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1809
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1810
echo "BUILD_STATIC=$lstatic" >> config.mak
1811
echo "BUILDSUF=$BUILDSUF" >> config.mak
1812
echo "LIBPREF=$LIBPREF" >> config.mak
1813
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1814 1815
if test "$lstatic" = "yes" ; then
  echo "LIB=$LIB" >> config.mak
1816 1817
else # Some Make complain if this variable does not exist.
  echo "LIB=" >> config.mak
1818
fi
1819
echo "SLIBPREF=$SLIBPREF" >> config.mak
1820 1821
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1822
echo "TARGET_OS=$targetos" >> config.mak
M
Måns Rullgård 已提交
1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847

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

# special cases
case "$arch" in
    x86_32|x86_64)
        echo "TARGET_ARCH_X86=yes" >> config.mak
        echo "#define ARCH_X86 1" >> $TMPH
        ;;
    powerpc)
        if test "$POWERPCMODE" = "64bits"; then
            echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
        fi
        if test "$powerpc_perf" = "yes"; then
            echo "#define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
        fi
        ;;
    sparc64)
        echo "TARGET_ARCH_SPARC=yes" >> config.mak
        echo "#define ARCH_SPARC 1" >> $TMPH
        ;;
esac

1848 1849 1850
if test "$bigendian" = "yes" ; then
  echo "WORDS_BIGENDIAN=yes" >> config.mak
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1851
fi
Z
Zdenek Kabelac 已提交
1852
if test "$mmx" = "yes" ; then
1853
  echo "TARGET_MMX=yes" >> config.mak
1854
  echo "#define HAVE_MMX 1" >> $TMPH
M
Michael Niedermayer 已提交
1855
  echo "#define __CPU__ 586" >> $TMPH
F
Fabrice Bellard 已提交
1856
fi
1857 1858 1859 1860
if test "$cmov" = "yes" ; then
  echo "TARGET_CMOV=yes" >> config.mak
  echo "#define HAVE_CMOV 1" >> $TMPH
fi
1861 1862 1863 1864
if test "$cmov_is_fast" = "yes" ; then
  echo "TARGET_CMOV_IS_FAST=yes" >> config.mak
  echo "#define CMOV_IS_FAST 1" >> $TMPH
fi
1865 1866 1867 1868
if test "$armv5te" = "yes" ; then
  echo "TARGET_ARMV5TE=yes" >> config.mak
  echo "#define HAVE_ARMV5TE 1" >> $TMPH
fi
1869 1870 1871 1872
if test "$iwmmxt" = "yes" ; then
  echo "TARGET_IWMMXT=yes" >> config.mak
  echo "#define HAVE_IWMMXT 1" >> $TMPH
fi
1873 1874 1875 1876
if test "$mmi" = "yes" ; then
  echo "TARGET_MMI=yes" >> config.mak
  echo "#define HAVE_MMI 1" >> $TMPH
fi
1877

1878 1879 1880
if test "$altivec" = "yes" ; then
  echo "TARGET_ALTIVEC=yes" >> config.mak
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1881
fi
1882

1883
if test "$sdl" = "yes" ; then
1884 1885
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1886
fi
1887 1888 1889
if test "$texi2html" = "yes"; then
  echo "BUILD_DOC=yes" >> config.mak
fi
L
Luca Barbato 已提交
1890

L
Luca Abeni 已提交
1891
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1892
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
L
Luca Barbato 已提交
1893 1894 1895 1896 1897 1898
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 已提交
1899
if test "$lshared" = "yes" ; then
N
Nick Kurshev 已提交
1900
  echo "BUILD_SHARED=yes" >> config.mak
1901
  echo "PIC=-fPIC -DPIC" >> config.mak
1902
  echo "SPPMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1903
  echo "SPPVERSION=$lavc_version" >> config.mak
1904
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1905
  echo "LAVCVERSION=$lavc_version" >> config.mak
1906
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1907
  echo "LAVFVERSION=$lavf_version" >> config.mak
1908
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1909
  echo "LAVUVERSION=$lavu_version" >> config.mak
L
Luca Abeni 已提交
1910 1911
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
  echo "SWSVERSION=$sws_version" >> config.mak
1912
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1913 1914
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1915
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
N
Nick Kurshev 已提交
1916
fi
1917
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1918
echo "EXTRALIBS=$extralibs" >> config.mak
1919

1920 1921 1922 1923
enabled_any $ENCODER_LIST && enable encoders
enabled_any $DECODER_LIST && enable decoders
enabled_any $MUXER_LIST   && enable muxers
enabled_any $DEMUXER_LIST && enable demuxers
1924

1925 1926
enabled_any pthreads beosthreads os2threads w32threads && enable threads

1927 1928
print_config HAVE_   $TMPH config.mak $HAVE_LIST
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1929

1930
if test "$targetos" = "Darwin"; then
1931 1932 1933
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
fi

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

1936 1937
if test "$optimize" = "small"; then
  echo "#define always_inline"  >> $TMPH
1938
  echo "#define CONFIG_SMALL 1" >> $TMPH
1939 1940
fi

1941 1942 1943
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1944

1945 1946 1947 1948
if test "$amr_if2" = "yes" ; then
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi

1949
# Apparently it's not possible to portably echo a backslash.
1950
if test "$asmalign_pot" = "yes" ; then
1951
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1952
else
1953
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1954 1955
fi

Z
Zdenek Kabelac 已提交
1956

1957
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
1958
    ucname="`toupper $codec`"
1959 1960 1961 1962 1963 1964 1965 1966 1967
    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
1968 1969
done

1970
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
M
Måns Rullgård 已提交
1971
if ! cmp -s $TMPH config.h; then
1972 1973 1974 1975
        mv -f $TMPH config.h
else
        echo "config.h is unchanged"
fi
N
Nick Kurshev 已提交
1976

1977
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
1978

1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
# 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
2019

D
Diego Biurrun 已提交
2020
# build pkg-config files libav*.pc and libpostproc.pc
2021 2022
# libavutil.pc
cat <<EOF >libavutil.pc
2023
prefix=$PREFIX
2024
exec_prefix=\${prefix}
2025
libdir=\${exec_prefix}/lib
2026
includedir=\${prefix}/include
2027 2028 2029 2030

Name: libavutil
Description: FFmpeg utility library
Version: $lavu_version
2031
Requires:
2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045
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
2046
Requires:
2047 2048 2049 2050
Conflicts:
Libs: \${libdir}/${LIBPREF}avutil${LIBSUF}
Cflags: -I\${includedir}
EOF
2051 2052 2053

# libavcodec.pc
cat <<EOF >libavcodec.pc
2054
prefix=$PREFIX
2055
exec_prefix=\${prefix}
2056
libdir=\${exec_prefix}/lib
2057
includedir=\${prefix}/include
2058 2059 2060

Name: libavcodec
Description: FFmpeg codec library
2061
Version: $lavc_version
2062
Requires: $pkg_requires libavutil = $lavu_version
2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075
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
2076
Version: $lavc_version
2077
Requires: $pkg_requires libavutil = $lavu_version
2078 2079 2080 2081 2082 2083 2084
Conflicts:
Libs: \${libdir}/${LIBPREF}avcodec${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF

# libavformat.pc
cat <<EOF >libavformat.pc
2085
prefix=$PREFIX
2086
exec_prefix=\${prefix}
2087
libdir=\${exec_prefix}/lib
2088
includedir=\${prefix}/include
2089 2090 2091

Name: libavformat
Description: FFmpeg container format library
2092
Version: $lavf_version
2093
Requires: $pkg_requires libavcodec = $lavc_version
2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106
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
2107
Version: $lavf_version
2108
Requires: $pkg_requires libavcodec = $lavc_version
2109 2110 2111 2112 2113 2114 2115 2116
Conflicts:
Libs: \${libdir}/${LIBPREF}avformat${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF


# libpostproc.pc
cat <<EOF >libpostproc.pc
2117
prefix=$PREFIX
2118
exec_prefix=\${prefix}
2119
libdir=\${exec_prefix}/lib
2120
includedir=\${prefix}/include
2121 2122 2123

Name: libpostproc
Description: FFmpeg post processing library
2124
Version: $lavc_version
2125
Requires:
2126 2127 2128 2129 2130 2131 2132 2133
Conflicts:
Libs: -L\${libdir} -lpostproc
Cflags: -I\${includedir} -I\${includedir}/postproc
EOF

cat <<EOF >libpostproc-uninstalled.pc
prefix=
exec_prefix=
2134 2135
libdir=\${pcfiledir}/libpostproc
includedir=\${pcfiledir}/libpostproc
2136 2137 2138

Name: libpostproc
Description: FFmpeg post processing library
2139
Version: $lavc_version
2140
Requires:
2141 2142 2143 2144
Conflicts:
Libs: \${libdir}/${LIBPREF}postproc${LIBSUF}
Cflags: -I\${includedir}
EOF
L
Luca Abeni 已提交
2145

2146 2147 2148 2149 2150 2151 2152 2153 2154
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 已提交
2155 2156 2157 2158 2159 2160 2161 2162 2163 2164
# 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
2165
Requires: $sws_pc_requires
L
Luca Abeni 已提交
2166
Conflicts:
2167
Libs: $sws_pc_libs
L
Luca Abeni 已提交
2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179
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
2180
Requires: $sws_pc_requires
L
Luca Abeni 已提交
2181
Conflicts:
2182
Libs: $sws_pc_uninstalled_libs
L
Luca Abeni 已提交
2183 2184
Cflags: -I\${includedir}
EOF