Skip to content
Snippets Groups Projects
configure 58.1 KiB
Newer Older
Fabrice Bellard's avatar
Fabrice Bellard committed
#!/bin/sh
# FFmpeg configure script
#
# Copyright (c) 2000, 2001, 2002 Fabrice Bellard
# Copyright (c) 2005-2006 Diego Biurrun
# Copyright (c) 2005-2006 Mans Rullgard
# make sure we are running under a compatible shell
# try to make this part work with most shells

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

unset foo
(: ${foo%%bar}) 2>/dev/null
E1="$?"

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

if test "$E1" != 0 || test "$E2" = 0; then
    echo "Broken shell detected.  Trying alternatives."
    export FF_CONF_EXEC
    if test "0$FF_CONF_EXEC" -lt 1; then
        FF_CONF_EXEC=1
        try_exec bash "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 2; then
        FF_CONF_EXEC=2
        try_exec ksh "$0" "$@"
    fi
    if test "0$FF_CONF_EXEC" -lt 3; then
        FF_CONF_EXEC=3
        try_exec /usr/xpg4/bin/sh "$0" "$@"
    fi
    echo "No compatible shell script interpreter found."
Diego Biurrun's avatar
Diego Biurrun committed
    echo "This configure script requires a POSIX-compatible shell"
    echo "THIS IS NOT A BUG IN FFMPEG, DO NOT REPORT IT AS SUCH."
    echo "Instead, install a working POSIX-compatible shell."
    echo "Disabling this configure test will create a broken FFmpeg."
    if test "$BASH_VERSION" = '2.04.0(1)-release'; then
        echo "This bash version ($BASH_VERSION) is broken on your platform."
        echo "Upgrade to a later version if available."
    fi
show_help(){
  echo "Usage: configure [options]"
  echo "Options: [defaults in brackets after descriptions]"
  echo
  echo "Standard options:"
  echo "  --help                   print this message"
  echo "  --log[=FILE|yes|no]      log tests and output to FILE [config.err]"
  echo "  --prefix=PREFIX          install in PREFIX [$PREFIX]"
  echo "  --libdir=DIR             install libs in DIR [PREFIX/lib]"
  echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
  echo "  --incdir=DIR             install includes in DIR [PREFIX/include/ffmpeg]"
  echo "  --mandir=DIR             install man page in DIR [PREFIX/man]"
  echo "  --enable-mingw32         enable MinGW native/cross Windows compile"
  echo "  --enable-mingwce         enable MinGW native/cross WinCE compile"
  echo "  --enable-static          build static libraries [default=yes]"
  echo "  --disable-static         do not build static libraries [default=no]"
  echo "  --enable-shared          build shared libraries [default=no]"
  echo "  --disable-shared         do not build shared libraries [default=yes]"
Diego Biurrun's avatar
Diego Biurrun committed
  echo "  --enable-pp              enable GPLed postprocessing support [default=no]"
  echo "  --enable-swscaler        software scaler support [default=no]"
  echo "  --enable-sunmlib         use Sun medialib [default=no]"
  echo "  --enable-beosthreads     use BeOS threads [default=no]"
  echo "  --enable-os2threads      use OS/2 threads [default=no]"
  echo "  --enable-pthreads        use pthreads [default=no]"
  echo "  --enable-w32threads      use Win32 threads [default=no]"
  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
  echo "  --enable-dc1394          enable IIDC-1394 grabbing using libdc1394"
  echo "                           and libraw1394 [default=no]"
Diego Biurrun's avatar
Diego Biurrun committed
  echo "  --enable-a52             enable GPLed liba52 support [default=no]"
  echo "  --enable-a52bin          open liba52.so.0 at runtime [default=no]"
  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
Diego Biurrun's avatar
Diego Biurrun committed
  echo "  --enable-dts             enable GPLed libdts support [default=no]"
  echo "  --enable-faac            enable FAAC support via libfaac [default=no]"
  echo "  --enable-faad            enable FAAD support via libfaad [default=no]"
  echo "  --enable-faadbin         build FAAD support with runtime linking [default=no]"
  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
  echo "  --enable-mp3lame         enable MP3 encoding via libmp3lame [default=no]"
  echo "  --enable-libnut          enable NUT support via libnut [default=no]"
  echo "  --enable-libogg          enable Ogg support via libogg [default=no]"
  echo "  --enable-libtheora       enable Theora support via libtheora [default=no]"
Diego Biurrun's avatar
Diego Biurrun committed
  echo "  --enable-vorbis          enable Vorbis support via libvorbis [default=no]"
  echo "  --enable-x264            enable H.264 encoding via x264 [default=no]"
  echo "  --enable-xvid            enable Xvid encoding via xvidcore [default=no]"
Diego Biurrun's avatar
Diego Biurrun committed
  echo "  --enable-amr_nb          enable amr_nb float audio codec"
  echo "  --enable-amr_nb-fixed    use fixed point for amr-nb codec"
  echo "  --enable-amr_wb          enable amr_wb float audio codec"
  echo "  --enable-amr_if2         enable amr_wb IF2 audio codec"
  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
  echo "                           and ffmpeg will be under GPL [default=no]"
  echo ""
  echo "Advanced options (experts only):"
  echo "  --source-path=PATH       path to source code [$source_path]"
  echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
  echo "  --cross-compile          assume a cross-compiler is used"
  echo "  --cc=CC                  use C compiler CC [$cc]"
  echo "  --make=MAKE              use specified make [$make]"
  echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
  echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
  echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
  echo "  --arch=ARCH              select architecture  [$arch]"
  echo "  --cpu=CPU                selects the minimum cpu required (affects
                                   instruction selection, may crash on older CPUs)"
  echo "  --powerpc-perf-enable    enable performance report on PPC"
  echo "                           (requires enabling PMC)"
  echo "  --disable-mmx            disable MMX usage"
  echo "  --disable-armv5te        disable armv5te 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-vhook          disable video hooking support"
  echo "  --enable-gprof           enable profiling with gprof [$gprof]"
  echo "  --disable-debug          disable debugging symbols"
  echo "  --disable-opts           disable compiler optimizations"
  echo "  --enable-extra-warnings  enable more compiler warnings"
  echo "  --disable-mpegaudio-hp   faster (but less accurate)"
  echo "                           MPEG audio decoding [default=no]"
  echo "  --disable-protocols      disable I/O protocols support [default=no]"
  echo "  --disable-ffmpeg         disable ffmpeg build"
  echo "  --disable-ffserver       disable ffserver build"
  echo "  --disable-ffplay         disable ffplay build"
  echo "  --enable-small           optimize for size instead of speed"
  echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
  echo "  --disable-strip          disable stripping of executables and shared libraries"
  echo "  --disable-encoder=NAME   disables encoder NAME"
  echo "  --enable-encoder=NAME    enables encoder NAME"
  echo "  --disable-decoder=NAME   disables decoder NAME"
  echo "  --enable-decoder=NAME    enables decoder NAME"
  echo "  --disable-encoders       disables all encoders"
  echo "  --disable-decoders       disables all decoders"
  echo "  --disable-muxer=NAME     disables muxer NAME"
  echo "  --enable-muxer=NAME      enables muxer NAME"
  echo "  --disable-muxers         disables all muxers"
  echo "  --disable-demuxer=NAME   disables demuxer NAME"
  echo "  --enable-demuxer=NAME    enables demuxer NAME"
  echo "  --disable-demuxers       disables all demuxers"
  echo "  --enable-parser=NAME     enables parser NAME"
  echo "  --disable-parser=NAME    disables parser NAME"
  echo "  --disable-parsers        disables all parsers"
  echo ""
  echo "NOTE: Object files are built at the place where configure is launched."
  exit 1
}
Måns Rullgård's avatar
Måns Rullgård committed
    log BEGIN $1
    cat -n $1 >>$logfile
    log END $1
}

Måns Rullgård's avatar
Måns Rullgård committed
    log "$@"
}

die(){
    echolog "$@"
    cat <<EOF
If you think configure made a mistake, make sure you are using the latest
version from SVN.  If the latest version fails, report the problem to the
ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
EOF
        cat <<EOF
Include the log file "$logfile" produced by configure as this will help
solving the problem.
EOF
    else
cat <<EOF
Rerun configure with logging enabled (do not use --log=no), and include the
log this produces with your report.
EOF
    fi
    rm -f $TMPC $TMPO $TMPE $TMPS $TMPH
    exit 1
# "tr '[a-z]' '[A-Z]'" is a workaround for Solaris tr not grokking "tr a-z A-Z"
toupper(){
    echo "$@" | tr '[a-z]' '[A-Z]'
}

set_all(){
    value=$1
    shift
    for var in $*; do
        eval $var=$value
    done
}

enable(){
    set_all yes $*
}

disable(){
    set_all no $*
}

    eval test "x\$$1" = "xyes"
}

enabled_all(){
    for opt; do
        enabled $opt || return 1
    done
}

enabled_any(){
    for opt; do
        enabled $opt && return 0
    done
}

check_deps(){
    for cfg; do
        eval dep_all="\$${cfg}_deps"
        eval dep_any="\$${cfg}_deps_any"
        enabled_all $dep_all || disable $cfg
        enabled_any $dep_any || disable $cfg
    done
}

print_config(){
    pfx=$1
    header=$2
    makefile=$3
    shift 3
    for cfg; do
        if enabled $cfg; then
            ucname="${pfx}`toupper $cfg`"
            echo "#define ${ucname} 1" >> $header
            echo "${ucname}=yes" >> $makefile
        fi
    done
    SAVE_CFLAGS="$CFLAGS"
    SAVE_LDFLAGS="$LDFLAGS"
    SAVE_extralibs="$extralibs"
}

restore_flags(){
    CFLAGS="$SAVE_CFLAGS"
    LDFLAGS="$SAVE_LDFLAGS"
    extralibs="$SAVE_extralibs"
    unset SAVE_CFLAGS
    unset SAVE_LDFLAGS
    unset SAVE_extralibs
}

temp_cflags(){
    save_flags
    CFLAGS="$CFLAGS $*"
}

temp_ldflags(){
    save_flags
    LDFLAGS="$LDFLAGS $*"
}

temp_extralibs(){
    save_flags
    extralibs="$extralibs $*"
}

append(){
    var=$1
    shift
    flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\""
    eval "$var=\"\$$var $*\""
}

add_cflags(){
    append CFLAGS "$@"
}

add_ldflags(){
    append LDFLAGS "$@"
}

add_extralibs(){
    append extralibs "$@"
}

    log "$@"
    check_cmd $cc $CFLAGS "$@" -c -o $TMPO $TMPC
    check_cmd $cc $CFLAGS "$@" -E -o $TMPO $TMPC
    check_cc || return
    check_cmd $cc $LDFLAGS "$@" -o $TMPE $TMPO $extralibs
    log check_cflags "$@"
    check_cc "$@" <<EOF && add_cflags "$@"
    log check_ldflags "$@"
    check_ld "$@" <<EOF && add_ldflags "$@"
int main(){
    return 0;
}
#include <$header>
int x;
EOF
    var=`echo $header | sed 's/[^A-Za-z0-9_]/_/g'`
    test "$err" = 0 && enable $var || disable $var
    return $err
    func=$1
    shift
    check_ld "$@" <<EOF
extern int $func();
int main(){
    $func();
}
EOF
    err=$?
    test "$err" = 0 && enable $func || disable $func
    return $err
check_lib(){
    log check_lib "$@"
    header="$1"
    func="$2"
    shift 2
    temp_extralibs "$@"
    check_header $header && check_func $func && add_extralibs "$@"
    err=$?
    restore_flags
    return $err
}

    check_ld "$@" && { enabled cross_compile || $TMPE >>$logfile 2>&1; }
}

require(){
    name="$1"
    header="$2"
    func="$3"
    shift 3
    check_lib $header $func "$@" || die "ERROR: $name not found"
apply(){
    file=$1
    shift
    "$@" < "$file" > "$file.tmp" && mv "$file.tmp" "$file" || rm "$file.tmp"
}

CONFIG_LIST='
    encoders
    decoders
    parsers
    muxers
    demuxers
    amr
    amr_nb
    amr_nb_fixed
    amr_wb
    audio_beos
    audio_oss
    avisynth
    beos_netserver
    bktr
    dc1394
    dv1394
    ffmpeg
    ffplay
    ffserver
    gpl
    ipv6
    libtheora
    libvorbis
    memalign_hack
    mpegaudio_hp
    network
    pp
    protocols
    swscaler
    vhook
    video4linux
    video4linux2
    beosthreads
    dev_bktr_ioctl_bt848_h
    dev_bktr_ioctl_meteor_h
    dev_ic_bt8xx_h
    dev_video_meteor_ioctl_meteor_h
    dev_video_bktr_ioctl_bt848_h
    inet_aton
    machine_ioctl_bt848_h
    machine_ioctl_meteor_h
    os2threads
    pthreads
    threads
    w32threads
TARGET_LIST='
    altivec
    armv5te
    cmov
    iwmmxt
    mmi
    mmx
'

flashsv_decoder_deps="zlib"
flashsv_encoder_deps="zlib"
mpeg_xvmc_decoder_deps="xvmc"
png_decoder_deps="zlib"
png_encoder_deps="zlib"
x264_encoder_deps="x264"
xvid_encoder_deps="xvid"
zmbv_decoder_deps="zlib"
zmbv_encoder_deps="zlib"

aac_decoder_deps="libfaad"
mpeg4aac_decoder_deps="libfaad"
ac3_decoder_deps="liba52"
amr_nb_decoder_deps_any="amr_nb amr_nb_fixed"
amr_nb_encoder_deps_any="amr_nb amr_nb_fixed"
amr_wb_decoder_deps="amr_wb"
amr_wb_encoder_deps="amr_wb"
dts_decoder_deps="libdts"
faac_encoder_deps="libfaac"
libgsm_decoder_deps="libgsm"
libgsm_encoder_deps="libgsm"
libtheora_encoder_deps="libtheora"
mp3lame_encoder_deps="libmp3lame"
oggvorbis_decoder_deps="libvorbis"
oggvorbis_encoder_deps="libvorbis"

audio_demuxer_deps_any="audio_oss audio_beos"
audio_muxer_deps_any="audio_oss audio_beos"
dc1394_demuxer_deps="dc1394"
dv1394_demuxer_deps="dv1394"
gxf_muxer_deps="gpl"
nut_muxer_deps="libnut"
ogg_muxer_deps="libogg"
redir_demuxer_deps="network"
rtp_muxer_deps="network"
rtsp_demuxer_deps="network"
sdp_demuxer_deps="network"
v4l2_demuxer_deps="video4linux2"
Aurelien Jacobs's avatar
Aurelien Jacobs committed
video_grab_device_demuxer_deps_any="video4linux bktr"
x11_grab_device_demuxer_deps="x11grab"

Zdenek Kabelac's avatar
Zdenek Kabelac committed
if test ! -z "$TMPDIR" ; then
Zdenek Kabelac's avatar
Zdenek Kabelac committed
elif test ! -z "$TEMPDIR" ; then
Nick Kurshev's avatar
Nick Kurshev committed
else
Loading
Loading full blame...