Subject: add libnl3

From: Dave Love <[email-masked]>
Date: Tue, 01 Aug 2017 21:29:30 +0100

This is the first step in openfabrics support.  I've also done
libibverbs, but need to check that.  Let me know if someone else is
working on openfabrics.

From 8eb82c832622761e9a50a860f33addc3c15caf13 Mon Sep 17 00:00:00 2001
From: Dave Love <[email-masked]>
Date: Tue, 01 Aug 2017 21:22:26 +0100
Subject: [PATCH 52/69] gnu: Add libnl3.

* gnu/packages/linux.scm (libnl3): New variable.
---
 gnu/packages/linux.scm | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 93a6a583a..6914e60a8 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -4195,3 +4195,78 @@ tool, to understand the type of environment a process runs in, and for
 comparing system environments.")
    (home-page "http://github.com/jamesodhunt/procenv/")
    (license license:gpl3+)))
+
+;; Fixme: Is this the right way/a good way to deal with the Python bits?
+(define-public libnl3
+  (begin
+    (use-modules (gnu packages swig))
+    (package
+      (name "libnl3")
+      (version "3.3.0")
+      (build-system gnu-build-system)
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "https://github.com/thom311/libnl/releases/download/libnl"
+                             (string-join (string-split version #\.) "_")
+                             "/libnl-" version ".tar.gz"))
+         (sha256
+          (base32 "1r3lw3hjvqxi5zqyq2w1qadm3gisd9nlf71dkl4yplacmssnhm3h"))))
+      (native-inputs
+       `(("flex" ,flex)
+         ("bison" ,bison)
+         ("python-2" ,python-2)
+         ("python-3" ,python-3)
+         ("swig" ,swig)
+         ("pkg-config" ,pkg-config)
+         ("libnl3-doc"
+          ,(origin
+             (method url-fetch)
+             (uri (string-append
+                   "https://github.com/thom311/libnl/releases/download/libnl"
+                   (string-join (string-split version #\.) "_")
+                   "/libnl-doc-" version ".tar.gz"))
+             (sha256
+              (base32 "0srab805yj8wb13l64qjyp3mdbqapxg5vk46v3zlhhzpmxqw8j7r"))))))
+      (outputs '("out"))
+      (arguments
+       `(#:configure-flags
+         `(,(format #f "LDFLAGS=-Wl,-rpath=~a/lib" (assoc-ref %outputs "out")))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'install-python
+             (let ((out (assoc-ref %outputs "out")))
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (define (python-inst python)
+                   (let ((ldflags (format #f "LDFLAGS=-Wl,-rpath=~a/lib" out)))
+                     (and
+                      ;; The rpm spec quoth "build twice, otherwise capi.py is
+                      ;; not copied to the build directory"
+                      (zero? (system (format #f "~a ~a setup.py build"
+                                             ldflags python out)))
+                      (zero?
+                       (system (format #f "~a ~a setup.py install --prefix=~a"
+                                       ldflags python out)))
+                      (zero? (system* python "setup.py" "clean")))))
+                 (with-directory-excursion "./python"
+                   (for-each python-inst '("python2" "python3"))))))
+           (add-after 'install 'install-doc
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((dest (format #f "~a/share/doc"
+                                   (assoc-ref outputs "doc"))))
+                 (mkdir-p dest)
+                 (with-directory-excursion dest
+                   (and
+                    (zero? (system* "tar" "xf" (assoc-ref inputs "libnl3-doc")))
+                    (zero? (system "mv *libnl-doc* libnl3"))))))))))
+    (home-page "http://www.infradead.org/~tgr/libnl/")
+    (synopsis "Convenience library for Linux netlink sockets")
+    (description
+     "The libnl suite is a collection of libraries providing APIs to netlink
+protocol based Linux kernel interfaces.
+
+Netlink is an IPC mechanism primarly between the kernel and user space
+processes.  It was designed to be a more flexible successor to ioctl to
+provide mainly networking related kernel configuration and monitoring
+interfaces.")
+    (license license:lgpl2.1))))
-- 
2.11.0