Control: found -1 1.0.0-2
Control: tags -1 pending

On Fri, 24 Jun 2016 07:33:53 +0100 James Cowgill <jcowg...@debian.org> wrote:
> Source: pax-britannica
> Version: 1.0.0-2
> Severity: important
> Tags: sid stretch patch
> 
> Hi,
> 
> At some point before the stretch release, I'd like to remove glfw2 from
> the archive. The library has been dead upstream since 2013 and has been
> superseded by glfw3.
> 
> I've attached a patch which ports pax-britannica to glfw3. It only
> touches the backend C code, translating called to the old GLFW 2
> bindings API into (roughly) equivalent GLFW 3 calls. I haven't bothered
> porting some APIs which are not used by pax-britannia.

I've uploaded the attached patch fixing this to DELAYED/10. Please tell
me if you want me to cancel it / delay it longer.

Thanks,
James
diff -Nru pax-britannica-1.0.0/debian/changelog pax-britannica-1.0.0/debian/changelog
--- pax-britannica-1.0.0/debian/changelog	2012-09-03 04:26:35.000000000 +0100
+++ pax-britannica-1.0.0/debian/changelog	2016-06-28 23:04:43.000000000 +0100
@@ -1,3 +1,11 @@
+pax-britannica (1.0.0-2.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Port to glfw 3. (Closes: #828032)
+  * Build-depend directly on GLU which glfw3 does not depend on.
+
+ -- James Cowgill <jcowg...@debian.org>  Tue, 28 Jun 2016 23:02:52 +0100
+
 pax-britannica (1.0.0-2) unstable; urgency=low
 
   * fix desktop entry, closes: #685743.
diff -Nru pax-britannica-1.0.0/debian/control pax-britannica-1.0.0/debian/control
--- pax-britannica-1.0.0/debian/control	2012-08-10 04:41:37.000000000 +0100
+++ pax-britannica-1.0.0/debian/control	2016-06-24 00:51:33.000000000 +0100
@@ -2,8 +2,8 @@
 Section: games
 Priority: optional
 Maintainer: Joe Nahmias <je...@debian.org>
-Build-Depends: debhelper (>= 9.0.0), liblua5.1-0-dev, libglfw-dev,
- libasound2-dev, libxrandr-dev
+Build-Depends: debhelper (>= 9.0.0), liblua5.1-0-dev, libglfw3-dev,
+ libasound2-dev, libxrandr-dev, libglu1-mesa-dev | libglu-dev
 Standards-Version: 3.9.3
 Homepage: http://paxbritannica.henk.ca/
 
diff -Nru pax-britannica-1.0.0/debian/patches/glfw3.patch pax-britannica-1.0.0/debian/patches/glfw3.patch
--- pax-britannica-1.0.0/debian/patches/glfw3.patch	1970-01-01 01:00:00.000000000 +0100
+++ pax-britannica-1.0.0/debian/patches/glfw3.patch	2016-06-24 02:13:41.000000000 +0100
@@ -0,0 +1,978 @@
+Description: Port to GLFW3
+ This is a very basic port of the dokidoki-support sub-module to GLFW3. I've
+ left a number of functions which are not used by pax-britannica unimplemented
+ which simplifies the patch. The new versions of some of these functions do not
+ match with the current API. The correct way to do this would probably be a full
+ rewrite of luaglfw.c with a new API, but on the basis that pax-britannica seems
+ to be dead upstream, I think this is acceptable for the time being.
+Author: James Cowgill <jcowg...@debian.org>
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/dokidoki-support/mixer.c
++++ b/dokidoki-support/mixer.c
+@@ -455,33 +455,30 @@ do \
+ } while(0)
+ 
+ #include <alsa/asoundlib.h>
+-#include <GL/glfw.h>
++#include <stdatomic.h>
++#include <pthread.h>
+ 
+ static snd_pcm_t * sound_device = NULL;
+ 
+-static GLFWthread audio_thread = 0;
+-static volatile int running = 0;
+-static GLFWmutex running_mutex = NULL;
++static pthread_t audio_thread;
++static volatile atomic_flag running = ATOMIC_FLAG_INIT;
+ 
+-static GLFWCALL void audio_loop(void *data)
++static void* audio_loop(void *data)
+ {
+     sample_t buffer[BUFFER_SIZE*2];
+ 
+-    glfwLockMutex(running_mutex);
+-    while(running)
++    while(atomic_flag_test_and_set(&running))
+     {
+-        glfwUnlockMutex(running_mutex);
+-
+         mix_into(buffer, BUFFER_SIZE);
+         int err = snd_pcm_writei(sound_device, buffer, BUFFER_SIZE);
+         if(err < 0)
+             err = snd_pcm_recover(sound_device, err, 0);
+ 
+-        glfwLockMutex(running_mutex);
+         if(err < 0)
+             break;
+     }
+-    glfwUnlockMutex(running_mutex);
++
++    return NULL;
+ }
+ 
+ static int init()
+@@ -498,20 +495,16 @@ static int init()
+ 
+     ALSA_CHECK(snd_pcm_prepare(sound_device));
+ 
+-    CHECK(running_mutex = glfwCreateMutex(),
+-          "audio mutex creation failed");
+-    running = 1;
+-    audio_thread = glfwCreateThread(audio_loop, NULL);
++    atomic_flag_test_and_set(&running);
++    CHECK(pthread_create(&audio_thread, NULL, audio_loop, NULL) == 0, "error creating alsa thread");
+ 
+     return 1;
+ }
+ 
+ static int uninit()
+ {
+-    glfwLockMutex(running_mutex);
+-    running = 0;
+-    glfwUnlockMutex(running_mutex);
+-    glfwWaitThread(audio_thread, GLFW_WAIT);
++    atomic_flag_clear(&running);
++    pthread_join(audio_thread, NULL);
+ 
+     ALSA_CHECK(snd_pcm_close(sound_device));
+     sound_device = NULL;
+--- a/dokidoki-support/luaglfw.c
++++ b/dokidoki-support/luaglfw.c
+@@ -29,9 +29,12 @@
+ //========================================================================
+ 
+ #include <lauxlib.h>
+-#include <GL/glfw.h>
++#include <GLFW/glfw3.h>
++#include <errno.h>
++#include <time.h>
+ #include "luaglfw.h"
+ 
++static GLFWwindow* window;
+ 
+ //************************************************************************
+ //****                   Internal type definitions                    ****
+@@ -102,19 +105,19 @@ static void pushVideoMode( lua_State *L,
+ {
+     lua_newtable( L );
+     lua_pushstring( L, "Width" );
+-    lua_pushnumber( L, mode->Width );
++    lua_pushnumber( L, mode->width );
+     lua_rawset( L, -3 );
+     lua_pushstring( L, "Height" );
+-    lua_pushnumber( L, mode->Height );
++    lua_pushnumber( L, mode->height );
+     lua_rawset( L, -3 );
+     lua_pushstring( L, "RedBits" );
+-    lua_pushnumber( L, mode->RedBits );
++    lua_pushnumber( L, mode->redBits );
+     lua_rawset( L, -3 );
+     lua_pushstring( L, "GreenBits" );
+-    lua_pushnumber( L, mode->GreenBits );
++    lua_pushnumber( L, mode->greenBits );
+     lua_rawset( L, -3 );
+     lua_pushstring( L, "BlueBits" );
+-    lua_pushnumber( L, mode->BlueBits );
++    lua_pushnumber( L, mode->blueBits );
+     lua_rawset( L, -3 );
+ }
+ 
+@@ -130,12 +133,11 @@ static const char * windowclose_name;
+ static const char * windowrefresh_name;
+ static const char * mousebutton_name;
+ static const char * mousepos_name;
+-static const char * mousewheel_name;
+ static const char * key_name;
+ static const char * char_name;
+ 
+ 
+-void GLFWCALL luaglfw_windowsizefun( int w, int h )
++void luaglfw_windowsizefun( GLFWwindow* window_dummy, int w, int h )
+ {
+     lua_State *L = callback_lua_state;
+     if( L == NULL ) return;
+@@ -149,23 +151,26 @@ void GLFWCALL luaglfw_windowsizefun( int
+     }
+ }
+ 
+-int GLFWCALL luaglfw_windowclosefun( void )
++void luaglfw_windowclosefun( GLFWwindow* window_dummy )
+ {
+     lua_State *L = callback_lua_state;
+     int do_close = 1;
+-    if( L == NULL ) return 1;
+ 
+-    lua_getglobal( L, windowclose_name );
+-    if( lua_isfunction( L, -1 ) )
++    if( L != NULL )
+     {
+-        lua_pcall( L, 0, 1, 0 );
+-        do_close = (int) lua_tonumber( L, -1 );
+-        lua_pop( L, 1 );
++        lua_getglobal( L, windowclose_name );
++        if( lua_isfunction( L, -1 ) )
++        {
++            lua_pcall( L, 0, 1, 0 );
++            do_close = (int) lua_tonumber( L, -1 );
++            lua_pop( L, 1 );
++        }
+     }
+-    return do_close;
++
++    glfwSetWindowShouldClose(window, do_close);
+ }
+ 
+-void GLFWCALL luaglfw_windowrefreshfun( void )
++void luaglfw_windowrefreshfun( GLFWwindow* window_dummy )
+ {
+     lua_State *L = callback_lua_state;
+     if( L == NULL ) return;
+@@ -177,7 +182,7 @@ void GLFWCALL luaglfw_windowrefreshfun(
+     }
+ }
+ 
+-void GLFWCALL luaglfw_mousebuttonfun( int button, int action )
++void luaglfw_mousebuttonfun( GLFWwindow* window_dummy, int button, int action, int mods )
+ {
+     lua_State *L = callback_lua_state;
+     if( L == NULL ) return;
+@@ -191,7 +196,7 @@ void GLFWCALL luaglfw_mousebuttonfun( in
+     }
+ }
+ 
+-void GLFWCALL luaglfw_mouseposfun( int x, int y )
++void luaglfw_mouseposfun( GLFWwindow* window_dummy, double x, double y )
+ {
+     lua_State *L = callback_lua_state;
+     if( L == NULL ) return;
+@@ -199,29 +204,19 @@ void GLFWCALL luaglfw_mouseposfun( int x
+     lua_getglobal( L, mousepos_name );
+     if( lua_isfunction( L, -1 ) )
+     {
+-        lua_pushnumber( L, (lua_Number)x );
+-        lua_pushnumber( L, (lua_Number)y );
++        lua_pushnumber( L, (lua_Number)(int)x );
++        lua_pushnumber( L, (lua_Number)(int)y );
+         lua_pcall( L, 2, 0, 0 );
+     }
+ }
+ 
+-void GLFWCALL luaglfw_mousewheelfun( int wheelpos )
++void luaglfw_keyfun( GLFWwindow* window_dummy, int key, int scancode, int action, int mods )
+ {
+     lua_State *L = callback_lua_state;
+     if( L == NULL ) return;
+ 
+-    lua_getglobal( L, mousewheel_name );
+-    if( lua_isfunction( L, -1 ) )
+-    {
+-        lua_pushnumber( L, (lua_Number)wheelpos );
+-        lua_pcall( L, 1, 0, 0 );
+-    }
+-}
+-
+-void GLFWCALL luaglfw_keyfun( int key, int action )
+-{
+-    lua_State *L = callback_lua_state;
+-    if( L == NULL ) return;
++    // Filter out GLFW_REPEAT actions
++    if (action == GLFW_REPEAT) return;
+ 
+     lua_getglobal( L, key_name );
+     if( lua_isfunction( L, -1 ) )
+@@ -232,7 +227,7 @@ void GLFWCALL luaglfw_keyfun( int key, i
+     }
+ }
+ 
+-void GLFWCALL luaglfw_charfun( int key, int action )
++void luaglfw_charfun( GLFWwindow* window_dummy, unsigned int key )
+ {
+     lua_State *L = callback_lua_state;
+     if( L == NULL ) return;
+@@ -241,7 +236,7 @@ void GLFWCALL luaglfw_charfun( int key,
+     if( lua_isfunction( L, -1 ) )
+     {
+         lua_pushnumber( L, (lua_Number)key );
+-        lua_pushnumber( L, (lua_Number)action );
++        lua_pushnumber( L, (lua_Number)GLFW_PRESS );
+         lua_pcall( L, 2, 0, 0 );
+     }
+ }
+@@ -269,6 +264,7 @@ static int glfw_Init( lua_State *L )
+ static int glfw_Terminate( lua_State *L )
+ {
+     glfwTerminate();
++    window = NULL;
+     return 0;
+ }
+ 
+@@ -287,14 +283,20 @@ static int glfw_GetVersion( lua_State *L
+ // Window handling
+ //========================================================================
+ 
++#define GLFW2_WINDOW               0x00010001
++#define GLFW2_FULLSCREEN           0x00010002
++
+ static int glfw_OpenWindow( lua_State *L )
+ {
+     lua_Number  w, h, r, g, b, a, depth, stencil, mode;
+-    int         argc, res;
++    int         res;
+ 
+     // Check arguments
+     if( badArgs( L, 9, "OpenWindow" ) ) return 0;
+ 
++    // Disallow if a window is already open
++    if (window != NULL) return 0;
++
+     // Get all arguments to glfwOpenWindow
+     w       = lua_tonumber( L, 1 );
+     h       = lua_tonumber( L, 2 );
+@@ -306,11 +308,21 @@ static int glfw_OpenWindow( lua_State *L
+     stencil = lua_tonumber( L, 8 );
+     mode    = lua_tonumber( L, 9 );
+ 
+-    // Call glfwOpenWindow
++    // Call glfwCreateWindow
+     lua_settop( L,0 );
+-    res = glfwOpenWindow( (int)w, (int)h, (int)r, (int)g, (int)b,
+-                          (int)a, (int)depth, (int)stencil,
+-                          (int)mode );
++    glfwWindowHint(GLFW_RED_BITS, (int)r);
++    glfwWindowHint(GLFW_GREEN_BITS, (int)g);
++    glfwWindowHint(GLFW_BLUE_BITS, (int)b);
++    glfwWindowHint(GLFW_ALPHA_BITS, (int)a);
++    glfwWindowHint(GLFW_DEPTH_BITS, (int)depth);
++    glfwWindowHint(GLFW_STENCIL_BITS, (int)stencil);
++
++    GLFWmonitor* monitor = (mode == GLFW2_FULLSCREEN) ? glfwGetPrimaryMonitor() : NULL;
++    window = glfwCreateWindow((int) w, (int)h, "Pax Britannica", monitor, NULL);
++    res = (window == NULL) ? GL_FALSE : GL_TRUE;
++
++    if (window != NULL)
++        glfwMakeContextCurrent(window);
+ 
+     // Return result
+     lua_pushnumber( L, (lua_Number)res );
+@@ -324,13 +336,18 @@ static int glfw_OpenWindowHint( lua_Stat
+     target = lua_tonumber( L, 1 );
+     hint   = lua_tonumber( L, 2 );
+     lua_settop( L, 0 );
+-    glfwOpenWindowHint( (int)target, (int)hint );
++    glfwWindowHint( (int)target, (int)hint );
+     return 0;
+ }
+ 
+ static int glfw_CloseWindow( lua_State *L )
+ {
+-    glfwCloseWindow();
++    if (window != NULL)
++    {
++        glfwDestroyWindow(window);
++        window = NULL;
++    }
++
+     return 0;
+ }
+ 
+@@ -338,9 +355,13 @@ static int glfw_SetWindowTitle( lua_Stat
+ {
+     const char *str;
+     if( badArgs( L, 1, "SetWindowTitle" ) ) return 0;
++
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     str = lua_tostring( L, 1 );
+     lua_remove( L, 1 );
+-    glfwSetWindowTitle( str );
++    glfwSetWindowTitle(window, str);
+     return 0;
+ }
+ 
+@@ -348,17 +369,25 @@ static int glfw_SetWindowSize( lua_State
+ {
+     lua_Number w, h;
+     if( badArgs( L, 2, "SetWindowSize" ) ) return 0;
++
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     w = lua_tonumber( L, 1 );
+     h = lua_tonumber( L, 2 );
+     lua_settop( L, 0 );
+-    glfwSetWindowSize( (int)w, (int)h );
++    glfwSetWindowSize(window, (int)w, (int)h);
+     return 0;
+ }
+ 
+ static int glfw_GetWindowSize( lua_State *L )
+ {
+     int w, h;
+-    glfwGetWindowSize( &w, &h );
++
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
++    glfwGetWindowSize(window, &w, &h);
+     lua_settop( L, 0 );
+     lua_pushnumber( L, (lua_Number)w );
+     lua_pushnumber( L, (lua_Number)h );
+@@ -369,32 +398,63 @@ static int glfw_SetWindowPos( lua_State
+ {
+     lua_Number x, y;
+     if( badArgs( L, 2, "SetWindowPos" ) ) return 0;
++
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     x = lua_tonumber( L, 1 );
+     y = lua_tonumber( L, 2 );
+     lua_settop( L, 0 );
+-    glfwSetWindowPos( (int)x, (int)y );
++    glfwSetWindowPos(window, (int)x, (int)y);
+     return 0;
+ }
+ 
+ static int glfw_IconifyWindow( lua_State *L )
+ {
+-    glfwIconifyWindow();
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
++    glfwIconifyWindow(window);
+     return 0;
+ }
+ 
+ static int glfw_RestoreWindow( lua_State *L )
+ {
+-    glfwRestoreWindow();
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
++    glfwRestoreWindow(window);
+     return 0;
+ }
+ 
++#define GLFW2_OPENED               0x00020001
++#define GLFW2_ACCELERATED          0x00020004
++
+ static int glfw_GetWindowParam( lua_State *L )
+ {
+     lua_Number n;
+     if( badArgs( L, 1, "GetWindowParam" ) ) return 0;
++
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     n = lua_tonumber( L, 1 );
+     lua_settop( L, 0 );
+-    n = glfwGetWindowParam( (int)n );
++
++    // Handle special cases
++    switch ((int) n)
++    {
++        case GLFW2_OPENED:
++            n = !glfwWindowShouldClose(window);
++            break;
++        case GLFW2_ACCELERATED:
++            n = GL_TRUE;
++            break;
++        default:
++            n = glfwGetWindowAttrib(window, (int)n);
++            break;
++    }
++
+     lua_pushnumber( L, n );
+     return 1;
+ }
+@@ -407,7 +467,11 @@ static int glfw_GetWindowParam( lua_Stat
+ 
+ static int glfw_SwapBuffers( lua_State *L )
+ {
+-    glfwSwapBuffers();
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
++    glfwSwapBuffers(window);
++    glfwPollEvents();
+     return 0;
+ }
+ 
+@@ -426,14 +490,10 @@ static int glfw_SwapInterval( lua_State
+ // Video modes
+ //========================================================================
+ 
+-#define LUAGLFW_MAX_NUM_MODES 256
+-
+ static int glfw_GetVideoModes( lua_State *L )
+ {
+-    GLFWvidmode modes[ LUAGLFW_MAX_NUM_MODES ];
+     int modecount, i;
+-
+-    modecount = glfwGetVideoModes( modes, LUAGLFW_MAX_NUM_MODES );
++    const GLFWvidmode* modes = glfwGetVideoModes(glfwGetPrimaryMonitor(), &modecount);
+ 
+     lua_newtable( L );
+     for( i = 0; i < modecount; i++ )
+@@ -447,10 +507,7 @@ static int glfw_GetVideoModes( lua_State
+ 
+ static int glfw_GetDesktopMode( lua_State *L )
+ {
+-    GLFWvidmode mode;
+-    glfwGetDesktopMode( &mode );
+-
+-    pushVideoMode( L, &mode );
++    pushVideoMode( L, glfwGetVideoMode(glfwGetPrimaryMonitor()) );
+ 
+     return 1;
+ }
+@@ -483,6 +540,9 @@ static int glfw_GetKey( lua_State *L )
+ 
+     if( badArgs( L, 1, "GetKey" ) ) return 0;
+ 
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     switch( lua_type( L, 1 ) )
+     {
+         case LUA_TSTRING:
+@@ -495,7 +555,7 @@ static int glfw_GetKey( lua_State *L )
+     }
+ 
+     lua_settop( L, 0 );
+-    n = glfwGetKey( n );
++    n = glfwGetKey(window, n);
+     lua_pushnumber( L, n );
+     return 1;
+ }
+@@ -504,16 +564,24 @@ static int glfw_GetMouseButton( lua_Stat
+ {
+     lua_Number n;
+     if( badArgs( L, 1, "GetMouseButton" ) ) return 0;
++
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     n = lua_tonumber( L, 1 );
+     lua_settop( L, 0 );
+-    lua_pushnumber( L, glfwGetMouseButton( (int)n ) );
++    lua_pushnumber( L, glfwGetMouseButton(window, (int)n) );
+     return 1;
+ }
+ 
+ static int glfw_GetMousePos( lua_State *L )
+ {
+-    int x, y;
+-    glfwGetMousePos( &x, &y );
++    double x, y;
++
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
++    glfwGetCursorPos(window, &x, &y);
+     lua_settop( L, 0 );
+     lua_pushnumber( L, (lua_Number)x );
+     lua_pushnumber( L, (lua_Number)y );
+@@ -524,29 +592,26 @@ static int glfw_SetMousePos( lua_State *
+ {
+     lua_Number x, y;
+     if( badArgs( L, 2, "SetMousePos" ) ) return 0;
++
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     x = lua_tonumber( L, 1 );
+     y = lua_tonumber( L, 2 );
+     lua_settop( L, 0 );
+-    glfwSetMousePos( (int)x, (int)y );
++    glfwSetCursorPos(window, (double)x, (double)y);
+     return 0;
+ }
+ 
+ static int glfw_GetMouseWheel( lua_State *L )
+ {
+-    int pos;
+-    pos = glfwGetMouseWheel();
+-    lua_settop( L, 0 );
+-    lua_pushnumber( L, (lua_Number)pos );
+-    return 1;
++    unsupportedFunction(L, "GetMouseWheel");
++    return 0;
+ }
+ 
+ static int glfw_SetMouseWheel( lua_State *L )
+ {
+-    lua_Number pos;
+-    if( badArgs( L, 1, "SetMouseWheel" ) ) return 0;
+-    pos = lua_tonumber( L, 1 );
+-    lua_settop( L, 0 );
+-    glfwSetMouseWheel( (int)pos );
++    unsupportedFunction(L, "SetMouseWheel");
+     return 0;
+ }
+ 
+@@ -555,6 +620,10 @@ static int glfw_SetMouseWheel( lua_State
+ // Joystick input
+ //========================================================================
+ 
++#define GLFW2_PRESENT              0x00050001
++#define GLFW2_AXES                 0x00050002
++#define GLFW2_BUTTONS              0x00050003
++
+ static int glfw_GetJoystickParam( lua_State *L )
+ {
+     lua_Number joy, param;
+@@ -563,17 +632,29 @@ static int glfw_GetJoystickParam( lua_St
+     joy   = lua_tonumber( L, 1 );
+     param = lua_tonumber( L, 2 );
+     lua_settop( L, 0 );
+-    res = glfwGetJoystickParam( (int)joy, (int)param );
++
++    switch((int) param)
++    {
++        case GLFW2_PRESENT:
++            res = glfwJoystickPresent(joy);
++            break;
++        case GLFW2_AXES:
++            glfwGetJoystickAxes(joy, &res);
++            break;
++        case GLFW2_BUTTONS:
++            glfwGetJoystickButtons(joy, &res);
++            break;
++        default:
++            res = 0;
++    }
++
+     lua_pushnumber( L, (lua_Number)res );
+     return 1;
+ }
+ 
+-#define LUAGLFW_MAX_JOY_AXES 256
+-
+ static int glfw_GetJoystickPos( lua_State *L )
+ {
+     int   joy, numaxes, res, i;
+-    float pos[ LUAGLFW_MAX_JOY_AXES ];
+ 
+     // Get arguments
+     if( badArgs( L, 2, "GetJoystickPos" ) ) return 0;
+@@ -581,10 +662,10 @@ static int glfw_GetJoystickPos( lua_Stat
+     numaxes = (int)lua_tonumber( L, 2 );
+     lua_settop( L, 0 );
+     if( numaxes < 1 ) return 0;
+-    if( numaxes > LUAGLFW_MAX_JOY_AXES ) numaxes = LUAGLFW_MAX_JOY_AXES;
+ 
+     // Call GLFW funciton
+-    res = glfwGetJoystickPos( joy, pos, numaxes );
++    const float* pos = glfwGetJoystickAxes(joy, &res);
++    if (res > numaxes) res = numaxes;
+ 
+     // Create result array
+     lua_newtable( L );
+@@ -598,12 +679,9 @@ static int glfw_GetJoystickPos( lua_Stat
+     return 1;
+ }
+ 
+-#define LUAGLFW_MAX_JOY_BUTTONS 256
+-
+ static int glfw_GetJoystickButtons( lua_State *L )
+ {
+     int           joy, numbuttons, res, i;
+-    unsigned char buttons[ LUAGLFW_MAX_JOY_AXES ];
+ 
+     // Get arguments
+     if( badArgs( L, 2, "GetJoystickButtons" ) ) return 0;
+@@ -611,11 +689,10 @@ static int glfw_GetJoystickButtons( lua_
+     numbuttons = (int)lua_tonumber( L, 2 );
+     lua_settop( L, 0 );
+     if( numbuttons < 1 ) return 0;
+-    if( numbuttons > LUAGLFW_MAX_JOY_BUTTONS )
+-        numbuttons = LUAGLFW_MAX_JOY_BUTTONS;
+ 
+     // Call GLFW funciton
+-    res = glfwGetJoystickButtons( joy, buttons, numbuttons );
++    const unsigned char* buttons = glfwGetJoystickButtons(joy, &res);
++    if (res > numbuttons) res = numbuttons;
+ 
+     // Create result array
+     lua_newtable( L );
+@@ -653,13 +730,38 @@ static int glfw_SetTime( lua_State *L )
+     return 0;
+ }
+ 
++#define ONE_BILLION 1000000000
++
+ static int glfw_Sleep( lua_State *L )
+ {
+-    lua_Number t;
++    // This function is no longer implemented by glfw, but is required for
++    // pax-britannica, so replace it with a nanosleep implementation.
++    double t;
+     if ( badArgs( L, 1, "Sleep" ) ) return 0;
+-    t = lua_tonumber( L, 1 );
++    t = (double) lua_tonumber( L, 1 );
+     lua_settop( L, 0 );
+-    glfwSleep( (double)t );
++
++    // Cap negative sleep durations
++    if (t < 0) t = 0;
++
++    // Perform the sleep
++    struct timespec req;
++    req.tv_sec = (time_t) t;
++    req.tv_nsec = (long) ((t - (time_t) t) * ONE_BILLION);
++
++    if (req.tv_nsec >= ONE_BILLION)
++    {
++        req.tv_sec++;
++        req.tv_nsec = 0;
++    }
++    else if (req.tv_nsec < 0)
++    {
++        req.tv_nsec = 0;
++    }
++
++    while (nanosleep(&req, &req) == -1 && errno == EINTR)
++        ;
++
+     return 0;
+ }
+ 
+@@ -748,11 +850,8 @@ static int glfw_BroadcastCond( lua_State
+ 
+ static int glfw_GetNumberOfProcessors( lua_State *L )
+ {
+-    int n;
+-    n = glfwGetNumberOfProcessors();
+-    lua_settop( L,0 );
+-    lua_pushnumber( L, (lua_Number)n );
+-    return 1;
++    unsupportedFunction( L, "GetNumberOfProcessors" );
++    return 0;
+ }
+ 
+ 
+@@ -762,13 +861,9 @@ static int glfw_GetNumberOfProcessors( l
+ 
+ static int glfw_GetGLVersion( lua_State *L )
+ {
+-    int major, minor, rev;
+-    glfwGetGLVersion( &major, &minor, &rev );
+-    lua_settop( L,0 );
+-    lua_pushnumber( L, (lua_Number)major );
+-    lua_pushnumber( L, (lua_Number)minor );
+-    lua_pushnumber( L, (lua_Number)rev );
+-    return 3;
++    // GLFW3 requires an open window now, so most uses of this will fail anyway
++    unsupportedFunction( L, "GetGLVersion" );
++    return 0;
+ }
+ 
+ static int glfw_ExtensionSupported( lua_State *L )
+@@ -790,21 +885,13 @@ static int glfw_ExtensionSupported( lua_
+ 
+ static int glfw_Enable( lua_State *L )
+ {
+-    lua_Number param;
+-    if ( badArgs( L, 1, "Enable" ) ) return 0;
+-    param = lua_tonumber( L, 1 );
+-    lua_settop( L, 0 );
+-    glfwEnable( (int)param );
++    unsupportedFunction( L, "Enable" );
+     return 0;
+ }
+ 
+ static int glfw_Disable( lua_State *L )
+ {
+-    lua_Number param;
+-    if ( badArgs( L, 1, "Disable" ) ) return 0;
+-    param = lua_tonumber( L, 1 );
+-    lua_settop( L, 0 );
+-    glfwDisable( (int)param );
++    unsupportedFunction( L, "Disable" );
+     return 0;
+ }
+ 
+@@ -827,16 +914,8 @@ static int glfw_FreeImage( lua_State *L
+ 
+ static int glfw_LoadTexture2D( lua_State *L )
+ {
+-    const char *name;
+-    lua_Number flags;
+-    int        res;
+-    if( badArgs( L, 2, "LoadTexture2D" ) ) return 0;
+-    name  = lua_tostring( L, 1 );
+-    flags = lua_tonumber( L, 2 );
+-    lua_settop( L, 0 );
+-    res = glfwLoadTexture2D( name, (int)flags );
+-    lua_pushnumber( L, (lua_Number)res );
+-    return 1;
++    unsupportedFunction( L, "LoadTexture2D" );
++    return 0;
+ }
+ 
+ 
+@@ -846,97 +925,112 @@ static int glfw_LoadTexture2D( lua_State
+ 
+ static int glfw_SetWindowSizeCallback( lua_State *L )
+ {
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     GLFWwindowsizefun fun = NULL;
+     if( lua_isstring( L, 1 ) )
+     {
+         windowsize_name = lua_tostring( L, 1 );
+         fun = luaglfw_windowsizefun;
+     }
+-    glfwSetWindowSizeCallback( fun );
++    glfwSetWindowSizeCallback( window, fun );
+     return 0;
+ }
+ 
+ static int glfw_SetWindowCloseCallback( lua_State *L )
+ {
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     GLFWwindowclosefun fun = NULL;
+     if( lua_isstring( L, 1 ) )
+     {
+         windowclose_name = lua_tostring( L, 1 );
+         fun = luaglfw_windowclosefun;
+     }
+-    glfwSetWindowCloseCallback( fun );
++    glfwSetWindowCloseCallback( window, fun );
+     return 0;
+ }
+ 
+ static int glfw_SetWindowRefreshCallback( lua_State *L )
+ {
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     GLFWwindowrefreshfun fun = NULL;
+     if( lua_isstring( L, 1 ) )
+     {
+         windowrefresh_name = lua_tostring( L, 1 );
+         fun = luaglfw_windowrefreshfun;
+     }
+-    glfwSetWindowRefreshCallback( fun );
++    glfwSetWindowRefreshCallback( window, fun );
+     return 0;
+ }
+ 
+ static int glfw_SetMouseButtonCallback( lua_State *L )
+ {
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     GLFWmousebuttonfun fun = NULL;
+     if( lua_isstring( L, 1 ) )
+     {
+         mousebutton_name = lua_tostring( L, 1 );
+         fun = luaglfw_mousebuttonfun;
+     }
+-    glfwSetMouseButtonCallback( fun );
++    glfwSetMouseButtonCallback( window, fun );
+     return 0;
+ }
+ 
+ static int glfw_SetMousePosCallback( lua_State *L )
+ {
+-    GLFWmouseposfun fun = NULL;
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
++    GLFWcursorposfun fun = NULL;
+     if( lua_isstring( L, 1 ) )
+     {
+         mousepos_name = lua_tostring( L, 1 );
+         fun = luaglfw_mouseposfun;
+     }
+-    glfwSetMousePosCallback( fun );
++    glfwSetCursorPosCallback( window, fun );
+     return 0;
+ }
+ 
+ static int glfw_SetMouseWheelCallback( lua_State *L )
+ {
+-    GLFWmousewheelfun fun = NULL;
+-    if( lua_isstring( L, 1 ) )
+-    {
+-        mousewheel_name = lua_tostring( L, 1 );
+-        fun = luaglfw_mousewheelfun;
+-    }
+-    glfwSetMouseWheelCallback( fun );
++    unsupportedFunction( L, "SetMouseWheelCallback" );
+     return 0;
+ }
+ 
+ static int glfw_SetKeyCallback( lua_State *L )
+ {
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     GLFWkeyfun fun = NULL;
+     if( lua_isstring( L, 1 ) )
+     {
+         key_name = lua_tostring( L, 1 );
+         fun = luaglfw_keyfun;
+     }
+-    glfwSetKeyCallback( fun );
++    glfwSetKeyCallback( window, fun );
+     return 0;
+ }
+ 
+ static int glfw_SetCharCallback( lua_State *L )
+ {
++    // Disallow if a window is not open
++    if (window == NULL) return 0;
++
+     GLFWcharfun fun = NULL;
+     if( lua_isstring( L, 1 ) )
+     {
+         char_name = lua_tostring( L, 1 );
+         fun = luaglfw_charfun;
+     }
+-    glfwSetCharCallback( fun );
++    glfwSetCharCallback( window, fun );
+     return 0;
+ }
+ 
+@@ -964,8 +1058,7 @@ static struct lua_constant glfw_constant
+ 
+     // Keyboard key definitions
+     { "KEY_SPACE", GLFW_KEY_SPACE },
+-    { "KEY_SPECIAL", GLFW_KEY_SPECIAL },
+-    { "KEY_ESC", GLFW_KEY_ESC },
++    { "KEY_ESC", GLFW_KEY_ESCAPE },
+     { "KEY_F1", GLFW_KEY_F1 },
+     { "KEY_F2", GLFW_KEY_F2 },
+     { "KEY_F3", GLFW_KEY_F3 },
+@@ -995,19 +1088,19 @@ static struct lua_constant glfw_constant
+     { "KEY_DOWN", GLFW_KEY_DOWN },
+     { "KEY_LEFT", GLFW_KEY_LEFT },
+     { "KEY_RIGHT", GLFW_KEY_RIGHT },
+-    { "KEY_LSHIFT", GLFW_KEY_LSHIFT },
+-    { "KEY_RSHIFT", GLFW_KEY_RSHIFT },
+-    { "KEY_LCTRL", GLFW_KEY_LCTRL },
+-    { "KEY_RCTRL", GLFW_KEY_RCTRL },
+-    { "KEY_LALT", GLFW_KEY_LALT },
+-    { "KEY_RALT", GLFW_KEY_RALT },
++    { "KEY_LSHIFT", GLFW_KEY_LEFT_SHIFT },
++    { "KEY_RSHIFT", GLFW_KEY_RIGHT_SHIFT },
++    { "KEY_LCTRL", GLFW_KEY_LEFT_CONTROL },
++    { "KEY_RCTRL", GLFW_KEY_RIGHT_CONTROL },
++    { "KEY_LALT", GLFW_KEY_LEFT_ALT },
++    { "KEY_RALT", GLFW_KEY_RIGHT_ALT },
+     { "KEY_TAB", GLFW_KEY_TAB },
+     { "KEY_ENTER", GLFW_KEY_ENTER },
+     { "KEY_BACKSPACE", GLFW_KEY_BACKSPACE },
+     { "KEY_INSERT", GLFW_KEY_INSERT },
+-    { "KEY_DEL", GLFW_KEY_DEL },
+-    { "KEY_PAGEUP", GLFW_KEY_PAGEUP },
+-    { "KEY_PAGEDOWN", GLFW_KEY_PAGEDOWN },
++    { "KEY_DEL", GLFW_KEY_DELETE },
++    { "KEY_PAGEUP", GLFW_KEY_PAGE_UP },
++    { "KEY_PAGEDOWN", GLFW_KEY_PAGE_DOWN },
+     { "KEY_HOME", GLFW_KEY_HOME },
+     { "KEY_END", GLFW_KEY_END },
+     { "KEY_KP_0", GLFW_KEY_KP_0 },
+@@ -1065,14 +1158,14 @@ static struct lua_constant glfw_constant
+     { "JOYSTICK_LAST", GLFW_JOYSTICK_LAST },
+ 
+     // glfwOpenWindow modes
+-    { "WINDOW", GLFW_WINDOW },
+-    { "FULLSCREEN", GLFW_FULLSCREEN },
++    { "WINDOW", GLFW2_WINDOW },
++    { "FULLSCREEN", GLFW2_FULLSCREEN },
+ 
+     // glfwGetWindowParam tokens
+-    { "OPENED", GLFW_OPENED },
+-    { "ACTIVE", GLFW_ACTIVE },
++    { "OPENED", GLFW2_OPENED },
++    { "ACTIVE", GLFW_FOCUSED },
+     { "ICONIFIED", GLFW_ICONIFIED },
+-    { "ACCELERATED", GLFW_ACCELERATED },
++    { "ACCELERATED", GLFW2_ACCELERATED },
+     { "RED_BITS", GLFW_RED_BITS },
+     { "GREEN_BITS", GLFW_GREEN_BITS },
+     { "BLUE_BITS", GLFW_BLUE_BITS },
+@@ -1089,31 +1182,10 @@ static struct lua_constant glfw_constant
+     { "AUX_BUFFERS", GLFW_AUX_BUFFERS },
+     { "STEREO", GLFW_STEREO },
+ 
+-    // glfwEnable/glfwDisable tokens
+-    { "MOUSE_CURSOR", GLFW_MOUSE_CURSOR },
+-    { "STICKY_KEYS", GLFW_STICKY_KEYS },
+-    { "STICKY_MOUSE_BUTTONS", GLFW_STICKY_MOUSE_BUTTONS },
+-    { "SYSTEM_KEYS", GLFW_SYSTEM_KEYS },
+-    { "KEY_REPEAT", GLFW_KEY_REPEAT },
+-    { "AUTO_POLL_EVENTS", GLFW_AUTO_POLL_EVENTS },
+-
+-    // glfwWaitThread wait modes
+-    { "WAIT", GLFW_WAIT },
+-    { "NOWAIT", GLFW_NOWAIT },
+-
+     // glfwGetJoystickParam tokens
+-    { "PRESENT", GLFW_PRESENT },
+-    { "AXES", GLFW_AXES },
+-    { "BUTTONS", GLFW_BUTTONS },
+-
+-    // glfwReadImage/glfwLoadTexture2D flags
+-    { "NO_RESCALE_BIT", GLFW_NO_RESCALE_BIT },
+-    { "ORIGIN_UL_BIT", GLFW_ORIGIN_UL_BIT },
+-    { "BUILD_MIPMAPS_BIT", GLFW_BUILD_MIPMAPS_BIT },
+-    { "ALPHA_MAP_BIT", GLFW_ALPHA_MAP_BIT },
+-
+-    // Time spans longer than this (seconds) are considered to be infinity
+-    { "INFINITY", GLFW_INFINITY },
++    { "PRESENT", GLFW2_PRESENT },
++    { "AXES", GLFW2_AXES },
++    { "BUTTONS", GLFW2_BUTTONS },
+ 
+     { NULL, 0 }
+ };
diff -Nru pax-britannica-1.0.0/debian/patches/series pax-britannica-1.0.0/debian/patches/series
--- pax-britannica-1.0.0/debian/patches/series	2012-08-10 05:11:48.000000000 +0100
+++ pax-britannica-1.0.0/debian/patches/series	2016-06-24 00:51:33.000000000 +0100
@@ -5,3 +5,4 @@
 fix_including_extra_loaders.patch
 load_resources_from_usr_share.patch
 add_desktop_entry.patch
+glfw3.patch

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to