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

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

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

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

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

if test "$E1" != 0 || test "$E2" = 0; then
    echo "Broken shell detected.  Trying alternatives."
27 28 29 30 31 32 33 34 35 36 37 38
    export FF_CONF_EXEC
    if test "0$FF_CONF_EXEC" -lt 1; then
        FF_CONF_EXEC=1
        try_exec bash "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 2; then
        FF_CONF_EXEC=2
        try_exec ksh "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 3; then
        FF_CONF_EXEC=3
        try_exec /usr/xpg4/bin/sh "$0" "$@"
39 40
    fi
    echo "No compatible shell script interpreter found."
D
typo  
Diego Biurrun 已提交
41
    echo "This configure script requires a POSIX-compatible shell"
42
    echo "such as bash or ksh."
D
Diego Biurrun 已提交
43 44 45
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
    echo "Instead, install a working POSIX-compatible shell."
    echo "Disabling this configure test will create a broken FFmpeg."
46 47 48 49
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
        echo "This bash version ($BASH_VERSION) is broken on your platform."
        echo "Upgrade to a later version if available."
    fi
50 51 52
    exit 1
fi

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

162 163 164 165
log(){
    echo "$@" >>$logfile
}

166
log_file(){
M
Måns Rullgård 已提交
167 168 169 170 171
    log BEGIN $1
    cat -n $1 >>$logfile
    log END $1
}

172
echolog(){
M
Måns Rullgård 已提交
173
    log "$@"
174
    echo "$@"
175 176 177 178 179 180 181 182 183
}

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

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

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

enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

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

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

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

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

304
check_cmd(){
M
Måns Rullgård 已提交
305
    log "$@"
306
    "$@" >>$logfile 2>&1
307 308
}

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

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

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

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

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

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

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

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

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

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

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

404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445
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
446
    wince
447
    x11grab
448 449 450 451 452 453 454
    x264
    xvid
    zlib
'

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

485
# set temporary file name
Z
Zdenek Kabelac 已提交
486
if test ! -z "$TMPDIR" ; then
487
    TMPDIR1="${TMPDIR}"
Z
Zdenek Kabelac 已提交
488
elif test ! -z "$TEMPDIR" ; then
489
    TMPDIR1="${TEMPDIR}"
N
Nick Kurshev 已提交
490
else
491
    TMPDIR1="/tmp"
N
Nick Kurshev 已提交
492 493
fi

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

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

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

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

851 852 853 854
if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
    show_help
fi

855 856 857 858 859
FFMPEG_CONFIGURATION=" "
for opt do
  FFMPEG_CONFIGURATION="$FFMPEG_CONFIGURATION""$opt "
done

860 861 862
ENCODER_LIST=`sed -n 's/^[^#]*ENC.*, *\(.*\)).*/\1_encoder/p' "$source_path/libavcodec/allcodecs.c"`
DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/libavcodec/allcodecs.c"`
PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
863 864
MUXER_LIST=`sed -n 's/^[^#]*_MUX.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavformat/allformats.c"`
DEMUXER_LIST=`sed -n 's/^[^#]*DEMUX.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavformat/allformats.c"`
865

866 867
enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST

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

1068 1069
if test "$logging" != no; then
    test "$logging" = yes || logfile="$logging"
1070 1071
    echo "# $0 $@" >$logfile
    set >>$logfile
1072 1073
else
    logfile=/dev/null
1074
fi
1075

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

1106 1107
# Combine FFLDFLAGS and the LDFLAGS environment variable.
LDFLAGS="$FFLDFLAGS $LDFLAGS"
1108

1109
test -n "$cross_prefix" && cross_compile=yes
1110 1111 1112 1113 1114
cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
ranlib="${cross_prefix}${ranlib}"
strip="${cross_prefix}${strip}"

1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125
# 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

D
Diego Biurrun 已提交
1126
if test "$libvorbis" = "yes" && test "$libogg" = "no"; then
1127
    die "libogg must be enabled to enable libvorbis."
N
Nilesh Bansal 已提交
1128 1129
fi

1130
if test "$gpl" != "yes"; then
1131
    if test "$pp" != "no"; then
1132
        die "The Postprocessing code is under GPL and --enable-gpl is not specified."
1133 1134 1135
    fi

    if test "$a52" != "no" -o "$a52bin" != "no"; then
1136
        die "liba52 is under GPL and --enable-gpl is not specified."
1137
    fi
1138

1139
    if test "$xvid" != "no"; then
1140
        die "libxvidcore is under GPL and --enable-gpl is not specified."
1141 1142
    fi

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

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

1151
    if test "$faad" != "no" -o "$faadbin" != "no"; then
1152 1153
        if check_header faad.h; then
            check_cc << EOF
1154 1155 1156 1157 1158 1159
                #include <faad.h>
                #ifndef FAAD2_VERSION
                ok faad1
                #endif
                int main( void ) { return 0; }
EOF
1160
            if test $? = 0 ; then
1161
                die "FAAD2 is under GPL and --enable-gpl is not specified."
1162 1163 1164 1165
            fi
        else
            faad="no"
            faadbin="no"
D
Diego Biurrun 已提交
1166
            echo "FAAD test failed."
1167 1168
        fi
    fi
1169 1170

    if test "$x11grab" != "no"; then
1171
        die "The X11 grabber is under GPL and --enable-gpl is not specified."
1172
    fi
1173 1174

    if test "$swscaler" != "no"; then
1175
        die "The software scaler is under GPL and --enable-gpl is not specified."
1176
    fi
1177
fi
1178

D
Diego Biurrun 已提交
1179
# compute MMX state
1180
if test $mmx = "default"; then
1181
    if test $arch = "x86_32" -o $arch = "x86_64"; then
1182 1183 1184 1185 1186 1187
        mmx="yes"
    else
        mmx="no"
    fi
fi

1188 1189
test -z "$need_memalign" && need_memalign="$mmx"

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

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

1221 1222
# Can only do AltiVec on PowerPC
if test $altivec = "default"; then
1223
    if test $arch = "powerpc"; then
1224 1225 1226 1227 1228 1229
        altivec="yes"
    else
        altivec="no"
    fi
fi

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

1303 1304 1305 1306 1307 1308 1309 1310
# 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
1311 1312
variable to another directory and make sure that $TMPDIR1 is not mounted
noexec.
1313 1314 1315
EOF
    die "Sanity test failed."
fi
1316
rm $TMPE
1317

M
Måns Rullgård 已提交
1318 1319 1320 1321 1322 1323 1324 1325 1326 1327
# 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."
1328
        echo "Only do this if you know what cross compiling means."
M
Måns Rullgård 已提交
1329 1330 1331 1332
    fi
    die "C compiler test failed."
fi

1333 1334
# check for assembler specific support

1335
if test $arch = "powerpc"; then
1336 1337 1338 1339 1340 1341 1342 1343 1344 1345
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

1346 1347
# check for SIMD availability

1348
# AltiVec flags: The FSF version of GCC differs from the Apple version
1349
if test $arch = "powerpc"; then
1350
    if test $altivec = "yes"; then
1351
        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
1352
            add_cflags "-faltivec"
1353
        else
1354
            add_cflags "-maltivec -mabi=altivec"
1355 1356 1357 1358
        fi
    fi
fi

1359
check_header altivec.h
1360

D
Diego Biurrun 已提交
1361
# check if our compiler supports Motorola AltiVec C API
1362
if test $altivec = "yes"; then
1363
    if test $altivec_h = "yes"; then
M
Måns Rullgård 已提交
1364 1365 1366 1367 1368
        inc_altivec_h="#include <altivec.h>"
    else
        inc_altivec_h=
    fi
    check_cc <<EOF || altivec=no
1369
$inc_altivec_h
1370 1371 1372 1373 1374 1375 1376
int main(void) {
    vector signed int v1, v2, v3;
    v1 = vec_add(v2,v3);
    return 0;
}
EOF
fi
1377

1378
# check armv5te instructions support
1379
if test $armv5te = "default" -a $arch = "armv4l"; then
1380 1381 1382 1383 1384 1385 1386 1387 1388
    armv5te=no
    check_cc <<EOF && armv5te=yes
        int main(void) {
        __asm__ __volatile__ ("qadd r0, r0, r0");
        }
EOF
fi

# check iwmmxt support
1389
if test $iwmmxt = "default" -a $arch = "armv4l"; then
1390 1391 1392 1393 1394 1395 1396 1397
    iwmmxt=no
    check_cc <<EOF && iwmmxt=yes
        int main(void) {
        __asm__ __volatile__ ("wunpckelub wr6, wr4");
        }
EOF
fi

D
Diego Biurrun 已提交
1398
# mmi only available on mips
1399
if test $mmi = "default"; then
1400
    if test $arch = "mips"; then
1401 1402 1403 1404 1405 1406
        mmi="yes"
    else
        mmi="no"
    fi
fi

D
Diego Biurrun 已提交
1407
# check if our compiler supports mmi
1408
enabled mmi && check_cc <<EOF || mmi="no"
1409 1410 1411 1412 1413
int main(void) {
    __asm__ ("lq \$2, 0(\$2)");
    return 0;
}
EOF
1414 1415 1416

# ---
# big/little-endian test
1417
if test "$cross_compile" = "no"; then
1418
    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
1419 1420
#include <inttypes.h>
int main(int argc, char ** argv){
1421 1422
        volatile uint32_t i=0x01234567;
        return (*((uint8_t*)(&i))) == 0x67;
1423 1424
}
EOF
F
Fabrice Bellard 已提交
1425
else
M
Måns Rullgård 已提交
1426
    # programs cannot be launched if cross compiling, so make a static guess
1427
    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
M
Måns Rullgård 已提交
1428 1429
        bigendian="yes"
    fi
F
Fabrice Bellard 已提交
1430 1431
fi

N
Nick Kurshev 已提交
1432 1433 1434
# ---
# check availability of some header files

1435 1436
check_header malloc.h
check_func memalign
N
Nick Kurshev 已提交
1437

1438 1439
if test "$memalign" = "no" -a "$need_memalign" = "yes" -a \
        "$memalign_hack" != "yes"; then
1440
    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
1441 1442
fi

1443
check_header byteswap.h
M
Måns Rullgård 已提交
1444

1445 1446
check_func inet_aton
check_func localtime_r
1447 1448 1449 1450 1451
enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"

# check for some common methods of building with pthread support
# do this before the optional library checks as some of them require pthreads
if enabled pthreads; then
M
Måns Rullgård 已提交
1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462
    if check_func pthread_create; then
        :
    elif check_func pthread_create -pthread; then
        add_cflags -pthread
        add_ldflags -pthread
    elif check_func pthread_create -pthreads; then
        add_cflags -pthreads
        add_ldflags -pthreads
    elif ! check_lib pthread.h pthread_create -lpthread; then
        die "ERROR: can't find pthreads library"
    fi
1463 1464 1465
fi

# these are off by default, so fail if requested and not available
1466
enabled dts     && require libdts dts.h dts_init -ldts -lm
1467
enabled libgsm  && require libgsm gsm.h gsm_create -lgsm
1468
enabled mp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
1469
enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
1470
enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
1471
enabled libnut  && require libnut libnut.h nut_demuxer_init -lnut
1472 1473 1474
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
1475
enabled mlib    && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
1476

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

1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508
# 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

1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524
# 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


1525
# test for lrintf in math.h
M
Måns Rullgård 已提交
1526
check_exec <<EOF && lrintf=yes || lrintf=no
1527 1528 1529 1530 1531
#define _ISOC9X_SOURCE  1
#include <math.h>
int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
EOF

F
Falk Hüffner 已提交
1532 1533
_restrict=
for restrict_keyword in restrict __restrict__ __restrict; do
1534
    check_cc <<EOF && _restrict=$restrict_keyword && break
1535 1536
void foo(char * $restrict_keyword p);
EOF
F
Falk Hüffner 已提交
1537 1538
done

1539 1540
# dlopen/dlfcn.h probing

1541
check_header dlfcn.h
1542

1543 1544
if check_func dlopen; then
    ldl=
1545 1546
elif check_func dlopen -ldl; then
    ldl=-ldl
1547 1548
fi

M
Måns Rullgård 已提交
1549 1550
if test "$vhook" = "default"; then
    vhook="$dlopen"
1551 1552
fi

M
Måns Rullgård 已提交
1553
if enabled_any vhook a52bin faadbin; then
1554
    add_extralibs $ldl
M
Michael Niedermayer 已提交
1555 1556
fi

1557 1558 1559 1560 1561 1562 1563 1564
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

1565 1566 1567 1568
if enabled vhook; then
    check_ldflags -rdynamic
    check_ldflags -export-dynamic
fi
M
Michael Niedermayer 已提交
1569

1570 1571 1572 1573
if enabled audio_beos; then
    add_extralibs "-lmedia -lbe"
fi

1574
##########################################
D
Diego Biurrun 已提交
1575
# imlib check
1576

1577 1578
temp_extralibs -lImlib2
check_ld <<EOF && imlib2=yes || imlib2=no
1579 1580 1581 1582
#include <X11/Xlib.h>
#include <Imlib2.h>
int main( void ) { return (int) imlib_load_font("foo"); }
EOF
1583
restore_flags
1584

1585
##########################################
D
Diego Biurrun 已提交
1586
# FreeType check
1587

1588
freetype2=no
1589
if test "x$targetos" != "xBeOS"; then
1590
  if (freetype-config --version) >/dev/null 2>&1 ; then
1591 1592 1593 1594 1595 1596 1597
      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
1598
  fi
1599 1600
fi

1601
##########################################
D
Diego Biurrun 已提交
1602
# SDL check
1603 1604 1605

sdl_too_old=no
sdl=no
1606 1607
SDL_CONFIG="${cross_prefix}sdl-config"
if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
1608 1609 1610 1611 1612 1613 1614 1615 1616
    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'`
1617
        if test "$_sdlversion" -lt 121 ; then
1618 1619 1620
            sdl_too_old=yes
        else
            sdl=yes
1621 1622 1623 1624 1625 1626 1627 1628
            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
1629 1630
        fi
    fi
1631
    restore_flags
M
Michael Niedermayer 已提交
1632
fi
1633

1634 1635
enabled sdl || ffplay=no

1636
##########################################
D
Diego Biurrun 已提交
1637
# texi2html check
1638 1639

texi2html=no
1640
if (texi2html -version) >/dev/null 2>&1; then
1641 1642 1643
texi2html=yes
fi

1644
##########################################
D
Diego Biurrun 已提交
1645
# IPv6 check
1646

1647
enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
1648 1649 1650 1651 1652 1653 1654 1655 1656
#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);
1657
  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
1658 1659 1660
}
EOF

1661
# check for video4linux2 --- V4L2_PIX_FMT_YUV420
1662
enabled video4linux2 && check_cc <<EOF || video4linux2="no"
1663
#include <sys/time.h>
1664 1665
#include <asm/types.h>
#include <linux/videodev2.h>
1666
int dummy = V4L2_PIX_FMT_YUV420;
1667
struct v4l2_buffer dummy1;
1668 1669
EOF

1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683
# check for ioctl_meteor.h, ioctl_bt848.h and alternatives
if enabled bktr; then
    check_header dev/bktr/ioctl_meteor.h
    check_header dev/bktr/ioctl_bt848.h

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

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

    check_header dev/ic/bt8xx.h
fi

1684
# Deal with the x11 frame grabber
1685
enabled x11grab                         &&
1686 1687 1688 1689 1690 1691 1692 1693 1694
enabled gpl                             &&
enabled x11_grab_device_demuxer         &&
check_header X11/Xlib.h                 &&
check_header X11/extensions/XShm.h      &&
check_func XOpenDisplay -lX11           &&
check_func XShmCreateImage -lX11 -lXext &&
add_extralibs -lX11 -lXext              ||
disable x11_grab_device_demuxer

1695 1696 1697 1698
enabled debug && add_cflags -g

# add some useful compiler flags if supported
check_cflags -Wdeclaration-after-statement
1699 1700
check_cflags -Wall
check_cflags -Wno-switch
M
Michael Niedermayer 已提交
1701 1702 1703
check_cflags -Wdisabled-optimization
check_cflags -Wpointer-arith
check_cflags -Wredundant-decls
1704
enabled extrawarnings && check_cflags -Winline
1705

1706
# add some linker flags
1707
check_ldflags $LDLATEFLAGS
F
Fabrice Bellard 已提交
1708

1709 1710
# not all compilers support -Os
test "$optimize" = "small" && check_cflags -Os
1711

1712
if enabled optimize; then
1713
    if test -n "`$cc -v 2>&1 | grep xlc`"; then
1714 1715
        add_cflags  "-O5"
        add_ldflags "-O5"
1716
    else
1717
        add_cflags "-O3"
1718
    fi
1719 1720
fi

1721 1722
# PIC flags for shared library objects where they are needed
if test "$lshared" = "yes" ; then
M
Måns Rullgård 已提交
1723 1724
    # LIBOBJFLAGS may have already been set in the OS configuration
    if test -z "$LIBOBJFLAGS" ; then
1725
        case "$arch" in
1726 1727
            x86_64|ia64|alpha|sparc*) LIBOBJFLAGS="\$(PIC)" ;;
        esac
1728 1729 1730
    fi
fi

1731
if test "$gprof" = "yes" ; then
1732 1733
    add_cflags  "-p"
    add_ldflags "-p"
1734 1735
fi

1736 1737 1738
VHOOKCFLAGS="-fPIC $CFLAGS"
test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic

1739 1740 1741 1742 1743 1744
# 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

1745
echo "install prefix   $PREFIX"
D
Diego Biurrun 已提交
1746
echo "source path      $source_path"
F
Fabrice Bellard 已提交
1747
echo "C compiler       $cc"
1748
echo "make             $make"
1749
echo "ARCH             $arch ($cpu)"
1750
if test "$BUILDSUF" != ""; then
M
Måns Rullgård 已提交
1751
    echo "build suffix     $BUILDSUF"
1752
fi
D
Diego Biurrun 已提交
1753
echo "big-endian       $bigendian"
1754
if test $arch = "x86_32" -o $arch = "x86_64"; then
M
Måns Rullgård 已提交
1755
    echo "MMX enabled      $mmx"
1756
    echo "CMOV enabled     $cmov"
1757
    echo "CMOV is fast     $cmov_is_fast"
F
Fabrice Bellard 已提交
1758
fi
1759
if test $arch = "armv4l"; then
1760
    echo "ARMv5TE enabled  $armv5te"
M
Måns Rullgård 已提交
1761
    echo "IWMMXT enabled   $iwmmxt"
1762
fi
1763
if test $arch = "mips"; then
M
Måns Rullgård 已提交
1764
    echo "MMI enabled      $mmi"
F
Fabrice Bellard 已提交
1765
fi
1766
if test $arch = "powerpc"; then
M
Måns Rullgård 已提交
1767
    echo "AltiVec enabled  $altivec"
1768
    echo "dcbzl available  $dcbzl"
F
Fabrice Bellard 已提交
1769
fi
F
Fabrice Bellard 已提交
1770
echo "gprof enabled    $gprof"
1771
echo "zlib enabled     $zlib"
1772
echo "libgsm enabled   $libgsm"
1773
echo "mp3lame enabled  $mp3lame"
1774
echo "libnut enabled   $libnut"
1775
echo "libogg enabled   $libogg"
1776
echo "Vorbis enabled   $libvorbis"
D
Diego Biurrun 已提交
1777
echo "FAAD enabled     $faad"
Z
Zdenek Kabelac 已提交
1778
echo "faadbin enabled  $faadbin"
D
Diego Biurrun 已提交
1779 1780
echo "FAAC enabled     $faac"
echo "XviD enabled     $xvid"
1781
echo "x264 enabled     $x264"
F
Fabrice Bellard 已提交
1782
echo "a52 support      $a52"
Z
Zdenek Kabelac 已提交
1783
echo "a52 dlopened     $a52bin"
D
Diego Biurrun 已提交
1784
echo "DTS support      $dts"
1785
echo "pp support       $pp"
L
Luca Abeni 已提交
1786
echo "Software Scaler enabled $swscaler"
1787
echo "AVISynth enabled $avisynth"
1788
echo "debug symbols    $debug"
1789
echo "strip symbols    $dostrip"
1790
echo "optimize         $optimize"
1791
echo "static           $lstatic"
D
typo  
Diego Biurrun 已提交
1792
echo "shared           $lshared"
D
Diego Biurrun 已提交
1793
echo "video hooking    $vhook"
1794 1795
echo "SDL support      $sdl"
if test $sdl_too_old = "yes"; then
M
Måns Rullgård 已提交
1796
    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
1797
fi
1798

M
Måns Rullgård 已提交
1799 1800 1801
if test "$vhook" = "yes"; then
    echo "Imlib2 support   $imlib2"
    echo "FreeType support $freetype2"
1802
fi
1803
echo "Sun medialib support"  $mlib
1804
echo "pthreads support"      $pthreads
Z
Zdenek Kabelac 已提交
1805 1806
echo "AMR-NB float support"  $amr_nb
echo "AMR-NB fixed support"  $amr_nb_fixed
1807
echo "AMR-WB float support"  $amr_wb
1808
echo "AMR-WB IF2 support"    $amr_if2
1809 1810
echo "network support      $network"
if test "$network" = "yes" ; then
M
Måns Rullgård 已提交
1811
    echo "IPv6 support         $ipv6"
1812
fi
1813
echo ".align is power-of-two" $asmalign_pot
1814
if test "$gpl" = "no" ; then
M
Måns Rullgård 已提交
1815
    echo "License: LGPL"
1816
else
M
Måns Rullgård 已提交
1817
    echo "License: GPL"
1818
fi
F
Fabrice Bellard 已提交
1819

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

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

1826 1827
echo "PREFIX=$PREFIX" >> config.mak
echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
1828
echo "libdir=\$(DESTDIR)$libdir" >> config.mak
1829
echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
D
Diego Biurrun 已提交
1830
echo "incdir=\$(DESTDIR)$incdir" >> config.mak
1831 1832
echo "bindir=\$(DESTDIR)$bindir" >> config.mak
echo "mandir=\$(DESTDIR)$mandir" >> config.mak
1833
echo "MAKE=$make" >> config.mak
1834 1835
echo "CC=$cc" >> config.mak
echo "AR=$ar" >> config.mak
M
Michael Niedermayer 已提交
1836
echo "RANLIB=$ranlib" >> config.mak
1837
if test "$dostrip" = "yes" ; then
M
Måns Rullgård 已提交
1838 1839
    echo "STRIP=$strip" >> config.mak
    echo "INSTALLSTRIP=$installstrip" >> config.mak
1840
else
M
Måns Rullgård 已提交
1841 1842
    echo "STRIP=echo ignoring strip" >> config.mak
    echo "INSTALLSTRIP=" >> config.mak
1843
fi
1844

N
Nick Kurshev 已提交
1845
echo "OPTFLAGS=$CFLAGS" >> config.mak
1846
echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
1847
echo "LDFLAGS=$LDFLAGS" >> config.mak
1848
echo "LDCONFIG=$LDCONFIG" >> config.mak
1849
echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
1850
echo "SHFLAGS=$SHFLAGS" >> config.mak
1851
echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
1852
echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
1853
echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
1854
echo "BUILD_STATIC=$lstatic" >> config.mak
1855
echo "BUILDSUF=$BUILDSUF" >> config.mak
1856
echo "LIBPREF=$LIBPREF" >> config.mak
1857
echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
1858 1859
if test "$lstatic" = "yes" ; then
  echo "LIB=$LIB" >> config.mak
1860 1861
else # Some Make complain if this variable does not exist.
  echo "LIB=" >> config.mak
1862
fi
1863
echo "SLIBPREF=$SLIBPREF" >> config.mak
1864 1865
echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
1866
echo "TARGET_OS=$targetos" >> config.mak
M
Måns Rullgård 已提交
1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891

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

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

1892 1893 1894
if test "$bigendian" = "yes" ; then
  echo "WORDS_BIGENDIAN=yes" >> config.mak
  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
1895
fi
Z
Zdenek Kabelac 已提交
1896
if test "$mmx" = "yes" ; then
1897
  echo "TARGET_MMX=yes" >> config.mak
1898
  echo "#define HAVE_MMX 1" >> $TMPH
M
Michael Niedermayer 已提交
1899
  echo "#define __CPU__ 586" >> $TMPH
F
Fabrice Bellard 已提交
1900
fi
1901 1902 1903 1904
if test "$cmov" = "yes" ; then
  echo "TARGET_CMOV=yes" >> config.mak
  echo "#define HAVE_CMOV 1" >> $TMPH
fi
1905 1906 1907 1908
if test "$cmov_is_fast" = "yes" ; then
  echo "TARGET_CMOV_IS_FAST=yes" >> config.mak
  echo "#define CMOV_IS_FAST 1" >> $TMPH
fi
1909 1910 1911 1912
if test "$armv5te" = "yes" ; then
  echo "TARGET_ARMV5TE=yes" >> config.mak
  echo "#define HAVE_ARMV5TE 1" >> $TMPH
fi
1913 1914 1915 1916
if test "$iwmmxt" = "yes" ; then
  echo "TARGET_IWMMXT=yes" >> config.mak
  echo "#define HAVE_IWMMXT 1" >> $TMPH
fi
1917 1918 1919 1920
if test "$mmi" = "yes" ; then
  echo "TARGET_MMI=yes" >> config.mak
  echo "#define HAVE_MMI 1" >> $TMPH
fi
1921

1922 1923 1924
if test "$altivec" = "yes" ; then
  echo "TARGET_ALTIVEC=yes" >> config.mak
  echo "#define HAVE_ALTIVEC 1" >> $TMPH
1925
fi
1926

1927
if test "$sdl" = "yes" ; then
1928 1929
  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
1930
fi
1931 1932 1933
if test "$texi2html" = "yes"; then
  echo "BUILD_DOC=yes" >> config.mak
fi
L
Luca Barbato 已提交
1934

L
Luca Abeni 已提交
1935
sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
1936
pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
L
Luca Barbato 已提交
1937 1938 1939 1940 1941 1942
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 已提交
1943
if test "$lshared" = "yes" ; then
N
Nick Kurshev 已提交
1944
  echo "BUILD_SHARED=yes" >> config.mak
1945
  echo "PIC=-fPIC -DPIC" >> config.mak
1946 1947
  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
  echo "SPPVERSION=$pp_version" >> config.mak
1948
  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1949
  echo "LAVCVERSION=$lavc_version" >> config.mak
1950
  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1951
  echo "LAVFVERSION=$lavf_version" >> config.mak
1952
  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
L
Luca Barbato 已提交
1953
  echo "LAVUVERSION=$lavu_version" >> config.mak
L
Luca Abeni 已提交
1954 1955
  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
  echo "SWSVERSION=$sws_version" >> config.mak
1956
  echo "SLIBNAME=${SLIBNAME}" >> config.mak
1957 1958
  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
1959
  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
1960
  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
N
Nick Kurshev 已提交
1961
fi
1962
echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
1963
echo "EXTRALIBS=$extralibs" >> config.mak
1964

1965 1966 1967 1968
enabled_any $ENCODER_LIST && enable encoders
enabled_any $DECODER_LIST && enable decoders
enabled_any $MUXER_LIST   && enable muxers
enabled_any $DEMUXER_LIST && enable demuxers
1969

1970 1971
enabled_any pthreads beosthreads os2threads w32threads && enable threads

1972 1973
print_config HAVE_   $TMPH config.mak $HAVE_LIST
print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
1974

1975
if test "$targetos" = "Darwin"; then
1976 1977 1978
  echo "#define CONFIG_DARWIN 1"  >> $TMPH
fi

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

1981 1982
if test "$optimize" = "small"; then
  echo "#define always_inline"  >> $TMPH
1983
  echo "#define CONFIG_SMALL 1" >> $TMPH
1984 1985
fi

1986 1987 1988
echo "SRC_PATH=\"$source_path\"" >> config.mak
echo "SRC_PATH_BARE=$source_path" >> config.mak
echo "BUILD_ROOT=\"$PWD\"" >> config.mak
1989

1990 1991 1992 1993
if test "$amr_if2" = "yes" ; then
  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
fi

1994
# Apparently it's not possible to portably echo a backslash.
1995
if test "$asmalign_pot" = "yes" ; then
1996
  printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
1997
else
1998
  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
1999 2000
fi

Z
Zdenek Kabelac 已提交
2001

2002
for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
2003
    ucname="`toupper $codec`"
2004 2005 2006 2007 2008 2009 2010 2011 2012
    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
2013 2014
done

2015
# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
M
Måns Rullgård 已提交
2016
if ! cmp -s $TMPH config.h; then
2017 2018 2019 2020
        mv -f $TMPH config.h
else
        echo "config.h is unchanged"
fi
N
Nick Kurshev 已提交
2021

2022
rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
2023

2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037
# 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 \
2038 2039 2040
         libavcodec/amr \
         libavcodec/amr_float \
         libavcodec/amrwb_float \
2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066
         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
2067 2068


2069
# build pkg-config files
2070

2071 2072 2073 2074 2075 2076 2077 2078
pkgconfig_generate(){
name=$1
comment=$2
version=$3
libs=$4
requires=$5
include=$6
cat <<EOF >$name.pc
2079
prefix=$PREFIX
2080
exec_prefix=\${prefix}
2081
libdir=\${exec_prefix}/lib
2082
includedir=\${prefix}/include
2083

2084 2085 2086 2087
Name: $name
Description: $comment
Version: $version
Requires: $requires
2088
Conflicts:
2089 2090
Libs: -L\${libdir} $libs
Cflags: -I\${includedir} -I\${includedir}/$include
2091
EOF
2092
}
2093

2094 2095
pkgconfig_generate_uninstalled(){
name=$1
2096
shortname=${name#lib}
2097 2098 2099 2100 2101
comment=$2
version=$3
libs=$4
requires=$5
cat <<EOF >$name-uninstalled.pc
2102 2103
prefix=
exec_prefix=
2104 2105
libdir=\${pcfiledir}/$name
includedir=\${pcfiledir}/$name
2106

2107 2108 2109 2110
Name: $name
Description: $comment
Version: $version
Requires: $requires
2111
Conflicts:
2112
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
2113 2114
Cflags: -I\${includedir}
EOF
2115
}
2116

M
Måns Rullgård 已提交
2117
pkgconfig_generate libavutil "FFmpeg utility library" "$lavu_version" -lavutil "" ffmpeg
2118
pkgconfig_generate_uninstalled libavutil "FFmpeg utility library" "$lavu_version"
2119

2120 2121
pkgconfig_generate libavcodec "FFmpeg codec library" "$lavc_version" "-lavcodec $extralibs" "$pkg_requires libavutil = $lavu_version" ffmpeg
pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version" "$extralibs" "$pkg_requires libavutil = $lavu_version"
2122

2123 2124
pkgconfig_generate libavformat "FFmpeg container format library" "$lavf_version" "-lavformat $extralibs" "$pkg_requires libavcodec = $lavc_version" ffmpeg
pkgconfig_generate_uninstalled libavformat "FFmpeg container format library" "$lavf_version" "$extralibs" "$pkg_requires libavcodec = $lavc_version"
2125

2126 2127 2128 2129
if test "$pp" = "yes"; then
  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
fi
L
Luca Abeni 已提交
2130

2131
if test "$swscaler" != "no"; then
2132 2133
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
2134
else
2135 2136
  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
  pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
2137 2138
  apply libswscale.pc sed s/^Libs:.*$/Libs:/
  apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/
2139
fi