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