Description: Add GNU/Hurd support
 This patch adds GNU/Hurd support to SFML by pretending to be linux.
 The only thing which is not supported are joysticks - a dummy
 implementation has been added.
Author: James Cowgill <james410@cowgill.org.uk>
Forwarded: no
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- a/cmake/Config.cmake
+++ b/cmake/Config.cmake
@@ -31,6 +31,12 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "^k?Fre
     set(SFML_OS_FREEBSD 1)
     # don't use the OpenGL ES implementation on FreeBSD
     set(OPENGL_ES 0)
+elseif(${CMAKE_SYSTEM_NAME} STREQUAL "GNU")
+    # Hurd is almost identical to Linux except for joystick support, so pretend for the moment
+    set(SFML_OS_LINUX 1)
+    set(SFML_OS_HURD 1)
+    # don't use the OpenGL ES implementation on GNU Hurd
+    set(OPENGL_ES 0)
 elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
     if(IOS)
         set(SFML_OS_IOS 1)
--- a/include/SFML/Config.hpp
+++ b/include/SFML/Config.hpp
@@ -86,6 +86,12 @@
         // FreeBSD
         #define SFML_SYSTEM_FREEBSD
 
+    #elif defined(__GNU__)
+
+        // GNU Hurd - pretend to be linux (with one exception)
+        #define SFML_SYSTEM_LINUX
+        #define SFML_SYSTEM_HURD
+
     #else
 
         // Unsupported UNIX system
--- a/src/SFML/Window/CMakeLists.txt
+++ b/src/SFML/Window/CMakeLists.txt
@@ -90,7 +90,13 @@ elseif(SFML_OS_LINUX OR SFML_OS_FREEBSD)
             ${SRCROOT}/Unix/GlxExtensions.hpp
         )
     endif()
-    if(SFML_OS_LINUX)
+    if(SFML_OS_HURD)
+        set(PLATFORM_SRC
+            ${PLATFORM_SRC}
+            ${SRCROOT}/Dummy/JoystickImpl.cpp
+            ${SRCROOT}/Dummy/JoystickImpl.hpp
+        )
+    elseif(SFML_OS_LINUX)
         set(PLATFORM_SRC
             ${PLATFORM_SRC}
             ${SRCROOT}/Unix/JoystickImpl.cpp
@@ -212,7 +218,7 @@ if(SFML_OPENGL_ES AND SFML_OS_LINUX)
     find_package(GLES REQUIRED)
     include_directories(${EGL_INCLUDE_DIR} ${GLES_INCLUDE_DIR})
 endif()
-if(SFML_OS_LINUX)
+if(SFML_OS_LINUX AND NOT SFML_OS_HURD)
     find_package(UDev REQUIRED)
     if(NOT UDEV_FOUND)
         message(FATAL_ERROR "udev library not found")
@@ -224,6 +230,8 @@ endif()
 # build the list of external libraries to link
 if(SFML_OS_WINDOWS)
     list(APPEND WINDOW_EXT_LIBS winmm gdi32)
+elseif(SFML_OS_HURD)
+    list(APPEND WINDOW_EXT_LIBS ${X11_X11_LIB} ${LIBXCB_LIBRARIES})
 elseif(SFML_OS_LINUX)
     list(APPEND WINDOW_EXT_LIBS ${X11_X11_LIB} ${X11_Xrandr_LIB} ${UDEV_LIBRARIES})
 elseif(SFML_OS_FREEBSD)
--- /dev/null
+++ b/src/SFML/Window/Dummy/JoystickImpl.cpp
@@ -0,0 +1,49 @@
+#include <SFML/Window/JoystickImpl.hpp>
+#include <SFML/System/Err.hpp>
+
+// Dummy joystick implementation for GNU Hurd
+
+namespace sf
+{
+namespace priv
+{
+void JoystickImpl::initialize()
+{
+    err() << "Joystick support is not implemented on GNU/Hurd" << std::endl;
+}
+
+void JoystickImpl::cleanup()
+{
+}
+
+bool JoystickImpl::isConnected(unsigned int index)
+{
+    return false;
+}
+
+bool JoystickImpl::open(unsigned int index)
+{
+    return false;
+}
+
+void JoystickImpl::close()
+{
+}
+
+JoystickCaps JoystickImpl::getCapabilities() const
+{
+    return JoystickCaps();
+}
+
+Joystick::Identification JoystickImpl::getIdentification() const
+{
+    return Joystick::Identification();
+}
+
+JoystickState JoystickImpl::JoystickImpl::update()
+{
+    return JoystickState();
+}
+
+} // namespace priv
+} // namespace sf
--- /dev/null
+++ b/src/SFML/Window/Dummy/JoystickImpl.hpp
@@ -0,0 +1,28 @@
+#ifndef SFML_JOYSTICKIMPLDUMMY_HPP
+#define SFML_JOYSTICKIMPLDUMMY_HPP
+
+// Dummy joystick implementation for GNU Hurd
+
+namespace sf
+{
+namespace priv
+{
+class JoystickImpl
+{
+public:
+    static void initialize();
+    static void cleanup();
+    static bool isConnected(unsigned int index);
+    bool open(unsigned int index);
+    void close();
+    JoystickCaps getCapabilities() const;
+    Joystick::Identification getIdentification() const;
+    JoystickState update();
+};
+
+} // namespace priv
+
+} // namespace sf
+
+
+#endif // SFML_JOYSTICKIMPLDUMMY_HPP
--- a/src/SFML/Window/JoystickImpl.hpp
+++ b/src/SFML/Window/JoystickImpl.hpp
@@ -82,6 +82,10 @@ struct JoystickState
 
     #include <SFML/Window/Win32/JoystickImpl.hpp>
 
+#elif defined(SFML_SYSTEM_HURD)
+
+    #include <SFML/Window/Dummy/JoystickImpl.hpp>
+
 #elif defined(SFML_SYSTEM_LINUX)
 
     #include <SFML/Window/Unix/JoystickImpl.hpp>
