summary refs log tree commit diff
path: root/gnu/packages/guile.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/guile.scm')
-rw-r--r--gnu/packages/guile.scm64
1 files changed, 64 insertions, 0 deletions
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 40d9ae7df8..31fb5c4473 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -33,6 +33,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages ed)
   #:use-module (gnu packages which)
+  #:autoload   (gnu packages ssh) (libssh)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu))
@@ -327,4 +328,67 @@ for Guile\".")
     ;; details.
     (license gpl3+)))
 
+(define-public guile-ssh
+  (package
+    (name "guile-ssh")
+    (version "0.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/artyom-poptsov/libguile-ssh/archive/v"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0vw02r261amkp6238cflww2y9y1v6vfx9ias6hvn8dlx0ghrd5dw"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases (alist-cons-before
+                 'configure 'autoreconf
+                 (lambda* (#:key inputs #:allow-other-keys)
+                   ;; The 'configure' script would want libssh 0.5.4, but that
+                   ;; doesn't exist.
+                   (substitute* "configure.ac"
+                     (("0\\.5\\.4")
+                      "0.5.3"))
+
+                   (substitute* "src/Makefile.am"
+                     (("-lssh_threads" match)
+                      (string-append "-L" (assoc-ref inputs "libssh")
+                                     "/lib " match)))
+
+                   (zero? (system* "autoreconf" "-vfi")))
+                 (alist-cons-after
+                  'install 'fix-libguile-ssh-file-name
+                  (lambda* (#:key outputs #:allow-other-keys)
+                    (let* ((out      (assoc-ref outputs "out"))
+                           (libdir   (string-append out "/lib"))
+                           (guiledir (string-append out
+                                                    "/share/guile/site/2.0")))
+                      (substitute* (find-files guiledir ".scm")
+                        (("\"libguile-ssh\"")
+                         (string-append "\"" libdir "/libguile-ssh\"")))
+
+                      ;; Make sure it works.
+                      (setenv "GUILE_LOAD_PATH" guiledir)
+                      (setenv "GUILE_LOAD_COMPILED_PATH" guiledir)
+                      (system* "guile" "-c" "(use-modules (ssh session))")))
+                  %standard-phases))
+       #:configure-flags (list (string-append "--with-guilesitedir="
+                                              (assoc-ref %outputs "out")
+                                              "/share/guile/site/2.0"))))
+    (native-inputs `(("autoconf" ,autoconf)
+                     ("automake" ,automake)
+                     ("libtool" ,libtool "bin")
+                     ("pkg-config" ,pkg-config)
+                     ("which" ,which)))
+    (inputs `(("guile" ,guile-2.0)
+              ("libssh" ,libssh)))
+    (synopsis "Guile bindings to libssh")
+    (description
+     "Guile-SSH is a library that provides access to the SSH protocol for
+programs written in GNU Guile interpreter.  It is a wrapper to the underlying
+libssh library.")
+    (home-page "https://github.com/artyom-poptsov/libguile-ssh")
+    (license gpl3+)))
+
 ;;; guile.scm ends here