From 373c6ad893d49a3b1aeb6ae9604a216478e72a99 Mon Sep 17 00:00:00 2001 From: sohalt Date: Wed, 18 Dec 2019 12:29:52 +0100 Subject: [PATCH] libspnav: init at 0.2.3 --- .../libspnav/configure-socket-path.patch | 47 +++++++++++++++++++ .../libraries/libspnav/default.nix | 36 ++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 3 files changed, 85 insertions(+) create mode 100644 pkgs/development/libraries/libspnav/configure-socket-path.patch create mode 100644 pkgs/development/libraries/libspnav/default.nix diff --git a/pkgs/development/libraries/libspnav/configure-socket-path.patch b/pkgs/development/libraries/libspnav/configure-socket-path.patch new file mode 100644 index 00000000000..2c315067f41 --- /dev/null +++ b/pkgs/development/libraries/libspnav/configure-socket-path.patch @@ -0,0 +1,47 @@ +diff --git a/spnav.c b/spnav.c +index f9e10f8..27149f7 100644 +--- a/spnav.c ++++ b/spnav.c +@@ -36,7 +36,7 @@ OF SUCH DAMAGE. + #include + #include "spnav.h" + +-#define SPNAV_SOCK_PATH "/var/run/spnav.sock" ++#define DEFAULT_SPNAV_SOCK_PATH "/run/spnav.sock" + + #ifdef USE_X11 + #include +@@ -70,6 +70,24 @@ static struct event_node *ev_queue, *ev_queue_tail; + /* AF_UNIX socket used for alternative communication with daemon */ + static int sock = -1; + ++static char *spath = NULL; ++ ++static char *socket_path() ++{ ++ char *xdg_runtime_dir; ++ if((xdg_runtime_dir = getenv("XDG_RUNTIME_DIR"))) { ++ if ( spath == NULL ) { ++ spath = malloc(strlen(xdg_runtime_dir) + strlen("/spnav.sock") + 1); ++ if ( spath != NULL ) { ++ sprintf(spath, sizeof(spath), "%s/spnav.sock", xdg_runtime_dir); ++ } ++ } ++ if(access(spath, F_OK)){ ++ return spath; ++ } ++ } ++ return DEFAULT_SPNAV_SOCK_PATH; ++} + + int spnav_open(void) + { +@@ -92,7 +110,7 @@ int spnav_open(void) + + memset(&addr, 0, sizeof addr); + addr.sun_family = AF_UNIX; +- strncpy(addr.sun_path, SPNAV_SOCK_PATH, sizeof(addr.sun_path)); ++ strncpy(addr.sun_path, socket_path(), sizeof(addr.sun_path)); + + + if(connect(s, (struct sockaddr*)&addr, sizeof addr) == -1) { diff --git a/pkgs/development/libraries/libspnav/default.nix b/pkgs/development/libraries/libspnav/default.nix new file mode 100644 index 00000000000..9bd0a67041b --- /dev/null +++ b/pkgs/development/libraries/libspnav/default.nix @@ -0,0 +1,36 @@ +{ stdenv, lib, fetchFromGitHub, libX11}: + +stdenv.mkDerivation rec { + version = "0.2.3"; + pname = "libspnav"; + + src = fetchFromGitHub { + owner = "FreeSpacenav"; + repo = "libspnav"; + rev = "${pname}-${version}"; + sha256 = "098h1jhlj87axpza5zgy58prp0zn94wyrbch6x0s7q4mzh7dc8ba"; + }; + + buildInputs = [ libX11 ]; + + patches = [ + # Changes the socket path from /run/spnav.sock to $XDG_RUNTIME_DIR/spnav.sock + # to allow for a user service + ./configure-socket-path.patch + ]; + + configureFlags = [ "--disable-debug"]; + + preInstall = '' + mkdir -p $out/{lib,include} + ''; + + meta = with lib; { + homepage = "http://spacenav.sourceforge.net/"; + description = "Device driver and SDK for 3Dconnexion 3D input devices"; + longDescription = "A free, compatible alternative, to the proprietary 3Dconnexion device driver and SDK, for their 3D input devices (called 'space navigator', 'space pilot', 'space traveller', etc)"; + license = licenses.bsd3; + platforms = platforms.unix; + maintainers = with maintainers; [ sohalt ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 04fb6805e96..d2fe01436fa 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15061,6 +15061,8 @@ in libspectre = callPackage ../development/libraries/libspectre { }; + libspnav = callPackage ../development/libraries/libspnav { }; + libgsf = callPackage ../development/libraries/libgsf { }; # GNU libc provides libiconv so systems with glibc don't need to build