;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2013 Nikita Karetnikov ;;; Copyright © 2016 Efraim Flashner ;;; Copyright © 2017 Ricardo Wurmus ;;; ;;; 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 hugs) #:use-module (guix licenses) #:use-module (guix packages) #:use-module (guix download) #:use-module (guix build-system gnu) #:use-module (gnu packages gcc)) (define-public hugs (package (name "hugs") (version "Sep2006") (source (origin (method url-fetch) (uri (string-append "https://www.haskell.org/hugs/downloads/2006-09/" name "98-plus-" version ".tar.gz")) (sha256 (base32 "1mdy4aq4campgmnpc2qwq7bsbfhaxfsqdghbyyz2wms4lnfcmyma")))) (build-system gnu-build-system) (arguments `(#:phases (modify-phases %standard-phases (add-before 'configure 'fix-sh-n-cp (lambda _ (substitute* '("configure" "libraries/configure" "packages/time/configure" "packages/base/configure" "packages/X11/configure" "packages/HGL/configure" "packages/OpenAL/configure" "packages/OpenGL/configure" "packages/network/configure" "packages/unix/configure" "packages/Cabal/tests/HSQL/configure" "packages/ALUT/configure" "packages/GLUT/configure" "packages/base/cbits/execvpe.c" "packages/base/System/Process/Internals.hs" "packages/Cabal/Distribution/attic" "packages/Cabal/Distribution/Simple/Register.hs" "packages/Cabal/Distribution/Simple/Hugs.hs" "tools/hugs-hc" "src/machdep.c" "libraries/Makefile.in") (("/bin/sh") (which "sh"))) (substitute* '("demos/Makefile.in" "libraries/Makefile.in") (("/bin/cp") (which "cp"))) #t))) #:tests? #f)) ; no test target ;; FIXME: Fails to build with GCC 5. (native-inputs (list gcc-4.9)) (home-page "https://www.haskell.org/hugs/") (synopsis "Functional programming system based on Haskell 98") (description "Hugs 98 is an interpreter and programming environment for developing Haskell programs. It provides an almost complete implementation of Haskell 98, which includes expression and pattern syntax, primitives for monadic I/O, with support for simple interactive programs, handle-based I/O, and exception handling. Hugs has a nearly complete implementation of the Haskell module system and supports a number of advanced extensions.") (license (non-copyleft "file://License" "See License in the distribution.")))) 'dump-port'. * nix/libstore/gc.cc (LocalStore::removeUnusedLinks): Drop files where st.st_size < deduplicationMinSize. * nix/libstore/local-store.hh (deduplicationMinSize): New declaration. * nix/libstore/optimise-store.cc (deduplicationMinSize): New variable. (LocalStore::optimisePath_): Return when PATH is a symlink or smaller than 'deduplicationMinSize'. * tests/derivations.scm ("identical files are deduplicated"): Produce files bigger than %DEDUPLICATION-MINIMUM-SIZE. * tests/nar.scm ("restore-file-set with directories (signed, valid)"): Likewise. * tests/store-deduplication.scm ("deduplicate, below %deduplication-minimum-size"): New test. ("deduplicate", "deduplicate, ENOSPC"): Produce files bigger than %DEDUPLICATION-MINIMUM-SIZE. * tests/store.scm ("substitute, deduplication"): Likewise. Ludovic Courtès 2020-12-15nar: Deduplicate files right as they are restored....This avoids having to traverse and re-read the files that we have just restored, thereby reducing I/O. * guix/serialization.scm (dump-file): New procedure. (restore-file): Add #:dump-file parameter and honor it. * guix/store/deduplication.scm (tee, dump-file/deduplicate): New procedures. * guix/nar.scm (restore-one-item): Pass #:dump-file to 'restore-file'. (finalize-store-file): Pass #:deduplicate? #f to 'register-items'. * tests/nar.scm <top level>: Call 'setenv' to set "NIX_STORE". Ludovic Courtès 2020-12-15serialization: 'restore-file' sets canonical timestamp and permissions....* guix/serialization.scm (restore-file): Set the permissions and mtime of FILE. * guix/nar.scm (finalize-store-file): Pass #:reset-timestamps? #f to 'register-items'. * tests/nar.scm (rm-rf): Add 'chmod' calls to ensure files are writable. ("write-file + restore-file with symlinks"): Ensure every file in OUTPUT passes 'canonical-file?'. * tests/guix-archive.sh: Run "chmod -R +w" before "rm -rf". Ludovic Courtès 2020-12-15serialization: 'fold-archive' notifies about directory processing completion....* guix/serialization.scm (fold-archive): Call PROC with a 'directory-complete tag when done with a directory. (restore-file): Handle it. * guix/scripts/archive.scm (list-contents): Likewise. * guix/scripts/challenge.scm (archive-contents): Likewise. * tests/nar.scm ("write-file-tree + fold-archive"): Adjust accordingly. Ludovic Courtès