Subject: [PATCH v2 2/9] gnu: Add monero-miniupnpc.

From: Theodoros Foradis <[email-masked]>
Date: Sun, 8 Jul 2018 20:39:25 +0300

* gnu/packages/finance.scm (monero-miniupnpc): New variable.
---
 gnu/packages/finance.scm | 43 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 55afa6217..26f4488ab 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016 Alex Griffin <[email-masked]>
 ;;; Copyright © 2016 Hartmut Goebel <[email-masked]>
 ;;; Copyright © 2017 Carlo Zancanaro <[email-masked]>
-;;; Copyright © 2017 Theodoros Foradis <[email-masked]>
+;;; Copyright © 2017, 2018 Theodoros Foradis <[email-masked]>
 ;;; Copyright © 2017 Vasile Dumitrascu <[email-masked]>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <[email-masked]>
 ;;; Copyright © 2018 Eric Bavier <[email-masked]>
@@ -35,6 +35,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system python)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
@@ -329,6 +330,46 @@ generation from a seed.  Your secret keys are encrypted and are never sent to
 other machines/servers.  Electrum does not download the Bitcoin blockchain.")
     (license license:expat)))
 
+(define monero-miniupnpc
+  ;; This package is the bundled version of miniupnpc used with monero. Monero-project has
+  ;; been maintaining its own version of the package since release 0.12.2.0. It includes
+  ;; security fixes not included in upstream releases.
+  (let ((revision "0")
+        (commit "6a63f9954959119568fbc4af57d7b491b9428d87"))
+    (package
+      (inherit miniupnpc)
+      (name "monero-miniupnpc")
+      (version (string-append "2.1-monero-0.12.3.0-" revision "."
+                              (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/monero-project/miniupnp/")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0s67zcz978iapjlq30yy9dl8qda9xhrl3jdi5f99cnbglh5gy16a"))
+                (file-name (string-append name "-" version "-checkout"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(begin
+                    ;; Delete miniupnp subprojects except for miniupnpc.
+                    (for-each
+                     delete-file-recursively
+                     '("minissdpd" "miniupnpc-async" "miniupnpc-libevent"
+                       "miniupnpd" ))
+                    #t))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments miniupnpc)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-before 'build 'change-directory
+               (lambda _
+                 (chdir "miniupnpc")))
+             (add-after 'change-directory 'chmod-header-file
+               (lambda _
+                 (chmod "miniupnpc.h" #o644))))))))))
+
 (define-public monero
   ;; This package bundles easylogging++ and lmdb.
   ;; The bundled easylogging++ is modified, and the changes will not be upstreamed.
-- 
2.16.2