]> git.sesse.net Git - ffmpeg/blobdiff - configure
Install into $PROGRAMFILES instead of a hardcoded path on MinGW.
[ffmpeg] / configure
index e983d2311d7ca49731b79a66f997a3a57372f7dd..0b6e36d4e68e58885526732b4310fe3faab2747d 100755 (executable)
--- a/configure
+++ b/configure
 # ffmpeg configure script (c) 2000, 2001, 2002 Fabrice Bellard
 #
 
-if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
-cat << EOF
+show_help(){
+  echo "Usage: configure [options]"
+  echo "Options: [defaults in brackets after descriptions]"
+  echo
+  echo "Standard options:"
+  echo "  --help                   print this message"
+  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
+  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]"
+  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
+}
+
+log(){
+    echo "$@" >>$logfile
+}
 
-Usage: configure [options]
-Options: [defaults in brackets after descriptions]
+logfile(){
+    log BEGIN $1
+    cat -n $1 >>$logfile
+    log END $1
+}
 
+echolog(){
+    log "$@"
+    echo "$@"
+}
+
+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
+    if enabled log; then
+        cat <<EOF
+Include the log file "$logfile" produced by configure as this will help
+solving the problem.
 EOF
-echo "Standard options:"
-echo "  --help                   print this message"
-echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
-echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
-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-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-shared-pp       use libpostproc.so [default=no]"
-echo "  --enable-shared          build shared libraries [default=no]"
-echo "  --enable-amr_nb          enable amr_nb float audio codec"
-echo "  --enable-amr_nb-fixed    use fixed point for amr-nb codec"
-echo "  --enable-amr_wb          enable amr_wb float audio codec"
-echo "  --enable-amr_if2         enable amr_wb IF2 audio codec"
-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]"
-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-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-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
+    else
+cat <<EOF
+Rerun configure with logging enabled (do not use --log=no), and include the
+log this produces with your report.
+EOF
+    fi
+    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
+    exit 1
+}
+
+enabled(){
+    eval test "\$$1" = "yes"
+}
+
+flags_saved(){
+    (: ${SAVE_CFLAGS?}) 2>/dev/null
+}
+
+save_flags(){
+    flags_saved && return
+    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 $*"
+}
+
+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 "$@"
+}
+
+check_cc(){
+    log check_cc "$@"
+    cat >$TMPC
+    logfile $TMPC
+    log $cc $CFLAGS "$@" -c -o $TMPO $TMPC
+    $cc $CFLAGS "$@" -c -o $TMPO $TMPC >>$logfile 2>&1
+}
+
+check_cpp(){
+    log check_cpp "$@"
+    cat >$TMPC
+    logfile $TMPC
+    log $cc $CFLAGS "$@" -E -o $TMPO $TMPC
+    $cc $CFLAGS "$@" -E -o $TMPO $TMPC >>$logfile 2>&1
+}
+
+check_ld(){
+    log check_ld "$@"
+    cat >$TMPC
+    logfile $TMPC
+    log $cc $CFLAGS $LDFLAGS "$@" -o $TMPE $TMPC $extralibs
+    $cc $CFLAGS $LDFLAGS "$@" -o $TMPE $TMPC $extralibs >>$logfile 2>&1
+}
+
+check_cflags(){
+    log check_cflags "$@"
+    check_cc "$@" <<EOF && add_cflags "$@"
+int x;
+EOF
+}
+
+check_ldflags(){
+    log check_ldflags "$@"
+    check_ld "$@" <<EOF && add_ldflags "$@"
+int main(){
+    return 0;
+}
+EOF
+}
+
+check_header(){
+    log check_header "$@"
+    header=$1
+    shift
+    check_cpp "$@" <<EOF
+#include <$header>
+int x;
+EOF
+}
+
+check_func(){
+    log check_func "$@"
+    func=$1
+    shift
+    check_ld "$@" <<EOF
+extern int $func();
+int main(){
+    $func();
+}
+EOF
+}
+
+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
+}
+
+check_exec(){
+    check_ld "$@" && { test -n "$cross_prefix" || $TMPE; }
+}
+
+require(){
+    name="$1"
+    header="$2"
+    func="$3"
+    shift 3
+    check_lib $header $func "$@" || die "ERROR: $name not found"
+}
+
+if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
+    show_help
 fi
 
 # set temporary file name
@@ -109,8 +298,11 @@ TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
 TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
 
 # default parameters
+log="yes"
+logfile="config.err"
 prefix="/usr/local"
 libdir=""
+incdir=""
 mandir=""
 bindir=""
 cross_prefix=""
@@ -179,6 +371,7 @@ case "$cpu" in
 esac
 gprof="no"
 v4l="yes"
+v4l2="yes"
 bktr="no"
 audio_oss="yes"
 audio_beos="no"
@@ -201,10 +394,11 @@ a52="no"
 a52bin="no"
 dts="no"
 pp="no"
-shared_pp="no"
 mingw32="no"
+mingwce="no"
 cygwin="no"
 os2="no"
+lstatic="yes"
 lshared="no"
 optimize="yes"
 debug="yes"
@@ -219,19 +413,24 @@ vhook="default"
 dlfcn="no"
 dlopen="no"
 mpegaudio_hp="yes"
-SHFLAGS='-shared -Wl,-soname,$@.$(LIBVERSION)'
+SHFLAGS='-shared -Wl,-soname,$@'
 netserver="no"
 need_inet_aton="no"
+protocols="yes"
 ffserver="yes"
 ffplay="yes"
 LIBOBJFLAGS=""
-LDFLAGS=-Wl,--warn-common
+FFLDFLAGS=-Wl,--warn-common
 FFSLDFLAGS=-Wl,-E
 LDCONFIG="ldconfig"
 LIBPREF="lib"
 LIBSUF=".a"
+LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
 SLIBPREF="lib"
 SLIBSUF=".so"
+SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
+SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
+SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
 EXESUF=""
 BUILDSUF=""
 amr_nb="no"
@@ -251,7 +450,7 @@ case $targetos in
 BeOS)
 prefix="/boot/home/config"
 # helps building libavcodec
-CFLAGS="-DPIC -fomit-frame-pointer"
+CFLAGS="$CFLAGS -DPIC -fomit-frame-pointer"
 # 3 gcc releases known for BeOS, each with ugly bugs
 gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
 case "$gcc_version" in
@@ -266,6 +465,7 @@ SHFLAGS=-nostart
 # disable Linux things
 audio_oss="no"
 v4l="no"
+v4l2="no"
 dv1394="no"
 # enable BeOS things
 audio_beos="yes"
@@ -280,48 +480,59 @@ extralibs="-lnet"
 fi ;;
 SunOS)
 v4l="no"
+v4l2="no"
 audio_oss="no"
 dv1394="no"
 make="gmake"
-LDFLAGS=""
+FFLDFLAGS=""
 FFSLDFLAGS=""
 need_inet_aton="yes"
 extralibs="$extralibs -lsocket -lnsl"
 ;;
 NetBSD)
 v4l="no"
+v4l2="no"
 bktr="yes"
 audio_oss="yes"
 dv1394="no"
 make="gmake"
-LDFLAGS="$LDFLAGS -export-dynamic"
-case `uname -r` in
-2.*) extralibs="$extralibs -lossaudio"
-;;
-esac
+FFLDFLAGS="$FFLDFLAGS -export-dynamic"
+extralibs="$extralibs -lossaudio"
 ;;
 OpenBSD)
 v4l="no"
+v4l2="no"
 bktr="yes"
 audio_oss="yes"
 dv1394="no"
 make="gmake"
 LIBOBJFLAGS="\$(PIC)"
-LDFLAGS="$LDFLAGS -export-dynamic -pthread"
+FFLDFLAGS="$FFLDFLAGS -export-dynamic -pthread"
 LDCONFIG="ldconfig -m \$(libdir)"
 extralibs="$extralibs -lossaudio"
 ;;
 FreeBSD)
 v4l="no"
+v4l2="no"
 bktr="yes"
 audio_oss="yes"
 dv1394="no"
 make="gmake"
-CFLAGS="-pthread"
-LDFLAGS="$LDFLAGS -export-dynamic -pthread"
+CFLAGS="$CFLAGS -pthread"
+FFLDFLAGS="$FFLDFLAGS -export-dynamic -pthread"
+;;
+GNU/kFreeBSD)
+v4l="no"
+v4l2="no"
+bktr="yes"
+audio_oss="yes"
+dv1394="no"
+CFLAGS="$CFLAGS -pthread"
+LDFLAGS="$LDFLAGS -rdynamic"
 ;;
 BSD/OS)
 v4l="no"
+v4l2="no"
 bktr="yes"
 audio_oss="yes"
 dv1394="no"
@@ -333,16 +544,18 @@ installstrip=""
 Darwin)
 cc="cc"
 v4l="no"
+v4l2="no"
 audio_oss="no"
 dv1394="no"
-ffserver="no"
 SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(libdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION)"
 extralibs=""
 darwin="yes"
 strip="strip -x"
 installstrip=""
-LDFLAGS="-Wl,-dynamic,-search_paths_first"
+FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
 SLIBSUF=".dylib"
+SLIBNAME_WITH_FULLVERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
+SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
 FFSLDFLAGS=-Wl,-bind_at_load
 ;;
 MINGW32*)
@@ -352,6 +565,7 @@ mingw32="yes"
 ;;
 CYGWIN*)
 v4l="no"
+v4l2="no"
 audio_oss="yes"
 dv1394="no"
 vhook="no"
@@ -360,11 +574,12 @@ cygwin="yes"
 EXESUF=".exe"
 ;;
 Linux)
-LDFLAGS="$LDFLAGS -rdynamic"
+FFLDFLAGS="$FFLDFLAGS -rdynamic"
 ;;
 IRIX*)
 ranlib="echo ignoring ranlib"
 v4l="no"
+v4l2="no"
 audio_oss="no"
 make="gmake"
 ;;
@@ -373,8 +588,8 @@ TMPE=$TMPE".exe"
 ar="emxomfar -p128"
 ranlib="echo ignoring ranlib"
 strip="echo ignoring strip"
-CFLAGS="-Zomf"
-LDFLAGS="-Zomf -Zstack 16384 -s"
+CFLAGS="$CFLAGS -Zomf"
+FFLDFLAGS="-Zomf -Zstack 16384 -s"
 SHFLAGS="-Zdll -Zomf"
 FFSLDFLAGS=""
 LIBPREF=""
@@ -385,9 +600,9 @@ EXESUF=".exe"
 extralibs=""
 pkg_requires=""
 v4l="no"
+v4l2="no"
 audio_oss="no"
 dv1394="no"
-network="no"
 ffserver="no"
 vhook="no"
 os2="yes"
@@ -436,10 +651,16 @@ CODEC_LIST=`grep 'register_avcodec(&[a-z]' $source_path/libavcodec/allcodecs.c
 
 for opt do
   case "$opt" in
+  --log)
+  ;;
+  --log=*) log="${opt#*=}"
+  ;;
   --prefix=*) prefix=`echo $opt | cut -d '=' -f 2`; force_prefix=yes
   ;;
   --libdir=*) libdir=`echo $opt | cut -d '=' -f 2`; force_libdir=yes
   ;;
+  --incdir=*) incdir=`echo $opt | cut -d '=' -f 2`;
+  ;;
   --mandir=*) mandir=`echo $opt | cut -d '=' -f 2`
   ;;
   --source-path=*) source_path=`echo $opt | cut -d '=' -f 2`
@@ -452,7 +673,7 @@ for opt do
   ;;
   --extra-cflags=*) CFLAGS="$CFLAGS ${opt#--extra-cflags=}"
   ;;
-  --extra-ldflags=*) LDFLAGS="$LDFLAGS ${opt#--extra-ldflags=}"
+  --extra-ldflags=*) FFLDFLAGS="$FFLDFLAGS ${opt#--extra-ldflags=}"
   ;;
   --extra-libs=*) extralibs=${opt#--extra-libs=}
   ;;
@@ -474,12 +695,13 @@ for opt do
   ;;
   --disable-v4l) v4l="no"
   ;;
+  --disable-v4l2) v4l2="no"
+  ;;
   --disable-bktr) bktr="no"
   ;;
   --disable-audio-oss) audio_oss="no"
   ;;
   --disable-audio-beos) audio_beos="no"
-    extralibs="$extralibs -lbe -lmedia"
   ;;
   --disable-dv1394) dv1394="no"
   ;;
@@ -494,46 +716,33 @@ for opt do
   --enable-a52bin) a52bin="yes"
   ;;
   --enable-dts) dts="yes"
-    extralibs="$extralibs -ldts"
   ;;
   --enable-pp) pp="yes"
   ;;
-  --enable-shared-pp) pp="yes"; shared_pp="yes"
-  ;;
   --enable-libgsm) libgsm="yes"
-    extralibs="$extralibs -lgsm"
   ;;
   --enable-mp3lame) mp3lame="yes"
-    extralibs="$extralibs -lmp3lame"
   ;;
   --enable-libogg) libogg="yes"
-    extralibs="$extralibs -logg"
     pkg_requires="$pkg_requires ogg >= 1.1"
   ;;
   --enable-vorbis) vorbis="yes"
-    extralibs="$extralibs -lvorbis -lvorbisenc"
     pkg_requires="$pkg_requires vorbis vorbisenc"
   ;;
   --enable-theora) theora="yes"
-    extralibs="$extralibs -ltheora"
     pkg_requires="$pkg_requires theora"
   ;;
   --enable-faad) faad="yes"
-    extralibs="$extralibs -lfaad"
   ;;
   --enable-faadbin) faadbin="yes"
   ;;
   --enable-faac) faac="yes"
-    extralibs="$extralibs -lfaac"
   ;;
   --enable-xvid) xvid="yes"
-    extralibs="$extralibs -lxvidcore"
   ;;
   --enable-x264) x264="yes"
-    extralibs="$extralibs -lx264"
   ;;
   --enable-dc1394) dc1394="yes"
-    extralibs="$extralibs -ldc1394_control -lraw1394"
     pkg_requires="$pkg_requires libraw1394"
   ;;
   --disable-vhook) vhook="no"
@@ -542,27 +751,37 @@ for opt do
   ;;
   --enable-mingw32) mingw32="yes"
   ;;
+  --enable-mingwce) mingwce="yes"
+  ;;
+  --enable-static) lstatic="yes"
+  ;;
+  --disable-static) lstatic="no"
+  ;;
   --enable-shared) lshared="yes"
   ;;
+  --disable-shared) lshared="no"
+  ;;
   --disable-debug) debug="no"
   ;;
   --disable-opts) optimize="no"
   ;;
   --disable-mpegaudio-hp) mpegaudio_hp="no"
   ;;
+  --disable-protocols) protocols="no"; network="no"; ffserver="no"
+  ;;
   --disable-ffserver) ffserver="no"
   ;;
   --disable-ffplay) ffplay="no"
   ;;
   --enable-small) optimize="small"
   ;;
-  --enable-amr_nb) amr_nb="yes"
+  --enable-amr_nb) amr="yes"; amr_nb="yes"; amr_nb_fixed="no"
   ;;
-  --enable-amr_nb-fixed) amr_nb_fixed="yes"
+  --enable-amr_nb-fixed) amr="yes"; amr_nb_fixed="yes"; amr_nb="no"
   ;;
-  --enable-amr_wb) amr_wb="yes"
+  --enable-amr_wb) amr="yes"; amr_wb="yes"
   ;;
-  --enable-amr_if2) amr_if2="yes"
+  --enable-amr_if2) amr="yes"; amr_if2="yes"
   ;;
   --enable-sunmlib) sunmlib="yes"
   ;;
@@ -586,10 +805,12 @@ for opt do
   ;;
   --disable-decoders) CODEC_LIST="`echo $CODEC_LIST | sed 's/[-_a-zA-Z0-9]*decoder//g'`"
   ;;
-  --disable-muxers) muxers="no"
+  --disable-muxers) muxers="no"; ffserver="no"
   ;;
   --disable-demuxers) demuxers="no"
   ;;
+  --help) show_help
+  ;;
   *)
   echo "Unknown option \"$opt\"."
   echo "See $0 --help for available options."
@@ -598,6 +819,33 @@ for opt do
   esac
 done
 
+if test "$log" != no; then
+    test "$log" = yes || logfile="$log"
+    echo "# $0 $@" >$logfile
+    set >>$logfile
+else
+    logfile=/dev/null
+fi
+
+# Combine FFLDFLAGS and the LDFLAGS environment variable
+LDFLAGS="$FFLDFLAGS $LDFLAGS"
+
+cc="${cross_prefix}${cc}"
+ar="${cross_prefix}${ar}"
+ranlib="${cross_prefix}${ranlib}"
+strip="${cross_prefix}${strip}"
+
+# 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
+
 if test "$theora" = "yes" ; then
     if test "$libogg" = "no"; then
         echo "libogg must be enabled to enable Theora."
@@ -615,7 +863,7 @@ if test "$vorbis" = "yes" ; then
 fi
 
 if test "$gpl" != "yes"; then
-    if test "$pp" != "no" -o "$shared_pp" != "no"; then
+    if test "$pp" != "no"; then
         echo "The Postprocessing code is under GPL and --enable-gpl is not specified."
         fail="yes"
     fi
@@ -641,20 +889,15 @@ if test "$gpl" != "yes"; then
     fi
 
     if test "$faad" != "no" -o "$faadbin" != "no"; then
-        cat > $TMPC << EOF
-            #include <faad.h>
-            int main( void ) { return 0; }
-EOF
-
-        if $cc $CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
-            cat > $TMPC << EOF
+        if check_header faad.h; then
+            check_cc << EOF
                 #include <faad.h>
                 #ifndef FAAD2_VERSION
                 ok faad1
                 #endif
                 int main( void ) { return 0; }
 EOF
-            if $cc $CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
+            if test $? = 0 ; then
                 echo "FAAD2 is under GPL and --enable-gpl is not specified."
                 fail="yes"
             fi
@@ -682,16 +925,12 @@ fi
 
 # check iwmmxt support
 if test $iwmmxt = "default" -a $cpu = "armv4l"; then
-    cat > $TMPC << EOF
+    iwmmxt=no
+    check_cc <<EOF && iwmmxt=yes
         int main(void) {
         __asm__ __volatile__ ("wunpckelub wr6, wr4");
         }
 EOF
-
-    iwmmxt=no
-    if ${cross_prefix}${cc} -o $TMPO $TMPC 2> /dev/null ; then
-        iwmmxt=yes
-    fi
 fi
 
 #Darwin CC versions
@@ -794,6 +1033,8 @@ if test $tune != "generic"; then
     esac
 fi
 
+# check for SIMD availability
+
 # AltiVec flags: The FSF version of GCC differs from the Apple version
 if test $cpu = "powerpc"; then
     if test $altivec = "yes"; then
@@ -805,30 +1046,17 @@ if test $cpu = "powerpc"; then
     fi
 fi
 
-# check if we have <altivec.h>
-cat > $TMPC << EOF
-#include <altivec.h>
-int main( void ) { return 0; }
-EOF
-
-_altivec_h="no"
-if $cc $CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
-_altivec_h="yes"
-fi
+check_header altivec.h && _altivec_h=yes || _altivec_h=no
 
 # check if our compiler supports Motorola AltiVec C API
 if test $altivec = "yes"; then
-if test $_altivec_h = "yes"; then
-cat > $TMPC << EOF
-#include <altivec.h>
-int main(void) {
-    vector signed int v1, v2, v3;
-    v1 = vec_add(v2,v3);
-    return 0;
-}
-EOF
-else
-cat > $TMPC << EOF
+    if test $_altivec_h = "yes"; then
+        inc_altivec_h="#include <altivec.h>"
+    else
+        inc_altivec_h=
+    fi
+    check_cc <<EOF || altivec=no
+$inc_altivec_h
 int main(void) {
     vector signed int v1, v2, v3;
     v1 = vec_add(v2,v3);
@@ -836,8 +1064,6 @@ int main(void) {
 }
 EOF
 fi
-$cc $CFLAGS -o $TMPE $TMPC 2> /dev/null || altivec="no"
-fi
 
 # mmi only available on mips
 if test $mmi = "default"; then
@@ -849,77 +1075,90 @@ if test $mmi = "default"; then
 fi
 
 # check if our compiler supports mmi
-if test $mmi = "yes"; then
-cat > $TMPC << EOF
+enabled mmi && check_cc <<EOF || mmi="no"
 int main(void) {
     __asm__ ("lq \$2, 0(\$2)");
     return 0;
 }
 EOF
-$cc -o $TMPE $TMPC 2> /dev/null || mmi="no"
-fi
 
-if test "$mingw32" = "yes" ; then
+# 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
+
+if test "$mingw32" = "yes" -o "$mingwce" = "yes"; then
+    if test "$lshared" = "yes" && test "$lstatic" = "yes" ; then
+        cat <<EOF
+You can only build one library type at once on MinGW.
+Specify --disable-static --enable-shared to only build
+the shared libraries. To build only the static libraries
+you do not need to pass additional options.
+EOF
+        exit 1
+    fi
     v4l="no"
+    v4l2="no"
     bktr="no"
     audio_oss="no"
     dv1394="no"
     dc1394="no"
     ffserver="no"
     network="no"
+    if test "$mingwce" = "yes"; then
+        protocols="no"
+    fi
     SLIBPREF=""
     SLIBSUF=".dll"
     EXESUF=".exe"
-    if test "$force_prefix" != yes; then prefix="/c/Program Files/FFmpeg"; fi
+    if test "$force_prefix" != yes; then prefix="$PROGRAMFILES/FFmpeg"; fi
     if test "$force_libdir" != yes; then bindir="$prefix"; fi
 fi
 
-cc="${cross_prefix}${cc}"
-ar="${cross_prefix}${ar}"
-ranlib="${cross_prefix}${ranlib}"
-strip="${cross_prefix}${strip}"
-
-if test -z "$cross_prefix" ; then
-
 # ---
 # big/little-endian test
-cat > $TMPC << EOF
+if test -z "$cross_prefix" ; then
+    check_ld <<EOF || die "endian test failed" && $TMPE && bigendian="yes"
 #include <inttypes.h>
 int main(int argc, char ** argv){
         volatile uint32_t i=0x01234567;
         return (*((uint8_t*)(&i))) == 0x67;
 }
 EOF
-
-if $cc -o $TMPE $TMPC 2>/dev/null ; then
-$TMPE && bigendian="yes"
-else
-echo big/little test failed
-fi
-
 else
-
-# programs cannot be launched if cross compiling, so make a static guess
-if test "$cpu" = "powerpc" -o "$cpu" = "mips" ; then
-    bigendian="yes"
-fi
-
+    # programs cannot be launched if cross compiling, so make a static guess
+    if test "$cpu" = "powerpc" -o "$cpu" = "mips" ; then
+        bigendian="yes"
+    fi
 fi
 
 # ---
 # *inttypes.h* test
-cat > $TMPC << EOF
-#include <inttypes.h>
-int main(int argc, char ** argv){
-    return 0;
-}
-EOF
-
-$cc -o $TMPE $TMPC 2>/dev/null || inttypes="no"
+check_header inttypes.h || inttypes=no
 
 # ---
 # *int_fast* test
-cat > $TMPC << EOF
+check_cc <<EOF || emu_fast_int=yes
 #include <inttypes.h>
 int main(int argc, char ** argv){
         volatile uint_fast64_t i=0x01234567;
@@ -927,235 +1166,180 @@ int main(int argc, char ** argv){
 }
 EOF
 
-$cc -o $TMPE $TMPC 2>/dev/null || emu_fast_int="yes"
-
 # ---
 # check availability of some header files
 
-cat > $TMPC << EOF
-#include <malloc.h>
-int main( void ) { return 0; }
-EOF
-
 _memalign=no
 _malloc_h=no
-if $cc -o $TMPE $TMPC 2> /dev/null ; then
-_malloc_h=yes
-_memalign=yes
-# check for memalign - atmos
-cat > $TMPC << EOF
-#include <stdio.h>
-#include <malloc.h>
-int main ( void ) {
-char *string = NULL;
-string = memalign(64, sizeof(char));
-return 0;
-}
-EOF
-$cc -o $TMPE $TMPC 2> /dev/null || _memalign=no
+if check_header malloc.h; then
+    _malloc_h=yes
+    _memalign=yes
+    check_func memalign || _memalign="no"
 fi
 
 if test "$_memalign" = "no" -a "$mmx" = "yes" -a "$memalignhack" != "yes"; then
-    echo "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
-    exit 1
-fi
-
-cat > $TMPC << EOF
-#include <time.h>
-int main( void ) { localtime_r(NULL, NULL); }
-EOF
-
-localtime_r=no
-if $cc -o $TMPE $TMPC 2> /dev/null ; then
-  localtime_r=yes
-fi
-
-if test "$zlib" = "yes"; then
-# check for zlib - mmu_man
-cat > $TMPC << EOF
-#include <zlib.h>
-int main ( void ) {
-if (zlibVersion() != ZLIB_VERSION)
-   puts("zlib version differs !!!");
-   return 1;
-return 0;
+    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
+fi
+
+check_func localtime_r && localtime_r=yes || localtime_r=no
+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
+enabled libogg  && require libogg ogg/ogg.h ogg_sync_init -logg
+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
+
+# 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
-$cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -lz 2> /dev/null || zlib="no"
-# $TMPE 2> /dev/null > /dev/null || zlib="no"
-# XXX: more tests needed - runtime test
-fi
-if test "$zlib" = "yes"; then
-extralibs="$extralibs -lz"
-fi
-
-if test "$lzo" = "yes" -a "$gpl" = "yes"; then
-# check for liblzo
-cat > $TMPC << EOF
-#include <lzo1x.h>
-int main ( void ) {
-lzo_init();
-return 0;
+    restore_flags
+fi
+
+# 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
-$cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -llzo 2> /dev/null || lzo="no"
-else
-lzo="no"
-fi
-if test "$lzo" = "yes"; then
-extralibs="$extralibs -llzo"
+    restore_flags
 fi
 
 # test for lrintf in math.h
-cat > $TMPC << EOF
+check_exec <<EOF && have_lrintf=yes || have_lrintf=no
 #define _ISOC9X_SOURCE  1
 #include <math.h>
 int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
 EOF
 
-have_lrintf="no"
-if $cc $CFLAGS $LDFLAGS $extralibs -o $TMPE $TMPC 2> /dev/null ; then
-  have_lrintf="yes"
-  # allanc@chickenandporn.com: cannot execute cross-compiled
-  # code on the host.  Only execute if not cross-compiling.
-  if test -z "$cross_prefix" ; then
-    $TMPE 2> /dev/null > /dev/null || have_lrintf="no"
-  fi
-fi
-
 _restrict=
 for restrict_keyword in restrict __restrict__ __restrict; do
-  echo "void foo(char * $restrict_keyword p);" > $TMPC
-  if $cc -c -o $TMPO $TMPC 2> /dev/null; then
-    _restrict=$restrict_keyword
-    break;
-  fi
-done
-
-# test gcc version to see if vector builtins can be used
-# currently only used on i386 for MMX builtins
-cat > $TMPC << EOF
-#include <xmmintrin.h>
-int main(void) {
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2)
-return 0;
-#else
-#error no vector builtins
-#endif
-}
+    check_cc <<EOF && _restrict=$restrict_keyword && break
+void foo(char * $restrict_keyword p);
 EOF
-
-builtin_vector=no
-if $cc -msse -o $TMPO $TMPC 2> /dev/null ; then
-  builtin_vector=yes
-fi
-
-# Probe for -Wdeclaration-after-statement
-if test "$cc" = "gcc"; then
-  cat > $TMPC << EOF
-  int main( void ) { return 0; }
-EOF
-
-  if $cc -Wdeclaration-after-statement -Werror -o $TMPE $TMPC 2> /dev/null ; then
-    CFLAGS="$CFLAGS -Wdeclaration-after-statement"
-  fi
-fi
+done
 
 # dlopen/dlfcn.h probing
 
-cat > $TMPC << EOF
-#include <dlfcn.h>
-int main( void ) { return (int) dlopen("foo", 0); }
-EOF
-
-ldl=-ldl
-
-if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -ldl > /dev/null 2>&1 ; then
-dlfcn=yes
-dlopen=yes
-fi
-
-if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC > /dev/null 2>&1 ; then
-dlfcn=yes
-dlopen=yes
-ldl=""
-fi
+check_header dlfcn.h && dlfcn=yes
 
-cat > $TMPC << EOF
-int main( void ) { return (int) dlopen("foo", 0); }
-EOF
-
-if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -ldl > /dev/null 2>&1  ; then
-dlopen=yes
+temp_extralibs -ldl
+if check_func dlopen; then
+    dlopen=yes
+    ldl=-ldl
 fi
+restore_flags
 
-if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC > /dev/null 2>&1  ; then
-dlopen=yes
-ldl=""
+if check_func dlopen; then
+    dlopen=yes
+    ldl=
 fi
 
-if test "$vhook" = "default" ; then
-  vhook="$dlopen"
+if test "$vhook" = "default"; then
+    vhook="$dlopen"
 fi
 
 if test "$vhook" = "yes" -o "$a52bin" = "yes" -o "$faadbin" = "yes"; then
-  extralibs="$extralibs $ldl"
+    add_extralibs $ldl
 fi
 
 
 ##########################################
 # imlib check
 
-cat > $TMPC << EOF
+temp_extralibs -lImlib2
+check_ld <<EOF && imlib2=yes || imlib2=no
 #include <X11/Xlib.h>
 #include <Imlib2.h>
 int main( void ) { return (int) imlib_load_font("foo"); }
 EOF
-
-imlib2=no
-if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -lImlib2 -lm > /dev/null 2>&1  ; then
-imlib2=yes
-fi
+restore_flags
 
 ##########################################
 # FreeType check
 
-cat > $TMPC << EOF
+freetype2=no
+if test "x$targetos" != "xBeOS"; then
+  if (freetype-config --version) >/dev/null 2>&1 ; then
+      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
-
-freetype2=no
-if test "x$targetos" != "xBeOS" && test "$os2" != "yes"; then
-  if (freetype-config --version) >/dev/null 2>&1 ; then
-    if $cc -o $TMPE $TMPC `freetype-config --cflags` `freetype-config --libs`  > /dev/null 2>&1 ; then
-      freetype2=yes
-    fi
+      restore_flags
   fi
 fi
 
 ##########################################
 # SDL check
 
-cat > $TMPC << EOF
+sdl_too_old=no
+sdl=no
+SDL_CONFIG="${cross_prefix}sdl-config"
+if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then
+    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
-
-sdl_too_old=no
-sdl=no
-if (sdl-config --version) >/dev/null 2>&1 ; then
-if $cc -o $TMPE `sdl-config --cflags` $TMPC `sdl-config --libs`  > /dev/null 2>&1  ; then
-_sdlversion=`sdl-config --version | sed 's/[^0-9]//g'`
-if test "$_sdlversion" -lt 121 ; then
-sdl_too_old=yes
-else
-sdl=yes
-fi
-fi
+    if test $? = 0; then
+        _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
+        if test "$_sdlversion" -lt 121 ; then
+            sdl_too_old=yes
+        else
+            sdl=yes
+            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
+        fi
+    fi
+    restore_flags
 fi
 
+enabled sdl || ffplay=no
+
 ##########################################
 # texi2html check
 
@@ -1164,11 +1348,10 @@ if (texi2html -version) >/dev/null 2>&1; then
 texi2html=yes
 fi
 
-if test "$network" = "yes" ; then
 ##########################################
 # IPv6 check
 
-cat > $TMPC << EOF
+enabled network && check_ld <<EOF && ipv6=yes || ipv6=no
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
@@ -1178,38 +1361,33 @@ int main( void ) {
   struct ipv6_mreq mreq6;
   getaddrinfo(0,0,0,0);
   getnameinfo(0,0,0,0,0,0,0);
-  IN6_IS_ADDR_MULTICAST(0);
+  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
 }
 EOF
 
-ipv6=no
-if $cc -o $TMPE $TMPC > /dev/null 2>&1  ; then
-ipv6=yes
-fi
-fi
+# check for video4linux2 --- V4L2_PIX_FMT_YUV420
+enabled v4l2 && check_cc <<EOF || v4l2="no"
+#include <sys/time.h>
+#include <asm/types.h>
+#include <linux/videodev2.h>
+int dummy = V4L2_PIX_FMT_YUV420;
+struct v4l2_buffer dummy1;
+EOF
 
-case "`$cc -v 2>&1 | grep version`" in
-    *gcc*)
-        CFLAGS="-Wall -Wno-switch $CFLAGS"
-        ;;
-    *)
-        ;;
-esac
+enabled debug && add_cflags -g
 
-if test "$sdl" = "no" ; then
-   ffplay=no
-fi
+# add some useful compiler flags if supported
+check_cflags -Wdeclaration-after-statement
+check_cflags -Wall
+check_cflags -Wno-switch
 
-if test "$debug" = "yes"; then
-        CFLAGS="-g $CFLAGS"
-fi
+# 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'
 
-if test "$optimize" = "small"; then
-#  CFLAGS=${CFLAGS//-O3/-Os}
-  CFLAGS="$CFLAGS -Os"
-fi
+# not all compilers support -Os
+test "$optimize" = "small" && check_cflags -Os
 
-if test "$optimize" = "yes"; then
+if enabled optimize; then
     if test -n "`$cc -v 2>&1 | grep xlc`"; then
         CFLAGS="$CFLAGS -O5"
         LDFLAGS="$LDFLAGS -O5"
@@ -1220,24 +1398,28 @@ fi
 
 # PIC flags for shared library objects where they are needed
 if test "$lshared" = "yes" ; then
-  # 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)"
+    # 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
     fi
-  fi
 fi
 
 if test x"$bindir" = x""; then
-bindir="${prefix}/bin"
+    bindir="${prefix}/bin"
 fi
 
 if test x"$libdir" = x""; then
-libdir="${prefix}/lib"
+    libdir="${prefix}/lib"
+fi
+
+if test x"$incdir" = x""; then
+    incdir="${prefix}/include/ffmpeg"
 fi
 
 if test x"$mandir" = x""; then
-mandir="${prefix}/man"
+    mandir="${prefix}/man"
 fi
 
 echo "install prefix   $prefix"
@@ -1246,23 +1428,24 @@ echo "C compiler       $cc"
 echo "make             $make"
 echo "CPU              $cpu ($tune)"
 if test "$BUILDSUF" != ""; then
-echo "build suffix     $BUILDSUF"
+    echo "build suffix     $BUILDSUF"
 fi
 echo "big-endian       $bigendian"
 echo "inttypes.h       $inttypes"
 echo "broken inttypes.h $emu_fast_int"
 if test $cpu = "x86" -o $cpu = "x86_64"; then
-echo "MMX enabled      $mmx"
-echo "Vector Builtins  $builtin_vector"
+    echo "MMX enabled      $mmx"
+    echo "Vector Builtins  $builtin_vector"
+    echo "3DNow! Builtins  $mm3dnow"
 fi
 if test $cpu = "armv4l"; then
-echo "IWMMXT enabled   $iwmmxt"
+    echo "IWMMXT enabled   $iwmmxt"
 fi
 if test $cpu = "mips"; then
-echo "MMI enabled      $mmi"
+    echo "MMI enabled      $mmi"
 fi
 if test $cpu = "powerpc"; then
-echo "AltiVec enabled  $altivec"
+    echo "AltiVec enabled  $altivec"
 fi
 echo "gprof enabled    $gprof"
 echo "zlib enabled     $zlib"
@@ -1284,16 +1467,17 @@ echo "pp support       $pp"
 echo "debug symbols    $debug"
 echo "strip symbols    $dostrip"
 echo "optimize         $optimize"
-echo "shared pp        $shared_pp"
+echo "static           $lstatic"
+echo "shared           $lshared"
 echo "video hooking    $vhook"
 echo "SDL support      $sdl"
 if test $sdl_too_old = "yes"; then
-echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
+    echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
 fi
 
-if test "$vhook" = "yes" ; then
-echo "Imlib2 support   $imlib2"
-echo "FreeType support $freetype2"
+if test "$vhook" = "yes"; then
+    echo "Imlib2 support   $imlib2"
+    echo "FreeType support $freetype2"
 fi
 echo "Sun medialib support"  $sunmlib
 echo "pthreads support"      $pthreads
@@ -1303,12 +1487,12 @@ echo "AMR-WB float support"  $amr_wb
 echo "AMR-WB IF2 support"    $amr_if2
 echo "network support      $network"
 if test "$network" = "yes" ; then
-echo "IPv6 support         $ipv6"
+    echo "IPv6 support         $ipv6"
 fi
 if test "$gpl" = "no" ; then
-echo "License: LGPL"
+    echo "License: LGPL"
 else
-echo "License: GPL"
+    echo "License: GPL"
 fi
 
 echo "Creating config.mak and config.h..."
@@ -1321,6 +1505,7 @@ echo "#define FFMPEG_CONFIGURATION "'"'"$FFMPEG_CONFIGURATION"'"' >> $TMPH
 
 echo "prefix=\$(DESTDIR)$prefix" >> config.mak
 echo "libdir=\$(DESTDIR)$libdir" >> config.mak
+echo "incdir=\$(DESTDIR)$incdir" >> config.mak
 echo "bindir=\$(DESTDIR)$bindir" >> config.mak
 echo "mandir=\$(DESTDIR)$mandir" >> config.mak
 echo "MAKE=$make" >> config.mak
@@ -1328,19 +1513,17 @@ echo "CC=$cc" >> config.mak
 echo "AR=$ar" >> config.mak
 echo "RANLIB=$ranlib" >> config.mak
 if test "$dostrip" = "yes" ; then
-echo "STRIP=$strip" >> config.mak
-echo "INSTALLSTRIP=$installstrip" >> config.mak
+    echo "STRIP=$strip" >> config.mak
+    echo "INSTALLSTRIP=$installstrip" >> config.mak
 else
-echo "STRIP=echo ignoring strip" >> config.mak
-echo "INSTALLSTRIP=" >> config.mak
+    echo "STRIP=echo ignoring strip" >> config.mak
+    echo "INSTALLSTRIP=" >> config.mak
 fi
 
 # SHCFLAGS is a copy of CFLAGS without -mdynamic-no-pic, used when building
 # shared modules on OS/X (vhook/Makefile).
-SHCFLAGS=$CFLAGS
-if test "$needmdynamicnopic" = yes; then
-   CFLAGS="$CFLAGS -mdynamic-no-pic"
-fi
+SHCFLAGS="$CFLAGS"
+test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic
 
 echo "OPTFLAGS=$CFLAGS" >> config.mak
 echo "SHCFLAGS=$SHCFLAGS">>config.mak
@@ -1349,9 +1532,15 @@ echo "LDCONFIG=$LDCONFIG" >> config.mak
 echo "FFSLDFLAGS=$FFSLDFLAGS" >> config.mak
 echo "SHFLAGS=$SHFLAGS" >> config.mak
 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
+echo "BUILD_STATIC=$lstatic" >> config.mak
 echo "BUILDSUF=$BUILDSUF" >> config.mak
 echo "LIBPREF=$LIBPREF" >> config.mak
 echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
+if test "$lstatic" = "yes" ; then
+  echo "LIB=$LIB" >> config.mak
+else # Some Make complain if this variable does not exist.
+  echo "LIB=" >> config.mak
+fi
 echo "SLIBPREF=$SLIBPREF" >> config.mak
 echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
 echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
@@ -1426,6 +1615,10 @@ if test "$builtin_vector" = "yes" ; then
   echo "TARGET_BUILTIN_VECTOR=yes" >> config.mak
   echo "#define HAVE_BUILTIN_VECTOR 1" >> $TMPH
 fi
+if test "$mm3dnow" = "yes" ; then
+  echo "TARGET_BUILTIN_3DNOW=yes" >> config.mak
+  echo "#define HAVE_MM3DNOW 1" >> $TMPH
+fi
 if test "$iwmmxt" = "yes" ; then
   echo "TARGET_IWMMXT=yes" >> config.mak
   echo "#define HAVE_IWMMXT 1" >> $TMPH
@@ -1461,20 +1654,19 @@ fi
 if test "$sunmlib" = "yes" ; then
   echo "HAVE_MLIB=yes" >> config.mak
   echo "#define HAVE_MLIB 1" >> $TMPH
-  extralibs="$extralibs -lmlib"
 fi
 if test "$pthreads" = "yes" ; then
   echo "HAVE_PTHREADS=yes" >> config.mak
   echo "#define HAVE_PTHREADS 1" >> $TMPH
   echo "#define HAVE_THREADS 1" >> $TMPH
-  if test $targetos != FreeBSD -a $targetos != OpenBSD ; then
-     extralibs="$extralibs -lpthread"
-  fi
 fi
 if test "$sdl" = "yes" ; then
   echo "CONFIG_SDL=yes" >> config.mak
-  echo "SDL_LIBS=`sdl-config --libs`" >> config.mak
-  echo "SDL_CFLAGS=`sdl-config --cflags`" >> config.mak
+  echo "SDL_LIBS=`"${SDL_CONFIG}" --libs`" >> config.mak
+  echo "SDL_CFLAGS=`"${SDL_CONFIG}" --cflags`" >> config.mak
+  if test "$sdl_video_size" = "yes"; then
+    echo "#define HAVE_SDL_VIDEO_SIZE 1" >> $TMPH
+  fi
 fi
 if test "$texi2html" = "yes"; then
   echo "BUILD_DOC=yes" >> config.mak
@@ -1487,6 +1679,7 @@ if test "$vhook" = "yes" ; then
   echo "#define HAVE_VHOOK 1" >> $TMPH
 fi
 
+pp_version=`grep '#define LIBPOSTPROC_VERSION ' "$source_path/libpostproc/postprocess.h" | sed 's/[^0-9\.]//g'`
 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'`
@@ -1494,6 +1687,7 @@ lavu_version=`grep '#define LIBAVUTIL_VERSION ' "$source_path/libavutil/avutil.h
 
 
 if test "$lshared" = "yes" ; then
+  echo "#define BUILD_SHARED_AV 1" >> $TMPH
   echo "BUILD_SHARED=yes" >> config.mak
   echo "PIC=-fPIC -DPIC" >> config.mak
   echo "SPPMAJOR=${lavc_version%%.*}" >> config.mak
@@ -1504,11 +1698,12 @@ if test "$lshared" = "yes" ; then
   echo "LAVFVERSION=$lavf_version" >> config.mak
   echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
   echo "LAVUVERSION=$lavu_version" >> config.mak
+  echo "SLIBNAME=${SLIBNAME}" >> config.mak
+  echo "SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}" >> config.mak
+  echo "SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}" >> config.mak
 fi
 echo "EXTRALIBS=$extralibs" >> config.mak
-version=`grep '#define FFMPEG_VERSION ' "$source_path/libavcodec/avcodec.h" |
- cut -d '"' -f 2`
-echo "VERSION=$version" >>config.mak
+
 # If you do not want to use encoders, disable them.
 echo "#define CONFIG_ENCODERS 1" >> $TMPH
 echo "CONFIG_ENCODERS=yes" >> config.mak
@@ -1550,11 +1745,6 @@ fi
 if test "$pp" = "yes" ; then
   echo "#define CONFIG_PP 1" >> $TMPH
   echo "CONFIG_PP=yes" >> config.mak
-
-  if test "$shared_pp" = "yes" ; then
-    echo "#define SHARED_PP 1" >> $TMPH
-    echo "SHARED_PP=yes" >> config.mak
-  fi
 fi
 
 # MPEG audio high precision mode
@@ -1567,6 +1757,11 @@ if test "$v4l" = "yes" ; then
   echo "CONFIG_VIDEO4LINUX=yes" >> config.mak
 fi
 
+if test "$v4l2" = "yes" ; then
+  echo "#define CONFIG_VIDEO4LINUX2 1" >> $TMPH
+  echo "CONFIG_VIDEO4LINUX2=yes" >> config.mak
+fi
+
 if test "$bktr" = "yes" ; then
   echo "#define CONFIG_BKTR 1" >> $TMPH
   echo "CONFIG_BKTR=yes" >> config.mak
@@ -1680,9 +1875,22 @@ if test "$mingw32" = "yes" ; then
   echo "#endif" >> $TMPH
 fi
 
+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
+
 if test "$os2" = "yes" ; then
   echo "#define CONFIG_OS2 1" >> $TMPH
   echo "CONFIG_OS2=yes" >> config.mak
+  echo "HAVE_OS2THREADS=yes" >> config.mak
+  echo "#define HAVE_OS2THREADS 1" >> $TMPH
+  echo "#define HAVE_THREADS 1" >> $TMPH
 fi
 
 if test "$TARGET_OS" = "SunOS" ; then
@@ -1730,6 +1938,11 @@ if test "$simpleidct" = "yes" ; then
   echo "#define SIMPLE_IDCT 1" >> $TMPH
 fi
 
+if test "$protocols" = "yes" ; then
+  echo "#define CONFIG_PROTOCOLS 1" >> $TMPH
+  echo "CONFIG_PROTOCOLS=yes" >> config.mak
+fi
+
 if test "$ffserver" = "yes" ; then
   echo "#define CONFIG_FFSERVER 1" >> $TMPH
   echo "CONFIG_FFSERVER=yes" >> config.mak
@@ -1763,7 +1976,7 @@ if test "$source_path_used" = "yes" ; then
          libavcodec/mlib \
          libavcodec/ppc \
          libavcodec/liba52 \
-         libavcodec/libpostproc \
+         libpostproc \
          libavutil \
          tests \
          vhook \
@@ -1772,7 +1985,7 @@ if test "$source_path_used" = "yes" ; then
           Makefile \
           libavformat/Makefile \
           libavcodec/Makefile \
-          libavcodec/libpostproc/Makefile \
+          libpostproc/Makefile \
           libavutil/Makefile \
           tests/Makefile \
           vhook/Makefile \
@@ -1785,9 +1998,13 @@ if test "$source_path_used" = "yes" ; then
     for f in $FILES ; do
         ln -sf "$source_path/$f" $f
     done
-    echo "SRC_PATH=$source_path" >> config.mak
-else
-    echo "SRC_PATH='$source_path'" >> config.mak
+fi
+echo "SRC_PATH=$source_path" >> config.mak
+echo "BUILD_ROOT=$PWD" >> config.mak
+
+if test "$amr" = "yes" ; then
+  echo "#define AMR 1" >> $TMPH
+  echo "AMR=yes" >> config.mak
 fi
 
 if test "$amr_wb" = "yes" ; then
@@ -1798,45 +2015,44 @@ if test "$amr_wb" = "yes" ; then
   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"
-  echo
 fi
 
 if test "$amr_nb" = "yes" ; then
   echo "#define AMR_NB 1" >> $TMPH
   echo "AMR_NB=yes" >> config.mak
   echo
+  echo "AMR NB FLOAT NOTICE ! Make sure you have downloaded TS26.104"
+  echo "REL-5 V5.1.0 from "
+  echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip"
+  echo "and extracted the source to libavcodec/amr_float"
+  echo "If you try this on alpha, you may need to change Word32 to int in amr/typedef.h"
+fi
+
 if test "$amr_nb_fixed" = "yes" ; then
-  echo "AMR_NB_FIXED=yes" >> config.mak
   echo "#define AMR_NB_FIXED 1" >> $TMPH
+  echo "AMR_NB_FIXED=yes" >> config.mak
+  echo
   echo "AMR NB FIXED POINT NOTICE! Make sure you have downloaded TS26.073 "
   echo "REL-5 version 5.1.0 from "
-  echo "http://www.3gpp.org/ftp/Specs/latest/Rel-5/26_series/26073-5??.zip"
+  echo "http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip"
   echo "and extracted src to libavcodec/amr"
   echo "You must also add -DMMS_IO and remove -pedantic-errors to/from CFLAGS in libavcodec/amr/makefile."
   echo "i.e. CFLAGS = -Wall -I. \$(CFLAGS_\$(MODE)) -D\$(VAD) -DMMS_IO"
-  echo
-else
-  echo "AMR NB FLOAT NOTICE ! Make sure you have downloaded TS26.104"
-  echo "REL-5 V5.1.0 from "
-  echo "http://www.3gpp.org/ftp/Specs/latest/Rel-5/26_series/26104-5??.zip"
-  echo "and extracted the source to libavcodec/amr_float"
-  echo "and if u try this on an alpha, u may need to change Word32 to int in amr/typedef.h"
-  echo
 fi
 
 if test "$amr_if2" = "yes" ; then
   echo "AMR_CFLAGS=-DIF2=1" >> config.mak
 fi
 
-fi
 
 for codec in $CODEC_LIST ; do
     echo "#define CONFIG_`echo $codec | tr a-z A-Z` 1" >> $TMPH
     echo "CONFIG_`echo $codec | tr a-z A-Z`=yes" >> config.mak
 done
 
+# Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
 diff $TMPH config.h >/dev/null 2>&1
-if test $? -ne 0 ; then
+if test "$?" != "0" ; then
         mv -f $TMPH config.h
 else
         echo "config.h is unchanged"
@@ -1959,8 +2175,8 @@ EOF
 cat <<EOF >libpostproc-uninstalled.pc
 prefix=
 exec_prefix=
-libdir=\${pcfiledir}/libavcodec/libpostproc
-includedir=\${pcfiledir}/libavcodec/libpostproc
+libdir=\${pcfiledir}/libpostproc
+includedir=\${pcfiledir}/libpostproc
 
 Name: libpostproc
 Description: FFmpeg post processing library