Subject: [bug#43183] [PATCH v2 4/5] gnu: Add guile-machine-code.

From: Martin Becze <[email-masked]>
Date: Fri, 4 Sep 2020 15:25:16 -0500

* gnu/packages/guile-xyz.scm (guile-machine-code): New variable.
---
 gnu/packages/guile-xyz.scm | 49 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index a2df03760d..a699377ff8 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -3889,3 +3889,52 @@ more objects or strings, represented by a Json object or an IRI.")
       "This is an R6RS library for working with packed byte structures.  It is
 similar to struct in Python or pack and unpack in Perl.")
                                 (license license:expat)))
+
+(define-public guile-machine-code
+  (package
+    (name "guile-machine-code")
+    (version "2.1.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/weinholt/machine-code.git")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32 "0wzj3caj2jypzyjqfkfqkvr3kkbjabsnhldv9kvnx9w9qnria5yd"))))
+    (build-system guile-build-system)
+    (arguments
+     `(#:compile-flags '("--r6rs" "-Wunbound-variable" "-Warity-mismatch")
+       #:modules ((guix build guile-build-system)
+                  (guix build utils)
+                  (ice-9 ftw))
+       #:phases (modify-phases %standard-phases
+                  (add-before 'build 'move-sls-files
+                    (lambda _
+                      ;; Move files under a machine-code directory to reflect
+                      ;; the module hierarchy.
+                      (define (mv dst)
+                        (define (target file)
+                          (string-append  dst "/" file))
+                        (define files (cddr (scandir ".")))
+                        (mkdir dst)
+                        (for-each (lambda (file)
+                                    (rename-file file (target file)))
+                                  files))
+                      (mv "machine-code")
+                      #t)))))
+    (native-inputs
+     `(("guile" ,guile-3.0)))
+    (propagated-inputs
+     `(("guile-struct-pack" ,guile-struct-pack)))
+    (home-page "https://github.com/weinholt/machine-code")
+    (synopsis "Tools that relate to machine code and object formats")
+    (description
+     "This project is about the development of tools that relate to machine
+code and object formats; for all architectures.  Here you'll find libraries for
+working with binary code: assembly, disassembly, instruction tables, object
+formats and related areas.")
+    (license license:expat)))
+
+
-- 
2.28.0