test/acinclude.m4
author Sam Lantinga <slouken@libsdl.org>
Tue, 11 Sep 2001 19:00:18 +0000
changeset 172 37e3ca9254c7
parent 170 9427fb48592a
child 221 50620ec9c86a
permissions -rw-r--r--
Date: Sat, 8 Sep 2001 04:42:23 +0200
From: Max Horn <max@quendi.de>
Subject: SDL/OSX: Joystick; Better key handling

I just finished implementing improved keyhandling for OS X (in fact
the code should be easily ported to the "normal" MacOS part of SDL, I
just had no chance yet). Works like this:
First init the mapping table statically like before. Them, it queries
the OS for the "official" key table, then iterates over all 127
scancode and gets the associates ascii code. It ignores everythng
below 32 (has to, as it would lead to many problems if we did not...
e.g. both ESC and NUM LOCk produce an ascii code 27 on my keyboard),
and all stuff above 127 is mapped to SDLK_WORLD_* simply in the order
it is encountered.
In addition, caps lock is now working, too.
The code work flawless for me, but since I only have one keyboard, I
may have not encountered some serious problem... but I am pretty
confident that it is better than the old code in most cases.


The joystick driver works fine for me, too. I think it can be added
to CVS already. It would simply be helpful if more people would test
it. Hm, I wonder if Maelstrom or GLTron has Joystick support? That
would be a wonderful test application :)


I also took the liberty of modifying some text files like BUGS,
README.CVS, README.MacOSX (which now contains the OS X docs I long
promised)
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@0
    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@0
    36
  AC_PATH_PROG(SDL_CONFIG, sdl-config, no)
slouken@0
    37
  min_sdl_version=ifelse([$1], ,0.11.0,$1)
slouken@0
    38
  AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
slouken@0
    39
  no_sdl=""
slouken@0
    40
  if test "$SDL_CONFIG" = "no" ; then
slouken@0
    41
    no_sdl=yes
slouken@0
    42
  else
slouken@0
    43
    SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags`
slouken@0
    44
    SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs`
slouken@0
    45
slouken@0
    46
    sdl_major_version=`$SDL_CONFIG $sdl_args --version | \
slouken@0
    47
           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
slouken@0
    48
    sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \
slouken@0
    49
           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
slouken@0
    50
    sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
slouken@0
    51
           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
slouken@0
    52
    if test "x$enable_sdltest" = "xyes" ; then
slouken@0
    53
      ac_save_CFLAGS="$CFLAGS"
slouken@0
    54
      ac_save_LIBS="$LIBS"
slouken@0
    55
      CFLAGS="$CFLAGS $SDL_CFLAGS"
slouken@0
    56
      LIBS="$LIBS $SDL_LIBS"
slouken@0
    57
dnl
slouken@0
    58
dnl Now check if the installed SDL is sufficiently new. (Also sanity
slouken@0
    59
dnl checks the results of sdl-config to some extent
slouken@0
    60
dnl
slouken@0
    61
      rm -f conf.sdltest
slouken@170
    62
      case "$target" in
slouken@170
    63
          *-*-darwin*)
slouken@170
    64
            cp -r `$SDL_CONFIG --nib` .
slouken@170
    65
            dnl create an Info.plist file, unless one exists
slouken@170
    66
            if test -f Info.plist ; then
slouken@170
    67
             :
slouken@170
    68
            else
slouken@170
    69
             cp `$SDL_CONFIG --plist` .
slouken@170
    70
            fi
slouken@170
    71
              ;;
slouken@170
    72
      esac
slouken@0
    73
      AC_TRY_RUN([
slouken@0
    74
#include <stdio.h>
slouken@0
    75
#include <stdlib.h>
slouken@0
    76
#include <string.h>
slouken@0
    77
#include "SDL.h"
slouken@0
    78
slouken@0
    79
char*
slouken@0
    80
my_strdup (char *str)
slouken@0
    81
{
slouken@0
    82
  char *new_str;
slouken@0
    83
  
slouken@0
    84
  if (str)
slouken@0
    85
    {
slouken@0
    86
      new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
slouken@0
    87
      strcpy (new_str, str);
slouken@0
    88
    }
slouken@0
    89
  else
slouken@0
    90
    new_str = NULL;
slouken@0
    91
  
slouken@0
    92
  return new_str;
slouken@0
    93
}
slouken@0
    94
slouken@0
    95
int main (int argc, char *argv[])
slouken@0
    96
{
slouken@0
    97
  int major, minor, micro;
slouken@0
    98
  char *tmp_version;
slouken@0
    99
slouken@0
   100
  /* This hangs on some systems (?)
slouken@0
   101
  system ("touch conf.sdltest");
slouken@0
   102
  */
slouken@0
   103
  { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
slouken@0
   104
slouken@0
   105
  /* HP/UX 9 (%@#!) writes to sscanf strings */
slouken@0
   106
  tmp_version = my_strdup("$min_sdl_version");
slouken@0
   107
  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
slouken@0
   108
     printf("%s, bad version string\n", "$min_sdl_version");
slouken@0
   109
     exit(1);
slouken@0
   110
   }
slouken@0
   111
slouken@0
   112
   if (($sdl_major_version > major) ||
slouken@0
   113
      (($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
slouken@0
   114
      (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
slouken@0
   115
    {
slouken@0
   116
      return 0;
slouken@0
   117
    }
slouken@0
   118
  else
slouken@0
   119
    {
slouken@0
   120
      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
   121
      printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
slouken@0
   122
      printf("*** best to upgrade to the required version.\n");
slouken@0
   123
      printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
slouken@0
   124
      printf("*** to point to the correct copy of sdl-config, and remove the file\n");
slouken@0
   125
      printf("*** config.cache before re-running configure\n");
slouken@0
   126
      return 1;
slouken@0
   127
    }
slouken@0
   128
}
slouken@0
   129
slouken@0
   130
],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
slouken@0
   131
       CFLAGS="$ac_save_CFLAGS"
slouken@0
   132
       LIBS="$ac_save_LIBS"
slouken@0
   133
     fi
slouken@0
   134
  fi
slouken@0
   135
  if test "x$no_sdl" = x ; then
slouken@0
   136
     AC_MSG_RESULT(yes)
slouken@0
   137
     ifelse([$2], , :, [$2])     
slouken@0
   138
  else
slouken@0
   139
     AC_MSG_RESULT(no)
slouken@0
   140
     if test "$SDL_CONFIG" = "no" ; then
slouken@0
   141
       echo "*** The sdl-config script installed by SDL could not be found"
slouken@0
   142
       echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
slouken@0
   143
       echo "*** your path, or set the SDL_CONFIG environment variable to the"
slouken@0
   144
       echo "*** full path to sdl-config."
slouken@0
   145
     else
slouken@0
   146
       if test -f conf.sdltest ; then
slouken@0
   147
        :
slouken@0
   148
       else
slouken@0
   149
          echo "*** Could not run SDL test program, checking why..."
slouken@0
   150
          CFLAGS="$CFLAGS $SDL_CFLAGS"
slouken@0
   151
          LIBS="$LIBS $SDL_LIBS"
slouken@0
   152
          AC_TRY_LINK([
slouken@0
   153
#include <stdio.h>
slouken@0
   154
#include "SDL.h"
slouken@1
   155
slouken@1
   156
int main(int argc, char *argv[])
slouken@1
   157
{ return 0; }
slouken@1
   158
#undef  main
slouken@1
   159
#define main K_and_R_C_main
slouken@0
   160
],      [ return 0; ],
slouken@0
   161
        [ echo "*** The test program compiled, but did not run. This usually means"
slouken@0
   162
          echo "*** that the run-time linker is not finding SDL or finding the wrong"
slouken@0
   163
          echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
slouken@0
   164
          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
slouken@0
   165
          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
slouken@0
   166
          echo "*** is required on your system"
slouken@0
   167
	  echo "***"
slouken@0
   168
          echo "*** If you have an old version installed, it is best to remove it, although"
slouken@0
   169
          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
slouken@0
   170
        [ echo "*** The test program failed to compile or link. See the file config.log for the"
slouken@0
   171
          echo "*** exact error that occured. This usually means SDL was incorrectly installed"
slouken@0
   172
          echo "*** or that you have moved SDL since it was installed. In the latter case, you"
slouken@0
   173
          echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
slouken@0
   174
          CFLAGS="$ac_save_CFLAGS"
slouken@0
   175
          LIBS="$ac_save_LIBS"
slouken@0
   176
       fi
slouken@0
   177
     fi
slouken@0
   178
     SDL_CFLAGS=""
slouken@0
   179
     SDL_LIBS=""
slouken@0
   180
     ifelse([$3], , :, [$3])
slouken@0
   181
  fi
slouken@0
   182
  AC_SUBST(SDL_CFLAGS)
slouken@0
   183
  AC_SUBST(SDL_LIBS)
slouken@170
   184
      case "$target" in
slouken@170
   185
          *-*-darwin*)
slouken@170
   186
              SDL_APPLE_CREATOR="????"
slouken@170
   187
              AC_SUBST(SDL_APPLE_CREATOR)
slouken@170
   188
              ;;
slouken@170
   189
      esac
slouken@0
   190
  rm -f conf.sdltest
slouken@0
   191
])