;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017 Andy Patterson ;;; Copyright © 2017 Tobias Geerinckx-Rice ;;; Copyright © 2018 Ricardo Wurmus ;;; Copyright © 2019 Brett Gilio ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (gnu packages sml) #:use-module (gnu packages lesstif) #:use-module (gnu packages libffi) #:use-module (gnu packages multiprecision) #:use-module (gnu packages xorg) #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages)) (define-public polyml (package (name "polyml") (version "5.8") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/polyml/polyml.git") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 (base32 "1jabrf9cnmsppawga6q5pjiq1cdayilxp66fkxykczs6vv2gz7f9")))) (build-system gnu-build-system) (inputs `(("gmp" ,gmp) ("lesstif" ,lesstif) ("libffi" ,libffi) ("libx11" ,libx11) ("libxt" ,libxt))) (arguments '(#:configure-flags (list "--with-system-libffi=yes" "--with-x=yes" "--with-threads=yes" "--with-gmp=yes") #:phases (modify-phases %standard-phases (add-after 'build 'build-compiler (lambda* (#:key make-flags parallel-build? #:allow-other-keys) (define flags (if parallel-build? (cons (format #f "-j~d" (parallel-job-count)) make-flags) make-flags)) (apply system* "make" (append flags (list "compiler")))))))) (home-page "https://www.polyml.org/") (synopsis "Standard ML implementation") (description "Poly/ML is a Standard ML implementation. It is fully compatible with the ML97 standard. It includes a thread library, a foreign function interface, and a symbolic debugger.") ;; Some source files specify 'or any later version'; some don't (license (list license:lgpl2.1 license:lgpl2.1+)))) (define-private mlton-reduced (package (name "mlton") (version "20180207") (source (origin (method url-fetch) (uri (string-append "https://github.com/MLton/" name "/releases/download/on-" version "-release/" name "-" version "-1.amd64-linux.tgz")) (sha256 (base32 "0f4q575yfm5dpg4a2wsnqn4l2zrar96p6rlsk0dw10ggyfwvsjlf")))) (build-system trivial-build-system) ;; TODO: The build arguments can be much more programmatic. (arguments '(#:modules ((guix build utils)) #:builder (begin (use-modules (guix build utils)) (let* ((out (assoc-ref %outputs "out")) (source (assoc-ref %build-inputs "source")) (tar (string-append (assoc-ref %build-inputs "tar") "/bin/tar")) (patchelf (string-append (assoc-ref %build-inputs "patchelf") "/bin/patchelf")) (ld (string-append (assoc-ref %build-inputs "glibc") "/lib/ld-linux-x86-64.so.2")) (gmp (string-append (assoc-ref %build-inputs "gmp") "/lib")) (bash (string-append (assoc-ref %build-inputs "bash") "/bin/bash")) (rm (string-append (assoc-ref %build-inputs "coreutils") "/bin/rm")) (PATH (string-append (assoc-ref %build-inputs "gzip") "/bin" ":" (assoc-ref %build-inputs "tar") "/bin"))) (mkdir-p out) (mkdir-p (string-append out "/bin")) (with-directory-excursion out (setenv "PATH" PATH) (system* tar "xf" source "--strip-components=1") ;; PATCHES FOR /LIB/MLTON/MLTON-COMPILE (system* patchelf "--set-interpreter" ld (string-append out "/lib/mlton/mlton-compile")) (system* patchelf "--set-rpath" gmp (string-append out "/lib/mlton/mlton-compile")) ;; PATCHES FOR /BIN/MLLEX (system* patchelf "--set-interpreter" ld (string-append out "/bin/mllex")) (system* patchelf "--set-rpath" gmp (string-append out "/bin/mllex")) ;; PATCHES FOR /BIN/MLYACC (system* patchelf "--set-interpreter" ld (string-append out "/bin/mlyacc")) (system* patchelf "--set-rpath" gmp (string-append out "/bin/mlyacc")) ;; DELETE ALL UNNEEDED COMPONENTS (system* rm "-rf" "bin/mlprof" "bin/mlnlffigen" "LICENSE" "Makefile" "CHANGELOG.adoc" "README.adoc" "share") ;; PATCH SHEBANG FOR BIN/MLTON (substitute* "bin/mlton" (("/usr/bin/env bash") bash))))))) (native-inputs `(("glibc" ,glibc) ("patchelf" ,patchelf) ("tar" ,tar) ("bash" ,bash) ("coreutils" ,coreutils) ("gzip" ,gzip) ("gmp" ,gmp))) (supported-systems '("x86_64-linux")) (synopsis #f) (description #f) (home-page #f) (license #f))) (define-public mlton-no-gcc (package (name "mlton-no-gcc") (version "20180207") (source (origin (method url-fetch) (uri (string-append "https://github.com/MLton/" name "/archive/on-" version "-release.tar.gz")) (sha256 (base32 "1l1flhxx8hr4n3mf87m02231r3m2f3sh28zfxma3g41jscmj21zi")))) (build-system gnu-build-system) (arguments `(#:parallel-build? #f ; See: https://github.com/MLton/mlton/issues/348 #:phases (modify-phases %standard-phases (delete 'configure) (replace 'install (lambda _ (invoke "make" (string-append "PREFIX=" (assoc-ref %outputs "out")) "install")))))) (native-inputs `(("mlton" ,mlton-reduced) ("which" ,which))) (propagated-inputs `(("gmp" ,gmp))) (supported-systems '("x86_64-linux")) (synopsis "Whole-program, optimizing Standard ML compiler") (description "MLton is a whole-program optimizing compiler for Standard ML. MLton generates standalone executables with excellent runtime performance, is SML '97 compliant, and has a complete basis library. MLton has source-level profiling, a fast C FFI, an interface to the GNU multiprecision library, and lots of useful libraries.") (home-page "http://mlton.org/") (license license:hpnd))) (define-public mlton (package (inherit mlton-no-gcc) (name "mlton") (propagated-inputs `(("gcc-toolchain" ,gcc-toolchain) ,@(package-propagated-inputs mlton-no-gcc)))))