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
signature.asc
Description: This is a digitally signed message part