diff --git a/configure b/configure index 7e490cac50..fc1b87d4c4 100755 --- a/configure +++ b/configure @@ -9,6 +9,7 @@ show_help(){ echo echo "Standard options:" echo " --help print this message" + echo " --log log tests and output to config.err" echo " --prefix=PREFIX install in PREFIX [$prefix]" echo " --libdir=DIR install libs in DIR [PREFIX/lib]" echo " --incdir=DIR install includes in DIR [PREFIX/include/ffmpeg]" @@ -96,8 +97,26 @@ show_help(){ exit 1 } +log(){ + echo "$@" >>$logfile +} + +die(){ + echo "$@" + rm -f $TMPC $TMPO $TMPE $TMPS $TMPH + exit 1 +} + +enabled(){ + eval test "\$$1" = "yes" +} + +flags_saved(){ + (: ${SAVE_CFLAGS?}) 2>/dev/null +} + save_flags(){ - (:${SAVE_CFLAGS?}) 2>/dev/null && return + flags_saved && return SAVE_CFLAGS="$CFLAGS" SAVE_LDFLAGS="$LDFLAGS" SAVE_extralibs="$extralibs" @@ -127,38 +146,74 @@ temp_extralibs(){ extralibs="$extralibs $*" } +append(){ + var=$1 + shift + flags_saved && eval "SAVE_$var=\"\$SAVE_$var $*\"" + eval "$var=\"\$$var $*\"" +} + +add_cflags(){ + append CFLAGS "$@" +} + +add_ldflags(){ + append LDFLAGS "$@" +} + +add_extralibs(){ + append extralibs "$@" +} + check_cc(){ + log check_cc "$@" cat >$TMPC - $cc $CFLAGS "$@" -c -o $TMPO $TMPC >/dev/null 2>&1 + log $cc $CFLAGS "$@" -c -o $TMPO $TMPC + $cc $CFLAGS "$@" -c -o $TMPO $TMPC >>$logfile 2>&1 +} + +check_cpp(){ + log check_cpp "$@" + cat >$TMPC + log $cc $CFLAGS "$@" -E -o $TMPO $TMPC + $cc $CFLAGS "$@" -E -o $TMPO $TMPC >>$logfile 2>&1 } check_ld(){ + log check_ld "$@" cat >$TMPC - $cc $CFLAGS $LDFLAGS "$@" -o $TMPE $TMPC $extralibs >/dev/null 2>&1 + log $cc $CFLAGS $LDFLAGS "$@" -o $TMPE $TMPC $extralibs + $cc $CFLAGS $LDFLAGS "$@" -o $TMPE $TMPC $extralibs >>/dev/null 2>&1 } check_cflags(){ - check_cc "$@" < int x; EOF } check_func(){ + log check_func "$@" func=$1 shift check_ld "$@" <$logfile + set >>$logfile +fi # Combine FFLDFLAGS and the LDFLAGS environment variable LDFLAGS="$FFLDFLAGS $LDFLAGS" @@ -926,6 +999,8 @@ if test $tune != "generic"; then esac fi +# check for SIMD availability + # AltiVec flags: The FSF version of GCC differs from the Apple version if test $cpu = "powerpc"; then if test $altivec = "yes"; then @@ -966,14 +1041,37 @@ if test $mmi = "default"; then fi # check if our compiler supports mmi -if test $mmi = "yes"; then - check_cc < +int main(void) { +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2) +return 0; +#else +#error no vector builtins +#endif +} +EOF + +# test for mm3dnow.h +test "$cpu" = "x86_64" && march=k8 || march=athlon +check_cc -march=$march < +int main(void) { +__m64 b1; +b1 = _m_pswapd(b1); +_m_femms(); +return 0; +} +EOF if test "$mingw32" = "yes" -o "$mingwce" = "yes"; then if test "$lshared" = "yes" && test "$lstatic" = "yes" ; then @@ -1003,22 +1101,16 @@ EOF if test "$force_libdir" != yes; then bindir="$prefix"; fi fi +# --- +# big/little-endian test if test -z "$cross_prefix" ; then - # --- - # big/little-endian test - check_ld < int main(int argc, char ** argv){ volatile uint32_t i=0x01234567; return (*((uint8_t*)(&i))) == 0x67; } EOF - - if test $? = 0 ; then - $TMPE && bigendian="yes" - else - echo big/little test failed - fi else # programs cannot be launched if cross compiling, so make a static guess if test "$cpu" = "powerpc" -o "$cpu" = "mips" ; then @@ -1052,32 +1144,36 @@ if check_header malloc.h; then fi if test "$_memalign" = "no" -a "$mmx" = "yes" -a "$memalignhack" != "yes"; then - echo "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack." - exit 1 + die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack." fi check_func localtime_r && localtime_r=yes || localtime_r=no +enabled zlib && check_lib zlib.h zlibVersion -lz || zlib="no" +enabled lzo && enabled gpl && check_lib lzo1x.h lzo_version -llzo || lzo="no" -if test "$zlib" = "yes"; then - temp_extralibs -lz - check_header zlib.h && check_func zlibVersion || zlib="no" - # XXX: more tests needed - runtime test - restore_flags -fi -if test "$zlib" = "yes"; then - extralibs="$extralibs -lz" +# check for some common methods of building with pthread support +# do this before the optional library checks as some of them require pthreads +if enabled pthreads; then + { check_cflags -pthread && check_ldflags -pthread; } || + { check_cflags -pthreads && check_ldflags -pthreads; } || + check_lib pthread.h pthread_create -lpthread || + check_func pthread_create || + die "ERROR: can't find pthreads library" fi -if test "$lzo" = "yes" -a "$gpl" = "yes"; then - temp_extralibs -llzo - check_header lzo1x.h && check_func lzo_version || lzo="no" - restore_flags -else - lzo="no" -fi -if test "$lzo" = "yes"; then - extralibs="$extralibs -llzo" -fi +# these are off by default, so fail if requested and not available +enabled dts && require libdts dts.h dts_init -ldts +enabled libgsm && require libgsm gsm.h gsm_create -lgsm +enabled mp3lame && require LAME lame/lame.h lame_init -lmp3lame +enabled libogg && require libogg ogg/ogg.h ogg_sync_init -logg +enabled vorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbis -lvorbisenc +enabled theora && require libtheora theora/theora.h theora_info_init -ltheora +enabled faac && require libfaac faac.h faacEncOpen -lfaac +enabled faad && require libfaad faad.h faacDecOpen -lfaad +enabled xvid && require XviD xvid.h xvid_global -lxvidcore +enabled x264 && require x264 x264.h x264_encoder_open -lx264 +enabled dc1394 && require libdc1394 libdc1394/dc1394_control.h dc1394_create_handle -ldc1394_control -lraw1394 +enabled sunmlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib # test for lrintf in math.h check_exec < -int main(void) { -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2) -return 0; -#else -#error no vector builtins -#endif -} -EOF - -# test for mm3dnow.h -test "$cpu" = "x86_64" && march=k8 || march=athlon -check_cc -march=$march < -int main(void) { -__m64 b1; -b1 = _m_pswapd(b1); -_m_femms(); -return 0; -} -EOF - -check_cflags -Wdeclaration-after-statement - # dlopen/dlfcn.h probing check_header dlfcn.h && dlfcn=yes @@ -1145,7 +1210,7 @@ if test "$vhook" = "default"; then fi if test "$vhook" = "yes" -o "$a52bin" = "yes" -o "$faadbin" = "yes"; then - extralibs="$extralibs $ldl" + add_extralibs $ldl fi @@ -1209,6 +1274,8 @@ EOF restore_flags fi +enabled sdl || ffplay=no + ########################################## # texi2html check @@ -1220,7 +1287,7 @@ fi ########################################## # IPv6 check -test "$network" = "yes" && check_ld < #include #include @@ -1235,7 +1302,7 @@ int main( void ) { EOF # check for video4linux2 --- V4L2_PIX_FMT_YUV420 -test "$v4l2" = "yes" && check_cc < #include #include @@ -1243,23 +1310,20 @@ int dummy = V4L2_PIX_FMT_YUV420; struct v4l2_buffer dummy1; EOF +enabled debug && add_cflags -g + +# add some useful compiler flags if supported +check_cflags -Wdeclaration-after-statement check_cflags -Wall check_cflags -Wno-switch -if test "$sdl" = "no"; then - ffplay=no -fi +# add some linker flags +check_ldflags '-Wl,--as-needed' '-Wl,-rpath-link,\$(BUILD_ROOT)/libavcodec' '-Wl,-rpath-link,\$(BUILD_ROOT)/libavformat' '-Wl,-rpath-link,\$(BUILD_ROOT)/libavutil' -if test "$debug" = "yes"; then - CFLAGS="-g $CFLAGS" -fi +# not all compilers support -Os +test "$optimize" = "small" && check_cflags -Os -if test "$optimize" = "small"; then -# CFLAGS=${CFLAGS//-O3/-Os} - CFLAGS="$CFLAGS -Os" -fi - -if test "$optimize" = "yes"; then +if enabled optimize; then if test -n "`$cc -v 2>&1 | grep xlc`"; then CFLAGS="$CFLAGS -O5" LDFLAGS="$LDFLAGS -O5" @@ -1394,10 +1458,8 @@ fi # SHCFLAGS is a copy of CFLAGS without -mdynamic-no-pic, used when building # shared modules on OS/X (vhook/Makefile). -SHCFLAGS=$CFLAGS -if test "$needmdynamicnopic" = yes; then - CFLAGS="$CFLAGS -mdynamic-no-pic" -fi +SHCFLAGS="$CFLAGS" +test "$needmdynamicnopic" = yes && add_cflags -mdynamic-no-pic echo "OPTFLAGS=$CFLAGS" >> config.mak echo "SHCFLAGS=$SHCFLAGS">>config.mak @@ -1528,15 +1590,11 @@ fi if test "$sunmlib" = "yes" ; then echo "HAVE_MLIB=yes" >> config.mak echo "#define HAVE_MLIB 1" >> $TMPH - extralibs="$extralibs -lmlib" fi if test "$pthreads" = "yes" ; then echo "HAVE_PTHREADS=yes" >> config.mak echo "#define HAVE_PTHREADS 1" >> $TMPH echo "#define HAVE_THREADS 1" >> $TMPH - if test $targetos != FreeBSD -a $targetos != OpenBSD ; then - extralibs="$extralibs -lpthread" - fi fi if test "$sdl" = "yes" ; then echo "CONFIG_SDL=yes" >> config.mak