]> git.sesse.net Git - ffmpeg/blobdiff - configure
Add a missing break, before av_set_number would always return NULL for
[ffmpeg] / configure
index 1b3b1147a02ebbd9a1f583fa68bb6276de7ad4e0..0bfa18663953ae0a98575c0ba14eb579a6210cc0 100755 (executable)
--- a/configure
+++ b/configure
@@ -61,7 +61,7 @@ show_help(){
   echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
   echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
   echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
   echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
   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 "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
   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 "  --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]"
@@ -78,24 +78,23 @@ show_help(){
   echo
   echo "External library support:"
   echo "  --enable-sunmlib         use Sun medialib [default=no]"
   echo
   echo "External library support:"
   echo "  --enable-sunmlib         use Sun medialib [default=no]"
-  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
-  echo "                           and libraw1394 [default=no]"
   echo "  --enable-liba52          enable GPLed liba52 support [default=no]"
   echo "  --enable-liba52bin       open liba52.so.0 at runtime [default=no]"
   echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
   echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
   echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
   echo "  --enable-liba52          enable GPLed liba52 support [default=no]"
   echo "  --enable-liba52bin       open liba52.so.0 at runtime [default=no]"
   echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
   echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
   echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
+  echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
+  echo "                           and libraw1394 [default=no]"
   echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
   echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
   echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
   echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
-  echo "  --enable-libfaadbin      build FAAD support with runtime linking [default=no]"
+  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [default=no]"
   echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
   echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
   echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
   echo "                           native demuxer exists [default=no]"
   echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
   echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
   echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
   echo "                           native demuxer exists [default=no]"
-  echo "  --enable-libogg          enable Ogg muxing via libogg [default=no]"
   echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
   echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
-  echo "  --enable-libvorbis       enable Vorbis en/decoding via libvorbis,"
-  echo "                           native implementations exist [default=no]"
+  echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
+  echo "                           native implementation exists [default=no]"
   echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
   echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
   echo "                           native MPEG-4/Xvid encoder exists [default=no]"
   echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
   echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
   echo "                           native MPEG-4/Xvid encoder exists [default=no]"
@@ -121,12 +120,6 @@ show_help(){
   echo "  --disable-armv6          disable armv6 usage"
   echo "  --disable-iwmmxt         disable iwmmxt usage"
   echo "  --disable-altivec        disable AltiVec usage"
   echo "  --disable-armv6          disable armv6 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-ipv6           disable ipv6 support [default=no]"
   echo "  --disable-zlib           disable zlib [default=no]"
   echo "  --disable-network        disable network support [default=no]"
   echo "  --disable-ipv6           disable ipv6 support [default=no]"
   echo "  --disable-zlib           disable zlib [default=no]"
@@ -134,6 +127,7 @@ show_help(){
   echo "  --disable-debug          disable debugging symbols"
   echo "  --disable-mpegaudio-hp   faster (but less accurate)"
   echo "                           MPEG audio decoding [default=no]"
   echo "  --disable-debug          disable debugging symbols"
   echo "  --disable-mpegaudio-hp   faster (but less accurate)"
   echo "                           MPEG audio decoding [default=no]"
+  echo "  --enable-gray            enable full grayscale support (slower color)"
   echo "  --disable-ffmpeg         disable ffmpeg build"
   echo "  --disable-ffserver       disable ffserver build"
   echo "  --disable-ffplay         disable ffplay build"
   echo "  --disable-ffmpeg         disable ffmpeg build"
   echo "  --disable-ffserver       disable ffserver build"
   echo "  --disable-ffplay         disable ffplay build"
@@ -160,10 +154,20 @@ show_help(){
   echo "  --enable-protocol=NAME   enables protocol NAME"
   echo "  --disable-protocol=NAME  disables protocol NAME"
   echo "  --disable-protocols      disables all protocols"
   echo "  --enable-protocol=NAME   enables protocol NAME"
   echo "  --disable-protocol=NAME  disables protocol NAME"
   echo "  --disable-protocols      disables all protocols"
+  echo "  --disable-devices        disables all devices"
+  echo "  --list-decoders          show all available decoders"
+  echo "  --list-encoders          show all available encoders"
+  echo "  --list-muxers            show all available muxers"
+  echo "  --list-demuxers          show all available demuxers"
+  echo "  --list-parsers           show all available parsers"
+  echo "  --list-protocols         show all available protocols"
+  echo "  --list-bsfs              show all available bitstream filters"
+  echo "  --list-indevs            show all available input devices"
+  echo "  --list-outdevs           show all available output devices"
   echo
   echo "Developer options (useful when working on FFmpeg itself):"
   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
   echo
   echo "Developer options (useful when working on FFmpeg itself):"
   echo "  --enable-gprof           enable profiling with gprof [$gprof]"
-  echo "  --disable-opts           disable compiler optimizations"
+  echo "  --disable-optimizations  disable compiler optimizations"
   echo "  --enable-extra-warnings  enable more compiler warnings"
   echo "  --disable-strip          disable stripping of executables and shared libraries"
   echo ""
   echo "  --enable-extra-warnings  enable more compiler warnings"
   echo "  --disable-strip          disable stripping of executables and shared libraries"
   echo ""
@@ -177,7 +181,7 @@ log(){
 
 log_file(){
     log BEGIN $1
 
 log_file(){
     log BEGIN $1
-    cat -n $1 >>$logfile
+    pr -n -t $1 >>$logfile
     log END $1
 }
 
     log END $1
 }
 
@@ -284,6 +288,15 @@ disabled_any(){
     done
 }
 
     done
 }
 
+is_in(){
+    value=$1
+    shift
+    for var in $*; do
+        [ $var = $value ] && return 0
+    done
+    return 1
+}
+
 check_deps(){
     for cfg; do
         enabled ${cfg}_checking && die "Circular dependency for $cfg."
 check_deps(){
     for cfg; do
         enabled ${cfg}_checking && die "Circular dependency for $cfg."
@@ -300,6 +313,11 @@ check_deps(){
         enabled_all $dep_all || disable $cfg
         enabled_any $dep_any || disable $cfg
 
         enabled_all $dep_all || disable $cfg
         enabled_any $dep_any || disable $cfg
 
+        if enabled $cfg; then
+            eval dep_extralibs="\$${cfg}_extralibs"
+            test -n "$dep_extralibs" && add_extralibs $dep_extralibs
+        fi
+
         disable ${cfg}_checking
     done
 }
         disable ${cfg}_checking
     done
 }
@@ -310,23 +328,17 @@ print_config(){
     makefile=$3
     shift 3
     for cfg; do
     makefile=$3
     shift 3
     for cfg; do
+        ucname="`toupper $cfg`"
         if enabled $cfg; then
         if enabled $cfg; then
-            ucname="${pfx}`toupper $cfg`"
-            echo "#define ${ucname} 1" >> $header
-            echo "${ucname}=yes" >> $makefile
+            echo "#define ${pfx}${ucname} 1" >> $header
+            echo "#define ENABLE_${ucname} 1" >> $header
+            echo "${pfx}${ucname}=yes" >> $makefile
+        else
+            echo "#define ENABLE_${ucname} 0" >> $header
         fi
     done
 }
 
         fi
     done
 }
 
-print_config_enable(){
-    print_config $@
-    shift 3
-    for cfg; do
-        enabled $cfg && val=1 || val=0
-        echo "#define ENABLE_`toupper $cfg` $val" >> $header
-    done
-}
-
 flags_saved(){
     (: ${SAVE_CFLAGS?}) 2>/dev/null
 }
 flags_saved(){
     (: ${SAVE_CFLAGS?}) 2>/dev/null
 }
@@ -401,10 +413,27 @@ check_cpp(){
     check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
 }
 
     check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
 }
 
+check_asm(){
+    log check_asm "$@"
+    name="$1"
+    asm="$2"
+    shift 2
+    check_cc "$@" <<EOF && enable $name || disable $name
+int foo(void){
+    asm volatile($asm);
+}
+EOF
+}
+
 check_ld(){
     log check_ld "$@"
     check_cc || return
 check_ld(){
     log check_ld "$@"
     check_cc || return
-    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
+    flags=''
+    libs=''
+    for f; do
+        test "${f}" = "${f#-l}" && flags="$flags $f" || libs="$libs $f"
+    done
+    check_cmd $cc $LDFLAGS $flags -o $TMPE $TMPO $extralibs $libs
 }
 
 check_cflags(){
 }
 
 check_cflags(){
@@ -417,7 +446,7 @@ EOF
 check_ldflags(){
     log check_ldflags "$@"
     check_ld "$@" <<EOF && add_ldflags "$@"
 check_ldflags(){
     log check_ldflags "$@"
     check_ld "$@" <<EOF && add_ldflags "$@"
-int main(){
+int main(void){
     return 0;
 }
 EOF
     return 0;
 }
 EOF
@@ -442,7 +471,7 @@ check_func(){
     disable $func
     check_ld "$@" <<EOF && enable $func
 extern int $func();
     disable $func
     check_ld "$@" <<EOF && enable $func
 extern int $func();
-int main(){
+int main(void){
     $func();
 }
 EOF
     $func();
 }
 EOF
@@ -461,7 +490,7 @@ check_func2(){
     done
     check_ld "$@" <<EOF && enable $func
 $incs
     done
     check_ld "$@" <<EOF && enable $func
 $incs
-int main(){
+int main(void){
     (void) $func;
     return 0;
 }
     (void) $func;
     return 0;
 }
@@ -510,7 +539,7 @@ check_exec_crash(){
 static void sighandler(int sig){
     raise(SIGTERM);
 }
 static void sighandler(int sig){
     raise(SIGTERM);
 }
-int main(){
+int main(void){
     signal(SIGILL, sighandler);
     signal(SIGFPE, sighandler);
     signal(SIGSEGV, sighandler);
     signal(SIGILL, sighandler);
     signal(SIGFPE, sighandler);
     signal(SIGSEGV, sighandler);
@@ -561,38 +590,41 @@ apply(){
     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
 }
 
     "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
 }
 
-CONFIG_LIST='
-    encoders
-    decoders
-    parsers
+COMPONENT_LIST="
     bsfs
     bsfs
-    muxers
+    decoders
     demuxers
     demuxers
-    audio_beos
-    audio_oss
+    encoders
+    indevs
+    muxers
+    outdevs
+    parsers
+    protocols
+"
+
+CONFIG_LIST="
+    $COMPONENT_LIST
     avisynth
     beos_netserver
     avisynth
     beos_netserver
-    bktr
-    dc1394
-    dv1394
     ffmpeg
     ffplay
     ffserver
     gpl
     gprof
     ffmpeg
     ffplay
     ffserver
     gpl
     gprof
+    gray
     ipv6
     liba52
     liba52bin
     libamr
     libamr_nb
     libamr_wb
     ipv6
     liba52
     liba52bin
     libamr
     libamr_nb
     libamr_wb
+    libdc1394
     libfaac
     libfaad
     libfaadbin
     libgsm
     libmp3lame
     libnut
     libfaac
     libfaad
     libfaadbin
     libgsm
     libmp3lame
     libnut
-    libogg
     libtheora
     libvorbis
     libx264
     libtheora
     libvorbis
     libx264
@@ -602,14 +634,12 @@ CONFIG_LIST='
     network
     powerpc_perf
     pp
     network
     powerpc_perf
     pp
-    protocols
+    small
     swscaler
     vhook
     swscaler
     vhook
-    v4l
-    v4l2
     x11grab
     zlib
     x11grab
     zlib
-'
+"
 
 THREADS_LIST='
     beosthreads
 
 THREADS_LIST='
     beosthreads
@@ -618,15 +648,44 @@ THREADS_LIST='
     w32threads
 '
 
     w32threads
 '
 
-HAVE_LIST="
-    $THREADS_LIST
+ARCH_LIST='
+    alpha
+    armv4l
+    bfin
+    ia64
+    m68k
+    mips
+    parisc
+    powerpc
+    s390
+    sh4
+    sparc
+    sparc64
+    x86
+    x86_32
+    x86_64
+'
+
+ARCH_EXT_LIST='
     altivec
     altivec
-    altivec_h
     armv5te
     armv6
     armv5te
     armv6
+    iwmmxt
+    mmi
+    mmx
+    ssse3
+    vis
+'
+
+HAVE_LIST="
+    $ARCH_EXT_LIST
+    $THREADS_LIST
+    altivec_h
     arpa_inet_h
     byteswap_h
     arpa_inet_h
     byteswap_h
+    closesocket
     cmov
     cmov
+    conio_h
     dcbzl
     dev_bktr_ioctl_bt848_h
     dev_bktr_ioctl_meteor_h
     dcbzl
     dev_bktr_ioctl_bt848_h
     dev_bktr_ioctl_meteor_h
@@ -640,51 +699,56 @@ HAVE_LIST="
     fast_64bit
     fast_cmov
     fast_unaligned
     fast_64bit
     fast_cmov
     fast_unaligned
+    fork
     freetype2
     freetype2
+    gethrtime
+    GetProcessTimes
+    getrusage
     imlib2
     inet_aton
     imlib2
     inet_aton
-    iwmmxt
-    localtime_r
     lrintf
     machine_ioctl_bt848_h
     machine_ioctl_meteor_h
     malloc_h
     memalign
     lrintf
     machine_ioctl_bt848_h
     machine_ioctl_meteor_h
     malloc_h
     memalign
+    mkstemp
     mlib
     mlib
-    mmi
-    mmx
-    os2
+    ppc64
     sdl
     sdl_video_size
     soundcard_h
     sdl
     sdl_video_size
     soundcard_h
-    ssse3
     sys_poll_h
     sys_soundcard_h
     sys_poll_h
     sys_soundcard_h
+    termios_h
     threads
     threads
+    winsock2_h
 "
 
 "
 
-TARGET_LIST='
-    altivec
-    armv5te
-    armv6
-    iwmmxt
-    mmi
-    mmx
-'
-
 CMDLINE_SELECT="
 CMDLINE_SELECT="
+    $ARCH_EXT_LIST
     $CONFIG_LIST
     $CONFIG_LIST
-    $TARGET_LIST
     $THREADS_LIST
     debug
     extra_warnings
     $THREADS_LIST
     debug
     extra_warnings
+    optimizations
     shared
     static
 "
 
 # code dependency declarations
 
     shared
     static
 "
 
 # code dependency declarations
 
+# architecture extensions
+altivec_deps="powerpc"
+armv5te_deps="armv4l"
+armv6_deps="armv4l"
+iwmmxt_deps="armv4l"
+mmi_deps="mips"
+mmx_deps="x86"
+ssse3_deps="x86"
+vis_deps="sparc"
+
 # decoders / encoders
 # decoders / encoders
+ac3_decoder_deps="gpl"
 dxa_decoder_deps="zlib"
 flashsv_decoder_deps="zlib"
 flashsv_encoder_deps="zlib"
 dxa_decoder_deps="zlib"
 flashsv_decoder_deps="zlib"
 flashsv_encoder_deps="zlib"
@@ -699,6 +763,7 @@ msmpeg4v2_decoder_deps="h263_decoder"
 msmpeg4v3_decoder_deps="h263_decoder"
 png_decoder_deps="zlib"
 png_encoder_deps="zlib"
 msmpeg4v3_decoder_deps="h263_decoder"
 png_decoder_deps="zlib"
 png_encoder_deps="zlib"
+svq3_decoder_deps="h264_parser"
 vc1_decoder_deps="h263_decoder"
 wmv1_decoder_deps="h263_decoder"
 wmv2_decoder_deps="h263_decoder"
 vc1_decoder_deps="h263_decoder"
 wmv1_decoder_deps="h263_decoder"
 wmv2_decoder_deps="h263_decoder"
@@ -707,44 +772,49 @@ zmbv_decoder_deps="zlib"
 zmbv_encoder_deps="zlib"
 
 # external libraries
 zmbv_encoder_deps="zlib"
 
 # external libraries
-mpeg4aac_decoder_deps="libfaad"
 liba52_decoder_deps="liba52"
 liba52_decoder_deps="liba52"
+liba52bin_decoder_extralibs='$ldl'
 libamr_nb_decoder_deps="libamr_nb"
 libamr_nb_encoder_deps="libamr_nb"
 libamr_wb_decoder_deps="libamr_wb"
 libamr_wb_encoder_deps="libamr_wb"
 libfaac_encoder_deps="libfaac"
 libfaad_decoder_deps="libfaad"
 libamr_nb_decoder_deps="libamr_nb"
 libamr_nb_encoder_deps="libamr_nb"
 libamr_wb_decoder_deps="libamr_wb"
 libamr_wb_encoder_deps="libamr_wb"
 libfaac_encoder_deps="libfaac"
 libfaad_decoder_deps="libfaad"
+libfaadbin_decoder_extralibs='$ldl'
 libgsm_decoder_deps="libgsm"
 libgsm_encoder_deps="libgsm"
 libgsm_ms_decoder_deps="libgsm"
 libgsm_ms_encoder_deps="libgsm"
 libmp3lame_encoder_deps="libmp3lame"
 libtheora_encoder_deps="libtheora"
 libgsm_decoder_deps="libgsm"
 libgsm_encoder_deps="libgsm"
 libgsm_ms_decoder_deps="libgsm"
 libgsm_ms_encoder_deps="libgsm"
 libmp3lame_encoder_deps="libmp3lame"
 libtheora_encoder_deps="libtheora"
-libvorbis_decoder_deps="libvorbis"
 libvorbis_encoder_deps="libvorbis"
 libx264_encoder_deps="libx264"
 libxvid_encoder_deps="libxvid"
 libvorbis_encoder_deps="libvorbis"
 libx264_encoder_deps="libx264"
 libxvid_encoder_deps="libxvid"
+mpeg4aac_decoder_deps="libfaad"
 
 # demuxers / muxers
 ac3_demuxer_deps="ac3_parser"
 
 # demuxers / muxers
 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"
+audio_beos_demuxer_deps="audio_beos"
+audio_beos_demuxer_extralibs="-lmedia -lbe"
+audio_beos_muxer_deps="audio_beos"
+audio_beos_muxer_extralibs="-lmedia -lbe"
+avisynth_demuxer_deps="avisynth"
+bktr_demuxer_deps_any="dev_bktr_ioctl_bt848_h machine_ioctl_bt848_h dev_video_bktr_ioctl_bt848_h dev_ic_bt8xx_h"
 dv1394_demuxer_deps="dv1394"
 dv1394_demuxer_deps="dv1394"
-gxf_muxer_deps="gpl"
+libdc1394_demuxer_deps="libdc1394"
 libnut_demuxer_deps="libnut"
 libnut_muxer_deps="libnut"
 mp3_demuxer_deps="mpegaudio_parser"
 libnut_demuxer_deps="libnut"
 libnut_muxer_deps="libnut"
 mp3_demuxer_deps="mpegaudio_parser"
-ogg_muxer_deps="libogg"
+oss_demuxer_deps_any="soundcard_h sys_soundcard_h"
+oss_muxer_deps_any="soundcard_h sys_soundcard_h"
 redir_demuxer_deps="network"
 rtp_muxer_deps="network mpegts_demuxer"
 rtsp_demuxer_deps="rtp_protocol rtp_muxer"
 sdp_demuxer_deps="rtsp_demuxer"
 redir_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_bktr_demuxer_deps="bktr"
-video_grab_v4l_demuxer_deps="v4l"
-x11_grab_device_demuxer_deps="x11grab"
+v4l2_demuxer_deps="linux_videodev2_h"
+v4l_demuxer_deps="linux_videodev_h"
+x11_grab_device_demuxer_deps="x11grab XShmCreateImage"
+x11_grab_device_demuxer_extralibs="-lX11 -lXext"
 
 # protocols
 http_protocol_deps="network"
 
 # protocols
 http_protocol_deps="network"
@@ -754,7 +824,9 @@ udp_protocol_deps="network"
 
 # programs
 ffplay_deps="sdl"
 
 # programs
 ffplay_deps="sdl"
-ffserver_deps="muxers rtp_protocol"
+ffserver_deps="ffm_muxer rtp_protocol rtsp_demuxer"
+ffserver_extralibs='$ldl'
+vhook_extralibs='$ldl'
 
 
 # set temporary file name
 
 
 # set temporary file name
@@ -774,143 +846,77 @@ TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
 
 # default parameters
 
 
 # default parameters
 
-logging="yes"
+enable logging
 logfile="config.err"
 
 # installation paths
 PREFIX="/usr/local"
 logfile="config.err"
 
 # installation paths
 PREFIX="/usr/local"
-libdir='${PREFIX}/lib'
+libdir='$(PREFIX)/lib'
 shlibdir="$libdir"
 shlibdir="$libdir"
-incdir='${PREFIX}/include/ffmpeg'
-mandir='${PREFIX}/man'
-bindir='${PREFIX}/bin'
+incdir='$(PREFIX)/include/ffmpeg'
+mandir='$(PREFIX)/share/man'
+bindir='$(PREFIX)/bin'
 
 # toolchain
 
 # toolchain
-cross_prefix=""
-cross_compile="no"
 cc="gcc"
 ar="ar"
 ranlib="ranlib"
 make="make"
 strip="strip"
 asmalign_pot="unknown"
 cc="gcc"
 ar="ar"
 ranlib="ranlib"
 make="make"
 strip="strip"
 asmalign_pot="unknown"
+ln_s="ln -sf"
 
 # machine
 arch=`uname -m`
 cpu="generic"
 
 # machine
 arch=`uname -m`
 cpu="generic"
-powerpc_perf="no"
-mmx="default"
-cmov="no"
-fast_cmov="no"
-fast_unaligned="no"
-armv5te="default"
-armv6="default"
-iwmmxt="default"
-altivec="default"
-dcbzl="no"
-mmi="default"
-bigendian="no"
 
 # OS
 targetos=$(tolower $(uname -s))
 
 # OS
 targetos=$(tolower $(uname -s))
-beos_netserver="no"
-os2="no"
-
-# non-library system interfaces
-audio_beos="default"
-audio_oss="yes"
-bktr="yes"
-dv1394="yes"
-v4l2="yes"
-v4l="yes"
 
 # libraries
 
 # libraries
-avisynth="no"
-dc1394="no"
-dlfcn_h="no"
-dlopen="no"
-liba52="no"
-liba52bin="no"
-libamr_nb="no"
-libamr_wb="no"
-libfaac="no"
-libfaad2="no"
-libfaad="no"
-libfaadbin="no"
-libgsm="no"
-libmp3lame="no"
-libnut="no"
-libogg="no"
-libtheora="no"
-libvorbis="no"
-libx264="no"
-libxvid="no"
-mlib="no"
-x11grab="no"
-zlib="yes"
+enable zlib
 
 # configurable options
 
 # configurable options
-debug="yes"
-dostrip="yes"
-extra_warnings="no"
-ffmpeg="yes"
-ffplay="yes"
-ffserver="yes"
-gpl="no"
-gprof="no"
-ipv6="yes"
-shared="no"
-static="yes"
-memalign_hack="no"
-mpegaudio_hp="yes"
-network="yes"
-optimize="yes"
-pp="no"
-protocols="yes"
-swscaler="no"
+enable debug
+enable dostrip
+enable ffmpeg
+enable ffplay
+enable ffserver
+enable ipv6
+enable static
+enable mpegaudio_hp
+enable network
+enable optimizations
+enable protocols
 vhook="default"
 
 vhook="default"
 
-# threading
-beosthreads="no"
-os2threads="no"
-pthreads="no"
-w32threads="no"
-thread_type="no"
-
 # build settings
 SHFLAGS='-shared -Wl,-soname,$@'
 VHOOKSHFLAGS='$(SHFLAGS)'
 # build settings
 SHFLAGS='-shared -Wl,-soname,$@'
 VHOOKSHFLAGS='$(SHFLAGS)'
-LIBOBJFLAGS=""
-FFLDFLAGS=-Wl,--warn-common
 LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
 FFSERVERLDFLAGS=-Wl,-E
 LDCONFIG="ldconfig"
 LIBPREF="lib"
 LIBSUF=".a"
 LDLATEFLAGS='-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec -Wl,-rpath-link,\$(BUILD_ROOT)/libavformat -Wl,-rpath-link,\$(BUILD_ROOT)/libavutil'
 FFSERVERLDFLAGS=-Wl,-E
 LDCONFIG="ldconfig"
 LIBPREF="lib"
 LIBSUF=".a"
-LIB='$(LIBPREF)$(NAME)$(LIBSUF)'
+FULLNAME='$(NAME)$(BUILDSUF)'
+LIBNAME='$(LIBPREF)$(FULLNAME)$(LIBSUF)'
 SLIBPREF="lib"
 SLIBSUF=".so"
 SLIBPREF="lib"
 SLIBSUF=".so"
-SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF)'
+SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
 SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
-EXESUF=""
-BUILDSUF=""
-LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(libdir)/$(LIB)"'
+LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
 
 # find source path
 source_path="`dirname \"$0\"`"
 
 # find source path
 source_path="`dirname \"$0\"`"
-source_path_used="yes"
+enable source_path_used
 if test -z "$source_path" -o "$source_path" = "." ; then
     source_path="`pwd`"
 if test -z "$source_path" -o "$source_path" = "." ; then
     source_path="`pwd`"
-    source_path_used="no"
+    disable source_path_used
 else
     source_path="`cd \"$source_path\"; pwd`"
     echo "$source_path" | grep -q '[[:blank:]]' &&
 else
     source_path="`cd \"$source_path\"; pwd`"
     echo "$source_path" | grep -q '[[:blank:]]' &&
-      die "Out of tree builds are impossible with whitespace in source path."
-fi
-
-if test x"$1" = x"-h" -o x"$1" = x"--help" ; then
-    show_help
+        die "Out of tree builds are impossible with whitespace in source path."
 fi
 
 FFMPEG_CONFIGURATION="$@"
 fi
 
 FFMPEG_CONFIGURATION="$@"
@@ -921,9 +927,20 @@ PARSER_LIST=`sed -n 's/^[^#]*PARSER.*(.*, *\(.*\)).*/\1_parser/p' "$source_path/
 BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/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"`
 BSF_LIST=`sed -n 's/^[^#]*BSF.*(.*, *\(.*\)).*/\1_bsf/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"`
+OUTDEV_LIST=`sed -n 's/^[^#]*_MUX.*(.*, *\(.*\)).*/\1_muxer/p' "$source_path/libavdevice/alldevices.c"`
+INDEV_LIST=`sed -n 's/^[^#]*DEMUX.*(.*, *\(.*\)).*/\1_demuxer/p' "$source_path/libavdevice/alldevices.c"`
 PROTOCOL_LIST=`sed -n 's/^[^#]*PROTOCOL.*(.*, *\(.*\)).*/\1_protocol/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 $PROTOCOL_LIST $BSF_LIST
+enable $ARCH_EXT_LIST \
+       $DECODER_LIST \
+       $ENCODER_LIST \
+       $PARSER_LIST \
+       $BSF_LIST \
+       $DEMUXER_LIST \
+       $MUXER_LIST \
+       $PROTOCOL_LIST \
+       $INDEV_LIST \
+       $OUTDEV_LIST \
 
 die_unknown(){
     echo "Unknown option \"$1\"."
 
 die_unknown(){
     echo "Unknown option \"$1\"."
@@ -931,302 +948,317 @@ die_unknown(){
     exit 1
 }
 
     exit 1
 }
 
+show_list() {
+    suffix=_$1
+    shift
+    echo $* | sed s/$suffix//g | tr ' ' '\n' | sort
+    exit 0
+}
+
 for opt do
 for opt do
-  optval="${opt#*=}"
-  case "$opt" in
-  --log)
-  ;;
-  --log=*) logging="$optval"
-  ;;
-  --prefix=*) PREFIX="$optval"
-  ;;
-  --libdir=*) libdir="$optval"
-  ;;
-  --shlibdir=*) shlibdir="$optval"
-  ;;
-  --incdir=*) incdir="$optval"
-  ;;
-  --mandir=*) mandir="$optval"
-  ;;
-  --source-path=*) source_path="$optval"
-  ;;
-  --cross-prefix=*) cross_prefix="$optval"
-  ;;
-  --cross-compile) cross_compile="yes"
-  ;;
-  --target-os=*) targetos="$optval"
-  ;;
-  --cc=*) cc="$optval"
-  ;;
-  --make=*) make="$optval"
-  ;;
-  --extra-cflags=*) add_cflags "$optval"
-  ;;
-  --extra-ldflags=*) add_ldflags "$optval"
-  ;;
-  --extra-libs=*) add_extralibs "$optval"
-  ;;
-  --build-suffix=*) BUILDSUF="$optval"
-  ;;
-  --arch=*) arch="$optval"
-  ;;
-  --cpu=*) cpu="$optval"
-  ;;
-  --disable-opts) optimize="no"
-  ;;
-  --enable-small) optimize="small"
-  ;;
-  --enable-sunmlib) mlib="yes"
-  ;;
-  --disable-strip) dostrip="no"
-  ;;
-  --disable-encoders) disable $ENCODER_LIST
-  ;;
-  --disable-decoders) disable $DECODER_LIST
-  ;;
-  --disable-muxers) disable $MUXER_LIST
-  ;;
-  --disable-demuxers) disable $DEMUXER_LIST
-  ;;
-  --disable-parsers) disable $PARSER_LIST
-  ;;
-  --disable-bsfs) disable $BSF_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|bsf|protocol) $action ${optval}_${thing} ;;
-      *) die_unknown "$opt" ;;
-  esac
-  ;;
-  --enable-?*|--disable-?*)
-  eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
-  echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
-  $action $option
-  ;;
-  --help) show_help
-  ;;
-  *)
-  die_unknown $opt
-  ;;
-  esac
+    optval="${opt#*=}"
+    case "$opt" in
+    --log)
+    ;;
+    --log=*) logging="$optval"
+    ;;
+    --prefix=*) PREFIX="$optval"
+    ;;
+    --libdir=*) libdir="$optval"
+    ;;
+    --shlibdir=*) shlibdir="$optval"
+    ;;
+    --incdir=*) incdir="$optval"
+    ;;
+    --mandir=*) mandir="$optval"
+    ;;
+    --source-path=*) source_path="$optval"
+    ;;
+    --cross-prefix=*) cross_prefix="$optval"
+    ;;
+    --cross-compile) enable cross_compile
+    ;;
+    --target-os=*) targetos="$optval"
+    ;;
+    --cc=*) cc="$optval"
+    ;;
+    --make=*) make="$optval"
+    ;;
+    --extra-cflags=*) add_cflags "$optval"
+    ;;
+    --extra-ldflags=*) add_ldflags "$optval"
+    ;;
+    --extra-libs=*) add_extralibs "$optval"
+    ;;
+    --build-suffix=*) BUILDSUF="$optval"
+    ;;
+    --arch=*) arch="$optval"
+    ;;
+    --cpu=*) cpu="$optval"
+    ;;
+    --enable-sunmlib) enable mlib
+    ;;
+    --disable-strip) disable dostrip
+    ;;
+    --disable-encoders) disable $ENCODER_LIST
+    ;;
+    --disable-decoders) disable $DECODER_LIST
+    ;;
+    --disable-muxers) disable $MUXER_LIST
+    ;;
+    --disable-demuxers) disable $DEMUXER_LIST
+    ;;
+    --disable-parsers) disable $PARSER_LIST
+    ;;
+    --disable-bsfs) disable $BSF_LIST
+    ;;
+    --disable-protocols) disable $PROTOCOL_LIST
+    ;;
+    --disable-devices) disable $INDEV_LIST $OUTDEV_LIST
+    ;;
+    --enable-*=*|--disable-*=*)
+    eval `echo "$opt" | sed 's/=/-/;s/--/action=/;s/-/ thing=/;s/-/ name=/'`
+    case "$thing" in
+        encoder|decoder|muxer|demuxer|parser|bsf|protocol) $action ${optval}_${thing} ;;
+        *) die_unknown "$opt" ;;
+    esac
+    ;;
+    --enable-?*|--disable-?*)
+    eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
+    echo "$CMDLINE_SELECT" | grep -q "^ *$option\$" || die_unknown $opt
+    $action $option
+    ;;
+    --list-*)
+        NAME="${opt#--list-}"
+        is_in $NAME $COMPONENT_LIST || die_unknown $opt
+        NAME=${NAME%s}
+        eval show_list $NAME \$$(toupper $NAME)_LIST
+    ;;
+    --help|-h) show_help
+    ;;
+    *)
+    die_unknown $opt
+    ;;
+    esac
 done
 
 case "$arch" in
 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"
+    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
+    ;;
+    # armv4l is a subset of armv[567]*l
+    arm|armv[4567]*l)
+        arch="armv4l"
+    ;;
+    alpha)
+        arch="alpha"
         enable fast_64bit
         enable fast_64bit
-      fi
-    fi
-  ;;
-  # armv4l is a subset of armv[567]*l
-  arm|armv[4567]*l)
-    arch="armv4l"
-  ;;
-  alpha)
-    arch="alpha"
-    enable fast_64bit
-  ;;
-  "Power Macintosh"|ppc|powerpc)
-    arch="powerpc"
-  ;;
-  ppc64)
-    arch="powerpc"
-    enable fast_64bit
-  ;;
-  mips|mipsel|IP*)
-    arch="mips"
-  ;;
-  sun4u|sparc64)
-    arch="sparc64"
-    enable fast_64bit
-  ;;
-  sparc)
-    arch="sparc"
-  ;;
-  sh4)
-    arch="sh4"
-  ;;
-  parisc)
-    arch="parisc"
-  ;;
-  parisc64)
-    arch="parisc"
-    enable fast_64bit
-  ;;
-  s390|s390x)
-    arch="s390"
-  ;;
-  m68k)
-    arch="m68k"
-  ;;
-  ia64)
-    arch="ia64"
-    enable fast_64bit
-  ;;
-  bfin)
-    arch="bfin"
-  ;;
-  *)
-    arch="unknown"
-  ;;
-esac
-
-# OS specific
-osextralibs="-lm"
-case $targetos in
-  beos|haiku|zeta)
-    PREFIX="$HOME/config"
-    # helps building libavcodec
-    add_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
-      2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
-        mmx="no"
-        ;;
-      *20010315*) echo "BeBits gcc"
-        add_cflags "-fno-expensive-optimizations"
-        ;;
-    esac
-    LDCONFIG="echo ignoring ldconfig"
-    SHFLAGS=-nostart
-    # disable Linux things
-    dv1394="no"
-    # enable BeOS things
-    disabled audio_beos || enable_audio_beos
-    # no need for libm, but the inet stuff
-    # Check for BONE
-    # XXX: actually should check for NOT net_server
-    if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
-        osextralibs="-lbind -lsocket"
-    else
-        beos_netserver="yes"
-        osextralibs="-lnet"
-    fi ;;
-  sunos)
-    dv1394="no"
-    FFLDFLAGS=""
-    FFSERVERLDFLAGS=""
-    SHFLAGS="-shared -Wl,-h,\$@"
-    add_extralibs "-lsocket -lnsl"
     ;;
     ;;
-  netbsd)
-    dv1394="no"
-    add_extralibs "-lossaudio"
+    "Power Macintosh"|ppc|powerpc)
+        arch="powerpc"
     ;;
     ;;
-  openbsd)
-    dv1394="no"
-    need_memalign="no"
-    LIBOBJFLAGS="\$(PIC)"
-    LDCONFIG="ldconfig -m \$(shlibdir)"
-    SHFLAGS='-shared'
-    SLIBNAME='$(SLIBPREF)$(NAME)$(SLIBSUF).$(LIBVERSION)'
-    SLIBNAME_WITH_VERSION='$(SLIBNAME)'
-    SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
-    add_extralibs "-lossaudio"
+    ppc64)
+        arch="powerpc"
+        enable fast_64bit
     ;;
     ;;
-  freebsd)
-    dv1394="no"
-    need_memalign="no"
-    add_cflags "-pthread"
+    mips|mipsel|IP*)
+        arch="mips"
     ;;
     ;;
-  gnu/kfreebsd)
-    dv1394="no"
-    add_cflags "-pthread"
+    sun4u|sparc64)
+        arch="sparc64"
+        enable fast_64bit
     ;;
     ;;
-  bsd/os)
-    dv1394="no"
-    osextralibs="-lpoll -lgnugetopt -lm"
-    strip="strip -d"
+    sparc)
+        arch="sparc"
     ;;
     ;;
-  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"
-    VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(shlibdir)/vhook/$@'
-    osextralibs=""
-    strip="strip -x"
-    FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
-    SLIBSUF=".dylib"
-    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME).$(LIBVERSION)$(SLIBSUF)'
-    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME).$(LIBMAJOR)$(SLIBSUF)'
-    FFSERVERLDFLAGS=-Wl,-bind_at_load
+    sh4)
+        arch="sh4"
     ;;
     ;;
-  mingw32*)
-    targetos=mingw32
-    shlibdir="$bindir"
-    dv1394="no"
-    ffserver="no"
-    network="no"
-    SLIBPREF=""
-    SLIBSUF=".dll"
-    EXESUF=".exe"
-    SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
-    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(NAME)-$(LIBMAJOR)$(SLIBSUF)'
-    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 -Wl,--enable-auto-image-base"
-    enabled network && add_extralibs -lws2_32
+    parisc)
+        arch="parisc"
     ;;
     ;;
-  cygwin*)
-    targetos=cygwin
-    shlibdir="$bindir"
-    dv1394="no"
-    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"
-    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 -Wl,--enable-auto-image-base'
+    parisc64)
+        arch="parisc"
+        enable fast_64bit
     ;;
     ;;
-  linux)
-    LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
+    s390|s390x)
+        arch="s390"
     ;;
     ;;
-  irix*)
-    targetos=irix
-    ranlib="echo ignoring ranlib"
+    m68k)
+        arch="m68k"
     ;;
     ;;
-  os/2)
-    TMPE=$TMPE".exe"
-    ar="emxomfar -p128"
-    ranlib="echo ignoring ranlib"
-    strip="echo ignoring strip"
-    add_cflags "-Zomf"
-    FFLDFLAGS="-Zomf -Zstack 16384 -s"
-    SHFLAGS="-Zdll -Zomf"
-    FFSERVERLDFLAGS=""
-    LIBPREF=""
-    LIBSUF=".lib"
-    SLIBPREF=""
-    SLIBSUF=".dll"
-    EXESUF=".exe"
-    osextralibs=""
-    pkg_requires=""
-    dv1394="no"
-    ffserver="no"
-    vhook="no"
-    os2="yes"
+    ia64)
+        arch="ia64"
+        enable fast_64bit
     ;;
     ;;
-  *)
-    targetos="${targetos}-UNKNOWN"
+    bfin)
+        arch="bfin"
+    ;;
+    *)
+        arch="unknown"
     ;;
 esac
 
     ;;
 esac
 
+enable $arch
+enabled_any x86_32 x86_64 && enable x86
+enabled     sparc64       && enable sparc
+
+# OS specific
+case $targetos in
+    beos|haiku|zeta)
+        PREFIX="$HOME/config"
+        # helps building libavcodec
+        add_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
+          2.9-beos-991026*|2.9-beos-000224*) echo "R5/GG gcc"
+            disable mmx
+            ;;
+          *20010315*) echo "BeBits gcc"
+            add_cflags "-fno-expensive-optimizations"
+            ;;
+        esac
+        LDCONFIG="echo ignoring ldconfig"
+        SHFLAGS=-nostart
+        # enable BeOS things
+        enable audio_beos
+        # no need for libm, but the inet stuff
+        # Check for BONE
+        # XXX: actually should check for NOT net_server
+        if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then
+            network_extralibs="-lbind -lsocket"
+        else
+            enable beos_netserver
+            network_extralibs="-lnet"
+        fi ;;
+    sunos)
+        FFSERVERLDFLAGS=""
+        SHFLAGS='-shared -Wl,-h,$@'
+        network_extralibs="-lsocket -lnsl"
+        ;;
+    netbsd)
+        oss_demuxer_extralibs="-lossaudio"
+        oss_muxer_extralibs="-lossaudio"
+        ;;
+    openbsd)
+        disable need_memalign
+        LIBOBJFLAGS='$(PIC)'
+        LDCONFIG='ldconfig -m $(SHLIBDIR)'
+        SHFLAGS='-shared'
+        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
+        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
+        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
+        oss_demuxer_extralibs="-lossaudio"
+        oss_muxer_extralibs="-lossaudio"
+        ;;
+    freebsd)
+        disable need_memalign
+        ;;
+    bsd/os)
+        osextralibs="-lpoll -lgnugetopt"
+        strip="strip -d"
+        ;;
+    darwin)
+        disable need_memalign
+        SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME),-current_version,$(SPPVERSION),-compatibility_version,$(SPPVERSION) -Wl,-read_only_relocs,suppress'
+        VHOOKSHFLAGS='-dynamiclib -Wl,-single_module -flat_namespace -undefined suppress -Wl,-install_name,$(SHLIBDIR)/vhook/$@'
+        strip="strip -x"
+        FFLDFLAGS="-Wl,-dynamic,-search_paths_first"
+        SLIBSUF=".dylib"
+        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME).$(LIBVERSION)$(SLIBSUF)'
+        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME).$(LIBMAJOR)$(SLIBSUF)'
+        FFSERVERLDFLAGS=-Wl,-bind_at_load
+        ;;
+    mingw32*)
+        targetos=mingw32
+        shlibdir="$bindir"
+        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
+        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
+        if enabled swscaler; then
+            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
+            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
+        fi
+        disable ffserver
+        SLIBPREF=""
+        SLIBSUF=".dll"
+        EXESUF=".exe"
+        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
+        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
+        SLIB_EXTRA_CMD='-lib /machine:i386 /def:$(@:$(SLIBSUF)=.def)'
+        SLIB_INSTALL_EXTRA_CMD='-install -m 644 $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.lib) "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
+        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(SHLIBDIR)/$(SLIBNAME:$(SLIBSUF)=.lib)"'
+        SHFLAGS='-shared -Wl,--output-def,$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
+        ;;
+    cygwin*)
+        targetos=cygwin
+        shlibdir="$bindir"
+        VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil'
+        VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)'
+        if enabled swscaler; then
+            VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale"
+            VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)"
+        fi
+        EXESUF=".exe"
+        SLIBPREF="cyg"
+        SLIBSUF=".dll"
+        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
+        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
+        SHFLAGS='-shared -Wl,--enable-auto-image-base'
+        ;;
+    linux)
+        LDLATEFLAGS="-Wl,--as-needed $LDLATEFLAGS"
+        enable dv1394
+        ;;
+    irix*)
+        targetos=irix
+        ranlib="echo ignoring ranlib"
+        ;;
+    os/2*)
+        ar="emxomfar -p256"
+        ranlib="echo ignoring ranlib"
+        strip="lxlite"
+        ln_s="cp -f"
+        add_cflags "-Zomf"
+        EXESUF=".exe"
+        FFLDFLAGS="-Zomf -Zbin-files -Zargs-wild -Zmap"
+        SHFLAGS='$(NAME).def -Zdll -Zomf'
+        FFSERVERLDFLAGS=""
+        LIBSUF="_s.lib"
+        SLIBPREF=""
+        SLIBSUF=".dll"
+        SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)'
+        SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)'
+        SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(NAME).def; \
+          echo PROTMODE >> $(NAME).def; \
+          echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(NAME).def; \
+          echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(NAME).def; \
+          echo EXPORTS >> $(NAME).def; \
+          emxexp -o $(OBJS) >> $(NAME).def'
+        SLIB_EXTRA_CMD='emximp -o $(LIBPREF)$(NAME)_dll.a $(NAME).def; \
+          emximp -o $(LIBPREF)$(NAME)_dll.lib $(NAME).def;'
+        SLIB_INSTALL_EXTRA_CMD='install -m 644 $(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib "$(LIBDIR)"'
+        SLIB_UNINSTALL_EXTRA_CMD='rm -f "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.a "$(LIBDIR)"/$(LIBPREF)$(NAME)_dll.lib'
+        vhook="no"
+        ;;
+
+    *)
+        targetos="${targetos}-UNKNOWN"
+        ;;
+esac
+
 add_extralibs $osextralibs
 
 if ! disabled logging ; then
 add_extralibs $osextralibs
 
 if ! disabled logging ; then
@@ -1240,14 +1272,14 @@ fi
 # Combine FFLDFLAGS and the LDFLAGS environment variable.
 LDFLAGS="$FFLDFLAGS $LDFLAGS"
 
 # Combine FFLDFLAGS and the LDFLAGS environment variable.
 LDFLAGS="$FFLDFLAGS $LDFLAGS"
 
-test -n "$cross_prefix" && cross_compile=yes
+test -n "$cross_prefix" && enable cross_compile
 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
 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 disabled_all static shared; then
+if ! enabled_any static shared; then
     cat <<EOF
 At least one library type must be built.
 Specify --enable-static to build the static libraries or --enable-shared to
     cat <<EOF
 At least one library type must be built.
 Specify --enable-static to build the static libraries or --enable-shared to
@@ -1257,10 +1289,7 @@ EOF
     exit 1;
 fi
 
     exit 1;
 fi
 
-if disabled libogg; then
-    enabled libtheora && die "libogg must be enabled to enable libtheora."
-    enabled libvorbis && die "libogg must be enabled to enable libvorbis."
-fi
+disabled static && LIBNAME=""
 
 if enabled_any libfaad libfaadbin ; then
     if check_header faad.h; then
 
 if enabled_any libfaad libfaadbin ; then
     if check_header faad.h; then
@@ -1269,7 +1298,7 @@ if enabled_any libfaad libfaadbin ; then
 #ifndef FAAD2_VERSION
 ok faad1
 #endif
 #ifndef FAAD2_VERSION
 ok faad1
 #endif
-int main( void ) { return 0; }
+int main(void) { return 0; }
 EOF
         test $? = 0 && enable libfaad2
     else
 EOF
         test $? = 0 && enable libfaad2
     else
@@ -1278,7 +1307,7 @@ EOF
 fi
 
 
 fi
 
 
-if disabled gpl ; then
+if ! enabled gpl; then
     die_gpl_disabled(){
         name=$1
         shift
     die_gpl_disabled(){
         name=$1
         shift
@@ -1293,19 +1322,11 @@ if disabled gpl ; then
     die_gpl_disabled "The software scaler"     swscaler
 fi
 
     die_gpl_disabled "The software scaler"     swscaler
 fi
 
-# compute MMX state
-if test $mmx = "default"; then
-    if test $arch = "x86_32" -o $arch = "x86_64"; then
-        mmx="yes"
-    else
-        mmx="no"
-    fi
-fi
+check_deps $ARCH_EXT_LIST
 
 test -z "$need_memalign" && need_memalign="$mmx"
 
 #Darwin CC versions
 
 test -z "$need_memalign" && need_memalign="$mmx"
 
 #Darwin CC versions
-needmdynamicnopic="no"
 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"
 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"
@@ -1313,24 +1334,13 @@ if test $targetos = darwin; then
         add_cflags "-no-cpp-precomp -pipe"
         check_cflags "-force_cpusubtype_ALL"
         check_cflags "-Wno-sign-compare"
         add_cflags "-no-cpp-precomp -pipe"
         check_cflags "-force_cpusubtype_ALL"
         check_cflags "-Wno-sign-compare"
-        disabled shared && needmdynamicnopic="yes"
+        disabled shared && add_cflags -mdynamic-no-pic
     fi
 fi
     fi
 fi
-enabled needmdynamicnopic && add_cflags -mdynamic-no-pic
-
-disabled optimize || add_cflags -fomit-frame-pointer
 
 
-# Can only do AltiVec on PowerPC
-if test $altivec = "default"; then
-    if test $arch = "powerpc"; then
-        altivec="yes"
-    else
-        altivec="no"
-    fi
-fi
+disabled optimizations || add_cflags -fomit-frame-pointer
 
 # Add processor-specific flags
 
 # Add processor-specific flags
-POWERPCMODE="32bits"
 if test $cpu != "generic"; then
     warn_altivec(){
         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
 if test $cpu != "generic"; then
     warn_altivec(){
         $1 altivec && echo "WARNING: Tuning for $2 but AltiVec $1.";
@@ -1363,29 +1373,29 @@ if test $cpu != "generic"; then
         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
             warn_altivec disabled PPC970
         G5|g5|970|ppc970|PowerPC970|power4*|Power4*)
             add_cflags "-mcpu=970 -mpowerpc-gfxopt -mpowerpc64"
             warn_altivec disabled PPC970
-            POWERPCMODE="64bits"
+            enable ppc64
         ;;
         Cell|CELL|cell)
             add_cflags "-mcpu=cell"
             warn_altivec disabled Cell
         ;;
         Cell|CELL|cell)
             add_cflags "-mcpu=cell"
             warn_altivec disabled Cell
-            POWERPCMODE="64bits"
+            enable ppc64
         ;;
         # targets that do NOT support conditional mov (cmov)
         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
             add_cflags "-march=$cpu"
         ;;
         # targets that do NOT support conditional mov (cmov)
         i[345]86|pentium|pentium-mmx|k6|k6-[23]|winchip-c6|winchip2|c3)
             add_cflags "-march=$cpu"
-            cmov="no"
+            disable cmov
         ;;
         # targets that do support conditional mov (cmov)
         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
             add_cflags "-march=$cpu"
         ;;
         # targets that do support conditional mov (cmov)
         i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64|k8|opteron|athlon-fx|core2)
             add_cflags "-march=$cpu"
-            cmov="yes"
-            fast_cmov="yes"
+            enable cmov
+            enable fast_cmov
         ;;
         # targets that do support conditional mov but on which it's slow
         pentium4|prescott|nocona)
             add_cflags "-march=$cpu"
         ;;
         # targets that do support conditional mov but on which it's slow
         pentium4|prescott|nocona)
             add_cflags "-march=$cpu"
-            cmov="yes"
-            fast_cmov="no"
+            enable cmov
+            disable fast_cmov
         ;;
         sparc64)
             add_cflags "-mcpu=v9"
         ;;
         sparc64)
             add_cflags "-mcpu=v9"
@@ -1394,8 +1404,11 @@ if test $cpu != "generic"; then
             add_cflags "-mfdpic"
             add_ldflags "-mfdpic"
         ;;
             add_cflags "-mfdpic"
             add_ldflags "-mfdpic"
         ;;
+        arm*)
+            add_cflags "-mcpu=$cpu"
+        ;;
         *)
         *)
-        echo "WARNING: Unknown CPU \"$cpu\", ignored."
+            echo "WARNING: Unknown CPU \"$cpu\", ignored."
         ;;
     esac
 fi
         ;;
     esac
 fi
@@ -1425,20 +1438,20 @@ rm $TMPE
 
 # compiler sanity check
 check_exec <<EOF
 
 # compiler sanity check
 check_exec <<EOF
-int main(){
+int main(void){
     return 0;
 }
 EOF
 if test "$?" != 0; then
     echo "$cc is unable to create an executable file."
     return 0;
 }
 EOF
 if test "$?" != 0; then
     echo "$cc is unable to create an executable file."
-    if test -z "$cross_prefix" && disabled cross_compile ; then
+    if test -z "$cross_prefix" && ! enabled cross_compile ; then
         echo "If $cc is a cross-compiler, use the --cross-compile option."
         echo "Only do this if you know what cross compiling means."
     fi
     die "C compiler test failed."
 fi
 
         echo "If $cc is a cross-compiler, use the --cross-compile option."
         echo "Only do this if you know what cross compiling means."
     fi
     die "C compiler test failed."
 fi
 
-if test $arch = "x86_32" -o $arch = "x86_64"; then
+if enabled x86; 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
     # 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
@@ -1452,24 +1465,16 @@ if test $arch = "x86_32" -o $arch = "x86_64"; then
 EOF
 
     # check wether EBX is available on x86
 EOF
 
     # check wether EBX is available on x86
-    check_cc <<EOF && enable ebx_available
-int main(){
-    asm volatile ("":::"%ebx");
-}
-EOF
+    check_asm ebx_available '"":::"%ebx"'
 
     # check whether binutils is new enough to compile SSSE3
 
     # check whether binutils is new enough to compile SSSE3
-    check_cc <<EOF && enable ssse3
-int main(){
-    asm volatile ("pabsw %xmm0, %xmm0");
-}
-EOF
+    enabled ssse3 && check_asm ssse3 '"pabsw %xmm0, %xmm0"'
 fi
 
 # check for assembler specific support
 
 if test $arch = "powerpc"; then
 fi
 
 # check for assembler specific support
 
 if test $arch = "powerpc"; then
-check_cc <<EOF && dcbzl=yes
+check_cc <<EOF && enable dcbzl
 int main(void) {
     register long zero = 0;
     char data[1024];
 int main(void) {
     register long zero = 0;
     char data[1024];
@@ -1482,26 +1487,18 @@ fi
 # check for SIMD availability
 
 # AltiVec flags: The FSF version of GCC differs from the Apple version
 # check for SIMD availability
 
 # AltiVec flags: The FSF version of GCC differs from the Apple version
-if test $arch = "powerpc"; then
-    if enabled altivec; then
-        if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
-            add_cflags "-faltivec"
-        else
-            add_cflags "-maltivec -mabi=altivec"
-        fi
-    fi
-fi
+if enabled altivec; then
+    test -n "`$cc -v 2>&1 | grep version | grep Apple`" &&
+        add_cflags "-faltivec" ||
+        add_cflags "-maltivec -mabi=altivec"
 
 
-check_header altivec.h
+    check_header altivec.h
 
 
-# check if our compiler supports Motorola AltiVec C API
-if enabled altivec; then
-    if enabled altivec_h; then
-        inc_altivec_h="#include <altivec.h>"
-    else
+    # check if our compiler supports Motorola AltiVec C API
+    enabled altivec_h &&
+        inc_altivec_h="#include <altivec.h>" ||
         inc_altivec_h=
         inc_altivec_h=
-    fi
-    check_cc <<EOF || altivec=no
+    check_cc <<EOF || disable altivec
 $inc_altivec_h
 int main(void) {
     vector signed int v1, v2, v3;
 $inc_altivec_h
 int main(void) {
     vector signed int v1, v2, v3;
@@ -1511,85 +1508,49 @@ int main(void) {
 EOF
 fi
 
 EOF
 fi
 
-# check armv5te instructions support
-if test $armv5te = "default" -a $arch = "armv4l"; then
-    armv5te=no
-    check_cc <<EOF && armv5te=yes
-        int main(void) {
-        __asm__ __volatile__ ("qadd r0, r0, r0");
-        }
-EOF
-fi
-
-if test $armv6 = "default" -a $arch = "armv4l"; then
-    check_cc <<EOF && armv6=yes || armv6=no
-int main(void) {
-    __asm__ __volatile__ ("sadd16 r0, r0, r0");
-}
-EOF
-fi
-
-# check iwmmxt support
-if test $iwmmxt = "default" -a $arch = "armv4l"; then
-    iwmmxt=no
-    check_cc <<EOF && iwmmxt=yes
-        int main(void) {
-        __asm__ __volatile__ ("wunpckelub wr6, wr4");
-        }
-EOF
-fi
-
-# mmi only available on mips
-if test $mmi = "default"; then
-    if test $arch = "mips"; then
-        mmi="yes"
-    else
-        mmi="no"
-    fi
-fi
+enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
+enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
+enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
+enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
+enabled vis     && check_asm vis     '"pdist %f0, %f0, %f0"' -mcpu=ultrasparc
 
 
-# check if our compiler supports mmi
-enabled mmi && check_cc <<EOF || mmi="no"
-int main(void) {
-    __asm__ ("lq \$2, 0(\$2)");
-    return 0;
-}
-EOF
+enabled vis && add_cflags "-mcpu=ultrasparc -mtune=ultrasparc"
 
 # ---
 # big/little-endian test
 
 # ---
 # big/little-endian test
-if disabled cross_compile; 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;
-}
+check_cc <<EOF || die "endian test failed"
+unsigned int endian = 'B' << 24 | 'I' << 16 | 'G' << 8 | 'E';
 EOF
 EOF
-else
-    # programs cannot be launched if cross compiling, so make a static guess
-    if test "$arch" = "powerpc" -o "$arch" = "mips" ; then
-        bigendian="yes"
-    fi
-fi
+grep -q BIGE $TMPO && enable bigendian
 
 # ---
 # check availability of some header files
 
 
 # ---
 # check availability of some header files
 
-check_header malloc.h
-check_func memalign
-
-if disabled_all memalign memalign_hack && enabled need_memalign ; then
-    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
+if check_func dlopen; then
+    ldl=
+elif check_func dlopen -ldl; then
+    ldl=-ldl
 fi
 
 fi
 
+check_func  fork
+check_func  gethrtime
+check_func  getrusage
+check_func  inet_aton
+check_func  memalign
+check_func  mkstemp
+check_func2 windows.h GetProcessTimes
+
 check_header byteswap.h
 check_header byteswap.h
+check_header conio.h
+check_header dlfcn.h
+check_header malloc.h
+check_header termios.h
 
 
-check_header arpa/inet.h
+if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
+    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
+fi
 
 
-check_func inet_aton
-check_func localtime_r
-enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no"
+enabled zlib && check_lib zlib.h zlibVersion -lz || disable zlib
 
 # ffserver uses poll(),
 # if it's not found we can emulate it using select().
 
 # ffserver uses poll(),
 # if it's not found we can emulate it using select().
@@ -1615,41 +1576,43 @@ fi
 
 for thread in $THREADS_LIST; do
     if enabled $thread; then
 
 for thread in $THREADS_LIST; do
     if enabled $thread; then
-        if ! disabled thread_type ; then
-            die "ERROR: Only one thread type must be selected."
-        else
+        test -n "$thread_type" &&
+            die "ERROR: Only one thread type must be selected." ||
             thread_type="$thread"
             thread_type="$thread"
-        fi
     fi
 done
 
     fi
 done
 
-enabled_any libamr_nb libamr_wb && enable libamr
-
-# these are off by default, so fail if requested and not available
-enabled liba52     && require liba52 a52dec/a52.h a52_init -la52
-enabled libamr_nb  && require libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
-enabled libamr_wb  && require libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
-enabled libgsm     && require libgsm gsm.h gsm_create -lgsm
-enabled libmp3lame && require LAME lame/lame.h lame_init -lmp3lame -lm
-enabled libtheora  && require libtheora theora/theora.h theora_info_init -ltheora -logg
-enabled libvorbis  && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc -logg
-enabled libogg     && require libogg ogg/ogg.h ogg_sync_init -logg
-enabled libnut     && require libnut libnut.h nut_demuxer_init -lnut
-enabled libx264    && require x264 x264.h x264_encoder_open -lx264
-enabled libxvid    && require Xvid xvid.h xvid_global -lxvidcore
-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
-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
+check_lib math.h sin -lm
 
 # test for lrintf in math.h
 
 # test for lrintf in math.h
-check_exec <<EOF && lrintf=yes || lrintf=no
+check_exec <<EOF && enable lrintf || disable lrintf
 #define _ISOC9X_SOURCE  1
 #include <math.h>
 #define _ISOC9X_SOURCE  1
 #include <math.h>
-int main( void ) { return (lrintf(3.999f) > 0)?0:1; }
+int main(void) { return (lrintf(3.999f) > 0)?0:1; }
 EOF
 
 EOF
 
+enabled_any libamr_nb libamr_wb && enable libamr
+
+# these are off by default, so fail if requested and not available
+enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
+enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
+enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
+enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
+enabled libdc1394  && require  libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394
+enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
+enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
+enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
+enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
+enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
+enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
+enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
+enabled libx264    && require  x264 x264.h x264_encoder_open -lx264
+enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
+enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
+
+# disable the native AC-3 decoder if liba52 is enabled
+enabled liba52 && disable ac3_decoder
+
 _restrict=
 for restrict_keyword in restrict __restrict__ __restrict; do
     check_cc <<EOF && _restrict=$restrict_keyword && break
 _restrict=
 for restrict_keyword in restrict __restrict__ __restrict; do
     check_cc <<EOF && _restrict=$restrict_keyword && break
@@ -1657,24 +1620,10 @@ void foo(char * $restrict_keyword p);
 EOF
 done
 
 EOF
 done
 
-# dlopen/dlfcn.h probing
-
-check_header dlfcn.h
-
-if check_func dlopen; then
-    ldl=
-elif check_func dlopen -ldl; then
-    ldl=-ldl
-fi
-
-check_func fork
-
 test "$vhook" = "default" && vhook="$dlopen"
 
 test "$vhook" = "default" && vhook="$dlopen"
 
-enabled_any vhook liba52bin libfaadbin ffserver && add_extralibs $ldl
-
 if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
 if test "$targetos" = cygwin -o "$targetos" = mingw32 && enabled_all static vhook ; then
-    vhook="no"
+    disable vhook
     echo
     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
     echo "Patches welcome."
     echo
     echo "At the moment vhooks don't work on Cygwin or MinGW static builds."
     echo "Patches welcome."
@@ -1686,16 +1635,14 @@ if enabled vhook; then
     check_ldflags -export-dynamic
 fi
 
     check_ldflags -export-dynamic
 fi
 
-enabled audio_beos && add_extralibs "-lmedia -lbe"
-
 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
 
 ##########################################
 # SDL check
 
 check_foo_config imlib2 imlib2 Imlib2.h imlib_load_font
 check_foo_config freetype2 freetype ft2build.h FT_Init_FreeType
 
 ##########################################
 # SDL check
 
-sdl_too_old=no
-sdl=no
+disable sdl_too_old
+disable sdl
 SDL_CONFIG="${cross_prefix}sdl-config"
 if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
     sdl_cflags=`"${SDL_CONFIG}" --cflags`
 SDL_CONFIG="${cross_prefix}sdl-config"
 if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
     sdl_cflags=`"${SDL_CONFIG}" --cflags`
@@ -1704,9 +1651,9 @@ if "${SDL_CONFIG}" --version >/dev/null 2>&1; then
     if check_lib SDL.h SDL_Init; then
         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
         if test "$_sdlversion" -lt 121 ; then
     if check_lib SDL.h SDL_Init; then
         _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'`
         if test "$_sdlversion" -lt 121 ; then
-            sdl_too_old=yes
+            enable sdl_too_old
         else
         else
-            sdl=yes
+            enable sdl
             check_cc $sdl_cflags <<EOF && enable sdl_video_size
 #include <SDL.h>
 int main(void){
             check_cc $sdl_cflags <<EOF && enable sdl_video_size
 #include <SDL.h>
 int main(void){
@@ -1722,53 +1669,57 @@ fi
 
 texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
 
 
 texi2html -version >/dev/null 2>&1 && enable texi2html || disable texi2html
 
+##########################################
+# Network check
+
+if enabled network; then
+    # Prefer arpa/inet.h over winsock2
+    if check_header arpa/inet.h ; then
+        check_func closesocket
+    elif check_header winsock2.h ; then
+        network_extralibs="-lws2_32"
+        check_func2 winsock2.h closesocket
+    fi
+fi
+
 ##########################################
 # IPv6 check
 
 ##########################################
 # IPv6 check
 
-enabled network && enabled ipv6 && check_ld <<EOF && ipv6=yes || ipv6=no
+enabled network && enabled ipv6 && check_ld <<EOF && enable ipv6 || disable ipv6
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <netdb.h>
 #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);
-  IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
+int main(void) {
+    struct sockaddr_storage saddr;
+    struct ipv6_mreq mreq6;
+    getaddrinfo(0,0,0,0);
+    getnameinfo(0,0,0,0,0,0,0);
+    IN6_IS_ADDR_MULTICAST((const struct in6_addr *)0);
 }
 EOF
 
 }
 EOF
 
-enabled v4l  && check_header linux/videodev.h  || disable v4l
-enabled v4l2 && check_header linux/videodev2.h || disable v4l2
+check_header linux/videodev.h
+check_header linux/videodev2.h
 
 # check for ioctl_meteor.h, ioctl_bt848.h and alternatives
 
 # 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 ||
-    disable bktr
-fi
-
-enabled audio_oss &&
-    check_header sys/soundcard.h ||
-    check_header soundcard.h ||
-    disable audio_oss
-
-# Deal with the x11 frame grabber
+{ 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
+
+check_header sys/soundcard.h
+check_header soundcard.h
+
+# deal with the X11 frame grabber
 enabled x11grab                         &&
 enabled x11grab                         &&
-enabled gpl                             &&
-enabled x11_grab_device_demuxer         &&
 check_header X11/Xlib.h                 &&
 check_header X11/extensions/XShm.h      &&
 check_func XOpenDisplay -lX11           &&
 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
+check_func XShmCreateImage -lX11 -lXext
 
 enabled debug && add_cflags -g
 
 
 enabled debug && add_cflags -g
 
@@ -1783,12 +1734,14 @@ check_cflags -Wno-pointer-sign
 enabled extra_warnings && check_cflags -Winline
 
 # add some linker flags
 enabled extra_warnings && check_cflags -Winline
 
 # add some linker flags
+check_ldflags -Wl,--warn-common
 check_ldflags $LDLATEFLAGS
 check_ldflags $LDLATEFLAGS
+check_ldflags -Wl,-Bsymbolic
 
 
-# not all compilers support -Os
-test "$optimize" = "small" && check_cflags -Os
-
-if enabled optimize; then
+if enabled small; then
+    check_cflags -Os            # not all compilers support -Os
+    optimizations="small"
+elif enabled optimizations; then
     if test -n "`$cc -v 2>&1 | grep xlc`"; then
         add_cflags  "-O5"
         add_ldflags "-O5"
     if test -n "`$cc -v 2>&1 | grep xlc`"; then
         add_cflags  "-O5"
         add_ldflags "-O5"
@@ -1802,7 +1755,7 @@ if enabled shared; then
     # LIBOBJFLAGS may have already been set in the OS configuration
     if test -z "$LIBOBJFLAGS" ; then
         case "$arch" in
     # LIBOBJFLAGS may have already been set in the OS configuration
     if test -z "$LIBOBJFLAGS" ; then
         case "$arch" in
-            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS="\$(PIC)" ;;
+            x86_64|ia64|alpha|sparc*|power*) LIBOBJFLAGS='$(PIC)' ;;
         esac
     fi
 fi
         esac
     fi
 fi
@@ -1812,30 +1765,40 @@ if enabled gprof; then
     add_ldflags "-p"
 fi
 
     add_ldflags "-p"
 fi
 
-VHOOKCFLAGS="-fPIC `echo $CFLAGS | sed s/-mdynamic-no-pic//`"
+VHOOKCFLAGS="-fPIC"
 
 
-# find if .align arg is power-of-two or not
+# Find out if the .align argument is a power of two or not.
 if test $asmalign_pot = "unknown"; then
 if test $asmalign_pot = "unknown"; then
-    asmalign_pot="no"
-    echo 'asm (".align 3");' | check_cc && asmalign_pot="yes"
+    disable asmalign_pot
+    echo 'asm (".align 3");' | check_cc && enable asmalign_pot
 fi
 
 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 $PROTOCOL_LIST && enable protocols
-enabled_any $BSF_LIST      && enable bsfs
-
-enabled_any $THREADS_LIST  && enable threads
-
-check_deps $CONFIG_LIST $HAVE_LIST $DECODER_LIST $ENCODER_LIST $PARSER_LIST \
-    $BSF_LIST $DEMUXER_LIST $MUXER_LIST $PROTOCOL_LIST
-
-enabled libogg    && append pkg_requires "ogg >= 1.1"
+enabled_any $DECODER_LIST      && enable decoders
+enabled_any $ENCODER_LIST      && enable encoders
+enabled_any $BSF_LIST          && enable bsfs
+enabled_any $DEMUXER_LIST      && enable demuxers
+enabled_any $MUXER_LIST        && enable muxers
+enabled_any $INDEV_LIST        && enable demuxers
+enabled_any $OUTDEV_LIST       && enable muxers
+enabled_any $PROTOCOL_LIST     && enable protocols
+
+enabled_any $THREADS_LIST      && enable threads
+
+check_deps $CONFIG_LIST       \
+           $HAVE_LIST         \
+           $DECODER_LIST      \
+           $ENCODER_LIST      \
+           $PARSER_LIST       \
+           $BSF_LIST          \
+           $DEMUXER_LIST      \
+           $MUXER_LIST        \
+           $INDEV_LIST        \
+           $OUTDEV_LIST       \
+           $PROTOCOL_LIST     \
+
+enabled libdc1394 && append pkg_requires "libraw1394"
 enabled libtheora && append pkg_requires "theora"
 enabled libtheora && append pkg_requires "theora"
-enabled libvorbis && append pkg_requires "vorbis vorbisenc"
-enabled dc1394    && append pkg_requires "libraw1394"
+enabled libvorbis && append pkg_requires "vorbisenc"
 
 echo "install prefix            $PREFIX"
 echo "source path               $source_path"
 
 echo "install prefix            $PREFIX"
 echo "source path               $source_path"
@@ -1846,97 +1809,110 @@ echo "ARCH                      $arch ($cpu)"
 if test "$BUILDSUF" != ""; then
     echo "build suffix              $BUILDSUF"
 fi
 if test "$BUILDSUF" != ""; then
     echo "build suffix              $BUILDSUF"
 fi
-echo "big-endian                $bigendian"
+echo "big-endian                ${bigendian-no}"
 if test $arch = "x86_32" -o $arch = "x86_64"; then
 if test $arch = "x86_32" -o $arch = "x86_64"; then
-    echo "MMX enabled               $mmx"
-    echo "CMOV enabled              $cmov"
-    echo "CMOV is fast              $fast_cmov"
+    echo "MMX enabled               ${mmx-no}"
+    echo "CMOV enabled              ${cmov-no}"
+    echo "CMOV is fast              ${fast_cmov-no}"
+    echo "EBX available             ${ebx_available-no}"
+    echo "EBP available             ${ebp_available-no}"
 fi
 if test $arch = "armv4l"; then
 fi
 if test $arch = "armv4l"; then
-    echo "ARMv5TE enabled           $armv5te"
-    echo "ARMv6 enabled             $armv6"
-    echo "IWMMXT enabled            $iwmmxt"
+    echo "ARMv5TE enabled           ${armv5te-no}"
+    echo "ARMv6 enabled             ${armv6-no}"
+    echo "IWMMXT enabled            ${iwmmxt-no}"
 fi
 if test $arch = "mips"; then
 fi
 if test $arch = "mips"; then
-    echo "MMI enabled               $mmi"
+    echo "MMI enabled               ${mmi-no}"
 fi
 if test $arch = "powerpc"; then
 fi
 if test $arch = "powerpc"; then
-    echo "AltiVec enabled           $altivec"
-    echo "dcbzl available           $dcbzl"
+    echo "AltiVec enabled           ${altivec-no}"
+    echo "dcbzl available           ${dcbzl-no}"
 fi
 fi
-echo "gprof enabled             $gprof"
-echo "debug symbols             $debug"
-echo "strip symbols             $dostrip"
-echo "optimize                  $optimize"
-echo "static                    $static"
-echo "shared                    $shared"
-echo "postprocessing support    $pp"
-echo "software scaler enabled   $swscaler"
-echo "video hooking             $vhook"
+echo "gprof enabled             ${gprof-no}"
+echo "debug symbols             ${debug-no}"
+echo "strip symbols             ${dostrip-no}"
+echo "optimizations             ${optimizations-no}"
+echo "static                    ${static-no}"
+echo "shared                    ${shared-no}"
+echo "postprocessing support    ${pp-no}"
+echo "software scaler enabled   ${swscaler-no}"
+echo "video hooking             ${vhook-no}"
 if enabled vhook; then
 if enabled vhook; then
-    echo "Imlib2 support            $imlib2"
-    echo "FreeType support          $freetype2"
+    echo "Imlib2 support            ${imlib2-no}"
+    echo "FreeType support          ${freetype2-no}"
 fi
 fi
-echo "network support           $network"
+echo "network support           ${network-no}"
 if enabled network; then
 if enabled network; then
-    echo "IPv6 support              $ipv6"
+    echo "IPv6 support              ${ipv6-no}"
 fi
 fi
-echo "threading support         $thread_type"
-echo "SDL support               $sdl"
+echo "threading support         ${thread_type-no}"
+echo "SDL support               ${sdl-no}"
 if enabled sdl_too_old; then
     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
 fi
 if enabled sdl_too_old; then
     echo "-> Your SDL version is too old - please upgrade to have FFplay/SDL support."
 fi
-echo "Sun medialib support      $mlib"
-echo "AVISynth enabled          $avisynth"
-echo "liba52 support            $liba52"
-echo "liba52 dlopened           $liba52bin"
-echo "libamr-nb support         $libamr_nb"
-echo "libamr-wb support         $libamr_wb"
-echo "libfaac enabled           $libfaac"
-echo "libfaad enabled           $libfaad"
-echo "faadbin enabled           $libfaadbin"
-echo "libgsm enabled            $libgsm"
-echo "libmp3lame enabled        $libmp3lame"
-echo "libnut enabled            $libnut"
-echo "libogg enabled            $libogg"
-echo "libtheora enabled         $libtheora"
-echo "libvorbis enabled         $libvorbis"
-echo "x264 enabled              $libx264"
-echo "XviD enabled              $libxvid"
-echo "zlib enabled              $zlib"
-if disabled gpl; then
+echo "Sun medialib support      ${mlib-no}"
+echo "AVISynth enabled          ${avisynth-no}"
+echo "liba52 support            ${liba52-no}"
+echo "liba52 dlopened           ${liba52bin-no}"
+echo "libamr-nb support         ${libamr_nb-no}"
+echo "libamr-wb support         ${libamr_wb-no}"
+echo "libdc1394 support         ${libdc1394-no}"
+echo "libfaac enabled           ${libfaac-no}"
+echo "libfaad enabled           ${libfaad-no}"
+echo "libfaad dlopened          ${libfaadbin-no}"
+echo "libgsm enabled            ${libgsm-no}"
+echo "libmp3lame enabled        ${libmp3lame-no}"
+echo "libnut enabled            ${libnut-no}"
+echo "libtheora enabled         ${libtheora-no}"
+echo "libvorbis enabled         ${libvorbis-no}"
+echo "x264 enabled              ${libx264-no}"
+echo "XviD enabled              ${libxvid-no}"
+echo "zlib enabled              ${zlib-no}"
+enabled gpl &&
+    echo "License: GPL" ||
     echo "License: LGPL"
     echo "License: LGPL"
-else
-    echo "License: GPL"
-fi
+
+for type in decoder encoder parser demuxer muxer protocol bsf indev outdev; do
+    echo "Enabled ${type}s:"
+    ucname="\$`toupper $type`_LIST"
+    list="`eval echo $ucname`"
+    partlist=""
+    for part in $list; do
+        enabled $part && partlist="$partlist $part"
+    done
+    partlist=`echo $partlist | sed s/_$type//g | tr ' ' '\n' | sort`
+    echo $partlist
+done
 
 echo "Creating config.mak and config.h..."
 
 echo "# Automatically generated by configure - do not modify!" > config.mak
 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
 
 echo "Creating config.mak and config.h..."
 
 echo "# Automatically generated by configure - do not modify!" > config.mak
 echo "/* Automatically generated by configure - do not modify! */" > $TMPH
+echo "#ifndef FFMPEG_CONFIG_H" >> $TMPH
+echo "#define FFMPEG_CONFIG_H" >> $TMPH
 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
 
 echo "PREFIX=$PREFIX" >> config.mak
 echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH
 
 echo "PREFIX=$PREFIX" >> config.mak
-echo "prefix=\$(DESTDIR)\${PREFIX}" >> config.mak
-echo "libdir=\$(DESTDIR)$libdir" >> config.mak
-echo "shlibdir=\$(DESTDIR)$shlibdir" >> config.mak
-echo "incdir=\$(DESTDIR)$incdir" >> config.mak
-echo "bindir=\$(DESTDIR)$bindir" >> config.mak
-echo "mandir=\$(DESTDIR)$mandir" >> config.mak
+echo "prefix=\$(DESTDIR)\$(PREFIX)" >> config.mak
+echo "LIBDIR=\$(DESTDIR)$libdir" >> config.mak
+echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> 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
 echo "CC=$cc" >> config.mak
 echo "AR=$ar" >> config.mak
 echo "RANLIB=$ranlib" >> config.mak
 echo "MAKE=$make" >> config.mak
 echo "CC=$cc" >> config.mak
 echo "AR=$ar" >> config.mak
 echo "RANLIB=$ranlib" >> config.mak
-if enabled dostrip; then
-    echo "STRIP=$strip" >> config.mak
-else
+echo "LDCONFIG=$LDCONFIG" >> config.mak
+echo "LN_S=$ln_s" >> config.mak
+enabled dostrip &&
+    echo "STRIP=$strip" >> config.mak ||
     echo "STRIP=echo ignoring strip" >> config.mak
     echo "STRIP=echo ignoring strip" >> config.mak
-fi
 
 echo "OPTFLAGS=$CFLAGS" >> config.mak
 echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
 echo "LDFLAGS=$LDFLAGS" >> config.mak
 
 echo "OPTFLAGS=$CFLAGS" >> config.mak
 echo "VHOOKCFLAGS=$VHOOKCFLAGS">>config.mak
 echo "LDFLAGS=$LDFLAGS" >> config.mak
-echo "LDCONFIG=$LDCONFIG" >> config.mak
 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
 echo "SHFLAGS=$SHFLAGS" >> config.mak
 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
 echo "FFSERVERLDFLAGS=$FFSERVERLDFLAGS" >> config.mak
 echo "SHFLAGS=$SHFLAGS" >> config.mak
 echo "VHOOKSHFLAGS=$VHOOKSHFLAGS" >> config.mak
@@ -1944,104 +1920,82 @@ echo "VHOOKLIBS=$VHOOKLIBS" >> config.mak
 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
 echo "BUILD_STATIC=$static" >> config.mak
 echo "BUILDSUF=$BUILDSUF" >> config.mak
 echo "LIBOBJFLAGS=$LIBOBJFLAGS" >> config.mak
 echo "BUILD_STATIC=$static" >> config.mak
 echo "BUILDSUF=$BUILDSUF" >> config.mak
+echo "FULLNAME=$FULLNAME" >> config.mak
 echo "LIBPREF=$LIBPREF" >> config.mak
 echo "LIBPREF=$LIBPREF" >> config.mak
-echo "LIBSUF=\${BUILDSUF}$LIBSUF" >> config.mak
-if enabled static; then
-  echo "LIB=$LIB" >> config.mak
-else # Some Make complain if this variable does not exist.
-  echo "LIB=" >> config.mak
-fi
+echo "LIBSUF=$LIBSUF" >> config.mak
+echo "LIBNAME=$LIBNAME" >> config.mak
 echo "SLIBPREF=$SLIBPREF" >> config.mak
 echo "SLIBPREF=$SLIBPREF" >> config.mak
-echo "SLIBSUF=\${BUILDSUF}$SLIBSUF" >> config.mak
-echo "EXESUF=\${BUILDSUF}$EXESUF" >> config.mak
-
-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
-        ;;
-    sparc64)
-        echo "TARGET_ARCH_SPARC=yes" >> config.mak
-        echo "#define ARCH_SPARC 1" >> $TMPH
-        ;;
-esac
+echo "SLIBSUF=$SLIBSUF" >> config.mak
+echo "EXESUF=$EXESUF" >> config.mak
 
 if enabled bigendian; then
 
 if enabled bigendian; then
-  echo "WORDS_BIGENDIAN=yes" >> config.mak
-  echo "#define WORDS_BIGENDIAN 1" >> $TMPH
+    echo "WORDS_BIGENDIAN=yes" >> config.mak
+    echo "#define WORDS_BIGENDIAN 1" >> $TMPH
 fi
 if enabled mmx; then
 fi
 if enabled mmx; then
-  echo "#define __CPU__ 586" >> $TMPH
+    echo "#define __CPU__ 586" >> $TMPH
 fi
 
 if enabled sdl; then
 fi
 
 if enabled sdl; then
-  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
 fi
 if enabled texi2html; then
 fi
 if enabled texi2html; then
-  echo "BUILD_DOC=yes" >> config.mak
+    echo "BUILD_DOC=yes" >> config.mak
 fi
 
 sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
 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'`
 fi
 
 sws_version=`grep '#define LIBSWSCALE_VERSION ' "$source_path/libswscale/swscale.h" | sed 's/[^0-9\.]//g'`
 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'`
+lavd_version=`grep '#define LIBAVDEVICE_VERSION ' "$source_path/libavdevice/avdevice.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'`
 
 
 
 if enabled shared; then
 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'`
 
 
 
 if enabled shared; then
-  echo "BUILD_SHARED=yes" >> config.mak
-  echo "PIC=-fPIC -DPIC" >> config.mak
-  echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
-  echo "SPPVERSION=$pp_version" >> config.mak
-  echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
-  echo "LAVCVERSION=$lavc_version" >> config.mak
-  echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
-  echo "LAVFVERSION=$lavf_version" >> config.mak
-  echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
-  echo "LAVUVERSION=$lavu_version" >> config.mak
-  echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
-  echo "SWSVERSION=$sws_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
-  echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
-  echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
+    echo "BUILD_SHARED=yes" >> config.mak
+    echo "PIC=-fPIC -DPIC" >> config.mak
+    echo "SPPMAJOR=${pp_version%%.*}" >> config.mak
+    echo "SPPVERSION=$pp_version" >> config.mak
+    echo "LAVCMAJOR=${lavc_version%%.*}" >> config.mak
+    echo "LAVCVERSION=$lavc_version" >> config.mak
+    echo "LAVDMAJOR=${lavd_version%%.*}" >> config.mak
+    echo "LAVDVERSION=$lavd_version" >> config.mak
+    echo "LAVFMAJOR=${lavf_version%%.*}" >> config.mak
+    echo "LAVFVERSION=$lavf_version" >> config.mak
+    echo "LAVUMAJOR=${lavu_version%%.*}" >> config.mak
+    echo "LAVUVERSION=$lavu_version" >> config.mak
+    echo "SWSMAJOR=${sws_version%%.*}" >> config.mak
+    echo "SWSVERSION=$sws_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
+    echo "SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}" >> config.mak
+    echo "SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}" >> config.mak
+    echo "SLIB_INSTALL_EXTRA_CMD=${SLIB_INSTALL_EXTRA_CMD}" >> config.mak
+    echo "SLIB_UNINSTALL_EXTRA_CMD=${SLIB_UNINSTALL_EXTRA_CMD}" >> config.mak
 fi
 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
 echo "EXTRALIBS=$extralibs" >> config.mak
 
 fi
 echo "LIB_INSTALL_EXTRA_CMD=${LIB_INSTALL_EXTRA_CMD}" >> config.mak
 echo "EXTRALIBS=$extralibs" >> config.mak
 
-print_config        HAVE_   $TMPH config.mak $HAVE_LIST
-print_config        TARGET_ $TMPH config.mak $TARGET_LIST
-print_config_enable CONFIG_ $TMPH config.mak $CONFIG_LIST   \
-                                             $DECODER_LIST  \
-                                             $ENCODER_LIST  \
-                                             $PARSER_LIST   \
-                                             $BSF_LIST      \
-                                             $DEMUXER_LIST  \
-                                             $MUXER_LIST    \
-                                             $PROTOCOL_LIST \
-
-if test "$targetos" = darwin; then
-  echo "#define CONFIG_DARWIN 1"  >> $TMPH
-fi
+print_config ARCH_   $TMPH config.mak $ARCH_LIST
+print_config HAVE_   $TMPH config.mak $HAVE_LIST
+print_config CONFIG_ $TMPH config.mak $CONFIG_LIST       \
+                                      $DECODER_LIST      \
+                                      $ENCODER_LIST      \
+                                      $PARSER_LIST       \
+                                      $BSF_LIST          \
+                                      $DEMUXER_LIST      \
+                                      $MUXER_LIST        \
+                                      $PROTOCOL_LIST     \
+                                      $INDEV_LIST        \
+                                      $OUTDEV_LIST       \
 
 echo "#define restrict $_restrict" >> $TMPH
 
 
 echo "#define restrict $_restrict" >> $TMPH
 
-if test "$optimize" = "small"; then
-  echo "#define always_inline"  >> $TMPH
-  echo "#define CONFIG_SMALL 1" >> $TMPH
+if enabled small; then
+    echo "#define av_always_inline"  >> $TMPH
 fi
 
 echo "SRC_PATH=\"$source_path\"" >> config.mak
 fi
 
 echo "SRC_PATH=\"$source_path\"" >> config.mak
@@ -2049,58 +2003,58 @@ echo "SRC_PATH_BARE=$source_path" >> config.mak
 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
 
 # Apparently it's not possible to portably echo a backslash.
 echo "BUILD_ROOT=\"$PWD\"" >> config.mak
 
 # 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
-else
-  printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
-fi
+enabled asmalign_pot &&
+    printf '#define ASMALIGN(ZEROBITS) ".align " #ZEROBITS "\\n\\t"\n' >> $TMPH ||
+    printf '#define ASMALIGN(ZEROBITS) ".align 1<<" #ZEROBITS "\\n\\t"\n' >> $TMPH
+
 
 
+echo "#endif /* FFMPEG_CONFIG_H */" >> $TMPH
 
 # Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
 
 # Do not overwrite config.h if unchanged to avoid superfluous rebuilds.
-if ! cmp -s $TMPH config.h; then
-        mv -f $TMPH config.h
-else
-        echo "config.h is unchanged"
-fi
+cmp -s $TMPH config.h &&
+    echo "config.h is unchanged" ||
+    mv -f $TMPH config.h
 
 rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
 
 # build tree in object directory if source path is different from current one
 if enabled source_path_used; then
     DIRS="\
 
 rm -f $TMPO $TMPC $TMPE $TMPS $TMPH
 
 # build tree in object directory if source path is different from current one
 if enabled source_path_used; then
     DIRS="\
-         doc \
-         libavformat \
-         libavcodec \
-         libavcodec/alpha \
-         libavcodec/armv4l \
-         libavcodec/bfin \
-         libavcodec/i386 \
-         libavcodec/sparc \
-         libavcodec/mlib \
-         libavcodec/ppc \
-         libpostproc \
-         libavutil \
-         libswscale \
-         tests \
-         vhook \
-         "
+        doc               \
+        libavcodec        \
+        libavcodec/alpha  \
+        libavcodec/armv4l \
+        libavcodec/bfin   \
+        libavcodec/i386   \
+        libavcodec/mlib   \
+        libavcodec/ppc    \
+        libavcodec/sh4    \
+        libavcodec/sparc  \
+        libavdevice       \
+        libavformat       \
+        libavutil         \
+        libpostproc       \
+        libswscale        \
+        tests             \
+        tools             \
+        vhook             \
+        "
     FILES="\
     FILES="\
-          Makefile \
-          common.mak \
-          libavformat/Makefile \
-          libavcodec/Makefile \
-          libpostproc/Makefile \
-          libavutil/Makefile \
-          libswscale/Makefile \
-          tests/Makefile \
-          vhook/Makefile \
-          doc/texi2pod.pl \
-          "
+        Makefile             \
+        common.mak           \
+        doc/texi2pod.pl      \
+        libavcodec/Makefile  \
+        libavdevice/Makefile \
+        libavformat/Makefile \
+        libavutil/Makefile   \
+        libpostproc/Makefile \
+        libswscale/Makefile  \
+        "
     for dir in $DIRS ; do
     for dir in $DIRS ; do
-            mkdir -p $dir
+        mkdir -p $dir
     done
     for f in $FILES ; do
     done
     for f in $FILES ; do
-        ln -sf "$source_path/$f" $f
+        $ln_s "$source_path/$f" $f
     done
 fi
 
     done
 fi
 
@@ -2163,17 +2117,19 @@ pkgconfig_generate_uninstalled libavcodec "FFmpeg codec library" "$lavc_version"
 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"
 
 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"
 
+pkgconfig_generate libavdevice "FFmpeg device handling library" "$lavd_version" "-lavdevice $extralibs" "$pkg_requires libavformat = $lavf_version" ffmpeg
+pkgconfig_generate_uninstalled libavdevice "FFmpeg device handling library" "$lavd_version" "$extralibs" "$pkg_requires libavformat = $lavf_version"
 if enabled pp; then
 if enabled pp; then
-  pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
-  pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
+    pkgconfig_generate libpostproc "FFmpeg post processing library" "$pp_version" -lpostproc "" postproc
+    pkgconfig_generate_uninstalled libpostproc "FFmpeg post processing library" "$pp_version"
 fi
 
 if enabled swscaler; then
 fi
 
 if enabled swscaler; then
-  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"
+    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
 else
-  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:/
+    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:/
 fi
 fi