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

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

21 22 23 24 25 26
show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
27
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
28
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
29
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
30
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
31 32 33
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
  echo "  --mandir=DIR             install man page in DIR [PREFIX/man]"
  echo "  --enable-mp3lame         enable MP3 encoding via libmp3lame [default=no]"
34
  echo "  --enable-libnut          enable NUT support via libnut [default=no]"
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
  echo "  --enable-libogg          enable Ogg support via libogg [default=no]"
  echo "  --enable-vorbis          enable Vorbis support via libvorbis [default=no]"
  echo "  --enable-faad            enable FAAD support via libfaad [default=no]"
  echo "  --enable-faadbin         build FAAD support with runtime linking [default=no]"
  echo "  --enable-faac            enable FAAC support via libfaac [default=no]"
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
  echo "  --enable-xvid            enable XviD support via xvidcore [default=no]"
  echo "  --enable-x264            enable H.264 encoding via x264 [default=no]"
  echo "  --enable-mingw32         enable MinGW native/cross Windows compile"
  echo "  --enable-mingwce         enable MinGW native/cross WinCE compile"
  echo "  --enable-a52             enable GPLed A52 support [default=no]"
  echo "  --enable-a52bin          open liba52.so.0 at runtime [default=no]"
  echo "  --enable-dts             enable GPLed DTS support [default=no]"
  echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
  echo "  --enable-static          build static libraries [default=yes]"
  echo "  --disable-static         do not build static libraries [default=no]"
  echo "  --enable-shared          build shared libraries [default=no]"
  echo "  --disable-shared         do not build shared libraries [default=yes]"
  echo "  --enable-amr_nb          enable amr_nb float audio codec"
  echo "  --enable-amr_nb-fixed    use fixed point for amr-nb codec"
  echo "  --enable-amr_wb          enable amr_wb float audio codec"
  echo "  --enable-amr_if2         enable amr_wb IF2 audio codec"
  echo "  --enable-sunmlib         use Sun medialib [default=no]"
  echo "  --enable-pthreads        use pthreads [default=no]"
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
  echo "                           and libraw1394 [default=no]"
L
Luca Abeni 已提交
61
  echo "  --enable-swscaler        software scaler support [default=no]"
62
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
63 64 65 66 67 68
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
  echo "                           and ffmpeg will be under GPL [default=no]"
  echo ""
  echo "Advanced options (experts only):"
  echo "  --source-path=PATH       path to source code [$source_path]"
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
69
  echo "  --cross-compile          assume a cross-compiler is used"
70 71 72 73 74 75
  echo "  --cc=CC                  use C compiler CC [$cc]"
  echo "  --make=MAKE              use specified make [$make]"
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
76
  echo "  --arch=ARCH              select architecture  [$arch]"
77 78
  echo "  --cpu=CPU                selects the minimum cpu required (affects
                                   instruction selection, may crash on older CPUs)"
79 80 81
  echo "  --powerpc-perf-enable    enable performance report on PPC"
  echo "                           (requires enabling PMC)"
  echo "  --disable-mmx            disable MMX usage"
82
  echo "  --disable-armv5te        disable armv5te usage"
83 84 85 86 87 88 89 90 91
  echo "  --disable-iwmmxt         disable iwmmxt usage"
  echo "  --disable-altivec        disable AltiVec usage"
  echo "  --disable-audio-oss      disable OSS audio support [default=no]"
  echo "  --disable-audio-beos     disable BeOS audio support [default=no]"
  echo "  --disable-v4l            disable video4linux grabbing [default=no]"
  echo "  --disable-v4l2           disable video4linux2 grabbing [default=no]"
  echo "  --disable-bktr           disable bktr video grabbing [default=no]"
  echo "  --disable-dv1394         disable DV1394 grabbing [default=no]"
  echo "  --disable-network        disable network support [default=no]"
92
  echo "  --disable-ipv6           disable ipv6 support [default=no]"
93 94 95 96 97
  echo "  --disable-zlib           disable zlib [default=no]"
  echo "  --disable-vhook          disable video hooking support"
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
  echo "  --disable-debug          disable debugging symbols"
  echo "  --disable-opts           disable compiler optimizations"
98
  echo "  --enable-extra-warnings  enable more compiler warnings"
99 100 101
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
  echo "                           MPEG audio decoding [default=no]"
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
102
  echo "  --disable-ffmpeg         disable ffmpeg build"
103 104 105 106 107 108 109 110 111 112 113
  echo "  --disable-ffserver       disable ffserver build"
  echo "  --disable-ffplay         disable ffplay build"
  echo "  --enable-small           optimize for size instead of speed"
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
  echo "  --disable-strip          disable stripping of executables and shared libraries"
  echo "  --disable-encoder=NAME   disables encoder NAME"
  echo "  --enable-encoder=NAME    enables encoder NAME"
  echo "  --disable-decoder=NAME   disables decoder NAME"
  echo "  --enable-decoder=NAME    enables decoder NAME"
  echo "  --disable-encoders       disables all encoders"
  echo "  --disable-decoders       disables all decoders"
114 115
  echo "  --disable-muxer=NAME     disables muxer NAME"
  echo "  --enable-muxer=NAME      enables muxer NAME"
116
  echo "  --disable-muxers         disables all muxers"
117 118
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
119
  echo "  --disable-demuxers       disables all demuxers"
120 121 122
  echo "  --enable-parser=NAME     enables parser NAME"
  echo "  --disable-parser=NAME    disables parser NAME"
  echo "  --disable-parsers        disables all parsers"
123 124 125 126
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
  exit 1
}
127

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

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

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

die(){
    echolog "$@"
    cat <<EOF
If you think configure made a mistake, make sure you are using the latest
version from SVN.  If the latest version fails, report the problem to the
ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
EOF
150
    if enabled logging; then
151 152 153 154 155 156 157 158 159 160
        cat <<EOF
Include the log file "$logfile" produced by configure as this will help
solving the problem.
EOF
    else
cat <<EOF
Rerun configure with logging enabled (do not use --log=no), and include the
log this produces with your report.
EOF
    fi
161 162 163 164
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
    exit 1
}

165 166 167 168
toupper(){
    echo "$@" | tr '[a-z]' '[A-Z]'
}

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

enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HAVE_LIST='
    altivec_h
    byteswap_h
    dcbzl
    dlfcn
    dlopen
    freetype2
    gprof
    imlib2
    localtime_r
    lrintf
    malloc_h
    memalign
    mlib
    sdl
    sdl_video_size
'
420

421
# set temporary file name
Z
Zdenek Kabelac 已提交
422
if test ! -z "$TMPDIR" ; then
423
    TMPDIR1="${TMPDIR}"
Z
Zdenek Kabelac 已提交
424
elif test ! -z "$TEMPDIR" ; then
425
    TMPDIR1="${TEMPDIR}"
N
Nick Kurshev 已提交
426
else
427
    TMPDIR1="/tmp"
N
Nick Kurshev 已提交
428 429
fi

430 431
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
432
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
433 434 435
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"

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

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

765
;;
766 767 768
*)
targetos="${targetos}-UNKNOWN"
;;
769
esac
F
Fabrice Bellard 已提交
770

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

783 784 785 786
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    show_help
fi

787 788 789 790 791
FFMPEG_CONFIGURATION=" "
for opt do
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
done

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

798 799
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST

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

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

1004 1005 1006 1007 1008 1009 1010 1011 1012 1013
if test "$mingw32" = "yes" -o "$mingwce" = "yes"; then
    if test "$lshared" = "yes" && test "$lstatic" = "yes" ; then
        cat <<EOF
You can only build one library type at once on MinGW.
Specify --disable-static --enable-shared to only build
the shared libraries. To build only the static libraries
you do not need to pass additional options.
EOF
        exit 1
    fi
1014 1015
    video4linux="no"
    video4linux2="no"
1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027
    bktr="no"
    audio_oss="no"
    dv1394="no"
    dc1394="no"
    ffserver="no"
    network="no"
    if test "$mingwce" = "yes"; then
        protocols="no"
    fi
    SLIBPREF=""
    SLIBSUF=".dll"
    EXESUF=".exe"
1028 1029
    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
1030
    SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
1031
    SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a)"
1032
    if test "$force_prefix" != yes; then PREFIX="$PROGRAMFILES/FFmpeg"; fi
1033 1034
    if test "$force_libdir" != yes; then bindir='${PREFIX}'; fi
    shlibdir='${PREFIX}'
1035 1036
fi

1037 1038
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1039

1040
test -n "$cross_prefix" && cross_compile=yes
1041 1042 1043 1044 1045
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056
# 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

1057
if test "$libvorbis" = "yes" ; then
1058
    if test "$libogg" = "no"; then
D
Diego Biurrun 已提交
1059
        echo "libogg must be enabled to enable Vorbis."
N
Nilesh Bansal 已提交
1060 1061 1062 1063
        fail="yes"
    fi
fi

1064
if test "$gpl" != "yes"; then
1065
    if test "$pp" != "no"; then
D
Diego Biurrun 已提交
1066
        echo "The Postprocessing code is under GPL and --enable-gpl is not specified."
1067 1068 1069 1070
        fail="yes"
    fi

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

1075
    if test "$xvid" != "no"; then
D
Diego Biurrun 已提交
1076
        echo "libxvidcore is under GPL and --enable-gpl is not specified."
1077 1078 1079
        fail="yes"
    fi

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

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

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

L
Luca Abeni 已提交
1110 1111 1112 1113
    if test "$swscaler" != "no"; then
        echo "The software scaler is under GPL and --enable-gpl is not specified."
        fail="yes"
    fi
1114
fi
1115

1116 1117
if test "$fail" = "yes"; then
    exit 1
1118 1119
fi

D
Diego Biurrun 已提交
1120
# compute MMX state
1121
if test $mmx = "default"; then
1122
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1123 1124 1125 1126 1127 1128
        mmx="yes"
    else
        mmx="no"
    fi
fi

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

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

1160 1161
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
1162
    if test $arch = "powerpc"; then
1163 1164 1165 1166 1167 1168
        altivec="yes"
    else
        altivec="no"
    fi
fi

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

1250 1251 1252 1253 1254 1255 1256 1257
# 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
1258 1259
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
1260 1261 1262
EOF
    die "Sanity test failed."
fi
1263
rm $TMPE
1264

M
Måns Rullgård 已提交
1265 1266 1267 1268 1269 1270 1271 1272 1273 1274
# 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."
1275
        echo "Only do this if you know what cross compiling means."
M
Måns Rullgård 已提交
1276 1277 1278 1279
    fi
    die "C compiler test failed."
fi

1280 1281
# check for assembler specific support

1282
if test $arch = "powerpc"; then
1283 1284 1285 1286 1287 1288 1289 1290 1291 1292
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

1293 1294
# check for SIMD availability

1295
# AltiVec flags: The FSF version of GCC differs from the Apple version
1296
if test $arch = "powerpc"; then
1297
    if test $altivec = "yes"; then
1298
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1299
            add_cflags "-faltivec"
1300
        else
1301
            add_cflags "-maltivec -mabi=altivec"
1302 1303 1304 1305
        fi
    fi
fi

1306
check_header altivec.h && altivec_h=yes || altivec_h=no
1307

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

1325
# check armv5te instructions support
1326
if test $armv5te = "default" -a $arch = "armv4l"; then
1327 1328 1329 1330 1331 1332 1333 1334 1335
    armv5te=no
    check_cc <<EOF && armv5te=yes
        int main(void) {
        __asm__ __volatile__ ("qadd r0, r0, r0");
        }
EOF
fi

# check iwmmxt support
1336
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1337 1338 1339 1340 1341 1342 1343 1344
    iwmmxt=no
    check_cc <<EOF && iwmmxt=yes
        int main(void) {
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
        }
EOF
fi

D
Diego Biurrun 已提交
1345
# mmi only available on mips
1346
if test $mmi = "default"; then
1347
    if test $arch = "mips"; then
1348 1349 1350 1351 1352 1353
        mmi="yes"
    else
        mmi="no"
    fi
fi

D
Diego Biurrun 已提交
1354
# check if our compiler supports mmi
1355
enabled mmi && check_cc <<EOF || mmi="no"
1356 1357 1358 1359 1360
int main(void) {
    __asm__ ("lq \$2, 0(\$2)");
    return 0;
}
EOF
1361 1362 1363

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

1379 1380
# ---
# *inttypes.h* test
1381
check_header inttypes.h || inttypes=no
1382

1383 1384
# ---
# *int_fast* test
1385
check_cc <<EOF || emu_fast_int=yes
1386 1387
#include <inttypes.h>
int main(int argc, char ** argv){
1388 1389
        volatile uint_fast64_t i=0x01234567;
        return 0;
1390 1391 1392
}
EOF

N
Nick Kurshev 已提交
1393 1394 1395
# ---
# check availability of some header files

1396
memalign=no
1397
malloc_h=no
1398
if check_header malloc.h; then
1399
    malloc_h=yes
1400 1401
    memalign=yes
    check_func memalign || memalign="no"
N
Nick Kurshev 已提交
1402 1403
fi

1404
if test "$memalign" = "no" -a "$mmx" = "yes" -a \
1405
        "$memalign_hack" != "yes" -a "$targetos" != "Darwin" -a \
1406
        "$targetos" != "FreeBSD" ; then
1407
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1408 1409
fi

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

1412
check_func localtime_r && localtime_r=yes || localtime_r=no
1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"

# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if enabled pthreads; then
    { check_cflags -pthread && check_ldflags -pthread; } ||
    { check_cflags -pthreads && check_ldflags -pthreads; } ||
    check_lib pthread.h pthread_create -lpthread ||
    check_func pthread_create ||
    die "ERROR: can't find pthreads library"
fi

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

1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453
# 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

1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468
# 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

1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484
# 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


1485
# test for lrintf in math.h
M
Måns Rullgård 已提交
1486
check_exec <<EOF && lrintf=yes || lrintf=no
1487 1488 1489 1490 1491
#define _ISOC9X_SOURCE  1
#include <math.h>
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
EOF

F
Falk Hüffner 已提交
1492 1493
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1494
    check_cc <<EOF && _restrict=$restrict_keyword && break
1495 1496
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
1497 1498
done

1499 1500
# dlopen/dlfcn.h probing

1501
check_header dlfcn.h && dlfcn=yes
1502

1503 1504 1505 1506
temp_extralibs -ldl
if check_func dlopen; then
    dlopen=yes
    ldl=-ldl
1507
fi
1508
restore_flags
1509

1510 1511 1512
if check_func dlopen; then
    dlopen=yes
    ldl=
1513 1514
fi

M
Måns Rullgård 已提交
1515 1516
if test "$vhook" = "default"; then
    vhook="$dlopen"
1517 1518
fi

M
Michael Niedermayer 已提交
1519
if test "$vhook" = "yes" -o "$a52bin" = "yes" -o "$faadbin" = "yes"; then
1520
    add_extralibs $ldl
M
Michael Niedermayer 已提交
1521 1522
fi

1523 1524 1525 1526 1527 1528 1529 1530
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

1531 1532 1533 1534
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
M
Michael Niedermayer 已提交
1535

1536
##########################################
D
Diego Biurrun 已提交
1537
# imlib check
1538

1539 1540
temp_extralibs -lImlib2
check_ld <<EOF && imlib2=yes || imlib2=no
1541 1542 1543 1544
#include <X11/Xlib.h>
#include <Imlib2.h>
int main( void ) { return (int) imlib_load_font("foo"); }
EOF
1545
restore_flags
1546

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

1550
freetype2=no
1551
if test "x$targetos" != "xBeOS"; then
1552
  if (freetype-config --version) >/dev/null 2>&1 ; then
1553 1554 1555 1556 1557 1558 1559
      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
1560
  fi
1561 1562
fi

1563
##########################################
D
Diego Biurrun 已提交
1564
# SDL check
1565 1566 1567

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

1596 1597
enabled sdl || ffplay=no

1598
##########################################
D
Diego Biurrun 已提交
1599
# texi2html check
1600 1601

texi2html=no
1602
if (texi2html -version) >/dev/null 2>&1; then
1603 1604 1605
texi2html=yes
fi

1606
##########################################
D
Diego Biurrun 已提交
1607
# IPv6 check
1608

1609
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1610 1611 1612 1613 1614 1615 1616 1617 1618
#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);
1619
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1620 1621 1622
}
EOF

1623
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1624
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1625
#include <sys/time.h>
1626 1627
#include <asm/types.h>
#include <linux/videodev2.h>
1628
int dummy = V4L2_PIX_FMT_YUV420;
1629
struct v4l2_buffer dummy1;
1630 1631
EOF

1632 1633 1634 1635
enabled debug && add_cflags -g

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
1636 1637
check_cflags -Wall
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
1638 1639 1640
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
1641
enabled extrawarnings && check_cflags -Winline
1642

1643
# add some linker flags
1644
check_ldflags $LDLATEFLAGS
F
Fabrice Bellard 已提交
1645

1646 1647
# not all compilers support -Os
test "$optimize" = "small" && check_cflags -Os
1648

1649
if enabled optimize; then
1650
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1651 1652
        add_cflags  "-O5"
        add_ldflags "-O5"
1653
    else
1654
        add_cflags "-O3"
1655
    fi
1656 1657
fi

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

1668
if test "$gprof" = "yes" ; then
1669 1670
    add_cflags  "-p"
    add_ldflags "-p"
1671 1672
fi

1673 1674 1675 1676 1677 1678
# 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

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

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

1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782
if test "$amr_wb" = "yes" ; then
  echo
  echo "AMR WB FLOAT NOTICE ! Make sure you have downloaded TS26.204"
  echo "V5.1.0 from "
  echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip"
  echo "and extracted the source to libavcodec/amrwb_float"
fi

if test "$amr_nb" = "yes" ; then
  echo
  echo "AMR NB FLOAT NOTICE ! Make sure you have downloaded TS26.104"
  echo "REL-5 V5.1.0 from "
  echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip"
  echo "and extracted the source to libavcodec/amr_float"
  echo "If you try this on alpha, you may need to change Word32 to int in amr/typedef.h"
fi

if test "$amr_nb_fixed" = "yes" ; then
  echo
  echo "AMR NB FIXED POINT NOTICE! Make sure you have downloaded TS26.073 "
  echo "REL-5 version 5.1.0 from "
  echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip"
  echo "and extracted src to libavcodec/amr"
  echo "You must also add -DMMS_IO and remove -pedantic-errors to/from CFLAGS in libavcodec/amr/makefile."
  echo "i.e. CFLAGS = -Wall -I. \$(CFLAGS_\$(MODE)) -D\$(VAD) -DMMS_IO"
fi

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

1785 1786
date >> config.log
echo "   $0 $FFMPEG_CONFIGURATION" >> config.log
D
Diego Biurrun 已提交
1787 1788
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1789
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
F
Fabrice Bellard 已提交
1790

1791 1792
echo "PREFIX=$PREFIX" >> config.mak
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1793
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1794
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
D
Diego Biurrun 已提交
1795
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1796 1797
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1798
echo "MAKE=$make" >> config.mak
1799 1800
echo "CC=$cc" >> config.mak
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
1801
echo "RANLIB=$ranlib" >> config.mak
1802
if test "$dostrip" = "yes" ; then
M
Måns Rullgård 已提交
1803 1804
    echo "STRIP=$strip" >> config.mak
    echo "INSTALLSTRIP=$installstrip" >> config.mak
1805
else
M
Måns Rullgård 已提交
1806 1807
    echo "STRIP=echo ignoring strip" >> config.mak
    echo "INSTALLSTRIP=" >> config.mak
1808
fi
1809

1810
VHOOKCFLAGS="-fPIC $CFLAGS"
1811
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic
1812

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

1929 1930 1931
if test "$altivec" = "yes" ; then
  echo "TARGET_ALTIVEC=yes" >> config.mak
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1932
fi
1933

1934 1935 1936
if test "$pthreads" = "yes" ; then
  echo "HAVE_PTHREADS=yes" >> config.mak
  echo "#define HAVE_PTHREADS 1" >> $TMPH
1937
  echo "#define HAVE_THREADS 1" >> $TMPH
1938
fi
1939
if test "$sdl" = "yes" ; then
1940 1941
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1942
fi
1943 1944 1945
if test "$texi2html" = "yes"; then
  echo "BUILD_DOC=yes" >> config.mak
fi
L
Luca Barbato 已提交
1946

L
Luca Abeni 已提交
1947
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1948
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
L
Luca Barbato 已提交
1949 1950 1951 1952 1953 1954
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 已提交
1955
if test "$lshared" = "yes" ; then
1956
  echo "#define BUILD_SHARED_AV 1" >> $TMPH
N
Nick Kurshev 已提交
1957
  echo "BUILD_SHARED=yes" >> config.mak
1958
  echo "PIC=-fPIC -DPIC" >> config.mak
1959
  echo "SPPMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1960
  echo "SPPVERSION=$lavc_version" >> config.mak
1961
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1962
  echo "LAVCVERSION=$lavc_version" >> config.mak
1963
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1964
  echo "LAVFVERSION=$lavf_version" >> config.mak
1965
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1966
  echo "LAVUVERSION=$lavu_version" >> config.mak
L
Luca Abeni 已提交
1967 1968
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
  echo "SWSVERSION=$sws_version" >> config.mak
1969
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1970 1971
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1972
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
N
Nick Kurshev 已提交
1973
fi
1974
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1975
echo "EXTRALIBS=$extralibs" >> config.mak
1976

1977 1978 1979 1980
enabled_any $ENCODER_LIST && enable encoders
enabled_any $DECODER_LIST && enable decoders
enabled_any $MUXER_LIST   && enable muxers
enabled_any $DEMUXER_LIST && enable demuxers
1981

1982 1983
print_config HAVE_   $TMPH config.mak $HAVE_LIST
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1984

1985
if test "$mingw32" = "yes" ; then
1986 1987
  echo "HAVE_W32THREADS=yes" >> config.mak
  echo "#define HAVE_W32THREADS 1" >> $TMPH
1988
  echo "#define HAVE_THREADS 1" >> $TMPH
1989
  echo "#ifndef __MINGW32__" >> $TMPH
1990
  echo "#define __MINGW32__ 1" >> $TMPH
1991
  echo "#endif" >> $TMPH
1992 1993
fi

G
Gildas Bazin 已提交
1994 1995 1996 1997 1998 1999 2000
if test "$mingwce" = "yes" ; then
  echo "#define CONFIG_WINCE 1" >> $TMPH
  echo "#ifndef __MINGW32__" >> $TMPH
  echo "#define __MINGW32__ 1" >> $TMPH
  echo "#endif" >> $TMPH
fi

2001 2002
if test "$os2" = "yes" ; then
  echo "#define CONFIG_OS2 1" >> $TMPH
2003 2004 2005
  echo "HAVE_OS2THREADS=yes" >> config.mak
  echo "#define HAVE_OS2THREADS 1" >> $TMPH
  echo "#define HAVE_THREADS 1" >> $TMPH
2006 2007
fi

2008
if test "$targetos" = "BeOS" ; then
2009 2010 2011 2012 2013
  echo "HAVE_BEOSTHREADS=yes" >> config.mak
  echo "#define HAVE_BEOSTHREADS 1" >> $TMPH
  echo "#define HAVE_THREADS 1" >> $TMPH
fi

2014
if test "$targetos" = "Darwin"; then
2015 2016 2017
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
fi

2018 2019 2020 2021
if test "$need_inet_aton" = "yes" ; then
  echo "NEED_INET_ATON=yes" >> config.mak
fi

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

2024 2025
if test "$optimize" = "small"; then
  echo "#define always_inline"  >> $TMPH
2026
  echo "#define CONFIG_SMALL 1" >> $TMPH
2027 2028
fi

2029 2030
# build tree in object directory if source path is different from current one
if test "$source_path_used" = "yes" ; then
2031 2032 2033 2034 2035 2036
    DIRS="\
         doc \
         libavformat \
         libavcodec \
         libavcodec/alpha \
         libavcodec/armv4l \
2037
         libavcodec/bfin \
2038 2039 2040 2041 2042
         libavcodec/i386 \
         libavcodec/sparc \
         libavcodec/mlib \
         libavcodec/ppc \
         libavcodec/liba52 \
2043
         libpostproc \
2044
         libavutil \
L
Luca Abeni 已提交
2045
         libswscale \
2046 2047 2048 2049 2050
         tests \
         vhook \
         "
    FILES="\
          Makefile \
2051
          common.mak \
2052 2053
          libavformat/Makefile \
          libavcodec/Makefile \
2054
          libpostproc/Makefile \
2055
          libavutil/Makefile \
L
Luca Abeni 已提交
2056
          libswscale/Makefile \
2057 2058 2059 2060 2061
          tests/Makefile \
          vhook/Makefile \
          doc/Makefile \
          doc/texi2pod.pl \
          "
2062 2063 2064 2065
    for dir in $DIRS ; do
            mkdir -p $dir
    done
    for f in $FILES ; do
M
Michael Niedermayer 已提交
2066
        ln -sf "$source_path/$f" $f
2067 2068
    done
fi
2069 2070 2071
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2072

2073 2074 2075 2076
if test "$amr_if2" = "yes" ; then
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi

2077
# Apparently it's not possible to portably echo a backslash.
2078
if test "$asmalign_pot" = "yes" ; then
2079
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2080
else
2081
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2082 2083
fi

Z
Zdenek Kabelac 已提交
2084

2085
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
2086
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2087
    ucname="`toupper $codec`"
2088 2089 2090 2091 2092 2093 2094 2095 2096
    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
2097 2098
done

2099 2100
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
diff $TMPH config.h >/dev/null 2>&1
2101
if test "$?" != "0" ; then
2102 2103 2104 2105
        mv -f $TMPH config.h
else
        echo "config.h is unchanged"
fi
N
Nick Kurshev 已提交
2106

2107
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2108 2109


D
Diego Biurrun 已提交
2110
# build pkg-config files libav*.pc and libpostproc.pc
2111 2112
# libavutil.pc
cat <<EOF >libavutil.pc
2113
prefix=$PREFIX
2114
exec_prefix=\${prefix}
2115
libdir=\${exec_prefix}/lib
2116
includedir=\${prefix}/include
2117 2118 2119 2120

Name: libavutil
Description: FFmpeg utility library
Version: $lavu_version
2121
Requires:
2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135
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
2136
Requires:
2137 2138 2139 2140
Conflicts:
Libs: \${libdir}/${LIBPREF}avutil${LIBSUF}
Cflags: -I\${includedir}
EOF
2141 2142 2143

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

Name: libavcodec
Description: FFmpeg codec library
2151
Version: $lavc_version
2152
Requires: $pkg_requires libavutil = $lavu_version
2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165
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
2166
Version: $lavc_version
2167
Requires: $pkg_requires libavutil = $lavu_version
2168 2169 2170 2171 2172 2173 2174
Conflicts:
Libs: \${libdir}/${LIBPREF}avcodec${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF

# libavformat.pc
cat <<EOF >libavformat.pc
2175
prefix=$PREFIX
2176
exec_prefix=\${prefix}
2177
libdir=\${exec_prefix}/lib
2178
includedir=\${prefix}/include
2179 2180 2181

Name: libavformat
Description: FFmpeg container format library
2182
Version: $lavf_version
2183
Requires: $pkg_requires libavcodec = $lavc_version
2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196
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
2197
Version: $lavf_version
2198
Requires: $pkg_requires libavcodec = $lavc_version
2199 2200 2201 2202 2203 2204 2205 2206
Conflicts:
Libs: \${libdir}/${LIBPREF}avformat${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF


# libpostproc.pc
cat <<EOF >libpostproc.pc
2207
prefix=$PREFIX
2208
exec_prefix=\${prefix}
2209
libdir=\${exec_prefix}/lib
2210
includedir=\${prefix}/include
2211 2212 2213

Name: libpostproc
Description: FFmpeg post processing library
2214
Version: $lavc_version
2215
Requires:
2216 2217 2218 2219 2220 2221 2222 2223
Conflicts:
Libs: -L\${libdir} -lpostproc
Cflags: -I\${includedir} -I\${includedir}/postproc
EOF

cat <<EOF >libpostproc-uninstalled.pc
prefix=
exec_prefix=
2224 2225
libdir=\${pcfiledir}/libpostproc
includedir=\${pcfiledir}/libpostproc
2226 2227 2228

Name: libpostproc
Description: FFmpeg post processing library
2229
Version: $lavc_version
2230
Requires:
2231 2232 2233 2234
Conflicts:
Libs: \${libdir}/${LIBPREF}postproc${LIBSUF}
Cflags: -I\${includedir}
EOF
L
Luca Abeni 已提交
2235

2236 2237 2238 2239 2240 2241 2242 2243 2244
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 已提交
2245 2246 2247 2248 2249 2250 2251 2252 2253 2254
# 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
2255
Requires: $sws_pc_requires
L
Luca Abeni 已提交
2256
Conflicts:
2257
Libs: $sws_pc_libs
L
Luca Abeni 已提交
2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269
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
2270
Requires: $sws_pc_requires
L
Luca Abeni 已提交
2271
Conflicts:
2272
Libs: $sws_pc_uninstalled_libs
L
Luca Abeni 已提交
2273 2274
Cflags: -I\${includedir}
EOF