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