diff options
author | Måns Rullgård <mans@mansr.com> | 2006-06-01 19:28:41 +0000 |
---|---|---|
committer | Måns Rullgård <mans@mansr.com> | 2006-06-01 19:28:41 +0000 |
commit | dcd479c0339ffc73452d1524cda36bc29463e0e0 (patch) | |
tree | 010e8841b9443faf69b83ec2b8877c19fdbec51b | |
parent | bb05edcf2e35a4f88a3bc952cb887622033d3b62 (diff) | |
download | ffmpeg-dcd479c0339ffc73452d1524cda36bc29463e0e0.tar.gz |
major cleanup of compiler/library tests
Originally committed as revision 5439 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rwxr-xr-x | configure | 385 |
1 files changed, 163 insertions, 222 deletions
@@ -96,6 +96,83 @@ show_help(){ exit 1 } +save_flags(){ + (:${SAVE_CFLAGS?}) 2>/dev/null && return + SAVE_CFLAGS="$CFLAGS" + SAVE_LDFLAGS="$LDFLAGS" + SAVE_extralibs="$extralibs" +} + +restore_flags(){ + CFLAGS="$SAVE_CFLAGS" + LDFLAGS="$SAVE_LDFLAGS" + extralibs="$SAVE_extralibs" + unset SAVE_CFLAGS + unset SAVE_LDFLAGS + unset SAVE_extralibs +} + +temp_cflags(){ + save_flags + CFLAGS="$CFLAGS $*" +} + +temp_ldflags(){ + save_flags + LDFLAGS="$LDFLAGS $*" +} + +temp_extralibs(){ + save_flags + extralibs="$extralibs $*" +} + +check_cc(){ + cat >$TMPC + ${cross_prefix}$cc $CFLAGS "$@" -c -o $TMPO $TMPC >/dev/null 2>&1 +} + +check_ld(){ + cat >$TMPC + ${cross_prefix}$cc $CFLAGS $LDFLAGS "$@" -o $TMPE $TMPC $extralibs >/dev/null 2>&1 +} + +check_cflags(){ + check_cc "$@" <<EOF && CFLAGS="$CFLAGS $*" +int x; +EOF +} + +check_ldflags(){ + check_ld "$@" <<EOF && LDFLAGS="$LDFLAGS $*" +int x; +EOF +} + +check_header(){ + header=$1 + shift + check_cc "$@" <<EOF +#include <$header> +int x; +EOF +} + +check_func(){ + func=$1 + shift + check_ld "$@" <<EOF +extern int $func(); +int main(){ + $func(); +} +EOF +} + +check_exec(){ + check_ld "$@" && (test -z "$cross_prefix" && $TMPE || true) +} + if test x"$1" = x"-h" -o x"$1" = x"--help" ; then show_help fi @@ -691,20 +768,15 @@ if test "$gpl" != "yes"; then fi if test "$faad" != "no" -o "$faadbin" != "no"; then - cat > $TMPC << EOF - #include <faad.h> - int main( void ) { return 0; } -EOF - - if $cc $CFLAGS -o $TMPE $TMPC 2> /dev/null ; then - cat > $TMPC << EOF + if check_header faad.h; then + check_cc << EOF #include <faad.h> #ifndef FAAD2_VERSION ok faad1 #endif int main( void ) { return 0; } EOF - if $cc $CFLAGS -o $TMPE $TMPC 2> /dev/null ; then + if test $? = 0 ; then echo "FAAD2 is under GPL and --enable-gpl is not specified." fail="yes" fi @@ -732,16 +804,12 @@ fi # check iwmmxt support if test $iwmmxt = "default" -a $cpu = "armv4l"; then - cat > $TMPC << EOF + iwmmxt=no + check_cc <<EOF && iwmmxt=yes int main(void) { __asm__ __volatile__ ("wunpckelub wr6, wr4"); } EOF - - iwmmxt=no - if ${cross_prefix}${cc} -o $TMPO $TMPC 2> /dev/null ; then - iwmmxt=yes - fi fi #Darwin CC versions @@ -855,30 +923,17 @@ if test $cpu = "powerpc"; then fi fi -# check if we have <altivec.h> -cat > $TMPC << EOF -#include <altivec.h> -int main( void ) { return 0; } -EOF - -_altivec_h="no" -if $cc $CFLAGS -o $TMPE $TMPC 2> /dev/null ; then -_altivec_h="yes" -fi +check_header altivec.h && _altivec_h=yes || _altivec_h=no # check if our compiler supports Motorola AltiVec C API if test $altivec = "yes"; then if test $_altivec_h = "yes"; then -cat > $TMPC << EOF -#include <altivec.h> -int main(void) { - vector signed int v1, v2, v3; - v1 = vec_add(v2,v3); - return 0; -} -EOF + inc_altivec_h="#include <altivec.h>" else -cat > $TMPC << EOF + inc_altivec_h= +fi +check_cc <<EOF || altivec=no +$inc_altivec_h int main(void) { vector signed int v1, v2, v3; v1 = vec_add(v2,v3); @@ -886,8 +941,6 @@ int main(void) { } EOF fi -$cc $CFLAGS -o $TMPE $TMPC 2> /dev/null || altivec="no" -fi # mmi only available on mips if test $mmi = "default"; then @@ -900,13 +953,12 @@ fi # check if our compiler supports mmi if test $mmi = "yes"; then -cat > $TMPC << EOF +check_cc <<EOF || mmi="no" int main(void) { __asm__ ("lq \$2, 0(\$2)"); return 0; } EOF -$cc -o $TMPE $TMPC 2> /dev/null || mmi="no" fi if test "$mingw32" = "yes" -o "$mingwce" = "yes"; then @@ -946,7 +998,7 @@ if test -z "$cross_prefix" ; then # --- # big/little-endian test -cat > $TMPC << EOF +check_ld <<EOF #include <inttypes.h> int main(int argc, char ** argv){ volatile uint32_t i=0x01234567; @@ -954,10 +1006,10 @@ int main(int argc, char ** argv){ } EOF -if $cc -o $TMPE $TMPC 2>/dev/null ; then -$TMPE && bigendian="yes" +if test $? = 0 ; then + $TMPE && bigendian="yes" else -echo big/little test failed + echo big/little test failed fi else @@ -971,18 +1023,11 @@ fi # --- # *inttypes.h* test -cat > $TMPC << EOF -#include <inttypes.h> -int main(int argc, char ** argv){ - return 0; -} -EOF - -$cc -o $TMPE $TMPC 2>/dev/null || inttypes="no" +check_header inttypes.h || inttypes=no # --- # *int_fast* test -cat > $TMPC << EOF +check_cc <<EOF || emu_fast_int=yes #include <inttypes.h> int main(int argc, char ** argv){ volatile uint_fast64_t i=0x01234567; @@ -990,32 +1035,15 @@ int main(int argc, char ** argv){ } EOF -$cc -o $TMPE $TMPC 2>/dev/null || emu_fast_int="yes" - # --- # check availability of some header files -cat > $TMPC << EOF -#include <malloc.h> -int main( void ) { return 0; } -EOF - _memalign=no _malloc_h=no -if $cc -o $TMPE $TMPC 2> /dev/null ; then -_malloc_h=yes -_memalign=yes -# check for memalign - atmos -cat > $TMPC << EOF -#include <stdio.h> -#include <malloc.h> -int main ( void ) { -char *string = NULL; -string = memalign(64, sizeof(char)); -return 0; -} -EOF -$cc -o $TMPE $TMPC 2> /dev/null || _memalign=no +if check_header malloc.h; then + _malloc_h=yes + _memalign=yes + check_func memalign || _memalign="no" fi if test "$_memalign" = "no" -a "$mmx" = "yes" -a "$memalignhack" != "yes"; then @@ -1023,81 +1051,50 @@ if test "$_memalign" = "no" -a "$mmx" = "yes" -a "$memalignhack" != "yes"; then exit 1 fi -cat > $TMPC << EOF -#include <time.h> -int main( void ) { localtime_r(NULL, NULL); } -EOF - -localtime_r=no -if $cc -o $TMPE $TMPC 2> /dev/null ; then - localtime_r=yes -fi +check_func localtime_r && localtime_r=yes || localtime_r=no if test "$zlib" = "yes"; then -# check for zlib - mmu_man -cat > $TMPC << EOF -#include <zlib.h> -int main ( void ) { -if (zlibVersion() != ZLIB_VERSION) - puts("zlib version differs !!!"); - return 1; -return 0; -} -EOF -$cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -lz 2> /dev/null || zlib="no" -# $TMPE 2> /dev/null > /dev/null || zlib="no" -# XXX: more tests needed - runtime test + 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" + extralibs="$extralibs -lz" fi if test "$lzo" = "yes" -a "$gpl" = "yes"; then -# check for liblzo -cat > $TMPC << EOF -#include <lzo1x.h> -int main ( void ) { -lzo_init(); -return 0; -} -EOF -$cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -llzo 2> /dev/null || lzo="no" + temp_extralibs -llzo + check_header lzo1x.h && check_func lzo_version || lzo="no" + restore_flags else -lzo="no" + lzo="no" fi if test "$lzo" = "yes"; then -extralibs="$extralibs -llzo" + extralibs="$extralibs -llzo" fi # test for lrintf in math.h -cat > $TMPC << EOF +check_exec <<EOF && have_lrintf=yes || have_lrintf=no #define _ISOC9X_SOURCE 1 #include <math.h> int main( void ) { return (lrintf(3.999f) > 0)?0:1; } EOF -have_lrintf="no" -if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC $extralibs 2> /dev/null ; then - have_lrintf="yes" - # allanc@chickenandporn.com: cannot execute cross-compiled - # code on the host. Only execute if not cross-compiling. - if test -z "$cross_prefix" ; then - $TMPE 2> /dev/null > /dev/null || have_lrintf="no" - fi -fi - _restrict= for restrict_keyword in restrict __restrict__ __restrict; do - echo "void foo(char * $restrict_keyword p);" > $TMPC - if $cc -c -o $TMPO $TMPC 2> /dev/null; then - _restrict=$restrict_keyword - break; - fi + check_cc <<EOF +void foo(char * $restrict_keyword p); +EOF + if test $? = 0; then + _restrict=$restrict_keyword + break; + fi done # test gcc version to see if vector builtins can be used # currently only used on i386 for MMX builtins -cat > $TMPC << EOF +check_cc -msse <<EOF && builtin_vector=yes || builtin_vector=no #include <xmmintrin.h> int main(void) { #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2) @@ -1108,13 +1105,9 @@ return 0; } EOF -builtin_vector=no -if $cc -msse -o $TMPO $TMPC 2> /dev/null ; then - builtin_vector=yes -fi - # test for mm3dnow.h -cat > $TMPC << EOF +test "$cpu" = "x86_64" && march=k8 || march=athlon +check_cc -march=$march <<EOF && mm3dnow=yes || mm3dnow=no #include <mm3dnow.h> int main(void) { __m64 b1; @@ -1124,57 +1117,22 @@ return 0; } EOF -mm3dnow=no -march=athlon -if test "$cpu" = "x86_64"; then - march=k8 -fi -if $cc -march=$march -o $TMPO $TMPC 2> /dev/null ; then - mm3dnow=yes -fi - -# Probe for -Wdeclaration-after-statement -if test "$cc" = "gcc"; then - cat > $TMPC << EOF - int main( void ) { return 0; } -EOF - - if $cc -Wdeclaration-after-statement -Werror -o $TMPE $TMPC 2> /dev/null ; then - CFLAGS="$CFLAGS -Wdeclaration-after-statement" - fi -fi +check_cflags -Wdeclaration-after-statement # dlopen/dlfcn.h probing -cat > $TMPC << EOF -#include <dlfcn.h> -int main( void ) { return (int) dlopen("foo", 0); } -EOF - -ldl=-ldl +check_header dlfcn.h && dlfcn=yes -if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -ldl > /dev/null 2>&1 ; then -dlfcn=yes -dlopen=yes +temp_extralibs -ldl +if check_func dlopen; then + dlopen=yes + ldl=-ldl fi +restore_flags -if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC > /dev/null 2>&1 ; then -dlfcn=yes -dlopen=yes -ldl="" -fi - -cat > $TMPC << EOF -int main( void ) { return (int) dlopen("foo", 0); } -EOF - -if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -ldl > /dev/null 2>&1 ; then -dlopen=yes -fi - -if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC > /dev/null 2>&1 ; then -dlopen=yes -ldl="" +if check_func dlopen; then + dlopen=yes + ldl= fi if test "$vhook" = "default" ; then @@ -1189,55 +1147,53 @@ fi ########################################## # imlib check -cat > $TMPC << EOF +temp_extralibs -lImlib2 +check_ld <<EOF && imlib2=yes || imlib2=no #include <X11/Xlib.h> #include <Imlib2.h> int main( void ) { return (int) imlib_load_font("foo"); } EOF - -imlib2=no -if $cc $CFLAGS $LDFLAGS -o $TMPE $TMPC -lImlib2 -lm > /dev/null 2>&1 ; then -imlib2=yes -fi +restore_flags ########################################## # FreeType check -cat > $TMPC << EOF -#include <ft2build.h> -int main( void ) { return (int) FT_Init_FreeType(0); } -EOF - freetype2=no if test "x$targetos" != "xBeOS"; then if (freetype-config --version) >/dev/null 2>&1 ; then - if $cc -o $TMPE $TMPC `freetype-config --cflags` `freetype-config --libs` > /dev/null 2>&1 ; then - freetype2=yes - fi + temp_cflags `freetype-config --cflags` + temp_extralibs `freetype-config --libs` + check_ld <<EOF && freetype2=yes +#include <ft2build.h> +int main( void ) { return (int) FT_Init_FreeType(0); } +EOF + restore_flags fi fi ########################################## # SDL check -cat > $TMPC << EOF -#include <SDL.h> -#undef main /* We don't want SDL to override our main() */ -int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } -EOF - sdl_too_old=no sdl=no SDL_CONFIG="${cross_prefix}sdl-config" if ("${SDL_CONFIG}" --version) >/dev/null 2>&1 ; then -if $cc -o $TMPE `"${SDL_CONFIG}" --cflags` $TMPC `"${SDL_CONFIG}" --libs` > /dev/null 2>&1 ; then -_sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'` -if test "$_sdlversion" -lt 121 ; then -sdl_too_old=yes -else -sdl=yes -fi -fi + temp_cflags `"${SDL_CONFIG}" --cflags` + temp_extralibs `"${SDL_CONFIG}" --libs` + check_ld <<EOF +#include <SDL.h> +#undef main /* We don't want SDL to override our main() */ +int main( void ) { return SDL_Init (SDL_INIT_VIDEO); } +EOF + restore_flags + if test $? = 0; then + _sdlversion=`"${SDL_CONFIG}" --version | sed 's/[^0-9]//g'` + if test "$_sdlversion" -lt 121 ; then + sdl_too_old=yes + else + sdl=yes + fi + fi fi ########################################## @@ -1248,11 +1204,10 @@ if (texi2html -version) >/dev/null 2>&1; then texi2html=yes fi -if test "$network" = "yes" ; then ########################################## # IPv6 check -cat > $TMPC << EOF +test "$network" = "yes" && check_ld <<EOF && ipv6=yes || ipv6=no #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> @@ -1266,43 +1221,29 @@ int main( void ) { } EOF -ipv6=no -if $cc -o $TMPE $TMPC > /dev/null 2>&1 ; then -ipv6=yes -fi -fi - -if test "$v4l2" = "yes"; then # check for video4linux2 --- V4L2_PIX_FMT_YUV420 -cat > $TMPC << EOF +test "$v4l2" = "yes" && check_cc <<EOF || v4l2="no" #include <sys/time.h> #include <asm/types.h> #include <linux/videodev2.h> int dummy = V4L2_PIX_FMT_YUV420; struct v4l2_buffer dummy1; EOF -$cc -c -o $TMPE $TMPC 2> /dev/null || v4l2="no" -fi -case "`$cc -v 2>&1 | grep version`" in - *gcc*) - CFLAGS="-Wall -Wno-switch $CFLAGS" - ;; - *) - ;; -esac +check_cflags -Wall +check_cflags -Wno-switch if test "$sdl" = "no" ; then ffplay=no fi if test "$debug" = "yes"; then - CFLAGS="-g $CFLAGS" + CFLAGS="-g $CFLAGS" fi if test "$optimize" = "small"; then # CFLAGS=${CFLAGS//-O3/-Os} - CFLAGS="$CFLAGS -Os" + CFLAGS="$CFLAGS -Os" fi if test "$optimize" = "yes"; then |