configure 56.7 KB
Newer Older
Fabrice Bellard's avatar
Fabrice Bellard committed
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 "$@"
}

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."
Diego Biurrun's avatar
Diego Biurrun committed
41
    echo "This configure script requires a POSIX-compatible shell"
42
    echo "such as bash or ksh."
43 44 45
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
    echo "Instead, install a working POSIX-compatible shell."
    echo "Disabling this configure test will create a broken FFmpeg."
46 47 48 49
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
        echo "This bash version ($BASH_VERSION) is broken on your platform."
        echo "Upgrade to a later version if available."
    fi
50 51 52
    exit 1
fi

53 54 55 56 57 58
show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
59
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
60
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
61
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
62
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
63 64 65 66 67 68 69 70
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
  echo "  --mandir=DIR             install man page in DIR [PREFIX/man]"
  echo "  --enable-mingw32         enable MinGW native/cross Windows compile"
  echo "  --enable-mingwce         enable MinGW native/cross WinCE compile"
  echo "  --enable-static          build static libraries [default=yes]"
  echo "  --disable-static         do not build static libraries [default=no]"
  echo "  --enable-shared          build shared libraries [default=no]"
  echo "  --disable-shared         do not build shared libraries [default=yes]"
Diego Biurrun's avatar
Diego Biurrun committed
71 72
  echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
  echo "  --enable-swscaler        software scaler support [default=no]"
73
  echo "  --enable-sunmlib         use Sun medialib [default=no]"
74 75
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
  echo "  --enable-os2threads      use OS/2 threads [default=no]"
76
  echo "  --enable-pthreads        use pthreads [default=no]"
77
  echo "  --enable-w32threads      use Win32 threads [default=no]"
78
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
79 80
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
  echo "                           and libraw1394 [default=no]"
Diego Biurrun's avatar
Diego Biurrun committed
81 82
  echo "  --enable-a52             enable GPLed liba52 support [default=no]"
  echo "  --enable-a52bin          open liba52.so.0 at runtime [default=no]"
83
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
Diego Biurrun's avatar
Diego Biurrun committed
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
  echo "  --enable-dts             enable GPLed libdts support [default=no]"
  echo "  --enable-faac            enable FAAC support via libfaac [default=no]"
  echo "  --enable-faad            enable FAAD support via libfaad [default=no]"
  echo "  --enable-faadbin         build FAAD support with runtime linking [default=no]"
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
  echo "  --enable-mp3lame         enable MP3 encoding via libmp3lame [default=no]"
  echo "  --enable-libnut          enable NUT support via libnut [default=no]"
  echo "  --enable-libogg          enable Ogg support via libogg [default=no]"
  echo "  --enable-vorbis          enable Vorbis support via libvorbis [default=no]"
  echo "  --enable-x264            enable H.264 encoding via x264 [default=no]"
  echo "  --enable-xvid            enable XviD support via xvidcore [default=no]"
  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"
99 100 101 102 103 104
  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]"
105
  echo "  --cross-compile          assume a cross-compiler is used"
106 107 108 109 110 111
  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 []"
112
  echo "  --arch=ARCH              select architecture  [$arch]"
113 114
  echo "  --cpu=CPU                selects the minimum cpu required (affects
                                   instruction selection, may crash on older CPUs)"
115 116 117
  echo "  --powerpc-perf-enable    enable performance report on PPC"
  echo "                           (requires enabling PMC)"
  echo "  --disable-mmx            disable MMX usage"
118
  echo "  --disable-armv5te        disable armv5te usage"
119 120 121 122 123 124 125 126 127
  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]"
128
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
129 130 131 132 133
  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"
134
  echo "  --enable-extra-warnings  enable more compiler warnings"
135 136 137
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
  echo "                           MPEG audio decoding [default=no]"
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
138
  echo "  --disable-ffmpeg         disable ffmpeg build"
139 140 141 142 143 144 145 146 147 148 149
  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"
150 151
  echo "  --disable-muxer=NAME     disables muxer NAME"
  echo "  --enable-muxer=NAME      enables muxer NAME"
152
  echo "  --disable-muxers         disables all muxers"
153 154
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
155
  echo "  --disable-demuxers       disables all demuxers"
156 157 158
  echo "  --enable-parser=NAME     enables parser NAME"
  echo "  --disable-parser=NAME    disables parser NAME"
  echo "  --disable-parsers        disables all parsers"
159 160 161 162
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
  exit 1
}
163

164 165 166 167
log(){
    echo "$@" >>$logfile
}

168
log_file(){
Måns Rullgård's avatar
Måns Rullgård committed
169 170 171 172 173
    log BEGIN $1
    cat -n $1 >>$logfile
    log END $1
}

174
echolog(){
Måns Rullgård's avatar
Måns Rullgård committed
175
    log "$@"
176
    echo "$@"
177 178 179 180 181 182 183 184 185
}

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
186
    if enabled logging; then
187 188 189 190 191 192 193 194 195 196
        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
197 198 199 200
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
    exit 1
}

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

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

enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

222
enabled(){
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
    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
250 251 252 253 254 255
}

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

256
save_flags(){
257
    flags_saved && return
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286
    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 $*"
}

287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
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 "$@"
}

306
check_cmd(){
307
    log "$@"
308
    "$@" >>$logfile 2>&1
309 310
}

311
check_cc(){
312 313
    log check_cc "$@"
    cat >$TMPC
314
    log_file $TMPC
315
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
316 317 318 319
}

check_cpp(){
    log check_cpp "$@"
320
    cat >$TMPC
321
    log_file $TMPC
322
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
323 324 325
}

check_ld(){
326
    log check_ld "$@"
327
    check_cc || return
328
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
329 330 331
}

check_cflags(){
332 333
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
334 335 336 337 338
int x;
EOF
}

check_ldflags(){
339 340 341 342 343
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
int main(){
    return 0;
}
344 345 346 347
EOF
}

check_header(){
348
    log check_header "$@"
349 350
    header=$1
    shift
351
    check_cpp "$@" <<EOF
352 353 354
#include <$header>
int x;
EOF
355
    err=$?
356
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
357 358
    test "$err" = 0 && enable $var || disable $var
    return $err
359 360 361
}

check_func(){
362
    log check_func "$@"
363 364 365 366 367 368 369 370
    func=$1
    shift
    check_ld "$@" <<EOF
extern int $func();
int main(){
    $func();
}
EOF
371 372 373
    err=$?
    test "$err" = 0 && enable $func || disable $func
    return $err
374 375
}

376 377 378 379 380 381 382 383 384 385 386 387
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
}

388
check_exec(){
389
    check_ld "$@" && { test "$cross_compile" = yes || $TMPE >>$logfile 2>&1; }
390 391 392 393 394 395 396 397
}

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

400 401 402 403 404 405
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427
CONFIG_LIST='
    encoders
    decoders
    parsers
    muxers
    demuxers
    amr
    amr_nb
    amr_nb_fixed
    amr_wb
    audio_beos
    audio_oss
    avisynth
    beos_netserver
    bktr
    dc1394
    dv1394
    ffmpeg
    ffplay
    ffserver
    gpl
    ipv6
428 429
    liba52
    liba52bin
430
    libdts
431 432 433
    libfaac
    libfaad
    libfaadbin
434
    libgsm
435
    libmp3lame
436 437 438 439 440 441 442 443 444 445 446 447
    libnut
    libogg
    libvorbis
    memalign_hack
    mpegaudio_hp
    network
    pp
    protocols
    swscaler
    vhook
    video4linux
    video4linux2
448
    wince
449
    x11grab
450 451 452 453 454 455 456
    x264
    xvid
    zlib
'

HAVE_LIST='
    altivec_h
457
    beosthreads
458 459
    byteswap_h
    dcbzl
460 461 462 463 464
    dev_bktr_ioctl_bt848_h
    dev_bktr_ioctl_meteor_h
    dev_ic_bt8xx_h
    dev_video_meteor_ioctl_meteor_h
    dev_video_bktr_ioctl_bt848_h
465
    dlfcn_h
466 467 468 469
    dlopen
    freetype2
    gprof
    imlib2
470
    inet_aton
471 472
    localtime_r
    lrintf
473 474
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
475 476 477
    malloc_h
    memalign
    mlib
478
    os2
479 480
    os2threads
    pthreads
481 482
    sdl
    sdl_video_size
483 484
    threads
    w32threads
485
'
486

487
# set temporary file name
Zdenek Kabelac's avatar
Zdenek Kabelac committed
488
if test ! -z "$TMPDIR" ; then
489
    TMPDIR1="${TMPDIR}"
Zdenek Kabelac's avatar
Zdenek Kabelac committed
490
elif test ! -z "$TEMPDIR" ; then
491
    TMPDIR1="${TEMPDIR}"
Nick Kurshev's avatar
Nick Kurshev committed
492
else
493
    TMPDIR1="/tmp"
Nick Kurshev's avatar
Nick Kurshev committed
494 495
fi

496 497
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
498
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
499 500 501
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"

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

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

842
# find source path
843
source_path="`dirname \"$0\"`"
844 845
source_path_used="yes"
if test -z "$source_path" -o "$source_path" = "." ; then
846
    source_path="`pwd`"
847
    source_path_used="no"
848 849
else
    source_path="`cd \"$source_path\"; pwd`"
850 851
    echo "$source_path" | grep -q '[[:blank:]]' &&
      die "Out of tree builds are impossible with whitespace in source path."
Fabrice Bellard's avatar
Fabrice Bellard committed
852 853
fi

854 855 856 857
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    show_help
fi

858 859 860 861 862
FFMPEG_CONFIGURATION=" "
for opt do
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
done

863 864 865
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"`
866 867
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"`
868

869 870
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST

Fabrice Bellard's avatar
Fabrice Bellard committed
871
for opt do
Måns Rullgård's avatar
Måns Rullgård committed
872
  optval="${opt#*=}"
Fabrice Bellard's avatar
Fabrice Bellard committed
873
  case "$opt" in
874 875
  --log)
  ;;
Måns Rullgård's avatar
Måns Rullgård committed
876
  --log=*) logging="$optval"
877
  ;;
878
  --prefix=*) PREFIX="$optval"
Fabrice Bellard's avatar
Fabrice Bellard committed
879
  ;;
880
  --libdir=*) libdir="$optval"
881
  ;;
882 883
  --shlibdir=*) shlibdir="$optval"
  ;;
Måns Rullgård's avatar
Måns Rullgård committed
884
  --incdir=*) incdir="$optval"
Diego Biurrun's avatar
Diego Biurrun committed
885
  ;;
Måns Rullgård's avatar
Måns Rullgård committed
886
  --mandir=*) mandir="$optval"
887
  ;;
Måns Rullgård's avatar
Måns Rullgård committed
888
  --source-path=*) source_path="$optval"
889
  ;;
Måns Rullgård's avatar
Måns Rullgård committed
890
  --cross-prefix=*) cross_prefix="$optval"
891
  ;;
892 893
  --cross-compile) cross_compile=yes
  ;;
Måns Rullgård's avatar
Måns Rullgård committed
894
  --cc=*) cc="$optval"
Fabrice Bellard's avatar
Fabrice Bellard committed
895
  ;;
Måns Rullgård's avatar
Måns Rullgård committed
896
  --make=*) make="$optval"
897
  ;;
898
  --extra-cflags=*) add_cflags "$optval"
899
  ;;
900
  --extra-ldflags=*) add_ldflags "$optval"
901
  ;;
902
  --extra-libs=*) add_extralibs "$optval"
903
  ;;
Måns Rullgård's avatar
Måns Rullgård committed
904
  --build-suffix=*) BUILDSUF="$optval"
905
  ;;
906
  --arch=*) arch="$optval"
Fabrice Bellard's avatar
Fabrice Bellard committed
907
  ;;
908
  --cpu=*) cpu="$optval"
909
  ;;
910 911
  --powerpc-perf-enable) powerpc_perf="yes"
  ;;
Fabrice Bellard's avatar
Fabrice Bellard committed
912 913
  --disable-mmx) mmx="no"
  ;;
914 915
  --disable-armv5te) armv5te="no"
  ;;
916 917
  --disable-iwmmxt) iwmmxt="no"
  ;;
918 919
  --disable-altivec) altivec="no"
  ;;
Fabrice Bellard's avatar
Fabrice Bellard committed
920 921
  --enable-gprof) gprof="yes"
  ;;
922
  --disable-v4l) video4linux="no"
Fabrice Bellard's avatar
Fabrice Bellard committed
923
  ;;
924
  --disable-v4l2) video4linux2="no"
Luca Abeni's avatar
Luca Abeni committed
925
  ;;
926 927
  --disable-bktr) bktr="no"
  ;;
Fabrice Bellard's avatar
Fabrice Bellard committed
928 929
  --disable-audio-oss) audio_oss="no"
  ;;
930 931
  --disable-audio-beos) audio_beos="no"
  ;;
932 933
  --disable-dv1394) dv1394="no"
  ;;
934
  --disable-network) network="no"; ffserver="no"
Fabrice Bellard's avatar
Fabrice Bellard committed
935
  ;;
936 937
  --disable-ipv6) ipv6="no";
  ;;
938 939
  --disable-zlib) zlib="no"
  ;;
940
  --enable-a52) liba52="yes"
941
  ;;
942
  --enable-a52bin) liba52bin="yes"
Zdenek Kabelac's avatar
Zdenek Kabelac committed
943
  ;;
944
  --enable-dts) libdts="yes"
945
  ;;
946
  --enable-pp) pp="yes"
947
  ;;
948 949
  --enable-libgsm) libgsm="yes"
  ;;
950
  --enable-mp3lame) libmp3lame="yes"
951
  ;;
952 953
  --enable-libnut) libnut="yes"
  ;;
954
  --enable-libogg) libogg="yes"
955
    pkg_requires="$pkg_requires ogg >= 1.1"
956
  ;;
957
  --enable-vorbis) libvorbis="yes"
958
    pkg_requires="$pkg_requires vorbis vorbisenc"
959
  ;;
960
  --enable-faad) libfaad="yes"
961
  ;;
962
  --enable-faadbin) libfaadbin="yes"
963
  ;;
964
  --enable-faac) libfaac="yes"
965
  ;;
966 967
  --enable-xvid) xvid="yes"
  ;;
968
  --enable-x264) x264="yes"
969
  ;;
970 971
  --enable-avisynth) avisynth="yes";
  ;;
972 973
  --enable-x11grab) x11grab="yes";
  ;;
974
  --enable-dc1394) dc1394="yes"
975
    pkg_requires="$pkg_requires libraw1394"
976
  ;;
977 978
  --disable-vhook) vhook="no"
  ;;
979 980
  --enable-mingw32) mingw32="yes"
  ;;
981
  --enable-mingwce) wince="yes"
982
  ;;
983 984 985 986
  --enable-static) lstatic="yes"
  ;;
  --disable-static) lstatic="no"
  ;;
987
  --enable-shared) lshared="yes"
Nick Kurshev's avatar
Nick Kurshev committed
988
  ;;
989 990
  --disable-shared) lshared="no"
  ;;
991 992 993 994
  --disable-debug) debug="no"
  ;;
  --disable-opts) optimize="no"
  ;;
995 996
  --enable-extra-warnings) extrawarnings="yes"
  ;;
997 998
  --disable-mpegaudio-hp) mpegaudio_hp="no"
  ;;
999 1000
  --disable-protocols) protocols="no"; network="no"; ffserver="no"
  ;;
1001 1002
  --disable-ffmpeg) ffmpeg="no"
  ;;
1003 1004
  --disable-ffserver) ffserver="no"
  ;;
1005 1006
  --disable-ffplay) ffplay="no"
  ;;
1007
  --enable-small) optimize="small"
1008
  ;;
1009
  --enable-amr_nb) amr="yes"; amr_nb="yes"; amr_nb_fixed="no"
1010
  ;;
1011
  --enable-amr_nb-fixed) amr="yes"; amr_nb_fixed="yes"; amr_nb="no"
Zdenek Kabelac's avatar
Zdenek Kabelac committed
1012
  ;;
1013
  --enable-amr_wb) amr="yes"; amr_wb="yes"
1014
  ;;
1015
  --enable-amr_if2) amr="yes"; amr_if2="yes"
1016
  ;;
1017
  --enable-sunmlib) mlib="yes"
1018
  ;;
1019 1020
  --enable-pthreads) pthreads="yes"
  ;;
1021 1022
  --enable-w32threads) w32threads="yes"
  ;;
1023 1024 1025 1026
  --enable-beosthreads) beosthreads="yes"
  ;;
  --enable-os2threads) os2threads="yes"
  ;;
1027 1028
  --enable-swscaler) swscaler="yes"
  ;;
1029 1030
  --enable-gpl) gpl="yes"
  ;;
1031
  --enable-memalign-hack) memalign_hack="yes"
1032
  ;;
1033 1034
  --disable-strip) dostrip="no"
  ;;
1035
  --enable-encoder=*) enable ${optval}_encoder
1036
  ;;
1037
  --enable-decoder=*) enable ${optval}_decoder
1038
  ;;
1039
  --disable-encoder=*) disable ${optval}_encoder
1040
  ;;
1041
  --disable-decoder=*) disable ${optval}_decoder
1042
  ;;
1043
  --disable-encoders) disable $ENCODER_LIST
1044
  ;;
1045
  --disable-decoders) disable $DECODER_LIST
1046
  ;;
1047
  --enable-muxer=*) enable ${optval}_muxer
1048
  ;;
1049
  --disable-muxer=*) disable ${optval}_muxer
1050
  ;;
1051
  --disable-muxers) disable $MUXER_LIST; ffserver="no"
1052
  ;;
1053
  --enable-demuxer=*) enable ${optval}_demuxer
1054
  ;;
1055
  --disable-demuxer=*) disable ${optval}_demuxer
1056
  ;;
1057
  --disable-demuxers) disable $DEMUXER_LIST
1058
  ;;
1059
  --enable-parser=*) enable ${optval}_parser
1060
  ;;
1061
  --disable-parser=*) disable ${optval}_parser
1062
  ;;
1063
  --disable-parsers) disable $PARSER_LIST
1064
  ;;
1065 1066
  --help) show_help
  ;;
1067 1068 1069 1070 1071
  *)
  echo "Unknown option \"$opt\"."
  echo "See $0 --help for available options."
  exit 1
  ;;
Fabrice Bellard's avatar
Fabrice Bellard committed
1072 1073 1074
  esac
done

1075 1076
if test "$logging" != no; then
    test "$logging" = yes || logfile="$logging"
1077 1078
    echo "# $0 $@" >$logfile
    set >>$logfile
1079 1080
else
    logfile=/dev/null
1081
fi
1082

1083
if test "$mingw32" = "yes" -o "$wince" = "yes"; then
1084 1085 1086 1087 1088 1089 1090 1091 1092
    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
1093 1094
    video4linux="no"
    video4linux2="no"
1095 1096 1097 1098 1099
    audio_oss="no"
    dv1394="no"
    dc1394="no"
    ffserver="no"
    network="no"
1100
    if test "$wince" = "yes"; then
1101 1102 1103 1104 1105
        protocols="no"
    fi
    SLIBPREF=""
    SLIBSUF=".dll"
    EXESUF=".exe"
1106 1107
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1108
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1109
    SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
1110
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
1111 1112
fi

1113 1114
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1115

1116
test -n "$cross_prefix" && cross_compile=yes
1117 1118 1119 1120 1121
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132
# 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

1133
if test "$libvorbis" = "yes" && test "$libogg" = "no"; then
1134
    die "libogg must be enabled to enable libvorbis."
1135 1136
fi

1137
if test "$gpl" != "yes"; then
1138
    if test "$pp" != "no"; then
1139
        die "The Postprocessing code is under GPL and --enable-gpl is not specified."
1140 1141
    fi

1142
    if test "$liba52" != "no" -o "$liba52bin" != "no"; then
1143
        die "liba52 is under GPL and --enable-gpl is not specified."
1144
    fi
1145

1146
    if test "$xvid" != "no"; then
1147
        die "libxvidcore is under GPL and --enable-gpl is not specified."
1148 1149
    fi

1150
    if test "$x264" != "no"; then
1151
        die "x264 is under GPL and --enable-gpl is not specified."
1152 1153
    fi

1154
    if test "$libdts" != "no"; then
1155
        die "libdts is under GPL and --enable-gpl is not specified."
1156
    fi
1157

1158
    if test "$libfaad" != "no" -o "$libfaadbin" != "no"; then
1159 1160
        if check_header faad.h; then
            check_cc << EOF
1161 1162 1163 1164 1165 1166
                #include <faad.h>
                #ifndef FAAD2_VERSION
                ok faad1
                #endif
                int main( void ) { return 0; }
EOF
1167
            if test $? = 0 ; then
1168
                die "FAAD2 is under GPL and --enable-gpl is not specified."
1169 1170
            fi
        else
1171 1172
            libfaad="no"
            libfaadbin="no"
Diego Biurrun's avatar
Diego Biurrun committed
1173
            echo "FAAD test failed."
1174 1175
        fi
    fi
1176 1177

    if test "$x11grab" != "no"; then
1178
        die "The X11 grabber is under GPL and --enable-gpl is not specified."
1179
    fi
1180 1181

    if test "$swscaler" != "no"; then
1182
        die "The software scaler is under GPL and --enable-gpl is not specified."
1183
    fi
1184
fi
1185

Diego Biurrun's avatar
Diego Biurrun committed
1186
# compute MMX state
1187
if test $mmx = "default"; then
1188
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1189 1190 1191 1192 1193 1194
        mmx="yes"
    else
        mmx="no"
    fi
fi

1195 1196
test -z "$need_memalign" && need_memalign="$mmx"

1197
#Darwin CC versions
1198
needmdynamicnopic="no"
1199
if test $targetos = Darwin; then
1200
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1201
        add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
1202
    else
1203 1204 1205
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
        case "$gcc_version" in
            *2.95*)
1206
                add_cflags "-no-cpp-precomp -pipe"
1207 1208
                ;;
            *[34].*)
1209
                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
1210 1211 1212 1213 1214
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
            *)
1215
                add_cflags "-no-cpp-precomp -pipe"
1216 1217 1218 1219 1220
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
        esac
1221
    fi
1222 1223 1224 1225
fi

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

1228 1229
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
1230
    if test $arch = "powerpc"; then
1231 1232 1233 1234 1235 1236
        altivec="yes"
    else
        altivec="no"
    fi
fi

1237
# Add processor-specific flags
1238
POWERPCMODE="32bits"
1239 1240
if test $cpu != "generic"; then
    case $cpu in
1241
        601|ppc601|PowerPC601)
1242
            add_cflags "-mcpu=601"
1243 1244 1245 1246 1247
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC601 but AltiVec enabled!";
            fi
        ;;
        603*|ppc603*|PowerPC603*)
1248
            add_cflags "-mcpu=603"
1249 1250 1251 1252 1253
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC603 but AltiVec enabled!";
            fi
        ;;
        604*|ppc604*|PowerPC604*)
1254
            add_cflags "-mcpu=604"
1255 1256 1257 1258 1259
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC604 but AltiVec enabled!";
            fi
        ;;
        G3|g3|75*|ppc75*|PowerPC75*)
1260
            add_cflags "-mcpu=750 -mpowerpc-gfxopt"
1261 1262 1263 1264 1265
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC75x but AltiVec enabled!";
            fi
        ;;
        G4|g4|745*|ppc745*|PowerPC745*)
1266
            add_cflags "-mcpu=7450 -mpowerpc-gfxopt"
1267 1268 1269 1270 1271
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC745x but AltiVec disabled!";
            fi
        ;;
        74*|ppc74*|PowerPC74*)
1272
            add_cflags "-mcpu=7400 -mpowerpc-gfxopt"
1273 1274 1275 1276 1277
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC74xx but AltiVec disabled!";
            fi
        ;;
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
1278
            add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
1279 1280 1281
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC970 but AltiVec disabled!";
            fi
1282
            POWERPCMODE="64bits"
1283
        ;;
1284 1285
        # targets that do NOT support conditional mov (cmov)
        i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
1286
            add_cflags "-march=$cpu"
1287 1288 1289
            cmov="no"
        ;;
        # targets that do support conditional mov (cmov)
1290
        i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
1291
            add_cflags "-march=$cpu"
1292
            cmov="yes"
1293 1294 1295 1296 1297 1298 1299
            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"
1300
        ;;
1301
        sparc64)
1302
            add_cflags "-mcpu=v9"
1303
        ;;
1304
        *)
1305
        echo "WARNING: Unknown CPU \"$cpu\", ignored."
1306
        ;;
1307 1308 1309
    esac
fi

1310 1311 1312 1313 1314 1315 1316 1317
# 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
1318 1319
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
1320 1321 1322
EOF
    die "Sanity test failed."
fi
1323
rm $TMPE
1324

Måns Rullgård's avatar
Måns Rullgård committed
1325 1326 1327 1328 1329 1330 1331 1332 1333 1334
# 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."
1335
        echo "Only do this if you know what cross compiling means."
Måns Rullgård's avatar
Måns Rullgård committed
1336 1337 1338 1339
    fi
    die "C compiler test failed."
fi

1340 1341
# check for assembler specific support

1342
if test $arch = "powerpc"; then
1343 1344 1345 1346 1347 1348 1349 1350 1351 1352
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

1353 1354
# check for SIMD availability

1355
# AltiVec flags: The FSF version of GCC differs from the Apple version
1356
if test $arch = "powerpc"; then
1357
    if test $altivec = "yes"; then
1358
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1359
            add_cflags "-faltivec"
1360
        else
1361
            add_cflags "-maltivec -mabi=altivec"
1362 1363 1364 1365
        fi
    fi
fi

1366
check_header altivec.h
1367

Diego Biurrun's avatar
Diego Biurrun committed
1368
# check if our compiler supports Motorola AltiVec C API
1369
if test $altivec = "yes"; then
1370
    if test $altivec_h = "yes"; then
Måns Rullgård's avatar
Måns Rullgård committed
1371 1372 1373 1374 1375
        inc_altivec_h="#include <altivec.h>"
    else
        inc_altivec_h=
    fi
    check_cc <<EOF || altivec=no
1376
$inc_altivec_h
1377 1378 1379 1380 1381 1382 1383
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
EOF
fi
1384

1385
# check armv5te instructions support
1386
if test $armv5te = "default" -a $arch = "armv4l"; then
1387 1388 1389 1390 1391 1392 1393 1394 1395
    armv5te=no
    check_cc <<EOF && armv5te=yes
        int main(void) {
        __asm__ __volatile__ ("qadd r0, r0, r0");
        }
EOF
fi

# check iwmmxt support
1396
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1397 1398 1399 1400 1401 1402 1403 1404
    iwmmxt=no
    check_cc <<EOF && iwmmxt=yes
        int main(void) {
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
        }
EOF
fi

Diego Biurrun's avatar
Diego Biurrun committed
1405
# mmi only available on mips
1406
if test $mmi = "default"; then
1407
    if test $arch = "mips"; then
1408 1409 1410 1411 1412 1413
        mmi="yes"
    else
        mmi="no"
    fi
fi

Diego Biurrun's avatar
Diego Biurrun committed
1414
# check if our compiler supports mmi
1415
enabled mmi && check_cc <<EOF || mmi="no"
1416 1417 1418 1419 1420
int main(void) {
    __asm__ ("lq \$2, 0(\$2)");
    return 0;
}
EOF
1421 1422 1423

# ---
# big/little-endian test
1424
if test "$cross_compile" = "no"; then
1425
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1426 1427
#include <inttypes.h>
int main(int argc, char ** argv){
1428 1429
        volatile uint32_t i=0x01234567;
        return (*((uint8_t*)(&i))) == 0x67;
1430 1431
}
EOF
1432
else
Måns Rullgård's avatar
Måns Rullgård committed
1433
    # programs cannot be launched if cross compiling, so make a static guess
1434
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
Måns Rullgård's avatar
Måns Rullgård committed
1435 1436
        bigendian="yes"
    fi
1437 1438
fi

Nick Kurshev's avatar
Nick Kurshev committed
1439 1440 1441
# ---
# check availability of some header files

1442 1443
check_header malloc.h
check_func memalign
Nick Kurshev's avatar
Nick Kurshev committed
1444

1445 1446
if test "$memalign" = "no" -a "$need_memalign" = "yes" -a \
        "$memalign_hack" != "yes"; then
1447
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1448 1449
fi

1450
check_header byteswap.h
Måns Rullgård's avatar
Måns Rullgård committed
1451

1452 1453
check_func inet_aton
check_func localtime_r
1454 1455 1456 1457 1458
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åns Rullgård's avatar
Måns Rullgård committed
1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469
    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
1470 1471
fi

1472 1473 1474 1475 1476 1477 1478 1479 1480 1481
for thread in pthreads beosthreads os2threads w32threads; do
    if enabled $thread; then
        if test $thread_type != "no"; then
            die "ERROR: Only one thread type must be selected."
        else
            thread_type="$thread"
        fi
    fi
done

1482
# these are off by default, so fail if requested and not available
1483
enabled libdts  && require libdts dts.h dts_init -ldts -lm
1484
enabled libgsm  && require libgsm gsm.h gsm_create -lgsm
1485
enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1486
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1487
enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
1488
enabled libnut  && require libnut libnut.h nut_demuxer_init -lnut
1489 1490 1491
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
1492
enabled mlib    && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1493

1494
# Ugh, libfaac uses stdcall calling convention on win32 so we can't use
1495
# the generic test functions
1496
if enabled libfaac; then
1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510
    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

1511 1512
# Ugh, recent faad2 versions have renamed all functions and #define the
# old names in faad.h.  Generic tests won't work.
1513
if enabled libfaad; then
1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525
    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

1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541
# 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


1542
# test for lrintf in math.h
1543
check_exec <<EOF && lrintf=yes || lrintf=no
1544 1545 1546 1547 1548
#define _ISOC9X_SOURCE  1
#include <math.h>
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
EOF

1549 1550
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1551
    check_cc <<EOF && _restrict=$restrict_keyword && break
1552 1553
void foo(char * $restrict_keyword p);
EOF
1554 1555
done

1556 1557
# dlopen/dlfcn.h probing

1558
check_header dlfcn.h
1559

1560 1561
if check_func dlopen; then
    ldl=
1562 1563
elif check_func dlopen -ldl; then
    ldl=-ldl
1564 1565
fi

Måns Rullgård's avatar
Måns Rullgård committed
1566 1567
if test "$vhook" = "default"; then
    vhook="$dlopen"
1568 1569
fi

1570
if enabled_any vhook liba52bin libfaadbin; then
1571
    add_extralibs $ldl
Michael Niedermayer's avatar
Michael Niedermayer committed
1572 1573
fi

1574 1575 1576 1577 1578 1579 1580 1581
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

1582 1583 1584 1585
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
Michael Niedermayer's avatar
Michael Niedermayer committed
1586

1587 1588 1589 1590
if enabled audio_beos; then
    add_extralibs "-lmedia -lbe"
fi

1591
##########################################
Diego Biurrun's avatar
Diego Biurrun committed
1592
# imlib check
1593

1594 1595
temp_extralibs -lImlib2
check_ld <<EOF && imlib2=yes || imlib2=no
1596 1597 1598 1599
#include <X11/Xlib.h>
#include <Imlib2.h>
int main( void ) { return (int) imlib_load_font("foo"); }
EOF
1600
restore_flags
1601

1602
##########################################
Diego Biurrun's avatar
Diego Biurrun committed
1603
# FreeType check
1604

1605
freetype2=no
1606
if test "x$targetos" != "xBeOS"; then
1607
  if (freetype-config --version) >/dev/null 2>&1 ; then
1608 1609 1610 1611 1612 1613 1614
      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
1615
  fi
1616 1617
fi

1618
##########################################
Diego Biurrun's avatar
Diego Biurrun committed
1619
# SDL check
1620 1621 1622

sdl_too_old=no
sdl=no
1623 1624
SDL_CONFIG="${cross_prefix}sdl-config"
if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
1625 1626 1627 1628 1629 1630 1631 1632 1633
    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'`
1634
        if test "$_sdlversion" -lt 121 ; then
1635 1636 1637
            sdl_too_old=yes
        else
            sdl=yes
1638 1639 1640 1641 1642 1643 1644 1645
            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
1646 1647
        fi
    fi
1648
    restore_flags
1649
fi
1650

1651 1652
enabled sdl || ffplay=no

1653
##########################################
Diego Biurrun's avatar
Diego Biurrun committed
1654
# texi2html check
1655 1656

texi2html=no
1657
if (texi2html -version) >/dev/null 2>&1; then
1658 1659 1660
texi2html=yes
fi

1661
##########################################
Diego Biurrun's avatar
Diego Biurrun committed
1662
# IPv6 check
1663

1664
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1665 1666 1667 1668 1669 1670 1671 1672 1673
#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);
1674
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1675 1676 1677
}
EOF

1678
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1679
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1680
#include <sys/time.h>
1681 1682
#include <asm/types.h>
#include <linux/videodev2.h>
1683
int dummy = V4L2_PIX_FMT_YUV420;
1684
struct v4l2_buffer dummy1;
1685 1686
EOF

1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
if enabled bktr; then
    check_header dev/bktr/ioctl_meteor.h
    check_header dev/bktr/ioctl_bt848.h

    check_header machine/ioctl_meteor.h
    check_header machine/ioctl_bt848.h

    check_header dev/video/meteor/ioctl_meteor.h
    check_header dev/video/bktr/ioctl_bt848.h

    check_header dev/ic/bt8xx.h
fi

1701
# Deal with the x11 frame grabber
1702
enabled x11grab                         &&
1703 1704 1705 1706 1707 1708 1709 1710 1711
enabled gpl                             &&
enabled x11_grab_device_demuxer         &&
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
check_func XOpenDisplay -lX11           &&
check_func XShmCreateImage -lX11 -lXext &&
add_extralibs -lX11 -lXext              ||
disable x11_grab_device_demuxer

1712 1713 1714 1715
enabled debug && add_cflags -g

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
1716 1717
check_cflags -Wall
check_cflags -Wno-switch
Michael Niedermayer's avatar
Michael Niedermayer committed
1718 1719 1720
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
1721
enabled extrawarnings && check_cflags -Winline
1722

1723
# add some linker flags
1724
check_ldflags $LDLATEFLAGS
1725

1726 1727
# not all compilers support -Os
test "$optimize" = "small" && check_cflags -Os
1728

1729
if enabled optimize; then
1730
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1731 1732
        add_cflags  "-O5"
        add_ldflags "-O5"
1733
    else
1734
        add_cflags "-O3"
1735
    fi
1736 1737
fi

1738 1739
# PIC flags for shared library objects where they are needed
if test "$lshared" = "yes" ; then
Måns Rullgård's avatar
Måns Rullgård committed
1740 1741
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
1742
        case "$arch" in
1743 1744
            x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
        esac
1745 1746 1747
    fi
fi

1748
if test "$gprof" = "yes" ; then
1749 1750
    add_cflags  "-p"
    add_ldflags "-p"
1751 1752
fi

1753 1754 1755
VHOOKCFLAGS="-fPIC $CFLAGS"
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic

1756 1757 1758 1759 1760 1761
# 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

Diego Biurrun's avatar
Diego Biurrun committed
1762 1763 1764 1765
echo "install prefix            $PREFIX"
echo "source path               $source_path"
echo "C compiler                $cc"
echo "make                      $make"
1766
echo ".align is power-of-two    $asmalign_pot"
Diego Biurrun's avatar
Diego Biurrun committed
1767
echo "ARCH                      $arch ($cpu)"
1768
if test "$BUILDSUF" != ""; then
Diego Biurrun's avatar
Diego Biurrun committed
1769
    echo "build suffix              $BUILDSUF"
1770
fi
Diego Biurrun's avatar
Diego Biurrun committed
1771
echo "big-endian                $bigendian"
1772
if test $arch = "x86_32" -o $arch = "x86_64"; then
Diego Biurrun's avatar
Diego Biurrun committed
1773 1774 1775
    echo "MMX enabled               $mmx"
    echo "CMOV enabled              $cmov"
    echo "CMOV is fast              $cmov_is_fast"
1776
fi
1777
if test $arch = "armv4l"; then
Diego Biurrun's avatar
Diego Biurrun committed
1778 1779
    echo "ARMv5TE enabled           $armv5te"
    echo "IWMMXT enabled            $iwmmxt"
1780
fi
1781
if test $arch = "mips"; then
Diego Biurrun's avatar
Diego Biurrun committed
1782
    echo "MMI enabled               $mmi"
1783
fi
1784
if test $arch = "powerpc"; then
Diego Biurrun's avatar
Diego Biurrun committed
1785 1786
    echo "AltiVec enabled           $altivec"
    echo "dcbzl available           $dcbzl"
1787
fi
Diego Biurrun's avatar
Diego Biurrun committed
1788 1789 1790 1791 1792 1793
echo "gprof enabled             $gprof"
echo "debug symbols             $debug"
echo "strip symbols             $dostrip"
echo "optimize                  $optimize"
echo "static                    $lstatic"
echo "shared                    $lshared"
1794 1795
echo "postprocessing support    $pp"
echo "software scaler enabled   $swscaler"
Diego Biurrun's avatar
Diego Biurrun committed
1796
echo "video hooking             $vhook"
Måns Rullgård's avatar
Måns Rullgård committed
1797
if test "$vhook" = "yes"; then
Diego Biurrun's avatar
Diego Biurrun committed
1798 1799
    echo "Imlib2 support            $imlib2"
    echo "FreeType support          $freetype2"
1800
fi
1801 1802 1803 1804
echo "network support           $network"
if test "$network" = "yes" ; then
    echo "IPv6 support              $ipv6"
fi
1805
echo "threading support         $thread_type"
1806 1807 1808 1809 1810 1811
echo "SDL support               $sdl"
if test $sdl_too_old = "yes"; then
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
fi
echo "Sun medialib support      $mlib"
echo "AVISynth enabled          $avisynth"
1812 1813
echo "liba52 support            $liba52"
echo "liba52 dlopened           $liba52bin"
1814
echo "libdts support            $libdts"
1815 1816 1817
echo "libfaac enabled           $libfaac"
echo "libfaad enabled           $libfaad"
echo "faadbin enabled           $libfaadbin"
1818
echo "libgsm enabled            $libgsm"
1819
echo "libmp3lame enabled        $libmp3lame"
1820 1821 1822 1823
echo "libnut enabled            $libnut"
echo "libogg enabled            $libogg"
echo "libvorbis enabled         $libvorbis"
echo "x264 enabled              $x264"
Diego Biurrun's avatar
Diego Biurrun committed
1824
echo "XviD enabled              $xvid"
1825
echo "zlib enabled              $zlib"
Diego Biurrun's avatar
Diego Biurrun committed
1826 1827 1828 1829
echo "AMR-NB float support      $amr_nb"
echo "AMR-NB fixed support      $amr_nb_fixed"
echo "AMR-WB float support      $amr_wb"
echo "AMR-WB IF2 support        $amr_if2"
1830
if test "$gpl" = "no" ; then
Måns Rullgård's avatar
Måns Rullgård committed
1831
    echo "License: LGPL"
1832
else
Måns Rullgård's avatar
Måns Rullgård committed
1833
    echo "License: GPL"
1834
fi
Fabrice Bellard's avatar
Fabrice Bellard committed
1835

Diego Biurrun's avatar
Diego Biurrun committed
1836
echo "Creating config.mak and config.h..."
Fabrice Bellard's avatar
Fabrice Bellard committed
1837

Diego Biurrun's avatar
Diego Biurrun committed
1838 1839
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1840
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
Fabrice Bellard's avatar
Fabrice Bellard committed
1841

1842 1843
echo "PREFIX=$PREFIX" >> config.mak
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1844
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1845
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
Diego Biurrun's avatar
Diego Biurrun committed
1846
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1847 1848
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1849
echo "MAKE=$make" >> config.mak
1850 1851
echo "CC=$cc" >> config.mak
echo "AR=$ar" >> config.mak
Michael Niedermayer's avatar
Michael Niedermayer committed
1852
echo "RANLIB=$ranlib" >> config.mak
1853
if test "$dostrip" = "yes" ; then
Måns Rullgård's avatar
Måns Rullgård committed
1854 1855
    echo "STRIP=$strip" >> config.mak
    echo "INSTALLSTRIP=$installstrip" >> config.mak
1856
else
Måns Rullgård's avatar
Måns Rullgård committed
1857 1858
    echo "STRIP=echo ignoring strip" >> config.mak
    echo "INSTALLSTRIP=" >> config.mak
1859
fi
1860

Nick Kurshev's avatar
Nick Kurshev committed
1861
echo "OPTFLAGS=$CFLAGS" >> config.mak
1862
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1863
echo "LDFLAGS=$LDFLAGS" >> config.mak
1864
echo "LDCONFIG=$LDCONFIG" >> config.mak
1865
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1866
echo "SHFLAGS=$SHFLAGS" >> config.mak
1867
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1868
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1869
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1870
echo "BUILD_STATIC=$lstatic" >> config.mak
1871
echo "BUILDSUF=$BUILDSUF" >> config.mak
1872
echo "LIBPREF=$LIBPREF" >> config.mak
1873
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1874 1875
if test "$lstatic" = "yes" ; then
  echo "LIB=$LIB" >> config.mak
1876 1877
else # Some Make complain if this variable does not exist.
  echo "LIB=" >> config.mak
1878
fi
1879
echo "SLIBPREF=$SLIBPREF" >> config.mak
1880 1881
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1882
echo "TARGET_OS=$targetos" >> config.mak
1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907

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

1908 1909 1910
if test "$bigendian" = "yes" ; then
  echo "WORDS_BIGENDIAN=yes" >> config.mak
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1911
fi
Zdenek Kabelac's avatar
Zdenek Kabelac committed
1912
if test "$mmx" = "yes" ; then
1913
  echo "TARGET_MMX=yes" >> config.mak
1914
  echo "#define HAVE_MMX 1" >> $TMPH
1915
  echo "#define __CPU__ 586" >> $TMPH
Fabrice Bellard's avatar
Fabrice Bellard committed
1916
fi
1917 1918 1919 1920
if test "$cmov" = "yes" ; then
  echo "TARGET_CMOV=yes" >> config.mak
  echo "#define HAVE_CMOV 1" >> $TMPH
fi
1921 1922 1923 1924
if test "$cmov_is_fast" = "yes" ; then
  echo "TARGET_CMOV_IS_FAST=yes" >> config.mak
  echo "#define CMOV_IS_FAST 1" >> $TMPH
fi
1925 1926 1927 1928
if test "$armv5te" = "yes" ; then
  echo "TARGET_ARMV5TE=yes" >> config.mak
  echo "#define HAVE_ARMV5TE 1" >> $TMPH
fi
1929 1930 1931 1932
if test "$iwmmxt" = "yes" ; then
  echo "TARGET_IWMMXT=yes" >> config.mak
  echo "#define HAVE_IWMMXT 1" >> $TMPH
fi
1933 1934 1935 1936
if test "$mmi" = "yes" ; then
  echo "TARGET_MMI=yes" >> config.mak
  echo "#define HAVE_MMI 1" >> $TMPH
fi
1937

1938 1939 1940
if test "$altivec" = "yes" ; then
  echo "TARGET_ALTIVEC=yes" >> config.mak
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1941
fi
1942

1943
if test "$sdl" = "yes" ; then
1944 1945
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1946
fi
1947 1948 1949
if test "$texi2html" = "yes"; then
  echo "BUILD_DOC=yes" >> config.mak
fi
1950

1951
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1952
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
1953 1954 1955 1956 1957 1958
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'`



Zdenek Kabelac's avatar
Zdenek Kabelac committed
1959
if test "$lshared" = "yes" ; then
Nick Kurshev's avatar
Nick Kurshev committed
1960
  echo "BUILD_SHARED=yes" >> config.mak
1961
  echo "PIC=-fPIC -DPIC" >> config.mak
1962 1963
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
  echo "SPPVERSION=$pp_version" >> config.mak
1964
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
1965
  echo "LAVCVERSION=$lavc_version" >> config.mak
1966
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
1967
  echo "LAVFVERSION=$lavf_version" >> config.mak
1968
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
1969
  echo "LAVUVERSION=$lavu_version" >> config.mak
1970 1971
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
  echo "SWSVERSION=$sws_version" >> config.mak
1972
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1973 1974
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1975
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1976
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
Nick Kurshev's avatar
Nick Kurshev committed
1977
fi
1978
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1979
echo "EXTRALIBS=$extralibs" >> config.mak
1980

1981 1982 1983 1984
enabled_any $ENCODER_LIST && enable encoders
enabled_any $DECODER_LIST && enable decoders
enabled_any $MUXER_LIST   && enable muxers
enabled_any $DEMUXER_LIST && enable demuxers
1985

1986 1987
enabled_any pthreads beosthreads os2threads w32threads && enable threads

1988 1989
print_config HAVE_   $TMPH config.mak $HAVE_LIST
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1990

1991
if test "$targetos" = "Darwin"; then
1992 1993 1994
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
fi

1995 1996
echo "#define restrict $_restrict" >> $TMPH

1997 1998
if test "$optimize" = "small"; then
  echo "#define always_inline"  >> $TMPH
1999
  echo "#define CONFIG_SMALL 1" >> $TMPH
2000 2001
fi

2002 2003 2004
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2005

2006 2007 2008 2009
if test "$amr_if2" = "yes" ; then
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi

2010
# Apparently it's not possible to portably echo a backslash.
2011
if test "$asmalign_pot" = "yes" ; then
2012
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2013
else
2014
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2015 2016
fi

Zdenek Kabelac's avatar
Zdenek Kabelac committed
2017

2018
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2019
    ucname="`toupper $codec`"
2020 2021 2022 2023 2024 2025 2026 2027 2028
    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
2029 2030
done

2031
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
Måns Rullgård's avatar
Måns Rullgård committed
2032
if ! cmp -s $TMPH config.h; then
2033 2034 2035 2036
        mv -f $TMPH config.h
else
        echo "config.h is unchanged"
fi
Nick Kurshev's avatar
Nick Kurshev committed
2037

2038
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2039

2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053
# 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 \
2054 2055 2056
         libavcodec/amr \
         libavcodec/amr_float \
         libavcodec/amrwb_float \
2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082
         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
2083 2084


2085
# build pkg-config files
2086
# FIXME: libdir and includedir are hardcoded and may differ from the real path.
2087

2088 2089 2090 2091 2092 2093 2094 2095
pkgconfig_generate(){
name=$1
comment=$2
version=$3
libs=$4
requires=$5
include=$6
cat <<EOF >$name.pc
2096
prefix=$PREFIX
2097
exec_prefix=\${prefix}
2098
libdir=\${exec_prefix}/lib
2099
includedir=\${prefix}/include
2100

2101 2102 2103 2104
Name: $name
Description: $comment
Version: $version
Requires: $requires
2105
Conflicts:
2106 2107
Libs: -L\${libdir} $libs
Cflags: -I\${includedir} -I\${includedir}/$include
2108
EOF
2109
}
2110

2111 2112
pkgconfig_generate_uninstalled(){
name=$1
2113
shortname=${name#lib}
2114 2115 2116 2117 2118
comment=$2
version=$3
libs=$4
requires=$5
cat <<EOF >$name-uninstalled.pc
2119 2120
prefix=
exec_prefix=
2121 2122
libdir=\${pcfiledir}/$name
includedir=\${pcfiledir}/$name
2123

2124 2125 2126 2127
Name: $name
Description: $comment
Version: $version
Requires: $requires
2128
Conflicts:
2129
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2130 2131
Cflags: -I\${includedir}
EOF
2132
}
2133

Måns Rullgård's avatar
Måns Rullgård committed
2134
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2135
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2136

2137 2138
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2139

2140 2141
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2142

2143 2144 2145 2146
if test "$pp" = "yes"; then
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
fi
2147

2148
if test "$swscaler" != "no"; then
2149 2150
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2151
else
2152 2153
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2154 2155
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2156
fi