sdl.m4
author Sunny Sachanandani <sunnysachanandani@gmail.com>
Fri, 09 Jul 2010 21:36:41 +0530
changeset 4590 1ad70fb49fcb
parent 4441 e3033ab628a1
permissions -rw-r--r--
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.

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