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

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

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

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

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

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

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

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

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

enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

186
enabled(){
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
    eval test "x\$$1" = "xyes"
}

enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

print_config(){
    pfx=$1
    header=$2
    makefile=$3
    shift 3
    for cfg; do
        if enabled $cfg; then
            ucname="${pfx}`toupper $cfg`"
            echo "#define ${ucname} 1" >> $header
            echo "${ucname}=yes" >> $makefile
        fi
    done
214 215 216 217 218 219
}

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

220
save_flags(){
221
    flags_saved && return
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250
    SAVE_CFLAGS="$CFLAGS"
    SAVE_LDFLAGS="$LDFLAGS"
    SAVE_extralibs="$extralibs"
}

restore_flags(){
    CFLAGS="$SAVE_CFLAGS"
    LDFLAGS="$SAVE_LDFLAGS"
    extralibs="$SAVE_extralibs"
    unset SAVE_CFLAGS
    unset SAVE_LDFLAGS
    unset SAVE_extralibs
}

temp_cflags(){
    save_flags
    CFLAGS="$CFLAGS $*"
}

temp_ldflags(){
    save_flags
    LDFLAGS="$LDFLAGS $*"
}

temp_extralibs(){
    save_flags
    extralibs="$extralibs $*"
}

251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269
append(){
    var=$1
    shift
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
    eval "$var=\"\$$var $*\""
}

add_cflags(){
    append CFLAGS "$@"
}

add_ldflags(){
    append LDFLAGS "$@"
}

add_extralibs(){
    append extralibs "$@"
}

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

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

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

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

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

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

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

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

333 334 335 336 337 338 339 340 341 342 343 344
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
    temp_extralibs "$@"
    check_header $header && check_func $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
}

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

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

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

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

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

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

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

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

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

790 791 792 793
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    show_help
fi

794 795 796 797 798
FFMPEG_CONFIGURATION=" "
for opt do
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
done

799 800 801 802 803
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/'`
804

805 806
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST

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

1003 1004
if test "$logging" != no; then
    test "$logging" = yes || logfile="$logging"
1005 1006
    echo "# $0 $@" >$logfile
    set >>$logfile
1007 1008
else
    logfile=/dev/null
1009
fi
1010

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

1047 1048
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1049

1050
test -n "$cross_prefix" && cross_compile=yes
1051 1052 1053 1054 1055
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066
# 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

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

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

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

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

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

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

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

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

1126 1127
if test "$fail" = "yes"; then
    exit 1
1128 1129
fi

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

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

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

1170 1171
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
1172
    if test $arch = "powerpc"; then
1173 1174 1175 1176 1177 1178
        altivec="yes"
    else
        altivec="no"
    fi
fi

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

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

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

1290 1291
# check for assembler specific support

1292
if test $arch = "powerpc"; then
1293 1294 1295 1296 1297 1298 1299 1300 1301 1302
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

1303 1304
# check for SIMD availability

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

1316
check_header altivec.h && altivec_h=yes || altivec_h=no
1317

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

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

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

D
Diego Biurrun 已提交
1355
# mmi only available on mips
1356
if test $mmi = "default"; then
1357
    if test $arch = "mips"; then
1358 1359 1360 1361 1362 1363
        mmi="yes"
    else
        mmi="no"
    fi
fi

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

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

1389 1390
# ---
# *inttypes.h* test
1391
check_header inttypes.h || inttypes=no
1392

1393 1394
# ---
# *int_fast* test
1395
check_cc <<EOF || emu_fast_int=yes
1396 1397
#include <inttypes.h>
int main(int argc, char ** argv){
1398 1399
        volatile uint_fast64_t i=0x01234567;
        return 0;
1400 1401 1402
}
EOF

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

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

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

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

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

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

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

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


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

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

1509 1510
# dlopen/dlfcn.h probing

1511
check_header dlfcn.h && dlfcn=yes
1512

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

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

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

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

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

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

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

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

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

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

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

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

1606 1607
enabled sdl || ffplay=no

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

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

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

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

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

1642 1643 1644 1645
enabled debug && add_cflags -g

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

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

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

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

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

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

1683 1684 1685 1686 1687 1688
# 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

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

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

1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792
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 已提交
1793
echo "Creating config.mak and config.h..."
F
Fabrice Bellard 已提交
1794

1795 1796
date >> config.log
echo "   $0 $FFMPEG_CONFIGURATION" >> config.log
D
Diego Biurrun 已提交
1797 1798
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1799
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
F
Fabrice Bellard 已提交
1800

1801 1802
echo "PREFIX=$PREFIX" >> config.mak
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1803
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1804
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
D
Diego Biurrun 已提交
1805
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1806 1807
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1808
echo "MAKE=$make" >> config.mak
1809 1810
echo "CC=$cc" >> config.mak
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
1811
echo "RANLIB=$ranlib" >> config.mak
1812
if test "$dostrip" = "yes" ; then
M
Måns Rullgård 已提交
1813 1814
    echo "STRIP=$strip" >> config.mak
    echo "INSTALLSTRIP=$installstrip" >> config.mak
1815
else
M
Måns Rullgård 已提交
1816 1817
    echo "STRIP=echo ignoring strip" >> config.mak
    echo "INSTALLSTRIP=" >> config.mak
1818
fi
1819

M
Måns Rullgård 已提交
1820 1821 1822
VHOOKCFLAGS="-fPIC $CFLAGS"
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic

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

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

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

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

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

1987 1988
enabled_any pthreads beosthreads os2threads w32threads && enable threads

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

1992
if test "$mingw32" = "yes" ; then
1993
  echo "#ifndef __MINGW32__" >> $TMPH
1994
  echo "#define __MINGW32__ 1" >> $TMPH
1995
  echo "#endif" >> $TMPH
1996 1997
fi

G
Gildas Bazin 已提交
1998 1999 2000 2001 2002 2003 2004
if test "$mingwce" = "yes" ; then
  echo "#define CONFIG_WINCE 1" >> $TMPH
  echo "#ifndef __MINGW32__" >> $TMPH
  echo "#define __MINGW32__ 1" >> $TMPH
  echo "#endif" >> $TMPH
fi

2005 2006
if test "$os2" = "yes" ; then
  echo "#define CONFIG_OS2 1" >> $TMPH
2007 2008
fi

2009
if test "$targetos" = "Darwin"; then
2010 2011 2012
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
fi

2013 2014 2015 2016
if test "$need_inet_aton" = "yes" ; then
  echo "NEED_INET_ATON=yes" >> config.mak
fi

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

2019 2020
if test "$optimize" = "small"; then
  echo "#define always_inline"  >> $TMPH
2021
  echo "#define CONFIG_SMALL 1" >> $TMPH
2022 2023
fi

2024 2025 2026
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
2027

2028 2029 2030 2031
if test "$amr_if2" = "yes" ; then
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi

2032
# Apparently it's not possible to portably echo a backslash.
2033
if test "$asmalign_pot" = "yes" ; then
2034
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
2035
else
2036
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
2037 2038
fi

Z
Zdenek Kabelac 已提交
2039

2040
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2041
    ucname="`toupper $codec`"
2042 2043 2044 2045 2046 2047 2048 2049 2050
    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
2051 2052
done

2053
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
M
Måns Rullgård 已提交
2054
if ! cmp -s $TMPH config.h; then
2055 2056 2057 2058
        mv -f $TMPH config.h
else
        echo "config.h is unchanged"
fi
N
Nick Kurshev 已提交
2059

2060
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2061

2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101
# build tree in object directory if source path is different from current one
if test "$source_path_used" = "yes" ; then
    DIRS="\
         doc \
         libavformat \
         libavcodec \
         libavcodec/alpha \
         libavcodec/armv4l \
         libavcodec/bfin \
         libavcodec/i386 \
         libavcodec/sparc \
         libavcodec/mlib \
         libavcodec/ppc \
         libavcodec/liba52 \
         libpostproc \
         libavutil \
         libswscale \
         tests \
         vhook \
         "
    FILES="\
          Makefile \
          common.mak \
          libavformat/Makefile \
          libavcodec/Makefile \
          libpostproc/Makefile \
          libavutil/Makefile \
          libswscale/Makefile \
          tests/Makefile \
          vhook/Makefile \
          doc/Makefile \
          doc/texi2pod.pl \
          "
    for dir in $DIRS ; do
            mkdir -p $dir
    done
    for f in $FILES ; do
        ln -sf "$source_path/$f" $f
    done
fi
2102

D
Diego Biurrun 已提交
2103
# build pkg-config files libav*.pc and libpostproc.pc
2104 2105
# libavutil.pc
cat <<EOF >libavutil.pc
2106
prefix=$PREFIX
2107
exec_prefix=\${prefix}
2108
libdir=\${exec_prefix}/lib
2109
includedir=\${prefix}/include
2110 2111 2112 2113

Name: libavutil
Description: FFmpeg utility library
Version: $lavu_version
2114
Requires:
2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128
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
2129
Requires:
2130 2131 2132 2133
Conflicts:
Libs: \${libdir}/${LIBPREF}avutil${LIBSUF}
Cflags: -I\${includedir}
EOF
2134 2135 2136

# libavcodec.pc
cat <<EOF >libavcodec.pc
2137
prefix=$PREFIX
2138
exec_prefix=\${prefix}
2139
libdir=\${exec_prefix}/lib
2140
includedir=\${prefix}/include
2141 2142 2143

Name: libavcodec
Description: FFmpeg codec library
2144
Version: $lavc_version
2145
Requires: $pkg_requires libavutil = $lavu_version
2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158
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
2159
Version: $lavc_version
2160
Requires: $pkg_requires libavutil = $lavu_version
2161 2162 2163 2164 2165 2166 2167
Conflicts:
Libs: \${libdir}/${LIBPREF}avcodec${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF

# libavformat.pc
cat <<EOF >libavformat.pc
2168
prefix=$PREFIX
2169
exec_prefix=\${prefix}
2170
libdir=\${exec_prefix}/lib
2171
includedir=\${prefix}/include
2172 2173 2174

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


# libpostproc.pc
cat <<EOF >libpostproc.pc
2200
prefix=$PREFIX
2201
exec_prefix=\${prefix}
2202
libdir=\${exec_prefix}/lib
2203
includedir=\${prefix}/include
2204 2205 2206

Name: libpostproc
Description: FFmpeg post processing library
2207
Version: $lavc_version
2208
Requires:
2209 2210 2211 2212 2213 2214 2215 2216
Conflicts:
Libs: -L\${libdir} -lpostproc
Cflags: -I\${includedir} -I\${includedir}/postproc
EOF

cat <<EOF >libpostproc-uninstalled.pc
prefix=
exec_prefix=
2217 2218
libdir=\${pcfiledir}/libpostproc
includedir=\${pcfiledir}/libpostproc
2219 2220 2221

Name: libpostproc
Description: FFmpeg post processing library
2222
Version: $lavc_version
2223
Requires:
2224 2225 2226 2227
Conflicts:
Libs: \${libdir}/${LIBPREF}postproc${LIBSUF}
Cflags: -I\${includedir}
EOF
L
Luca Abeni 已提交
2228

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