]> git.sesse.net Git - ffmpeg/blobdiff - configure
cosmetics: Group all external library decoders and encoders together.
[ffmpeg] / configure
index ad113fe6c8f0a4807b8dad151428d2fa92bb0a15..568e66ab71d1b9172b5b765c0afa78e5ba5a5f12 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,4 +1,4 @@
-,#!/bin/sh
+#!/bin/sh
 #
 # FFmpeg configure script
 #
@@ -62,8 +62,6 @@ show_help(){
   echo "  --shlibdir=DIR           install shared 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-mingw32         enable MinGW native/cross Windows compile"
-  echo "  --enable-mingwce         enable MinGW native/cross WinCE compile"
   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]"
@@ -100,10 +98,8 @@ show_help(){
   echo "  --enable-x264            enable H.264 encoding via x264 [default=no]"
   echo "  --enable-xvid            enable Xvid encoding via xvidcore,"
   echo "                           native MPEG-4/Xvid encoder exists [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-amr-nb          enable amr-nb floating point audio codec"
+  echo "  --enable-amr-wb          enable amr-wb floating point audio codec"
   echo ""
   echo "Advanced options (experts only):"
   echo "  --source-path=PATH       path to source code [$source_path]"
@@ -139,7 +135,6 @@ show_help(){
   echo "  --disable-debug          disable debugging symbols"
   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-ffmpeg         disable ffmpeg build"
   echo "  --disable-ffserver       disable ffserver build"
   echo "  --disable-ffplay         disable ffplay build"
@@ -160,6 +155,9 @@ show_help(){
   echo "  --enable-parser=NAME     enables parser NAME"
   echo "  --disable-parser=NAME    disables parser NAME"
   echo "  --disable-parsers        disables all parsers"
+  echo "  --enable-protocol=NAME   enables protocol NAME"
+  echo "  --disable-protocol=NAME  disables protocol NAME"
+  echo "  --disable-protocols      disables all protocols"
   echo
   echo "Developer options (useful when working on FFmpeg itself):"
   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
@@ -213,6 +211,10 @@ toupper(){
     echo "$@" | tr '[a-z]' '[A-Z]'
 }
 
+tolower(){
+    echo "$@" | tr '[A-Z]' '[a-z]'
+}
+
 set_all(){
     value=$1
     shift
@@ -435,6 +437,26 @@ int main(){
 EOF
 }
 
+check_func2(){
+    log check_func2 "$@"
+    headers=$1
+    func=$2
+    shift 2
+    disable $func
+    incs=""
+    for hdr in $headers; do
+        incs="$incs
+#include <$hdr>"
+    done
+    check_ld "$@" <<EOF && enable $func
+$incs
+int main(){
+    (void) $func;
+    return 0;
+}
+EOF
+}
+
 check_lib(){
     log check_lib "$@"
     header="$1"
@@ -447,10 +469,48 @@ check_lib(){
     return $err
 }
 
+check_lib2(){
+    log check_lib2 "$@"
+    headers="$1"
+    func="$2"
+    shift 2
+    temp_extralibs "$@"
+    check_func2 "$headers" $func && add_extralibs "$@"
+    err=$?
+    restore_flags
+    return $err
+}
+
 check_exec(){
     check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
 }
 
+check_exec_crash(){
+    code=`cat`
+
+    # exit() is not async signal safe.  _Exit (C99) and _exit (POSIX)
+    # are safe but may not be available everywhere.  Thus we use
+    # raise(SIGTERM) instead.  The check is run in a subshell so we
+    # can redirect the "Terminated" message from the shell.  SIGBUS
+    # is not defined by standard C so it is used conditionally.
+
+    (check_exec "$@") >>$logfile 2>&1 <<EOF
+#include <signal.h>
+static void sighandler(int sig){
+    raise(SIGTERM);
+}
+int main(){
+    signal(SIGILL, sighandler);
+    signal(SIGFPE, sighandler);
+    signal(SIGSEGV, sighandler);
+#ifdef SIGBUS
+    signal(SIGBUS, sighandler);
+#endif
+    { $code }
+}
+EOF
+}
+
 require(){
     name="$1"
     header="$2"
@@ -459,6 +519,31 @@ require(){
     check_lib $header $func "$@" || die "ERROR: $name not found"
 }
 
+require2(){
+    name="$1"
+    headers="$2"
+    func="$3"
+    shift 3
+    check_lib2 "$headers" $func "$@" || die "ERROR: $name not found"
+}
+
+check_foo_config(){
+    cfg=$1
+    pkg=$2
+    header=$3
+    func=$4
+    shift 4
+    disable $cfg
+    check_cmd ${pkg}-config --version
+    err=$?
+    if test "$err" = 0; then
+        temp_cflags `${pkg}-config --cflags`
+        temp_extralibs `${pkg}-config --libs`
+        check_lib "$@" $header $func && enable $cfg
+    fi
+    return $err
+}
+
 apply(){
     file=$1
     shift
@@ -473,7 +558,6 @@ CONFIG_LIST='
     demuxers
     amr
     amr_nb
-    amr_nb_fixed
     amr_wb
     audio_beos
     audio_oss
@@ -510,19 +594,26 @@ CONFIG_LIST='
     vhook
     v4l
     v4l2
-    wince
     x11grab
     x264
     xvid
     zlib
 '
 
-HAVE_LIST='
+THREADS_LIST='
+    beosthreads
+    os2threads
+    pthreads
+    w32threads
+'
+
+HAVE_LIST="
+    $THREADS_LIST
     altivec
     altivec_h
     armv5te
     armv6
-    beosthreads
+    arpa_inet_h
     byteswap_h
     cmov
     dcbzl
@@ -533,7 +624,11 @@ HAVE_LIST='
     dev_video_bktr_ioctl_bt848_h
     dlfcn_h
     dlopen
+    ebp_available
+    ebx_available
+    fast_64bit
     fast_cmov
+    fast_unaligned
     freetype2
     imlib2
     inet_aton
@@ -548,16 +643,13 @@ HAVE_LIST='
     mmi
     mmx
     os2
-    os2threads
-    pthreads
     sdl
     sdl_video_size
     soundcard_h
     sys_poll_h
     sys_soundcard_h
     threads
-    w32threads
-'
+"
 
 TARGET_LIST='
     altivec
@@ -571,18 +663,14 @@ TARGET_LIST='
 CMDLINE_SELECT="
     $CONFIG_LIST
     $TARGET_LIST
-    amr_if2
+    $THREADS_LIST
     debug
     extra_warnings
-    mingw32
     shared
     static
-    beosthreads
-    os2threads
-    pthreads
-    w32threads
 "
 
+dxa_decoder_deps="zlib"
 flashsv_decoder_deps="zlib"
 flashsv_encoder_deps="zlib"
 mpeg_xvmc_decoder_deps="xvmc"
@@ -595,8 +683,8 @@ zmbv_encoder_deps="zlib"
 
 aac_decoder_deps="libfaad"
 mpeg4aac_decoder_deps="libfaad"
-amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
-amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
+amr_nb_decoder_deps="amr_nb"
+amr_nb_encoder_deps="amr_nb"
 amr_wb_decoder_deps="amr_wb"
 amr_wb_encoder_deps="amr_wb"
 dts_decoder_deps="libdts"
@@ -604,11 +692,14 @@ faac_encoder_deps="libfaac"
 liba52_decoder_deps="liba52"
 libgsm_decoder_deps="libgsm"
 libgsm_encoder_deps="libgsm"
+libgsm_ms_decoder_deps="libgsm"
+libgsm_ms_encoder_deps="libgsm"
 libtheora_encoder_deps="libtheora"
 mp3lame_encoder_deps="libmp3lame"
 oggvorbis_decoder_deps="libvorbis"
 oggvorbis_encoder_deps="libvorbis"
 
+ac3_demuxer_deps="ac3_parser"
 audio_demuxer_deps_any="audio_oss audio_beos"
 audio_muxer_deps_any="audio_oss audio_beos"
 dc1394_demuxer_deps="dc1394"
@@ -618,16 +709,21 @@ libnut_demuxer_deps="libnut"
 libnut_muxer_deps="libnut"
 ogg_muxer_deps="libogg"
 redir_demuxer_deps="network"
-rtp_muxer_deps="network"
-rtsp_demuxer_deps="network"
-sdp_demuxer_deps="network"
+rtp_muxer_deps="network mpegts_demuxer"
+rtsp_demuxer_deps="rtp_protocol rtp_muxer"
+sdp_demuxer_deps="rtsp_demuxer"
 v4l2_demuxer_deps="v4l2"
-video_grab_device_demuxer_deps_any="v4l bktr"
+video_grab_bktr_demuxer_deps="bktr"
+video_grab_v4l_demuxer_deps="v4l"
 x11_grab_device_demuxer_deps="x11grab"
 
+http_protocol_deps="network"
+rtp_protocol_deps="udp_protocol"
+tcp_protocol_deps="network"
+udp_protocol_deps="network"
+
 ffplay_deps="sdl"
-ffserver_deps="network protocols muxers"
-network_deps="protocols"
+ffserver_deps="muxers rtp_protocol"
 
 # set temporary file name
 if test ! -z "$TMPDIR" ; then
@@ -674,6 +770,7 @@ powerpc_perf="no"
 mmx="default"
 cmov="no"
 fast_cmov="no"
+fast_unaligned="no"
 armv5te="default"
 armv6="default"
 iwmmxt="default"
@@ -683,11 +780,9 @@ mmi="default"
 bigendian="no"
 
 # OS
-targetos=`uname -s`
+targetos=$(tolower $(uname -s))
 beos_netserver="no"
-mingw32="no"
 os2="no"
-wince="no"
 
 # non-library system interfaces
 audio_beos="default"
@@ -698,9 +793,7 @@ v4l2="yes"
 v4l="yes"
 
 # libraries
-amr_if2="no"
 amr_nb="no"
-amr_nb_fixed="no"
 amr_wb="no"
 avisynth="no"
 dc1394="no"
@@ -796,8 +889,9 @@ DECODER_LIST=`sed -n 's/^[^#]*DEC.*, *\(.*\)).*/\1_decoder/p' "$source_path/liba
 PARSER_LIST=`sed -n 's/^[^#]*PARSER.*, *\(.*\)).*/\1_parser/p' "$source_path/libavcodec/allcodecs.c"`
 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"`
+PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*, *\(.*\)).*/\1_protocol/p' "$source_path/libavformat/allformats.c"`
 
-enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST
+enable $ENCODER_LIST $DECODER_LIST $PARSER_LIST $MUXER_LIST $DEMUXER_LIST $PROTOCOL_LIST
 
 die_unknown(){
     echo "Unknown option \"$1\"."
@@ -846,8 +940,6 @@ for opt do
   ;;
   --cpu=*) cpu="$optval"
   ;;
-  --enable-mingwce) wince="yes"
-  ;;
   --disable-opts) optimize="no"
   ;;
   --enable-small) optimize="small"
@@ -866,10 +958,12 @@ for opt do
   ;;
   --disable-parsers) disable $PARSER_LIST
   ;;
+  --disable-protocols) disable $PROTOCOL_LIST
+  ;;
   --enable-*=*|--disable-*=*)
   eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
   case "$thing" in
-      encoder|decoder|muxer|demuxer|parser) $action ${optval}_${thing} ;;
+      encoder|decoder|muxer|demuxer|parser|protocol) $action ${optval}_${thing} ;;
       *) die_unknown "$opt" ;;
   esac
   ;;
@@ -889,13 +983,16 @@ done
 case "$arch" in
   i386|i486|i586|i686|i86pc|BePC)
     arch="x86_32"
+    enable fast_unaligned
   ;;
   x86_64|amd64)
     arch="x86_32"
+    enable fast_unaligned
     canon_arch="`$cc -dumpmachine | sed -e 's,\([^-]*\)-.*,\1,'`"
     if [ x"$canon_arch" = x"x86_64" -o x"$canon_arch" = x"amd64" ]; then
       if [ -z "`echo $CFLAGS | grep -- -m32`"  ]; then
         arch="x86_64"
+        enable fast_64bit
       fi
     fi
   ;;
@@ -905,15 +1002,21 @@ case "$arch" in
   ;;
   alpha)
     arch="alpha"
+    enable fast_64bit
+  ;;
+  "Power Macintosh"|ppc|powerpc)
+    arch="powerpc"
   ;;
-  "Power Macintosh"|ppc|ppc64|powerpc)
+  ppc64)
     arch="powerpc"
+    enable fast_64bit
   ;;
   mips|mipsel|IP*)
     arch="mips"
   ;;
   sun4u|sparc64)
     arch="sparc64"
+    enable fast_64bit
   ;;
   sparc)
     arch="sparc"
@@ -921,8 +1024,12 @@ case "$arch" in
   sh4)
     arch="sh4"
   ;;
-  parisc|parisc64)
+  parisc)
+    arch="parisc"
+  ;;
+  parisc64)
     arch="parisc"
+    enable fast_64bit
   ;;
   s390|s390x)
     arch="s390"
@@ -932,6 +1039,7 @@ case "$arch" in
   ;;
   ia64)
     arch="ia64"
+    enable fast_64bit
   ;;
   bfin)
     arch="bfin"
@@ -944,7 +1052,7 @@ esac
 # OS specific
 osextralibs="-lm"
 case $targetos in
-  BeOS|Haiku|Zeta)
+  beos|haiku|zeta)
     PREFIX="$HOME/config"
     # helps building libavcodec
     add_cflags "-DPIC -fomit-frame-pointer"
@@ -973,18 +1081,18 @@ case $targetos in
         beos_netserver="yes"
         osextralibs="-lnet"
     fi ;;
-  SunOS)
+  sunos)
     dv1394="no"
     FFLDFLAGS=""
     FFSERVERLDFLAGS=""
     SHFLAGS="-shared -Wl,-h,\$@"
     add_extralibs "-lsocket -lnsl"
     ;;
-  NetBSD)
+  netbsd)
     dv1394="no"
     add_extralibs "-lossaudio"
     ;;
-  OpenBSD)
+  openbsd)
     dv1394="no"
     need_memalign="no"
     LIBOBJFLAGS="\$(PIC)"
@@ -995,22 +1103,21 @@ case $targetos in
     SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
     add_extralibs "-lossaudio"
     ;;
-  FreeBSD)
+  freebsd)
     dv1394="no"
     need_memalign="no"
     add_cflags "-pthread"
     ;;
-  GNU/kFreeBSD)
+  gnu/kfreebsd)
     dv1394="no"
     add_cflags "-pthread"
     ;;
-  BSD/OS)
+  bsd/os)
     dv1394="no"
     osextralibs="-lpoll -lgnugetopt -lm"
     strip="strip -d"
     ;;
-  Darwin)
-    cc="cc"
+  darwin)
     dv1394="no"
     need_memalign="no"
     SHFLAGS="-dynamiclib -Wl,-single_module -Wl,-install_name,\$(shlibdir)/\$(SLIBNAME),-current_version,\$(SPPVERSION),-compatibility_version,\$(SPPVERSION) -Wl,-read_only_relocs,suppress"
@@ -1023,8 +1130,8 @@ case $targetos in
     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
     FFSERVERLDFLAGS=-Wl,-bind_at_load
     ;;
-  MINGW32*)
-    mingw32="yes"
+  mingw32*)
+    targetos=mingw32
     if enabled_all shared static; then
         cat <<EOF
 You can only build one library type at once on MinGW.
@@ -1037,9 +1144,6 @@ EOF
     dv1394="no"
     ffserver="no"
     network="no"
-    if enabled wince; then
-        protocols="no"
-    fi
     SLIBPREF=""
     SLIBSUF=".dll"
     EXESUF=".exe"
@@ -1048,13 +1152,14 @@ EOF
     SLIB_EXTRA_CMD="-lib /machine:i386 /def:\$(@:${SLIBSUF}=.def)"
     SLIB_INSTALL_EXTRA_CMD="-install -m 644 \$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib) \"\$(shlibdir)/\$(SLIBNAME_WITH_MAJOR:\$(SLIBSUF)=.lib)\""
     SHFLAGS="-shared -Wl,--output-def,\$(@:${SLIBSUF}=.def),--out-implib,lib\$(SLIBNAME:\$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc"
+    add_extralibs -lws2_32
     ;;
-  CYGWIN*)
-    targetos=CYGWIN
+  cygwin*)
+    targetos=cygwin
     shlibdir="$bindir"
     dv1394="no"
-    VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
-    VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
+    VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libswscale -L$(BUILD_ROOT)/libavutil'
+    VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lswscale$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
     osextralibs=""
     EXESUF=".exe"
     SLIBPREF="cyg"
@@ -1063,14 +1168,14 @@ EOF
     SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
     SHFLAGS='-shared -Wl,--out-implib=lib$(NAME).dll.a'
     ;;
-  Linux)
+  linux)
     LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
     ;;
-  IRIX*)
-    targetos=IRIX
+  irix*)
+    targetos=irix
     ranlib="echo ignoring ranlib"
     ;;
-  OS/2)
+  os/2)
     TMPE=$TMPE".exe"
     ar="emxomfar -p128"
     ranlib="echo ignoring ranlib"
@@ -1176,30 +1281,17 @@ test -z "$need_memalign" && need_memalign="$mmx"
 
 #Darwin CC versions
 needmdynamicnopic="no"
-if test $targetos = Darwin; then
+if test $targetos = darwin; then
     if test -n "`$cc -v 2>&1 | grep xlc`"; then
         add_cflags "-qpdf2 -qlanglvl=extc99 -qmaxmem=-1 -qarch=auto -qtune=auto"
     else
-        gcc_version="`$cc -v 2>&1 | grep version | cut -d ' ' -f3-`"
-        case "$gcc_version" in
-            *2.95*)
-                add_cflags "-no-cpp-precomp -pipe"
-                ;;
-            *[34].*)
-                add_cflags "-no-cpp-precomp -pipe -force_cpusubtype_ALL -Wno-sign-compare"
-                if disabled shared; then
-                   needmdynamicnopic="yes"
-                fi
-                ;;
-            *)
-                add_cflags "-no-cpp-precomp -pipe"
-                if disabled shared; then
-                   needmdynamicnopic="yes"
-                fi
-                ;;
-        esac
+        add_cflags "-no-cpp-precomp -pipe"
+        check_cflags "-force_cpusubtype_ALL"
+        check_cflags "-Wno-sign-compare"
+        disabled shared && needmdynamicnopic="yes"
     fi
 fi
+enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
 
 disabled optimize || add_cflags -fomit-frame-pointer
 
@@ -1268,6 +1360,10 @@ if test $cpu != "generic"; then
         sparc64)
             add_cflags "-mcpu=v9"
         ;;
+        bf*) #bf531 bf532 bf533 bf561 bf5xx all get this config
+            add_cflags "-mfdpic"
+            add_ldflags "-mfdpic"
+        ;;
         *)
         echo "WARNING: Unknown CPU \"$cpu\", ignored."
         ;;
@@ -1312,6 +1408,27 @@ if test "$?" != 0; then
     die "C compiler test failed."
 fi
 
+if test $arch = "x86_32" -o $arch = "x86_64"; then
+    # check whether EBP is available on x86
+    # As 'i' is stored on the stack, this program will crash
+    # if the base pointer is used to access it because the
+    # base pointer is cleared in the inline assembly code.
+    check_exec_crash <<EOF && enable ebp_available
+    volatile int i=0;
+    asm volatile (
+        "xorl %%ebp, %%ebp"
+    ::: "%ebp");
+    return i;
+EOF
+
+    # check wether EBX is available on x86
+    check_cc <<EOF && enable ebx_available
+int main(){
+    asm volatile ("":::"%ebx");
+}
+EOF
+fi
+
 # check for assembler specific support
 
 if test $arch = "powerpc"; then
@@ -1431,6 +1548,8 @@ fi
 
 check_header byteswap.h
 
+check_header arpa/inet.h
+
 check_func inet_aton
 check_func localtime_r
 enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
@@ -1457,7 +1576,7 @@ if enabled pthreads; then
     fi
 fi
 
-for thread in pthreads beosthreads os2threads w32threads; do
+for thread in $THREADS_LIST; do
     if enabled $thread; then
         if ! disabled thread_type ; then
             die "ERROR: Only one thread type must be selected."
@@ -1467,11 +1586,11 @@ for thread in pthreads beosthreads os2threads w32threads; do
     fi
 done
 
-enabled_any amr_nb amr_nb_fixed amr_wb amr_if2 && enable amr
-enabled_all amr_nb amr_nb_fixed &&
-    die "Only one of amr_nb and amr_nb_fixed may be enabled."
+enabled_any amr_nb amr_wb && enable amr
 
 # these are off by default, so fail if requested and not available
+enabled amr_nb     && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
+enabled amr_wb     && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
 enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
 enabled libdts     && require libdts dts.h dts_init -ldts -lm
 enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
@@ -1484,54 +1603,9 @@ 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 mlib       && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
-
-# Ugh, libfaac uses stdcall calling convention on win32 so we can't use
-# the generic test functions
-if enabled libfaac; 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
-
-# Ugh, recent faad2 versions have renamed all functions and #define the
-# old names in faad.h.  Generic tests won't work.
-if enabled libfaad; 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
-
-# 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
-
+enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
+enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
+enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
 
 # test for lrintf in math.h
 check_exec <<EOF && lrintf=yes || lrintf=no
@@ -1559,9 +1633,9 @@ fi
 
 test "$vhook" = "default" && vhook="$dlopen"
 
-enabled_any vhook liba52bin libfaadbin && add_extralibs $ldl
+enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
 
-if test "$targetos" = "CYGWIN" && enabled static ; then
+if test "$targetos" = cygwin && enabled static ; then
     vhook="no"
     echo
     echo "At the moment vhooks don't work on Cygwin static builds."
@@ -1576,29 +1650,8 @@ fi
 
 enabled audio_beos && add_extralibs "-lmedia -lbe"
 
-enabled mingw32 && add_extralibs -lws2_32
-
-##########################################
-# imlib check
-
-imlib2=no
-if imlib2-config --version >/dev/null 2>&1; then
-    temp_cflags `imlib2-config --cflags`
-    temp_extralibs `imlib2-config --libs`
-    check_lib Imlib2.h imlib_load_font && enable imlib2
-    restore_flags
-fi
-
-##########################################
-# FreeType check
-
-freetype2=no
-if freetype-config --version >/dev/null 2>&1; then
-    temp_cflags `freetype-config --cflags`
-    temp_extralibs `freetype-config --libs`
-    check_lib ft2build.h FT_Init_FreeType && enable freetype2
-    restore_flags
-fi
+check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
+check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
 
 ##########################################
 # SDL check
@@ -1721,8 +1774,7 @@ if enabled gprof; then
     add_ldflags "-p"
 fi
 
-VHOOKCFLAGS="-fPIC $CFLAGS"
-enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
+VHOOKCFLAGS="-fPIC `echo $CFLAGS | sed s/-mdynamic-no-pic//`"
 
 # find if .align arg is power-of-two or not
 if test $asmalign_pot = "unknown"; then
@@ -1730,15 +1782,16 @@ if test $asmalign_pot = "unknown"; then
     echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
 fi
 
-enabled_any $ENCODER_LIST && enable encoders
-enabled_any $DECODER_LIST && enable decoders
-enabled_any $MUXER_LIST   && enable muxers
-enabled_any $DEMUXER_LIST && enable demuxers
+enabled_any $ENCODER_LIST  && enable encoders
+enabled_any $DECODER_LIST  && enable decoders
+enabled_any $MUXER_LIST    && enable muxers
+enabled_any $DEMUXER_LIST  && enable demuxers
+enabled_any $PROTOCOL_LIST && enable protocols
 
-enabled_any pthreads beosthreads os2threads w32threads && enable threads
+enabled_any $THREADS_LIST  && enable threads
 
 check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
-    $DEMUXER_LIST $MUXER_LIST
+    $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
 
 enabled libogg    && append pkg_requires "ogg >= 1.1"
 enabled libtheora && append pkg_requires "theora"
@@ -1812,9 +1865,7 @@ echo "x264 enabled              $x264"
 echo "XviD enabled              $xvid"
 echo "zlib enabled              $zlib"
 echo "AMR-NB float support      $amr_nb"
-echo "AMR-NB fixed support      $amr_nb_fixed"
 echo "AMR-WB float support      $amr_wb"
-echo "AMR-WB IF2 support        $amr_if2"
 if disabled gpl; then
     echo "License: LGPL"
 else
@@ -1865,7 +1916,6 @@ fi
 echo "SLIBPREF=$SLIBPREF" >> config.mak
 echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
 echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
-echo "TARGET_OS=$targetos" >> config.mak
 
 ucarch=`toupper $arch`
 echo "TARGET_ARCH_${ucarch}=yes" >> config.mak
@@ -1938,7 +1988,7 @@ print_config HAVE_   $TMPH config.mak $HAVE_LIST
 print_config CONFIG_ $TMPH config.mak $CONFIG_LIST
 print_config TARGET_ $TMPH config.mak $TARGET_LIST
 
-if test "$targetos" = "Darwin"; then
+if test "$targetos" = darwin; then
   echo "#define CONFIG_DARWIN 1"  >> $TMPH
 fi
 
@@ -1953,10 +2003,6 @@ echo "SRC_PATH=\"$source_path\"" >> config.mak
 echo "SRC_PATH_BARE=$source_path" >> config.mak
 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
 
-if enabled amr_if2; then
-  echo "AMR_CFLAGS=-DIF2=1" >> config.mak
-fi
-
 # Apparently it's not possible to portably echo a backslash.
 if enabled asmalign_pot; then
   printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH
@@ -1965,11 +2011,11 @@ else
 fi
 
 
-for codec in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST; do
-    ucname="`toupper $codec`"
+for part in $DECODER_LIST $ENCODER_LIST $PARSER_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST; do
+    ucname="`toupper $part`"
     config_name="CONFIG_$ucname"
     enabled_name="ENABLE_$ucname"
-    if enabled $codec; then
+    if enabled $part; then
         echo "#define $config_name 1" >> $TMPH
         echo "#define $enabled_name 1" >> $TMPH
         echo "$config_name=yes" >> config.mak
@@ -2000,9 +2046,6 @@ if enabled source_path_used; then
          libavcodec/sparc \
          libavcodec/mlib \
          libavcodec/ppc \
-         libavcodec/amr \
-         libavcodec/amr_float \
-         libavcodec/amrwb_float \
          libpostproc \
          libavutil \
          libswscale \
@@ -2095,10 +2138,10 @@ if enabled pp; then
 fi
 
 if enabled swscaler; then
-  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "-lswscale" "libavutil = $lavu_version" swscale
+  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" -lswscale "libavutil = $lavu_version" ffmpeg
   pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "libavutil = $lavu_version"
 else
-  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" swscale
+  pkgconfig_generate libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version" ffmpeg
   pkgconfig_generate_uninstalled libswscale "FFmpeg image rescaling library" "$sws_version" "" "$pkg_requires libavcodec = $lavc_version"
   apply libswscale.pc sed s/^Libs:.*$/Libs:/
   apply libswscale-uninstalled.pc sed s/^Libs:.*$/Libs:/