test/acinclude.m4
author Patrice Mandin <patmandin@gmail.com>
Thu, 19 Jan 2006 21:28:52 +0000
changeset 1257 448a9a64537b
parent 794 a5defa3b93e1
child 1380 d94b080ff6ce
permissions -rw-r--r--
[PATCH] SDL_GetVideoMode() does not find best mode, part 2

Following commit 1.51, I come accross a problem when SDL must choose between
several video modes that could suit the one asked.

If I ask 320x240 with this list:
768x480 768x240 640x400 640x200 384x480 384x240 320x400 320x200

The smallest selectables modes are 384x240 and 320x400. And SDL choose the later
in this list, but 384x240 is more suitable. So I added a check to compare
the pixel count (surface) of modes, and select the one which has the smallest
pixel count.

In my example, 384x240 has 92160 pixels, and 320x400 has 128000 pixels. So now
SDL will choose 384x240 for the asked 320x240 mode.
     1 # Configure paths for SDL
     2 # Sam Lantinga 9/21/99
     3 # stolen from Manish Singh
     4 # stolen back from Frank Belew
     5 # stolen from Manish Singh
     6 # Shamelessly stolen from Owen Taylor
     7 
     8 dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
     9 dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
    10 dnl
    11 AC_DEFUN([AM_PATH_SDL],
    12 [dnl 
    13 dnl Get the cflags and libraries from the sdl-config script
    14 dnl
    15 AC_ARG_WITH(sdl-prefix,[  --with-sdl-prefix=PFX   Prefix where SDL is installed (optional)],
    16             sdl_prefix="$withval", sdl_prefix="")
    17 AC_ARG_WITH(sdl-exec-prefix,[  --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
    18             sdl_exec_prefix="$withval", sdl_exec_prefix="")
    19 AC_ARG_ENABLE(sdltest, [  --disable-sdltest       Do not try to compile and run a test SDL program],
    20 		    , enable_sdltest=yes)
    21 
    22   if test x$sdl_exec_prefix != x ; then
    23      sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix"
    24      if test x${SDL_CONFIG+set} != xset ; then
    25         SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
    26      fi
    27   fi
    28   if test x$sdl_prefix != x ; then
    29      sdl_args="$sdl_args --prefix=$sdl_prefix"
    30      if test x${SDL_CONFIG+set} != xset ; then
    31         SDL_CONFIG=$sdl_prefix/bin/sdl-config
    32      fi
    33   fi
    34 
    35   AC_REQUIRE([AC_CANONICAL_TARGET])
    36   PATH="$prefix/bin:$prefix/usr/bin:$PATH"
    37   AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
    38   min_sdl_version=ifelse([$1], ,0.11.0,$1)
    39   AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
    40   no_sdl=""
    41   if test "$SDL_CONFIG" = "no" ; then
    42     no_sdl=yes
    43   else
    44     SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
    45     SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
    46 
    47     sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
    48            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
    49     sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
    50            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
    51     sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
    52            sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
    53     if test "x$enable_sdltest" = "xyes" ; then
    54       ac_save_CFLAGS="$CFLAGS"
    55       ac_save_LIBS="$LIBS"
    56       CFLAGS="$CFLAGS $SDL_CFLAGS"
    57       LIBS="$LIBS $SDL_LIBS"
    58 dnl
    59 dnl Now check if the installed SDL is sufficiently new. (Also sanity
    60 dnl checks the results of sdl-config to some extent
    61 dnl
    62       rm -f conf.sdltest
    63       AC_TRY_RUN([
    64 #include <stdio.h>
    65 #include <stdlib.h>
    66 #include <string.h>
    67 #include "SDL.h"
    68 
    69 char*
    70 my_strdup (char *str)
    71 {
    72   char *new_str;
    73   
    74   if (str)
    75     {
    76       new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
    77       strcpy (new_str, str);
    78     }
    79   else
    80     new_str = NULL;
    81   
    82   return new_str;
    83 }
    84 
    85 int main (int argc, char *argv[])
    86 {
    87   int major, minor, micro;
    88   char *tmp_version;
    89 
    90   /* This hangs on some systems (?)
    91   system ("touch conf.sdltest");
    92   */
    93   { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
    94 
    95   /* HP/UX 9 (%@#!) writes to sscanf strings */
    96   tmp_version = my_strdup("$min_sdl_version");
    97   if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
    98      printf("%s, bad version string\n", "$min_sdl_version");
    99      exit(1);
   100    }
   101 
   102    if (($sdl_major_version > major) ||
   103       (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
   104       (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
   105     {
   106       return 0;
   107     }
   108   else
   109     {
   110       printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
   111       printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
   112       printf("*** best to upgrade to the required version.\n");
   113       printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
   114       printf("*** to point to the correct copy of sdl-config, and remove the file\n");
   115       printf("*** config.cache before re-running configure\n");
   116       return 1;
   117     }
   118 }
   119 
   120 ],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
   121        CFLAGS="$ac_save_CFLAGS"
   122        LIBS="$ac_save_LIBS"
   123      fi
   124   fi
   125   if test "x$no_sdl" = x ; then
   126      AC_MSG_RESULT(yes)
   127      ifelse([$2], , :, [$2])     
   128   else
   129      AC_MSG_RESULT(no)
   130      if test "$SDL_CONFIG" = "no" ; then
   131        echo "*** The sdl-config script installed by SDL could not be found"
   132        echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
   133        echo "*** your path, or set the SDL_CONFIG environment variable to the"
   134        echo "*** full path to sdl-config."
   135      else
   136        if test -f conf.sdltest ; then
   137         :
   138        else
   139           echo "*** Could not run SDL test program, checking why..."
   140           CFLAGS="$CFLAGS $SDL_CFLAGS"
   141           LIBS="$LIBS $SDL_LIBS"
   142           AC_TRY_LINK([
   143 #include <stdio.h>
   144 #include "SDL.h"
   145 
   146 int main(int argc, char *argv[])
   147 { return 0; }
   148 #undef  main
   149 #define main K_and_R_C_main
   150 ],      [ return 0; ],
   151         [ echo "*** The test program compiled, but did not run. This usually means"
   152           echo "*** that the run-time linker is not finding SDL or finding the wrong"
   153           echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
   154           echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
   155           echo "*** to the installed location  Also, make sure you have run ldconfig if that"
   156           echo "*** is required on your system"
   157 	  echo "***"
   158           echo "*** If you have an old version installed, it is best to remove it, although"
   159           echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
   160         [ echo "*** The test program failed to compile or link. See the file config.log for the"
   161           echo "*** exact error that occured. This usually means SDL was incorrectly installed"
   162           echo "*** or that you have moved SDL since it was installed. In the latter case, you"
   163           echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
   164           CFLAGS="$ac_save_CFLAGS"
   165           LIBS="$ac_save_LIBS"
   166        fi
   167      fi
   168      SDL_CFLAGS=""
   169      SDL_LIBS=""
   170      ifelse([$3], , :, [$3])
   171   fi
   172   AC_SUBST(SDL_CFLAGS)
   173   AC_SUBST(SDL_LIBS)
   174   rm -f conf.sdltest
   175 ])