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