From 3f074a21f0bf339491d993d61e9512d84984896b Mon Sep 17 00:00:00 2001 From: Andreas Enge Date: Sun, 17 Feb 2019 17:46:10 +0100 Subject: [PATCH] gnu: Add gap. * gnu/packages/algebra.scm (gap): New variable. --- gnu/packages/algebra.scm | 146 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 145 insertions(+), 1 deletion(-) diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm index 52eb6ee366..f9ae22b3f3 100644 --- a/gnu/packages/algebra.scm +++ b/gnu/packages/algebra.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Andreas Enge +;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Andreas Enge ;;; Copyright © 2013, 2015, 2017, 2018 Ludovic Courtès ;;; Copyright © 2016, 2017, 2018, 2019 Nicolas Goaziou ;;; Copyright © 2014, 2018 Mark H Weaver @@ -856,3 +856,147 @@ xtensor provides: @item tools to manipulate array expressions and build upon xtensor. @end itemize") (license license:bsd-3))) + +(define-public gap + (package + (name "gap") + (version "4.10.0") + (source + (origin + (method url-fetch) + (uri (string-append "https://www.gap-system.org/pub/gap/gap-" + (version-major+minor version) + "/tar.bz2/gap-" + version + ".tar.bz2")) + (sha256 + (base32 + "1dmb8v4p7j1nnf7sx8sg54b49yln36bi9acwp7w1d3a1nxj17ird")) + (modules '((guix build utils) (ice-9 ftw) (srfi srfi-1))) + (snippet + '(begin + ;; Delete the external gmp and zlib libraries + ;; and a subdirectory not needed for our build. + (for-each delete-file-recursively + '("extern" "hpcgap")) + ;; Delete a failing test. + ;; FIXME: This might be fixed in the next release, see + ;; https://github.com/gap-system/gap/issues/3292 + (delete-file "tst/testinstall/dir.tst") + ;; Delete all packages except for a fixed list. + (with-directory-excursion "pkg" + (for-each delete-file-recursively + (lset-difference string=? (scandir ".") + '("." ".." + ;; Necessary packages. + "GAPDoc-1.6.2" + "primgrp-3.3.2" + "SmallGrp-1.3" ; artistic2.0 + "transgrp" ; artistic2.0 for data, + ; gpl2 or gpl3 for code + ;; Recommanded package. + "io-4.5.4" ; gpl3+ + ;; Optional packages, searched for at start, + ;; and their depedencies. + "alnuth-3.1.0" + "AutoDoc-2018.09.20" + "autpgrp-1.10" + "crisp-1.4.4" ; bsd-2 + ; "ctbllib" ; no explicit license, drop + "FactInt-1.6.2" + "fga" + "irredsol-1.4" ; bsd-2 + "laguna-3.9.0" + "polenta-1.3.8" + "polycyclic-2.14" + "radiroot-2.8" + "resclasses-4.7.1" + "sophus-1.24" + ; "tomlib-1.2.7" ; no explicit license, drop + "utils-0.59")))) + #t)))) + (build-system gnu-build-system) + (inputs + `(("gmp" ,gmp) + ("zlib" ,zlib))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'build 'build-packages + ;; Compile all packages that have not been deleted by the + ;; code snippet above. + (lambda _ + (setenv "CONFIG_SHELL" (which "bash")) + (with-directory-excursion "pkg" + (invoke "../bin/BuildPackages.sh") + #t))) + (add-after 'build-packages 'build-doc + ;; The documentation is bundled, but we create it from source. + (lambda _ + (with-directory-excursion "doc" + (invoke "./make_doc")) + #t)) + (replace 'check + (lambda _ + ;; "make check" is expected to appear in gap-4.10.1 + (invoke "./gap" "tst/testinstall.g") + #t)) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin")) + (prog (string-append bin "/gap")) + (prog-real (string-append bin "/.gap-real")) + (share (string-append out "/share/gap")) + (include (string-append out "/include/gap"))) + ;; Install only the gap binary; the gac compiler is left + ;; for maybe later. "Wrap" it in a shell script that calls + ;; the binary with the correct parameter. + (mkdir-p bin) + (copy-file "gap" prog-real) + (call-with-output-file prog + (lambda (port) + (format port + "#!~a~%exec ~a -l ~a \"$@\"~%" + (which "bash") + prog-real + share))) + (chmod prog #o755) + ;; Install the headers and the library, which are needed by + ;; Sage. The Makefile targets are available in gap-4.10.0, + ;; but planned to be removed in gap-4.10.1. + (invoke "make" "install-headers") + (invoke "make" "install-libgap") + (install-file "gen/config.h" include) + ;; Install a certain number of files and directories to + ;; SHARE, where the wrapped shell script expects them. + ;; Remove information on the build directory from sysinfo.gap. + (substitute* "sysinfo.gap" + (("GAP_BIN_DIR=\".*\"") "GAP_BIN_DIR=\"\"") + (("GAP_LIB_DIR=\".*\"") "GAP_LIB_DIR=\"\"") + (("GAP_CPPFLAGS=\".*\"") "GAP_CPPFLAGS=\"\"")) + (install-file "sysinfo.gap" share) + (copy-recursively "grp" (string-append share "/grp")) + (copy-recursively "pkg" (string-append share "/pkg")) + ;; The following is not the C library libgap.so, but a + ;; library of GAP code. + (copy-recursively "lib" (string-append share "/lib")) + ;; The gap binary looks for documentation inside SHARE. + (copy-recursively "doc" (string-append share "/doc"))) + #t))))) + (home-page "https://www.gap-system.org/") + (synopsis + "System for computational group theory") + (description + "GAP is a system for computational discrete algebra, with particular +emphasis on computational group theory. It provides a programming language, +a library of thousands of functions implementing algebraic algorithms +written in the GAP language as well as large data libraries of algebraic +objects.") + ;; Some packages have different licenses (effectively forcing the + ;; combined work to be licensed as gpl3+); if this is the case, this + ;; is mentioned above next to their name. + ;; Some packages have no license mentioned explicitly; supposedly this + ;; means that the gpl2+ licence of GAP itself applies, but to be on the + ;; safe side, we drop them for now. + (license license:gpl2+)))