gnu: Add rust-crypto-hash-0.3.
[jackhill/guix/guix.git] / gnu / packages / ada.scm
index d6cd1e9..d24aa2b 100644 (file)
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
+;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (gnu packages)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
-  #:use-module (gnu packages python))
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (ice-9 match))
+
+(define-public ada/ed
+  (package
+    (name "ada-ed")
+    (version "1.11.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             ;; The HOME-PAGE sources, mirrored by one of the original authors.
+             (url "https://github.com/daveshields/AdaEd")
+             (commit "57daecfb7ccadfd9aaf13b4d54f51065affbe599")))
+       (sha256
+        (base32 "1k97a8nqsvbsadizrmhhypcx758sxqkai8wq3ckk853qxvzaasd8"))
+       (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (supported-systems (list "i686-linux" "x86_64-linux"
+                             "armhf-linux" "aarch64-linux"))
+    (outputs (list "out" "debug"))
+    (arguments
+     `(#:system
+       ,@(match (%current-system)
+           ;; This package predates 64-bit PCs: a ‘64-bit’ adaexec segfaults.
+           ;; Force a 32-bit build targeting a similar architecture.
+           ((or "armhf-linux" "aarch64-linux")
+            `("armhf-linux"))
+           (_
+            `("i686-linux")))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list (string-append
+                "CFLAGS=-g"             ; compile with :debug symbols
+                " -DOP_SYS='\"GNU\"'"   ; sic; quoting gets mangled somewhere
+                " -DSYSTEM_V"           ; closest to modern GNU
+                " -DWORDSIZE32"
+                " -DALIGN4")            ; suffices on both x86 and ARM
+               "LFLAGS="                ; don't link against -lg
+               (string-append "BINDIR=" out "/bin")
+               (string-append "LIBDIR=" out "/lib")
+               (string-append "MANDIR=" out "/share/man")))
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-26))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-sources
+           (lambda _
+             ;; Rename the custom (and incompatible) getline() implementation.
+             (substitute* "adalex.c"
+               (("getline") "adaed_getline"))
+             ;; Work around ‘error: initializer element is not constant’ by not
+             ;; initialising MSGFILE.
+             (substitute* "vars.ch"
+               (("INIT\\(stdout\\)") ""))
+             #t))
+         (delete 'configure)            ; no configure script
+         (add-before 'build 'find-build-scripts
+           (lambda _
+             (setenv "PATH" (string-append ".:" (getenv "PATH")))
+             #t))
+         (add-after 'build 'build-predef
+           (lambda* (#:key make-flags #:allow-other-keys)
+             ;; These aren't otherwise compiled until the ‘install’ phase.
+             (apply invoke "make" "predef" make-flags)
+             #t))
+         (delete 'check)                ; no test suite; run our own below
+         (add-before 'install 'create-output-directories
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (mkdir-p (string-append out "/share/man/manl"))
+               #t)))
+         (add-after 'install 'check
+           ;; Run most of the included demos as our own ‘test suite’.
+           (lambda* (#:key outputs tests? #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (when tests?
+                 (setenv "ADAED" (string-append out "/lib"))
+                 (setenv "PATH" (string-append out "/bin:" (getenv "PATH")))
+                 (with-directory-excursion "demos" ; won't run outside of it
+                   (for-each
+                    delete-file
+                    '("runc"   ; ‘invalid data. Please make it a positive no.’
+                      "rund"   ; deadlocks by design
+                      "rune"   ; ‘dining2.ada: No such file or directory’
+                      "rung")) ; ‘mathlib cannot be used as a library’ (!)
+                   (for-each (lambda (script)
+                               (format #t "\n=== Invoking ~a ===\n" script)
+                               (invoke script))
+                             (find-files "." "^run")))))))
+         (add-after 'install 'clean-up-output
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (with-directory-excursion out
+                 ;; These needn't be executable.
+                 (for-each (cut chmod <> #o644)
+                           (append (find-files "lib" "\\....$")
+                                   (find-files "share" ".")))
+                 #t)))))))
+    (native-inputs
+     `(("sed" ,sed)))
+    (home-page (string-append "https://web.archive.org/web/20140902150609/"
+                              "http://www2.informatik.uni-stuttgart.de/iste/ps/"
+                              "ada-software/html/dos_ada.html"))
+    (synopsis "Ada 83 interpreter")
+    (description "Ada/Ed is a translator-interpreter for Ada 83.  It's intended
+primarily as a teaching tool and lacks the capacity, performance, and robustness
+of other contemporary or modern-day Ada compilers.
+
+Ada/Ed was the first Ada compiler to pass the @acronym{ACVC, Ada Compiler
+Validation Suite} version 1.7 but fails many newer tests and is not a validated
+Ada system.  Being an interpreter, it does not implement most representation
+clauses, and thus does not support systems programming close to the machine
+level.")
+    (license license:gpl2+)))
 
 (define-public python2-langkit
   (let ((commit "fe0bc8bf60dbd2937759810df76ac420d99fc15f")
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
-                      (url "https://github.com/AdaCore/langkit.git")
+                      (url "https://github.com/AdaCore/langkit")
                       (commit commit)))
                 (sha256
                  (base32
@@ -59,3 +177,43 @@ specification in our Python DSL and Langkit will generate for you an
 Ada library with bindings for the C and Python programming languages.")
       (home-page "https://github.com/AdaCore/langkit/")
       (license license:gpl3+))))   ; and gcc runtime library exception
+
+(define-public python2-libadalang
+  (let ((commit "9b205e9bacdd50a68117727332e16fbef5f6ac49")
+        (revision "0"))
+    (package
+      (name "python2-libadalang")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/AdaCore/libadalang")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "06hsnzj2syqpq2yhg1bb0zil7ydbyqkdmkjbf8j9b5sdgkyh5xrp"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (build-system python-build-system)
+      (native-inputs
+       `(("python2-langkit" ,python2-langkit)
+         ("python2-quex" ,python2-quex-0.67.3)))
+      (arguments
+       `(#:python ,python-2
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'build
+             (lambda _
+               (invoke "python2" "ada/manage.py" "generate")
+               (invoke "python2" "ada/manage.py" "build")))
+           (replace 'check
+             (lambda _
+               (invoke "python2" "ada/manage.py" "test")))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out")))
+                 (invoke "python2" "ada/manage.py" "install" out)))))))
+      (synopsis "Semantic Analysis for Ada in Python")
+      (description "@code{libadalang} provides a high-performance semantic
+engine for the Ada programming language.")
+      (home-page "https://github.com/AdaCore/libadalang")
+      (license license:gpl3)))) ; and gcc runtime gcc lib exception