configure 56.7 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 7 8 9 10 11
show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
12
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
  echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
  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]"
  echo "  --enable-libogg          enable Ogg support via libogg [default=no]"
  echo "  --enable-vorbis          enable Vorbis support via libvorbis [default=no]"
  echo "  --enable-theora          enable Theora support via libtheora [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]"
  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]"
51
  echo "  --cross-compile          assume a cross-compiler is used"
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
  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 []"
  echo "  --cpu=CPU                force cpu to CPU  [$cpu]"
  echo "  --tune=CPU               tune code for a particular CPU"
  echo "                           (may fail or perform badly on other CPUs)"
  echo "  --powerpc-perf-enable    enable performance report on PPC"
  echo "                           (requires enabling PMC)"
  echo "  --disable-mmx            disable MMX usage"
  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]"
  echo "  --disable-zlib           disable zlib [default=no]"
  echo "  --disable-lzo            disable lzo [default=no]"
  echo "  --disable-simple_idct    disable simple IDCT routines [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"
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
  echo "                           MPEG audio decoding [default=no]"
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
  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"
  echo "  --disable-muxers         disables all muxers"
  echo "  --disable-demuxers       disables all demuxers"
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
  exit 1
}
100

101 102 103 104
log(){
    echo "$@" >>$logfile
}

105
log_file(){
M
Måns Rullgård 已提交
106 107 108 109 110
    log BEGIN $1
    cat -n $1 >>$logfile
    log END $1
}

111
echolog(){
M
Måns Rullgård 已提交
112
    log "$@"
113
    echo "$@"
114 115 116 117 118 119 120 121 122
}

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
123
    if enabled logging; then
124 125 126 127 128 129 130 131 132 133
        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
134 135 136 137 138 139 140 141 142 143 144 145
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
    exit 1
}

enabled(){
    eval test "\$$1" = "yes"
}

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

146
save_flags(){
147
    flags_saved && return
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176
    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 $*"
}

177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
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 "$@"
}

196
check_cc(){
197 198
    log check_cc "$@"
    cat >$TMPC
199
    log_file $TMPC
200 201 202 203 204 205
    log $cc $CFLAGS "$@" -c -o $TMPO $TMPC
    $cc $CFLAGS "$@" -c -o $TMPO $TMPC >>$logfile 2>&1
}

check_cpp(){
    log check_cpp "$@"
206
    cat >$TMPC
207
    log_file $TMPC
208 209
    log $cc $CFLAGS "$@" -E -o $TMPO $TMPC
    $cc $CFLAGS "$@" -E -o $TMPO $TMPC >>$logfile 2>&1
210 211 212
}

check_ld(){
213
    log check_ld "$@"
214
    cat >$TMPC
215
    log_file $TMPC
216
    log $cc $CFLAGS $LDFLAGS "$@" -o $TMPE $TMPC $extralibs
M
Måns Rullgård 已提交
217
    $cc $CFLAGS $LDFLAGS "$@" -o $TMPE $TMPC $extralibs >>$logfile 2>&1
218 219 220
}

check_cflags(){
221 222
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
223 224 225 226 227
int x;
EOF
}

check_ldflags(){
228 229 230 231 232
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
int main(){
    return 0;
}
233 234 235 236
EOF
}

check_header(){
237
    log check_header "$@"
238 239
    header=$1
    shift
240
    check_cpp "$@" <<EOF
241 242 243 244 245 246
#include <$header>
int x;
EOF
}

check_func(){
247
    log check_func "$@"
248 249 250 251 252 253 254 255 256 257
    func=$1
    shift
    check_ld "$@" <<EOF
extern int $func();
int main(){
    $func();
}
EOF
}

258 259 260 261 262 263 264 265 266 267 268 269
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
}

270
check_exec(){
271
    check_ld "$@" && { test "$cross_compile" = yes || $TMPE 2>&1 >>$logfile; }
272 273 274 275 276 277 278 279
}

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

282 283
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    show_help
284 285
fi

286
# set temporary file name
Z
Zdenek Kabelac 已提交
287
if test ! -z "$TMPDIR" ; then
288
    TMPDIR1="${TMPDIR}"
Z
Zdenek Kabelac 已提交
289
elif test ! -z "$TEMPDIR" ; then
290
    TMPDIR1="${TEMPDIR}"
N
Nick Kurshev 已提交
291
else
292
    TMPDIR1="/tmp"
N
Nick Kurshev 已提交
293 294
fi

295 296
TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
297
TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}"
298 299 300
TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"

F
Fabrice Bellard 已提交
301
# default parameters
302
logging="yes"
303
logfile="config.err"
F
Fabrice Bellard 已提交
304
prefix="/usr/local"
305
libdir=""
D
Diego Biurrun 已提交
306
incdir=""
F
Fabrice Bellard 已提交
307
mandir=""
F
Fabrice Bellard 已提交
308
bindir=""
309
cross_prefix=""
310
cross_compile="no"
F
Fabrice Bellard 已提交
311 312
cc="gcc"
ar="ar"
M
Michael Niedermayer 已提交
313
ranlib="ranlib"
314
make="make"
315
strip="strip"
F
Fabrice Bellard 已提交
316
cpu=`uname -m`
317
tune="generic"
318
powerpc_perf="no"
319
mmx="default"
320
iwmmxt="default"
321
altivec="default"
322
mmi="default"
F
Fabrice Bellard 已提交
323
case "$cpu" in
324
  i386|i486|i586|i686|i86pc|BePC)
F
Fabrice Bellard 已提交
325 326
    cpu="x86"
  ;;
327 328 329 330 331 332 333
  x86_64|amd64)
    cpu="x86"
    canon_arch="`cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
    if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
      if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
        cpu="x86_64"
      fi
334 335
    fi
  ;;
336 337
  # armv4l is a subset of armv5tel
  armv4l|armv5tel)
338 339
    cpu="armv4l"
  ;;
340 341 342
  alpha)
    cpu="alpha"
  ;;
A
Alex Beregszaszi 已提交
343
  "Power Macintosh"|ppc|powerpc)
344 345
    cpu="powerpc"
  ;;
346
  mips|mipsel|IP*)
347 348
    cpu="mips"
  ;;
349
  sun4u|sparc64)
350 351
    cpu="sparc64"
  ;;
352 353 354
  sparc)
    cpu="sparc"
  ;;
A
Alex Beregszaszi 已提交
355 356 357
  sh4)
    cpu="sh4"
  ;;
358 359 360 361 362 363 364 365 366 367 368 369
  parisc|parisc64)
    cpu="parisc"
  ;;
  s390|s390x)
    cpu="s390"
  ;;
  m68k)
    cpu="m68k"
  ;;
  ia64)
    cpu="ia64"
  ;;
F
Fabrice Bellard 已提交
370
  *)
371
    cpu="unknown"
F
Fabrice Bellard 已提交
372 373 374
  ;;
esac
gprof="no"
F
Fabrice Bellard 已提交
375
v4l="yes"
L
Luca Abeni 已提交
376
v4l2="yes"
377
bktr="no"
F
Fabrice Bellard 已提交
378
audio_oss="yes"
379
audio_beos="no"
380
dv1394="yes"
381
dc1394="no"
F
Fabrice Bellard 已提交
382
network="yes"
383
zlib="yes"
384
lzo="yes"
385
libgsm="no"
386
mp3lame="no"
387
libogg="no"
388
vorbis="no"
N
Nilesh Bansal 已提交
389
theora="no"
390 391
faad="no"
faadbin="no"
392
faac="no"
393
xvid="no"
394
x264="no"
395
a52="no"
Z
Zdenek Kabelac 已提交
396
a52bin="no"
397
dts="no"
398
pp="no"
399
mingw32="no"
G
Gildas Bazin 已提交
400
mingwce="no"
401
cygwin="no"
402
os2="no"
403
lstatic="yes"
404
lshared="no"
405 406
optimize="yes"
debug="yes"
407
dostrip="yes"
408
installstrip="-s"
409
extralibs="-lm"
410
simpleidct="yes"
411
bigendian="no"
412
inttypes="yes"
413
emu_fast_int="no"
414
vhook="default"
415 416
dlfcn="no"
dlopen="no"
417
mpegaudio_hp="yes"
418
SHFLAGS='-shared -Wl,-soname,$@'
419
netserver="no"
420
need_inet_aton="no"
421
protocols="yes"
422
ffserver="yes"
423
ffplay="yes"
424
LIBOBJFLAGS=""
425
FFLDFLAGS=-Wl,--warn-common
426
FFSLDFLAGS=-Wl,-E
427
LDCONFIG="ldconfig"
428 429
LIBPREF="lib"
LIBSUF=".a"
430
LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
431 432
SLIBPREF="lib"
SLIBSUF=".so"
433
SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
434 435
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
F
Fabrice Bellard 已提交
436
EXESUF=""
437
BUILDSUF=""
438
amr_nb="no"
439
amr_wb="no"
Z
Zdenek Kabelac 已提交
440
amr_nb_fixed="no"
441
amr_if2="no"
442
sunmlib="no"
443
pthreads="no"
444
gpl="no"
445
memalignhack="no"
446 447
muxers="yes"
demuxers="yes"
448 449 450 451 452 453 454

# OS specific
targetos=`uname -s`
case $targetos in
BeOS)
prefix="/boot/home/config"
# helps building libavcodec
455
CFLAGS="$CFLAGS -DPIC -fomit-frame-pointer"
456
# 3 gcc releases known for BeOS, each with ugly bugs
457
gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
458 459 460 461 462 463 464 465
case "$gcc_version" in
2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
mmx="no"
;;
*20010315*) echo "BeBits gcc"
CFLAGS="$CFLAGS -fno-expensive-optimizations"
;;
esac
466
SHFLAGS=-nostart
D
Diego Biurrun 已提交
467
# disable Linux things
468
audio_oss="no"
F
Fabrice Bellard 已提交
469
v4l="no"
L
Luca Abeni 已提交
470
v4l2="no"
471
dv1394="no"
D
Diego Biurrun 已提交
472
# enable BeOS things
473
audio_beos="yes"
474 475 476 477 478
# 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
479
netserver="yes"
480
need_inet_aton="yes"
481
extralibs="-lnet"
482
fi ;;
483 484
SunOS)
v4l="no"
L
Luca Abeni 已提交
485
v4l2="no"
486
audio_oss="no"
487
dv1394="no"
488
make="gmake"
489
FFLDFLAGS=""
490 491 492 493
FFSLDFLAGS=""
need_inet_aton="yes"
extralibs="$extralibs -lsocket -lnsl"
;;
494 495
NetBSD)
v4l="no"
L
Luca Abeni 已提交
496
v4l2="no"
497
bktr="yes"
498 499 500
audio_oss="yes"
dv1394="no"
make="gmake"
501
extralibs="$extralibs -lossaudio"
502
;;
503 504
OpenBSD)
v4l="no"
L
Luca Abeni 已提交
505
v4l2="no"
506
bktr="yes"
507 508 509
audio_oss="yes"
dv1394="no"
make="gmake"
510
LIBOBJFLAGS="\$(PIC)"
511
LDCONFIG="ldconfig -m \$(libdir)"
512 513
extralibs="$extralibs -lossaudio"
;;
514 515
FreeBSD)
v4l="no"
L
Luca Abeni 已提交
516
v4l2="no"
517
bktr="yes"
518
audio_oss="yes"
519
dv1394="no"
520
make="gmake"
521
CFLAGS="$CFLAGS -pthread"
522
;;
523 524 525 526 527 528 529 530
GNU/kFreeBSD)
v4l="no"
v4l2="no"
bktr="yes"
audio_oss="yes"
dv1394="no"
CFLAGS="$CFLAGS -pthread"
;;
531
BSD/OS)
F
Fabrice Bellard 已提交
532
v4l="no"
L
Luca Abeni 已提交
533
v4l2="no"
534
bktr="yes"
F
Fabrice Bellard 已提交
535
audio_oss="yes"
536
dv1394="no"
537 538
extralibs="-lpoll -lgnugetopt -lm"
make="gmake"
539 540
strip="strip -d"
installstrip=""
541
;;
542
Darwin)
543
cc="cc"
544
v4l="no"
L
Luca Abeni 已提交
545
v4l2="no"
546
audio_oss="no"
547
dv1394="no"
548
SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(libdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION)"
549
extralibs=""
550
darwin="yes"
551
strip="strip -x"
552
installstrip=""
553
FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
554
SLIBSUF=".dylib"
555 556
SLIBNAME_WITH_FULLVERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
557
FFSLDFLAGS=-Wl,-bind_at_load
558
;;
559
MINGW32*)
F
Fabrice Bellard 已提交
560
# Note: the rest of the mingw32 config is done afterwards as mingw32
D
Diego Biurrun 已提交
561
# can be forced on the command line for Linux cross compilation.
562 563
mingw32="yes"
;;
564 565
CYGWIN*)
v4l="no"
L
Luca Abeni 已提交
566
v4l2="no"
567
audio_oss="yes"
568
dv1394="no"
569
vhook="no"
570 571
extralibs=""
cygwin="yes"
572
EXESUF=".exe"
573
;;
574 575
Linux)
;;
576 577 578
IRIX*)
ranlib="echo ignoring ranlib"
v4l="no"
L
Luca Abeni 已提交
579
v4l2="no"
580 581 582
audio_oss="no"
make="gmake"
;;
583 584
OS/2)
TMPE=$TMPE".exe"
585
ar="emxomfar -p128"
586 587
ranlib="echo ignoring ranlib"
strip="echo ignoring strip"
588
CFLAGS="$CFLAGS -Zomf"
589
FFLDFLAGS="-Zomf -Zstack 16384 -s"
590
SHFLAGS="-Zdll -Zomf"
591 592 593 594 595
FFSLDFLAGS=""
LIBPREF=""
LIBSUF=".lib"
SLIBPREF=""
SLIBSUF=".dll"
F
Fabrice Bellard 已提交
596
EXESUF=".exe"
597
extralibs=""
598
pkg_requires=""
599
v4l="no"
L
Luca Abeni 已提交
600
v4l2="no"
601
audio_oss="no"
602
dv1394="no"
603
ffserver="no"
604
vhook="no"
605
os2="yes"
606

607
;;
608 609
*) ;;
esac
F
Fabrice Bellard 已提交
610

D
Diego Biurrun 已提交
611
# From MPlayer configure. We need TARGET_OS available
612
# to the Makefile, so it can distinguish between flavors
D
Diego Biurrun 已提交
613
# of AltiVec on PowerPC.
614 615
TARGET_OS=`( uname -s ) 2>&1`
  case "$TARGET_OS" in
A
Alex Beregszaszi 已提交
616
  Linux|FreeBSD|NetBSD|BSD/OS|OpenBSD|SunOS|QNX|Darwin|GNU|BeOS|MorphOS)
617 618 619 620 621 622 623 624 625 626 627 628 629 630 631
    ;;
  IRIX*)
    TARGET_OS=IRIX
    ;;
  HP-UX*)
    TARGET_OS=HP-UX
    ;;
  [cC][yY][gG][wW][iI][nN]*)
    TARGET_OS=CYGWIN
    ;;
  *)
    TARGET_OS="$TARGET_OS-UNKNOWN"
    ;;
  esac

632
# find source path
633
source_path="`dirname $0`"
634 635 636 637
source_path_used="yes"
if test -z "$source_path" -o "$source_path" = "." ; then
    source_path=`pwd`
    source_path_used="no"
638 639
else
    source_path="`cd \"$source_path\"; pwd`"
F
Fabrice Bellard 已提交
640 641
fi

642 643 644 645 646
FFMPEG_CONFIGURATION=" "
for opt do
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
done

647
CODEC_LIST=`grep 'register_avcodec(&[a-z]' $source_path/libavcodec/allcodecs.c  | sed 's/.*&\(.*\)).*/\1/'`
648

F
Fabrice Bellard 已提交
649 650
for opt do
  case "$opt" in
651 652
  --log)
  ;;
653
  --log=*) logging="${opt#*=}"
654
  ;;
655
  --prefix=*) prefix=`echo $opt | cut -d '=' -f 2`; force_prefix=yes
F
Fabrice Bellard 已提交
656
  ;;
657
  --libdir=*) libdir=`echo $opt | cut -d '=' -f 2`; force_libdir=yes
658
  ;;
D
Diego Biurrun 已提交
659 660
  --incdir=*) incdir=`echo $opt | cut -d '=' -f 2`;
  ;;
F
Fabrice Bellard 已提交
661 662
  --mandir=*) mandir=`echo $opt | cut -d '=' -f 2`
  ;;
663 664 665 666
  --source-path=*) source_path=`echo $opt | cut -d '=' -f 2`
  ;;
  --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2`
  ;;
667 668
  --cross-compile) cross_compile=yes
  ;;
669
  --cc=*) cc=`echo $opt | cut -d '=' -f 2-`
F
Fabrice Bellard 已提交
670
  ;;
671 672
  --make=*) make=`echo $opt | cut -d '=' -f 2`
  ;;
673
  --extra-cflags=*) CFLAGS="$CFLAGS ${opt#--extra-cflags=}"
674
  ;;
675
  --extra-ldflags=*) FFLDFLAGS="$FFLDFLAGS ${opt#--extra-ldflags=}"
676 677 678
  ;;
  --extra-libs=*) extralibs=${opt#--extra-libs=}
  ;;
679 680
  --build-suffix=*) BUILDSUF=${opt#--build-suffix=}
  ;;
F
Fabrice Bellard 已提交
681 682
  --cpu=*) cpu=`echo $opt | cut -d '=' -f 2`
  ;;
683 684
  --tune=*) tune=`echo $opt | cut -d '=' -f 2`
  ;;
685 686
  --powerpc-perf-enable) powerpc_perf="yes"
  ;;
F
Fabrice Bellard 已提交
687 688
  --disable-mmx) mmx="no"
  ;;
689 690
  --disable-iwmmxt) iwmmxt="no"
  ;;
691 692
  --disable-altivec) altivec="no"
  ;;
F
Fabrice Bellard 已提交
693 694
  --enable-gprof) gprof="yes"
  ;;
F
Fabrice Bellard 已提交
695 696
  --disable-v4l) v4l="no"
  ;;
L
Luca Abeni 已提交
697 698
  --disable-v4l2) v4l2="no"
  ;;
699 700
  --disable-bktr) bktr="no"
  ;;
F
Fabrice Bellard 已提交
701 702
  --disable-audio-oss) audio_oss="no"
  ;;
703 704
  --disable-audio-beos) audio_beos="no"
  ;;
705 706
  --disable-dv1394) dv1394="no"
  ;;
707
  --disable-network) network="no"; ffserver="no"
F
Fabrice Bellard 已提交
708
  ;;
709 710
  --disable-zlib) zlib="no"
  ;;
711 712
  --disable-lzo) lzo="no"
  ;;
713
  --enable-a52) a52="yes"
714
  ;;
M
Michael Niedermayer 已提交
715
  --enable-a52bin) a52bin="yes"
Z
Zdenek Kabelac 已提交
716
  ;;
717
  --enable-dts) dts="yes"
718
  ;;
719
  --enable-pp) pp="yes"
720
  ;;
721 722
  --enable-libgsm) libgsm="yes"
  ;;
723
  --enable-mp3lame) mp3lame="yes"
724
  ;;
725
  --enable-libogg) libogg="yes"
726
    pkg_requires="$pkg_requires ogg >= 1.1"
N
Nilesh Bansal 已提交
727
  ;;
728
  --enable-vorbis) vorbis="yes"
729
    pkg_requires="$pkg_requires vorbis vorbisenc"
730
  ;;
N
Nilesh Bansal 已提交
731
  --enable-theora) theora="yes"
732
    pkg_requires="$pkg_requires theora"
N
Nilesh Bansal 已提交
733
  ;;
Z
Zdenek Kabelac 已提交
734 735 736 737
  --enable-faad) faad="yes"
  ;;
  --enable-faadbin) faadbin="yes"
  ;;
738
  --enable-faac) faac="yes"
739
  ;;
740 741
  --enable-xvid) xvid="yes"
  ;;
742
  --enable-x264) x264="yes"
743
  ;;
744
  --enable-dc1394) dc1394="yes"
745
    pkg_requires="$pkg_requires libraw1394"
746
  ;;
747 748
  --disable-vhook) vhook="no"
  ;;
749
  --disable-simple_idct) simpleidct="no"
750
  ;;
751 752
  --enable-mingw32) mingw32="yes"
  ;;
G
Gildas Bazin 已提交
753 754
  --enable-mingwce) mingwce="yes"
  ;;
755 756 757 758
  --enable-static) lstatic="yes"
  ;;
  --disable-static) lstatic="no"
  ;;
759
  --enable-shared) lshared="yes"
N
Nick Kurshev 已提交
760
  ;;
761 762
  --disable-shared) lshared="no"
  ;;
763 764 765 766
  --disable-debug) debug="no"
  ;;
  --disable-opts) optimize="no"
  ;;
767 768
  --disable-mpegaudio-hp) mpegaudio_hp="no"
  ;;
769 770
  --disable-protocols) protocols="no"; network="no"; ffserver="no"
  ;;
771 772
  --disable-ffserver) ffserver="no"
  ;;
773 774
  --disable-ffplay) ffplay="no"
  ;;
775
  --enable-small) optimize="small"
776
  ;;
D
Diego Biurrun 已提交
777
  --enable-amr_nb) amr="yes"; amr_nb="yes"; amr_nb_fixed="no"
778
  ;;
D
Diego Biurrun 已提交
779
  --enable-amr_nb-fixed) amr="yes"; amr_nb_fixed="yes"; amr_nb="no"
Z
Zdenek Kabelac 已提交
780
  ;;
D
Diego Biurrun 已提交
781
  --enable-amr_wb) amr="yes"; amr_wb="yes"
782
  ;;
D
Diego Biurrun 已提交
783
  --enable-amr_if2) amr="yes"; amr_if2="yes"
784
  ;;
785 786
  --enable-sunmlib) sunmlib="yes"
  ;;
787 788
  --enable-pthreads) pthreads="yes"
  ;;
789 790
  --enable-gpl) gpl="yes"
  ;;
791 792
  --enable-memalign-hack) memalignhack="yes"
  ;;
793 794
  --disable-strip) dostrip="no"
  ;;
795
  --enable-encoder=*) CODEC_LIST="$CODEC_LIST ${opt#--enable-encoder=}_encoder"
796
  ;;
797 798 799 800 801
  --enable-decoder=*) CODEC_LIST="$CODEC_LIST ${opt#--enable-decoder=}_decoder"
  ;;
  --disable-encoder=*) CODEC_LIST="`echo $CODEC_LIST | sed -e \"s#${opt#--disable-encoder=}_encoder##\"`"
  ;;
  --disable-decoder=*) CODEC_LIST="`echo $CODEC_LIST | sed -e \"s#${opt#--disable-decoder=}_decoder##\"`"
802 803 804
  ;;
  --disable-encoders) CODEC_LIST="`echo $CODEC_LIST | sed 's/[-_a-zA-Z0-9]*encoder//g'`"
  ;;
805 806
  --disable-decoders) CODEC_LIST="`echo $CODEC_LIST | sed 's/[-_a-zA-Z0-9]*decoder//g'`"
  ;;
807
  --disable-muxers) muxers="no"; ffserver="no"
808 809 810
  ;;
  --disable-demuxers) demuxers="no"
  ;;
811 812
  --help) show_help
  ;;
813 814 815 816 817
  *)
  echo "Unknown option \"$opt\"."
  echo "See $0 --help for available options."
  exit 1
  ;;
F
Fabrice Bellard 已提交
818 819 820
  esac
done

821 822
if test "$logging" != no; then
    test "$logging" = yes || logfile="$logging"
823 824
    echo "# $0 $@" >$logfile
    set >>$logfile
825 826
else
    logfile=/dev/null
827
fi
828 829 830 831

# Combine FFLDFLAGS and the LDFLAGS environment variable
LDFLAGS="$FFLDFLAGS $LDFLAGS"

832
test -n "$cross_prefix" && cross_compile=yes
833 834 835 836 837
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

838 839 840 841 842 843 844 845 846 847 848
# 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

N
Nilesh Bansal 已提交
849
if test "$theora" = "yes" ; then
850
    if test "$libogg" = "no"; then
D
Diego Biurrun 已提交
851
        echo "libogg must be enabled to enable Theora."
N
Nilesh Bansal 已提交
852 853 854 855 856 857
        fail="yes"
        theora="no"
    fi
fi

if test "$vorbis" = "yes" ; then
858
    if test "$libogg" = "no"; then
D
Diego Biurrun 已提交
859
        echo "libogg must be enabled to enable Vorbis."
N
Nilesh Bansal 已提交
860 861 862 863 864
        fail="yes"
        vorbis="no"
    fi
fi

865
if test "$gpl" != "yes"; then
866
    if test "$pp" != "no"; then
D
Diego Biurrun 已提交
867
        echo "The Postprocessing code is under GPL and --enable-gpl is not specified."
868 869 870 871
        fail="yes"
    fi

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

876
    if test "$xvid" != "no"; then
D
Diego Biurrun 已提交
877
        echo "libxvidcore is under GPL and --enable-gpl is not specified."
878 879 880
        fail="yes"
    fi

881
    if test "$x264" != "no"; then
D
Diego Biurrun 已提交
882
        echo "x264 is under GPL and --enable-gpl is not specified."
883 884 885
        fail="yes"
    fi

886
    if test "$dts" != "no"; then
D
Diego Biurrun 已提交
887
        echo "libdts is under GPL and --enable-gpl is not specified."
888 889
        fail="yes"
    fi
890

891
    if test "$faad" != "no" -o "$faadbin" != "no"; then
892 893
        if check_header faad.h; then
            check_cc << EOF
894 895 896 897 898 899
                #include <faad.h>
                #ifndef FAAD2_VERSION
                ok faad1
                #endif
                int main( void ) { return 0; }
EOF
900
            if test $? = 0 ; then
D
Diego Biurrun 已提交
901
                echo "FAAD2 is under GPL and --enable-gpl is not specified."
902 903 904 905 906
                fail="yes"
            fi
        else
            faad="no"
            faadbin="no"
D
Diego Biurrun 已提交
907
            echo "FAAD test failed."
908 909
        fi
    fi
910

911

M
10l  
Michael Niedermayer 已提交
912
    if test "$fail" = "yes"; then
913 914 915 916
        exit 1
    fi
fi

D
Diego Biurrun 已提交
917
# compute MMX state
918
if test $mmx = "default"; then
919
    if test $cpu = "x86" -o $cpu = "x86_64"; then
920 921 922 923 924 925
        mmx="yes"
    else
        mmx="no"
    fi
fi

926 927
# check iwmmxt support
if test $iwmmxt = "default" -a $cpu = "armv4l"; then
928 929
    iwmmxt=no
    check_cc <<EOF && iwmmxt=yes
930
        int main(void) {
931 932 933 934 935
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
        }
EOF
fi

936
#Darwin CC versions
937
needmdynamicnopic="no"
938
if test $targetos = Darwin; then
939
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
940
        CFLAGS="$CFLAGS -qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
941
    else
942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959
        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
        case "$gcc_version" in
            *2.95*)
                CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer"
                ;;
            *[34].*)
                CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer -force_cpusubtype_ALL -Wno-sign-compare"
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
            *)
                CFLAGS="$CFLAGS -no-cpp-precomp -pipe -fomit-frame-pointer"
                if test "$lshared" = no; then
                   needmdynamicnopic="yes"
                fi
                ;;
        esac
960 961 962
    fi
fi

963 964 965 966 967 968 969 970 971
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
    if test $cpu = "powerpc"; then
        altivec="yes"
    else
        altivec="no"
    fi
fi

972 973
# Add processor-specific flags
TUNECPU="generic"
974
POWERPCMODE="32bits"
975 976
if test $tune != "generic"; then
    case $tune in
977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024
        601|ppc601|PowerPC601)
            CFLAGS="$CFLAGS -mcpu=601"
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC601 but AltiVec enabled!";
            fi
            TUNECPU=ppc601
        ;;
        603*|ppc603*|PowerPC603*)
            CFLAGS="$CFLAGS -mcpu=603"
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC603 but AltiVec enabled!";
            fi
            TUNECPU=ppc603
        ;;
        604*|ppc604*|PowerPC604*)
            CFLAGS="$CFLAGS -mcpu=604"
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC604 but AltiVec enabled!";
            fi
            TUNECPU=ppc604
        ;;
        G3|g3|75*|ppc75*|PowerPC75*)
            CFLAGS="$CFLAGS -mcpu=750 -mtune=750 -mpowerpc-gfxopt"
            if test $altivec = "yes"; then
                echo "WARNING: Tuning for PPC75x but AltiVec enabled!";
            fi
            TUNECPU=ppc750
        ;;
        G4|g4|745*|ppc745*|PowerPC745*)
            CFLAGS="$CFLAGS -mcpu=7450 -mtune=7450 -mpowerpc-gfxopt"
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC745x but AltiVec disabled!";
            fi
            TUNECPU=ppc7450
        ;;
        74*|ppc74*|PowerPC74*)
            CFLAGS="$CFLAGS -mcpu=7400 -mtune=7400 -mpowerpc-gfxopt"
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC74xx but AltiVec disabled!";
            fi
            TUNECPU=ppc7400
        ;;
        G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
            CFLAGS="$CFLAGS -mcpu=970 -mtune=970 -mpowerpc-gfxopt -mpowerpc64"
            if test $altivec = "no"; then
                echo "WARNING: Tuning for PPC970 but AltiVec disabled!";
            fi
            TUNECPU=ppc970
1025
            POWERPCMODE="64bits"
1026 1027 1028 1029 1030 1031 1032
        ;;
        i[3456]86|pentium|pentiumpro|pentium-mmx|pentium[234]|prescott|k6|k6-[23]|athlon|athlon-tbird|athlon-4|athlon-[mx]p|winchip-c6|winchip2|c3|nocona|athlon64|k8|opteron|athlon-fx)
            CFLAGS="$CFLAGS -march=$tune"
        ;;
        *)
        echo "WARNING: Unknown CPU \"$tune\", ignored."
        ;;
1033 1034 1035
    esac
fi

M
Måns Rullgård 已提交
1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049
# 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."
    fi
    die "C compiler test failed."
fi

1050 1051
# check for SIMD availability

1052
# AltiVec flags: The FSF version of GCC differs from the Apple version
1053 1054
if test $cpu = "powerpc"; then
    if test $altivec = "yes"; then
1055
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
S
Steven M. Schultz 已提交
1056
            CFLAGS="$CFLAGS -faltivec"
1057 1058 1059 1060 1061 1062
        else
            CFLAGS="$CFLAGS -maltivec -mabi=altivec"
        fi
    fi
fi

1063
check_header altivec.h && _altivec_h=yes || _altivec_h=no
1064

D
Diego Biurrun 已提交
1065
# check if our compiler supports Motorola AltiVec C API
1066
if test $altivec = "yes"; then
M
Måns Rullgård 已提交
1067 1068 1069 1070 1071 1072
    if test $_altivec_h = "yes"; then
        inc_altivec_h="#include <altivec.h>"
    else
        inc_altivec_h=
    fi
    check_cc <<EOF || altivec=no
1073
$inc_altivec_h
1074 1075 1076 1077 1078 1079 1080
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
EOF
fi
1081

D
Diego Biurrun 已提交
1082
# mmi only available on mips
1083 1084 1085 1086 1087 1088 1089 1090
if test $mmi = "default"; then
    if test $cpu = "mips"; then
        mmi="yes"
    else
        mmi="no"
    fi
fi

D
Diego Biurrun 已提交
1091
# check if our compiler supports mmi
1092
enabled mmi && check_cc <<EOF || mmi="no"
1093 1094 1095 1096 1097
int main(void) {
    __asm__ ("lq \$2, 0(\$2)");
    return 0;
}
EOF
1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122

# test gcc version to see if vector builtins can be used
# currently only used on i386 for MMX builtins
check_cc -msse <<EOF && builtin_vector=yes || builtin_vector=no
#include <xmmintrin.h>
int main(void) {
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
return 0;
#else
#error no vector builtins
#endif
}
EOF

# test for mm3dnow.h
test "$cpu" = "x86_64" && march=k8 || march=athlon
check_cc -march=$march <<EOF && mm3dnow=yes || mm3dnow=no
#include <mm3dnow.h>
int main(void) {
__m64 b1;
b1 = _m_pswapd(b1);
_m_femms();
return 0;
}
EOF
1123

G
Gildas Bazin 已提交
1124
if test "$mingw32" = "yes" -o "$mingwce" = "yes"; then
1125 1126 1127 1128 1129
    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
1130
you do not need to pass additional options.
1131 1132 1133
EOF
        exit 1
    fi
1134
    v4l="no"
L
Luca Abeni 已提交
1135
    v4l2="no"
1136
    bktr="no"
1137
    audio_oss="no"
1138
    dv1394="no"
1139
    dc1394="no"
F
Fabrice Bellard 已提交
1140
    ffserver="no"
1141
    network="no"
M
Måns Rullgård 已提交
1142 1143 1144
    if test "$mingwce" = "yes"; then
        protocols="no"
    fi
F
Fabrice Bellard 已提交
1145 1146 1147
    SLIBPREF=""
    SLIBSUF=".dll"
    EXESUF=".exe"
1148
    if test "$force_prefix" != yes; then prefix="$PROGRAMFILES/FFmpeg"; fi
1149
    if test "$force_libdir" != yes; then bindir="$prefix"; fi
1150 1151
fi

1152 1153
# ---
# big/little-endian test
1154
if test "$cross_compile" = "no"; then
1155
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1156 1157
#include <inttypes.h>
int main(int argc, char ** argv){
1158 1159
        volatile uint32_t i=0x01234567;
        return (*((uint8_t*)(&i))) == 0x67;
1160 1161
}
EOF
F
Fabrice Bellard 已提交
1162
else
M
Måns Rullgård 已提交
1163 1164 1165 1166
    # programs cannot be launched if cross compiling, so make a static guess
    if test "$cpu" = "powerpc" -o "$cpu" = "mips" ; then
        bigendian="yes"
    fi
F
Fabrice Bellard 已提交
1167 1168
fi

1169 1170
# ---
# *inttypes.h* test
1171
check_header inttypes.h || inttypes=no
1172

1173 1174
# ---
# *int_fast* test
1175
check_cc <<EOF || emu_fast_int=yes
1176 1177
#include <inttypes.h>
int main(int argc, char ** argv){
1178 1179
        volatile uint_fast64_t i=0x01234567;
        return 0;
1180 1181 1182
}
EOF

N
Nick Kurshev 已提交
1183 1184 1185 1186 1187
# ---
# check availability of some header files

_memalign=no
_malloc_h=no
1188 1189 1190 1191
if check_header malloc.h; then
    _malloc_h=yes
    _memalign=yes
    check_func memalign || _memalign="no"
N
Nick Kurshev 已提交
1192 1193
fi

1194
if test "$_memalign" = "no" -a "$mmx" = "yes" -a "$memalignhack" != "yes"; then
1195
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1196 1197
fi

1198
check_func localtime_r && localtime_r=yes || localtime_r=no
1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
enabled lzo && enabled gpl && check_lib lzo1x.h lzo_version -llzo || lzo="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
enabled dts     && require libdts dts.h dts_init -ldts
enabled libgsm  && require libgsm gsm.h gsm_create -lgsm
enabled mp3lame && require LAME lame/lame.h lame_init -lmp3lame
enabled vorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc
1217
enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
1218 1219 1220 1221 1222
enabled theora  && require libtheora theora/theora.h theora_info_init -ltheora
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
enabled sunmlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1223

1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240
# 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

1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255
# 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

1256
# test for lrintf in math.h
1257
check_exec <<EOF && have_lrintf=yes || have_lrintf=no
1258 1259 1260 1261 1262
#define _ISOC9X_SOURCE  1
#include <math.h>
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
EOF

F
Falk Hüffner 已提交
1263 1264
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1265
    check_cc <<EOF && _restrict=$restrict_keyword && break
1266 1267
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
1268 1269
done

1270 1271
# dlopen/dlfcn.h probing

1272
check_header dlfcn.h && dlfcn=yes
1273

1274 1275 1276 1277
temp_extralibs -ldl
if check_func dlopen; then
    dlopen=yes
    ldl=-ldl
1278
fi
1279
restore_flags
1280

1281 1282 1283
if check_func dlopen; then
    dlopen=yes
    ldl=
1284 1285
fi

M
Måns Rullgård 已提交
1286 1287
if test "$vhook" = "default"; then
    vhook="$dlopen"
1288 1289
fi

M
Michael Niedermayer 已提交
1290
if test "$vhook" = "yes" -o "$a52bin" = "yes" -o "$faadbin" = "yes"; then
1291
    add_extralibs $ldl
M
Michael Niedermayer 已提交
1292 1293
fi

1294 1295 1296 1297
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
M
Michael Niedermayer 已提交
1298

1299
##########################################
D
Diego Biurrun 已提交
1300
# imlib check
1301

1302 1303
temp_extralibs -lImlib2
check_ld <<EOF && imlib2=yes || imlib2=no
1304 1305 1306 1307
#include <X11/Xlib.h>
#include <Imlib2.h>
int main( void ) { return (int) imlib_load_font("foo"); }
EOF
1308
restore_flags
1309

1310
##########################################
D
Diego Biurrun 已提交
1311
# FreeType check
1312

1313
freetype2=no
1314
if test "x$targetos" != "xBeOS"; then
1315
  if (freetype-config --version) >/dev/null 2>&1 ; then
1316 1317 1318 1319 1320 1321 1322
      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
1323
  fi
1324 1325
fi

1326
##########################################
D
Diego Biurrun 已提交
1327
# SDL check
1328 1329 1330

sdl_too_old=no
sdl=no
1331 1332
SDL_CONFIG="${cross_prefix}sdl-config"
if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
1333 1334 1335 1336 1337 1338 1339 1340 1341
    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'`
1342
        if test "$_sdlversion" -lt 121 ; then
1343 1344 1345
            sdl_too_old=yes
        else
            sdl=yes
1346 1347 1348 1349 1350 1351 1352 1353
            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
1354 1355
        fi
    fi
1356
    restore_flags
M
Michael Niedermayer 已提交
1357
fi
1358

1359 1360
enabled sdl || ffplay=no

1361
##########################################
D
Diego Biurrun 已提交
1362
# texi2html check
1363 1364

texi2html=no
1365
if (texi2html -version) >/dev/null 2>&1; then
1366 1367 1368
texi2html=yes
fi

1369
##########################################
D
Diego Biurrun 已提交
1370
# IPv6 check
1371

1372
enabled network && check_ld <<EOF && ipv6=yes || ipv6=no
1373 1374 1375 1376 1377 1378 1379 1380 1381
#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);
1382
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1383 1384 1385
}
EOF

1386
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1387
enabled v4l2 && check_cc <<EOF || v4l2="no"
1388
#include <sys/time.h>
1389 1390
#include <asm/types.h>
#include <linux/videodev2.h>
1391
int dummy = V4L2_PIX_FMT_YUV420;
1392
struct v4l2_buffer dummy1;
1393 1394
EOF

1395 1396 1397 1398
enabled debug && add_cflags -g

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
1399 1400
check_cflags -Wall
check_cflags -Wno-switch
1401

1402 1403
# add some linker flags
check_ldflags '-Wl,--as-needed' '-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec' '-Wl,-rpath-link,\$(BUILD_ROOT)/libavformat' '-Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
F
Fabrice Bellard 已提交
1404

1405 1406
# not all compilers support -Os
test "$optimize" = "small" && check_cflags -Os
1407

1408
if enabled optimize; then
1409
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1410 1411
        CFLAGS="$CFLAGS -O5"
        LDFLAGS="$LDFLAGS -O5"
1412
    else
1413
        CFLAGS="-O3 $CFLAGS"
1414
    fi
1415 1416
fi

1417 1418
# PIC flags for shared library objects where they are needed
if test "$lshared" = "yes" ; then
M
Måns Rullgård 已提交
1419 1420 1421 1422 1423
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
        if test "$cpu" = "x86_64" -o "$cpu" = "ia64" -o "$cpu" = "alpha" ; then
            LIBOBJFLAGS="\$(PIC)"
        fi
1424 1425 1426
    fi
fi

F
Fabrice Bellard 已提交
1427
if test x"$bindir" = x""; then
M
Måns Rullgård 已提交
1428
    bindir="${prefix}/bin"
F
Fabrice Bellard 已提交
1429 1430
fi

1431
if test x"$libdir" = x""; then
M
Måns Rullgård 已提交
1432
    libdir="${prefix}/lib"
1433 1434
fi

D
Diego Biurrun 已提交
1435
if test x"$incdir" = x""; then
M
Måns Rullgård 已提交
1436
    incdir="${prefix}/include/ffmpeg"
D
Diego Biurrun 已提交
1437 1438
fi

F
Fabrice Bellard 已提交
1439
if test x"$mandir" = x""; then
M
Måns Rullgård 已提交
1440
    mandir="${prefix}/man"
F
Fabrice Bellard 已提交
1441 1442
fi

D
Diego Biurrun 已提交
1443 1444
echo "install prefix   $prefix"
echo "source path      $source_path"
F
Fabrice Bellard 已提交
1445
echo "C compiler       $cc"
1446
echo "make             $make"
1447
echo "CPU              $cpu ($tune)"
1448
if test "$BUILDSUF" != ""; then
M
Måns Rullgård 已提交
1449
    echo "build suffix     $BUILDSUF"
1450
fi
D
Diego Biurrun 已提交
1451
echo "big-endian       $bigendian"
1452
echo "inttypes.h       $inttypes"
1453
echo "broken inttypes.h $emu_fast_int"
1454
if test $cpu = "x86" -o $cpu = "x86_64"; then
M
Måns Rullgård 已提交
1455 1456 1457
    echo "MMX enabled      $mmx"
    echo "Vector Builtins  $builtin_vector"
    echo "3DNow! Builtins  $mm3dnow"
F
Fabrice Bellard 已提交
1458
fi
1459
if test $cpu = "armv4l"; then
M
Måns Rullgård 已提交
1460
    echo "IWMMXT enabled   $iwmmxt"
1461
fi
F
Fabrice Bellard 已提交
1462
if test $cpu = "mips"; then
M
Måns Rullgård 已提交
1463
    echo "MMI enabled      $mmi"
F
Fabrice Bellard 已提交
1464 1465
fi
if test $cpu = "powerpc"; then
M
Måns Rullgård 已提交
1466
    echo "AltiVec enabled  $altivec"
F
Fabrice Bellard 已提交
1467
fi
F
Fabrice Bellard 已提交
1468
echo "gprof enabled    $gprof"
1469
echo "zlib enabled     $zlib"
1470
echo "lzo enabled      $lzo"
1471
echo "libgsm enabled   $libgsm"
1472
echo "mp3lame enabled  $mp3lame"
1473
echo "libogg enabled   $libogg"
D
Diego Biurrun 已提交
1474 1475 1476
echo "Vorbis enabled   $vorbis"
echo "Theora enabled   $theora"
echo "FAAD enabled     $faad"
Z
Zdenek Kabelac 已提交
1477
echo "faadbin enabled  $faadbin"
D
Diego Biurrun 已提交
1478 1479
echo "FAAC enabled     $faac"
echo "XviD enabled     $xvid"
1480
echo "x264 enabled     $x264"
F
Fabrice Bellard 已提交
1481
echo "a52 support      $a52"
Z
Zdenek Kabelac 已提交
1482
echo "a52 dlopened     $a52bin"
D
Diego Biurrun 已提交
1483
echo "DTS support      $dts"
1484
echo "pp support       $pp"
1485
echo "debug symbols    $debug"
1486
echo "strip symbols    $dostrip"
1487
echo "optimize         $optimize"
1488
echo "static           $lstatic"
D
typo  
Diego Biurrun 已提交
1489
echo "shared           $lshared"
D
Diego Biurrun 已提交
1490
echo "video hooking    $vhook"
1491 1492
echo "SDL support      $sdl"
if test $sdl_too_old = "yes"; then
M
Måns Rullgård 已提交
1493
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1494
fi
1495

M
Måns Rullgård 已提交
1496 1497 1498
if test "$vhook" = "yes"; then
    echo "Imlib2 support   $imlib2"
    echo "FreeType support $freetype2"
1499
fi
1500
echo "Sun medialib support"  $sunmlib
1501
echo "pthreads support"      $pthreads
Z
Zdenek Kabelac 已提交
1502 1503
echo "AMR-NB float support"  $amr_nb
echo "AMR-NB fixed support"  $amr_nb_fixed
1504
echo "AMR-WB float support"  $amr_wb
1505
echo "AMR-WB IF2 support"    $amr_if2
1506 1507
echo "network support      $network"
if test "$network" = "yes" ; then
M
Måns Rullgård 已提交
1508
    echo "IPv6 support         $ipv6"
1509
fi
1510
if test "$gpl" = "no" ; then
M
Måns Rullgård 已提交
1511
    echo "License: LGPL"
1512
else
M
Måns Rullgård 已提交
1513
    echo "License: GPL"
1514
fi
F
Fabrice Bellard 已提交
1515

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

1518 1519
date >> config.log
echo "   $0 $FFMPEG_CONFIGURATION" >> config.log
D
Diego Biurrun 已提交
1520 1521
echo "# Automatically generated by configure - do not modify!" > config.mak
echo "/* Automatically generated by configure - do not modify! */" > $TMPH
1522
echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
F
Fabrice Bellard 已提交
1523

1524 1525
echo "prefix=\$(DESTDIR)$prefix" >> config.mak
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
D
Diego Biurrun 已提交
1526
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1527 1528
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1529
echo "MAKE=$make" >> config.mak
1530 1531
echo "CC=$cc" >> config.mak
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
1532
echo "RANLIB=$ranlib" >> config.mak
1533
if test "$dostrip" = "yes" ; then
M
Måns Rullgård 已提交
1534 1535
    echo "STRIP=$strip" >> config.mak
    echo "INSTALLSTRIP=$installstrip" >> config.mak
1536
else
M
Måns Rullgård 已提交
1537 1538
    echo "STRIP=echo ignoring strip" >> config.mak
    echo "INSTALLSTRIP=" >> config.mak
1539
fi
1540

D
Diego Biurrun 已提交
1541
# SHCFLAGS is a copy of CFLAGS without -mdynamic-no-pic, used when building
1542
# shared modules on OS/X (vhook/Makefile).
1543 1544
SHCFLAGS="$CFLAGS"
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic
1545

N
Nick Kurshev 已提交
1546
echo "OPTFLAGS=$CFLAGS" >> config.mak
1547
echo "SHCFLAGS=$SHCFLAGS">>config.mak
1548
echo "LDFLAGS=$LDFLAGS" >> config.mak
1549
echo "LDCONFIG=$LDCONFIG" >> config.mak
1550
echo "FFSLDFLAGS=$FFSLDFLAGS" >> config.mak
1551
echo "SHFLAGS=$SHFLAGS" >> config.mak
1552
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1553
echo "BUILD_STATIC=$lstatic" >> config.mak
1554
echo "BUILDSUF=$BUILDSUF" >> config.mak
1555
echo "LIBPREF=$LIBPREF" >> config.mak
1556
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1557 1558
if test "$lstatic" = "yes" ; then
  echo "LIB=$LIB" >> config.mak
1559 1560
else # Some Make complain if this variable does not exist.
  echo "LIB=" >> config.mak
1561
fi
1562
echo "SLIBPREF=$SLIBPREF" >> config.mak
1563 1564
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1565
echo "TARGET_OS=$TARGET_OS" >> config.mak
Z
Zdenek Kabelac 已提交
1566
if test "$cpu" = "x86" ; then
1567
  echo "TARGET_ARCH_X86=yes" >> config.mak
1568
  echo "#define ARCH_X86 1" >> $TMPH
1569 1570 1571
elif test "$cpu" = "x86_64" ; then
  echo "TARGET_ARCH_X86_64=yes" >> config.mak
  echo "#define ARCH_X86_64 1" >> $TMPH
1572
elif test "$cpu" = "armv4l" ; then
1573
  echo "TARGET_ARCH_ARMV4L=yes" >> config.mak
1574
  echo "#define ARCH_ARMV4L 1" >> $TMPH
1575
elif test "$cpu" = "alpha" ; then
1576
  echo "TARGET_ARCH_ALPHA=yes" >> config.mak
1577
  echo "#define ARCH_ALPHA 1" >> $TMPH
1578 1579 1580
elif test "$cpu" = "sparc64" ; then
  echo "TARGET_ARCH_SPARC64=yes" >> config.mak
  echo "#define ARCH_SPARC64 1" >> $TMPH
1581 1582 1583 1584 1585
  echo "TARGET_ARCH_SPARC=yes" >> config.mak
  echo "#define ARCH_SPARC 1" >> $TMPH
elif test "$cpu" = "sparc" ; then
  echo "TARGET_ARCH_SPARC=yes" >> config.mak
  echo "#define ARCH_SPARC 1" >> $TMPH
1586 1587 1588
elif test "$cpu" = "powerpc" ; then
  echo "TARGET_ARCH_POWERPC=yes" >> config.mak
  echo "#define ARCH_POWERPC 1" >> $TMPH
1589 1590 1591 1592 1593
  if test $POWERPCMODE = "32bits"; then
    echo "#define POWERPC_MODE_32BITS 1" >> $TMPH
  else
    echo "#define POWERPC_MODE_64BITS 1" >> $TMPH
  fi
1594 1595 1596
  if test "$powerpc_perf" = "yes"; then
    echo "#define POWERPC_PERFORMANCE_REPORT 1" >> $TMPH
  fi
1597 1598 1599
elif test "$cpu" = "mips" ; then
  echo "TARGET_ARCH_MIPS=yes" >> config.mak
  echo "#define ARCH_MIPS 1" >> $TMPH
A
Alex Beregszaszi 已提交
1600 1601 1602
elif test "$cpu" = "sh4" ; then
  echo "TARGET_ARCH_SH4=yes" >> config.mak
  echo "#define ARCH_SH4 1" >> $TMPH
1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614
elif test "$cpu" = "parisc" ; then
  echo "TARGET_ARCH_PARISC=yes" >> config.mak
  echo "#define ARCH_PARISC 1" >> $TMPH
elif test "$cpu" = "s390" ; then
  echo "TARGET_ARCH_S390=yes" >> config.mak
  echo "#define ARCH_S390 1" >> $TMPH
elif test "$cpu" = "m68k" ; then
  echo "TARGET_ARCH_M68K=yes" >> config.mak
  echo "#define ARCH_M68K 1" >> $TMPH
elif test "$cpu" = "ia64" ; then
  echo "TARGET_ARCH_IA64=yes" >> config.mak
  echo "#define ARCH_IA64 1" >> $TMPH
A
Alex Beregszaszi 已提交
1615
fi
1616
echo "#define TUNECPU $TUNECPU" >> $TMPH
1617 1618 1619
if test "$bigendian" = "yes" ; then
  echo "WORDS_BIGENDIAN=yes" >> config.mak
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1620
fi
1621 1622
if test "$inttypes" != "yes" ; then
  echo "#define EMULATE_INTTYPES 1" >> $TMPH
1623
fi
1624
if test "$emu_fast_int" = "yes" ; then
1625
  echo "#define EMULATE_FAST_INT 1" >> $TMPH
1626
fi
Z
Zdenek Kabelac 已提交
1627
if test "$mmx" = "yes" ; then
1628
  echo "TARGET_MMX=yes" >> config.mak
1629
  echo "#define HAVE_MMX 1" >> $TMPH
M
Michael Niedermayer 已提交
1630
  echo "#define __CPU__ 586" >> $TMPH
F
Fabrice Bellard 已提交
1631
fi
1632 1633 1634 1635
if test "$builtin_vector" = "yes" ; then
  echo "TARGET_BUILTIN_VECTOR=yes" >> config.mak
  echo "#define HAVE_BUILTIN_VECTOR 1" >> $TMPH
fi
1636 1637 1638 1639
if test "$mm3dnow" = "yes" ; then
  echo "TARGET_BUILTIN_3DNOW=yes" >> config.mak
  echo "#define HAVE_MM3DNOW 1" >> $TMPH
fi
1640 1641 1642 1643
if test "$iwmmxt" = "yes" ; then
  echo "TARGET_IWMMXT=yes" >> config.mak
  echo "#define HAVE_IWMMXT 1" >> $TMPH
fi
1644 1645 1646 1647
if test "$mmi" = "yes" ; then
  echo "TARGET_MMI=yes" >> config.mak
  echo "#define HAVE_MMI 1" >> $TMPH
fi
1648 1649 1650
if test "$altivec" = "yes" ; then
  echo "TARGET_ALTIVEC=yes" >> config.mak
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1651 1652
  echo "// Enable the next line to use the reference C code instead of AltiVec" >> $TMPH
  echo "// #define ALTIVEC_USE_REFERENCE_C_CODE 1" >> $TMPH
1653 1654 1655
  if test "$_altivec_h" = "yes" ; then
    echo "#define HAVE_ALTIVEC_H 1" >> $TMPH
  else
A
1l  
Alex Beregszaszi 已提交
1656
    echo "#undef HAVE_ALTIVEC_H" >> $TMPH
1657
  fi
1658
fi
Z
Zdenek Kabelac 已提交
1659
if test "$gprof" = "yes" ; then
1660
  echo "TARGET_GPROF=yes" >> config.mak
1661
  echo "#define HAVE_GPROF 1" >> $TMPH
F
Fabrice Bellard 已提交
1662
fi
1663 1664 1665
if test "$localtime_r" = "yes" ; then
  echo "#define HAVE_LOCALTIME_R 1" >> $TMPH
fi
1666 1667 1668
if test "$imlib2" = "yes" ; then
  echo "HAVE_IMLIB2=yes" >> config.mak
fi
1669 1670 1671
if test "$freetype2" = "yes" ; then
  echo "HAVE_FREETYPE2=yes" >> config.mak
fi
1672 1673 1674 1675
if test "$sunmlib" = "yes" ; then
  echo "HAVE_MLIB=yes" >> config.mak
  echo "#define HAVE_MLIB 1" >> $TMPH
fi
1676 1677 1678
if test "$pthreads" = "yes" ; then
  echo "HAVE_PTHREADS=yes" >> config.mak
  echo "#define HAVE_PTHREADS 1" >> $TMPH
1679
  echo "#define HAVE_THREADS 1" >> $TMPH
1680
fi
1681 1682
if test "$sdl" = "yes" ; then
  echo "CONFIG_SDL=yes" >> config.mak
1683 1684
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1685 1686 1687
  if test "$sdl_video_size" = "yes"; then
    echo "#define HAVE_SDL_VIDEO_SIZE 1" >> $TMPH
  fi
1688
fi
1689 1690 1691
if test "$texi2html" = "yes"; then
  echo "BUILD_DOC=yes" >> config.mak
fi
1692 1693 1694
if test "$have_lrintf" = "yes" ; then
  echo "#define HAVE_LRINTF 1" >> $TMPH
fi
1695 1696 1697 1698
if test "$vhook" = "yes" ; then
  echo "BUILD_VHOOK=yes" >> config.mak
  echo "#define HAVE_VHOOK 1" >> $TMPH
fi
L
Luca Barbato 已提交
1699

1700
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
L
Luca Barbato 已提交
1701 1702 1703 1704 1705 1706
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 已提交
1707
if test "$lshared" = "yes" ; then
1708
  echo "#define BUILD_SHARED_AV 1" >> $TMPH
N
Nick Kurshev 已提交
1709
  echo "BUILD_SHARED=yes" >> config.mak
1710
  echo "PIC=-fPIC -DPIC" >> config.mak
1711
  echo "SPPMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1712
  echo "SPPVERSION=$lavc_version" >> config.mak
1713
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1714
  echo "LAVCVERSION=$lavc_version" >> config.mak
1715
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1716
  echo "LAVFVERSION=$lavf_version" >> config.mak
1717
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1718
  echo "LAVUVERSION=$lavu_version" >> config.mak
1719
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1720 1721
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
N
Nick Kurshev 已提交
1722
fi
1723
echo "EXTRALIBS=$extralibs" >> config.mak
1724

D
Diego Biurrun 已提交
1725
# If you do not want to use encoders, disable them.
1726
echo "#define CONFIG_ENCODERS 1" >> $TMPH
1727 1728
echo "CONFIG_ENCODERS=yes" >> config.mak

D
Diego Biurrun 已提交
1729
# If you do not want to use decoders, disable them.
1730
echo "#define CONFIG_DECODERS 1" >> $TMPH
1731 1732
echo "CONFIG_DECODERS=yes" >> config.mak

1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744
# muxers
if test "$muxers" = "yes" ; then
  echo "#define CONFIG_MUXERS 1" >> $TMPH
  echo "CONFIG_MUXERS=yes" >> config.mak
fi

# demuxers
if test "$demuxers" = "yes" ; then
  echo "#define CONFIG_DEMUXERS 1" >> $TMPH
  echo "CONFIG_DEMUXERS=yes" >> config.mak
fi

F
Fabrice Bellard 已提交
1745 1746 1747 1748
# AC3
if test "$a52" = "yes" ; then
  echo "#define CONFIG_AC3 1" >> $TMPH
  echo "CONFIG_AC3=yes" >> config.mak
1749

F
Fabrice Bellard 已提交
1750 1751 1752 1753 1754 1755
  if test "$a52bin" = "yes" ; then
    echo "#define CONFIG_A52BIN 1" >> $TMPH
    echo "CONFIG_A52BIN=yes" >> config.mak
  fi
fi

1756 1757 1758 1759 1760 1761
# DTS
if test "$dts" = "yes" ; then
  echo "#define CONFIG_DTS 1" >> $TMPH
  echo "CONFIG_DTS=yes" >> config.mak
fi

1762 1763 1764 1765 1766 1767
# PP
if test "$pp" = "yes" ; then
  echo "#define CONFIG_PP 1" >> $TMPH
  echo "CONFIG_PP=yes" >> config.mak
fi

D
Diego Biurrun 已提交
1768
# MPEG audio high precision mode
1769 1770 1771 1772
if test "$mpegaudio_hp" = "yes" ; then
  echo "#define CONFIG_MPEGAUDIO_HP 1" >> $TMPH
fi

F
Fabrice Bellard 已提交
1773 1774 1775 1776 1777
if test "$v4l" = "yes" ; then
  echo "#define CONFIG_VIDEO4LINUX 1" >> $TMPH
  echo "CONFIG_VIDEO4LINUX=yes" >> config.mak
fi

L
Luca Abeni 已提交
1778 1779 1780 1781 1782
if test "$v4l2" = "yes" ; then
  echo "#define CONFIG_VIDEO4LINUX2 1" >> $TMPH
  echo "CONFIG_VIDEO4LINUX2=yes" >> config.mak
fi

1783 1784 1785 1786 1787
if test "$bktr" = "yes" ; then
  echo "#define CONFIG_BKTR 1" >> $TMPH
  echo "CONFIG_BKTR=yes" >> config.mak
fi

1788 1789 1790 1791 1792
if test "$dv1394" = "yes" ; then
  echo "#define CONFIG_DV1394 1" >> $TMPH
  echo "CONFIG_DV1394=yes" >> config.mak
fi

1793 1794 1795 1796 1797
if test "$dc1394" = "yes" ; then
  echo "#define CONFIG_DC1394 1" >> $TMPH
  echo "CONFIG_DC1394=yes" >> config.mak
fi

1798 1799 1800 1801 1802 1803 1804 1805
if test "$dlopen" = "yes" ; then
  echo "#define CONFIG_HAVE_DLOPEN 1" >> $TMPH
fi

if test "$dlfcn" = "yes" ; then
  echo "#define CONFIG_HAVE_DLFCN 1" >> $TMPH
fi

F
Fabrice Bellard 已提交
1806 1807 1808
if test "$audio_oss" = "yes" ; then
  echo "#define CONFIG_AUDIO_OSS 1" >> $TMPH
  echo "CONFIG_AUDIO_OSS=yes" >> config.mak
Z
Zdenek Kabelac 已提交
1809 1810
fi

1811 1812 1813 1814 1815
if test "$audio_beos" = "yes" ; then
  echo "#define CONFIG_AUDIO_BEOS 1" >> $TMPH
  echo "CONFIG_AUDIO_BEOS=yes" >> config.mak
fi

F
Fabrice Bellard 已提交
1816 1817 1818
if test "$network" = "yes" ; then
  echo "#define CONFIG_NETWORK 1" >> $TMPH
  echo "CONFIG_NETWORK=yes" >> config.mak
1819
fi
1820

1821 1822 1823 1824
if test "$ipv6" = "yes" ; then
  echo "#define CONFIG_IPV6 1" >> $TMPH
fi

1825 1826 1827 1828 1829
if test "$zlib" = "yes" ; then
  echo "#define CONFIG_ZLIB 1" >> $TMPH
  echo "CONFIG_ZLIB=yes" >> config.mak
fi

1830 1831 1832 1833 1834
if test "$lzo" = "yes" ; then
  echo "#define CONFIG_LZO 1" >> $TMPH
  echo "CONFIG_LZO=yes" >> config.mak
fi

1835 1836 1837 1838 1839
if test "$libgsm" = "yes" ; then
  echo "#define CONFIG_LIBGSM 1" >> $TMPH
  echo "CONFIG_LIBGSM=yes" >> config.mak
fi

Z
Zdenek Kabelac 已提交
1840
if test "$mp3lame" = "yes" ; then
1841
  echo "#define CONFIG_MP3LAME 1" >> $TMPH
1842 1843 1844
  echo "CONFIG_MP3LAME=yes" >> config.mak
fi

1845
if test "$libogg" = "yes" ; then
N
Nilesh Bansal 已提交
1846 1847 1848 1849
  echo "#define CONFIG_LIBOGG 1" >> $TMPH
  echo "CONFIG_LIBOGG=yes" >> config.mak
fi

1850
if test "$vorbis" = "yes" ; then
N
Nilesh Bansal 已提交
1851 1852 1853 1854 1855 1856 1857
  echo "#define CONFIG_LIBVORBIS 1" >> $TMPH
  echo "CONFIG_LIBVORBIS=yes" >> config.mak
fi

if test "$theora" = "yes" ; then
  echo "#define CONFIG_LIBTHEORA 1" >> $TMPH
  echo "CONFIG_LIBTHEORA=yes" >> config.mak
1858 1859
fi

1860 1861 1862 1863 1864 1865 1866
if test "$faad" = "yes" ; then
  echo "#define CONFIG_FAAD 1" >> $TMPH
  echo "CONFIG_FAAD=yes" >> config.mak
fi

if test "$faadbin" = "yes" ; then
  echo "#define CONFIG_FAADBIN 1" >> $TMPH
Z
Zdenek Kabelac 已提交
1867
  echo "CONFIG_FAADBIN=yes" >> config.mak
1868 1869
fi

1870 1871 1872 1873 1874
if test "$faac" = "yes" ; then
  echo "#define CONFIG_FAAC 1" >> $TMPH
  echo "CONFIG_FAAC=yes" >> config.mak
fi

1875 1876 1877 1878 1879
if test "$xvid" = "yes" ; then
  echo "#define CONFIG_XVID 1" >> $TMPH
  echo "CONFIG_XVID=yes" >> config.mak
fi

1880 1881 1882 1883 1884
if test "$x264" = "yes" ; then
  echo "#define CONFIG_X264 1" >> $TMPH
  echo "CONFIG_X264=yes" >> config.mak
fi

1885 1886 1887
if test "$mingw32" = "yes" ; then
  echo "#define CONFIG_WIN32 1" >> $TMPH
  echo "CONFIG_WIN32=yes" >> config.mak
1888 1889
  echo "HAVE_W32THREADS=yes" >> config.mak
  echo "#define HAVE_W32THREADS 1" >> $TMPH
1890
  echo "#define HAVE_THREADS 1" >> $TMPH
1891
  echo "#ifndef __MINGW32__" >> $TMPH
1892
  echo "#define __MINGW32__ 1" >> $TMPH
1893
  echo "#endif" >> $TMPH
1894 1895
fi

G
Gildas Bazin 已提交
1896 1897 1898 1899 1900 1901 1902 1903 1904 1905
if test "$mingwce" = "yes" ; then
  echo "#define CONFIG_WIN32 1" >> $TMPH
  echo "CONFIG_WIN32=yes" >> config.mak
  echo "#define CONFIG_WINCE 1" >> $TMPH
  echo "CONFIG_WINCE=yes" >> config.mak
  echo "#ifndef __MINGW32__" >> $TMPH
  echo "#define __MINGW32__ 1" >> $TMPH
  echo "#endif" >> $TMPH
fi

1906 1907 1908
if test "$os2" = "yes" ; then
  echo "#define CONFIG_OS2 1" >> $TMPH
  echo "CONFIG_OS2=yes" >> config.mak
1909 1910 1911
  echo "HAVE_OS2THREADS=yes" >> config.mak
  echo "#define HAVE_OS2THREADS 1" >> $TMPH
  echo "#define HAVE_THREADS 1" >> $TMPH
1912 1913
fi

1914 1915 1916 1917
if test "$TARGET_OS" = "SunOS" ; then
  echo "#define CONFIG_SUNOS 1" >> $TMPH
fi

1918 1919 1920 1921 1922 1923
if test "$TARGET_OS" = "BeOS" ; then
  echo "HAVE_BEOSTHREADS=yes" >> config.mak
  echo "#define HAVE_BEOSTHREADS 1" >> $TMPH
  echo "#define HAVE_THREADS 1" >> $TMPH
fi

1924 1925 1926 1927 1928
if test "$darwin" = "yes"; then
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
  echo "CONFIG_DARWIN=yes" >> config.mak
fi

Z
Zdenek Kabelac 已提交
1929
if test "$_malloc_h" = "yes" ; then
1930
  echo "#define HAVE_MALLOC_H 1" >> $TMPH
N
Nick Kurshev 已提交
1931
else
1932
  echo "#undef  HAVE_MALLOC_H" >> $TMPH
N
Nick Kurshev 已提交
1933 1934
fi

Z
Zdenek Kabelac 已提交
1935
if test "$_memalign" = "yes" ; then
1936 1937 1938 1939 1940
  echo "#define HAVE_MEMALIGN 1" >> $TMPH
else
  echo "#undef  HAVE_MEMALIGN" >> $TMPH
fi

1941 1942 1943 1944 1945
if test "$memalignhack" = "yes" ; then
  echo "#define MEMALIGN_HACK 1" >> $TMPH
fi


1946 1947 1948 1949 1950
if test "$netserver" = "yes" ; then
  echo "#define CONFIG_BEOS_NETSERVER 1" >> $TMPH
  echo "CONFIG_BEOS_NETSERVER=yes" >> config.mak
fi

1951 1952 1953 1954
if test "$need_inet_aton" = "yes" ; then
  echo "NEED_INET_ATON=yes" >> config.mak
fi

Z
Zdenek Kabelac 已提交
1955
if test "$simpleidct" = "yes" ; then
1956 1957 1958
  echo "#define SIMPLE_IDCT 1" >> $TMPH
fi

1959 1960 1961 1962 1963
if test "$protocols" = "yes" ; then
  echo "#define CONFIG_PROTOCOLS 1" >> $TMPH
  echo "CONFIG_PROTOCOLS=yes" >> config.mak
fi

1964 1965 1966 1967 1968
if test "$ffserver" = "yes" ; then
  echo "#define CONFIG_FFSERVER 1" >> $TMPH
  echo "CONFIG_FFSERVER=yes" >> config.mak
fi

1969 1970 1971 1972
if test "$ffplay" = "yes" ; then
  echo "CONFIG_FFPLAY=yes" >> config.mak
fi

1973 1974 1975 1976 1977
if test "$gpl" = "yes" ; then
  echo "#define CONFIG_GPL 1" >> $TMPH
  echo "CONFIG_GPL=yes" >> config.mak
fi

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

1980 1981 1982 1983
if test "$optimize" = "small"; then
  echo "#define always_inline"  >> $TMPH
fi

1984 1985
# build tree in object directory if source path is different from current one
if test "$source_path_used" = "yes" ; then
1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996
    DIRS="\
         doc \
         libavformat \
         libavcodec \
         libavcodec/alpha \
         libavcodec/armv4l \
         libavcodec/i386 \
         libavcodec/sparc \
         libavcodec/mlib \
         libavcodec/ppc \
         libavcodec/liba52 \
1997
         libpostproc \
1998 1999 2000 2001 2002 2003 2004 2005
         libavutil \
         tests \
         vhook \
         "
    FILES="\
          Makefile \
          libavformat/Makefile \
          libavcodec/Makefile \
2006
          libpostproc/Makefile \
2007 2008 2009 2010 2011 2012
          libavutil/Makefile \
          tests/Makefile \
          vhook/Makefile \
          doc/Makefile \
          doc/texi2pod.pl \
          "
2013 2014 2015 2016
    for dir in $DIRS ; do
            mkdir -p $dir
    done
    for f in $FILES ; do
M
Michael Niedermayer 已提交
2017
        ln -sf "$source_path/$f" $f
2018 2019
    done
fi
2020
echo "SRC_PATH=$source_path" >> config.mak
2021
echo "BUILD_ROOT=$PWD" >> config.mak
2022

D
Diego Biurrun 已提交
2023 2024 2025 2026 2027
if test "$amr" = "yes" ; then
  echo "#define AMR 1" >> $TMPH
  echo "AMR=yes" >> config.mak
fi

2028 2029 2030 2031 2032 2033 2034 2035 2036 2037
if test "$amr_wb" = "yes" ; then
  echo "#define AMR_WB 1" >> $TMPH
  echo "AMR_WB=yes" >> config.mak
  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

2038 2039 2040 2041
if test "$amr_nb" = "yes" ; then
  echo "#define AMR_NB 1" >> $TMPH
  echo "AMR_NB=yes" >> config.mak
  echo
2042 2043
  echo "AMR NB FLOAT NOTICE ! Make sure you have downloaded TS26.104"
  echo "REL-5 V5.1.0 from "
D
Diego Biurrun 已提交
2044
  echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip"
2045 2046 2047 2048
  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

Z
Zdenek Kabelac 已提交
2049 2050
if test "$amr_nb_fixed" = "yes" ; then
  echo "#define AMR_NB_FIXED 1" >> $TMPH
D
Diego Biurrun 已提交
2051
  echo "AMR_NB_FIXED=yes" >> config.mak
D
Diego Biurrun 已提交
2052
  echo
Z
Zdenek Kabelac 已提交
2053 2054
  echo "AMR NB FIXED POINT NOTICE! Make sure you have downloaded TS26.073 "
  echo "REL-5 version 5.1.0 from "
D
Diego Biurrun 已提交
2055
  echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip"
2056
  echo "and extracted src to libavcodec/amr"
Z
Zdenek Kabelac 已提交
2057 2058
  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"
2059 2060
fi

2061 2062 2063 2064
if test "$amr_if2" = "yes" ; then
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi

Z
Zdenek Kabelac 已提交
2065

2066
for codec in $CODEC_LIST ; do
2067 2068
    echo "#define CONFIG_`echo $codec | tr a-z A-Z` 1" >> $TMPH
    echo "CONFIG_`echo $codec | tr a-z A-Z`=yes" >> config.mak
2069 2070
done

2071 2072
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
diff $TMPH config.h >/dev/null 2>&1
2073
if test "$?" != "0" ; then
2074 2075 2076 2077
        mv -f $TMPH config.h
else
        echo "config.h is unchanged"
fi
N
Nick Kurshev 已提交
2078

2079
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2080 2081


D
Diego Biurrun 已提交
2082
# build pkg-config files libav*.pc and libpostproc.pc
2083 2084 2085 2086 2087 2088 2089 2090 2091 2092
# libavutil.pc
cat <<EOF >libavutil.pc
prefix=$prefix
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: libavutil
Description: FFmpeg utility library
Version: $lavu_version
2093
Requires:
2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107
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
2108
Requires:
2109 2110 2111 2112
Conflicts:
Libs: \${libdir}/${LIBPREF}avutil${LIBSUF}
Cflags: -I\${includedir}
EOF
2113 2114 2115 2116 2117 2118 2119 2120 2121 2122

# libavcodec.pc
cat <<EOF >libavcodec.pc
prefix=$prefix
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: libavcodec
Description: FFmpeg codec library
2123
Version: $lavc_version
2124
Requires: $pkg_requires libavutil = $lavu_version
2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137
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
2138
Version: $lavc_version
2139
Requires: $pkg_requires libavutil = $lavu_version
2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153
Conflicts:
Libs: \${libdir}/${LIBPREF}avcodec${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF

# libavformat.pc
cat <<EOF >libavformat.pc
prefix=$prefix
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: libavformat
Description: FFmpeg container format library
2154
Version: $lavf_version
2155
Requires: $pkg_requires libavcodec = $lavc_version
2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168
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
2169
Version: $lavf_version
2170
Requires: $pkg_requires libavcodec = $lavc_version
2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185
Conflicts:
Libs: \${libdir}/${LIBPREF}avformat${LIBSUF} $extralibs
Cflags: -I\${includedir}
EOF


# libpostproc.pc
cat <<EOF >libpostproc.pc
prefix=$prefix
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: libpostproc
Description: FFmpeg post processing library
2186
Version: $lavc_version
2187
Requires:
2188 2189 2190 2191 2192 2193 2194 2195
Conflicts:
Libs: -L\${libdir} -lpostproc
Cflags: -I\${includedir} -I\${includedir}/postproc
EOF

cat <<EOF >libpostproc-uninstalled.pc
prefix=
exec_prefix=
2196 2197
libdir=\${pcfiledir}/libpostproc
includedir=\${pcfiledir}/libpostproc
2198 2199 2200

Name: libpostproc
Description: FFmpeg post processing library
2201
Version: $lavc_version
2202
Requires:
2203 2204 2205 2206
Conflicts:
Libs: \${libdir}/${LIBPREF}postproc${LIBSUF}
Cflags: -I\${includedir}
EOF