Federico Beffa <[email protected]> skribis: > I do not create a ready to use bootstrap package because the resulting > store entry amounts to 940MB! I just keep an unmodified fixed version > tarball (68MB) and take care to patch it in custom phases of the final > GHC package.
Sounds good. > From c39f2fa29bd614227f501cb83f72e2aa827a9123 Mon Sep 17 00:00:00 2001 > From: Federico Beffa <[email protected]> > Date: Wed, 25 Feb 2015 20:20:24 +0100 > Subject: [PATCH] gnu: Add ghc. > > * gnu/packages/haskell.scm: New file. [...] > +;; 43 tests out of 3965 fail. > +;; > +;; Most of them do not appear to be serious: > +;; > +;; - some tests generate files referring to "/bin/sh" and "/bin/ls". I've not > +;; figured out how these references are generated. > +;; > +;; - Some tests allocate more memory than expected (ca. 3% above upper limit) > +;; > +;; - Some tests try to load unavailable libriries: Control.Concurrent.STM, > +;; Data.Vector, Control.Monad.State. > +;; > +;; - Test posix010 tries to check the existence of a user on the system: > +;; getUserEntryForName: does not exist (no such user) All these seem workable: #1 and #4 should be easily fixed by adjusting to the specifics of our build environment, and #2 and #3 might just need to be skipped. But let’s get this patch in first. :-) [...] > + (substitute* (list "testsuite/timeout/Makefile" > + "testsuite/timeout/timeout.py" > + "testsuite/timeout/timeout.hs" > + "testsuite/tests/rename/prog006/Setup.lhs" > + > "testsuite/tests/programs/life_space_leak/life.test") > + (("/bin/sh") (which "sh")) > + (("/bin/rm") "rm")) Perhaps (find-files "testsuite" ".*") would be enough? > + ;; We need to set the locale for the tests to produce results > + ;; identical to the expected ones. s/set the locale/install a UTF-8 locale/ (presumably.) [...] > + (alist-cons-before > + 'configure 'install-bin This phase installs bootstrap binaries to $out/bin and adds them to $PATH, right? Wouldn’t it be enough to install them to $TMPDIR/bin and add that to $PATH? > + (lambda* (#:key inputs outputs #:allow-other-keys) > + (let* ((binaries > + (list > + "./utils/ghc-pwd/dist-install/build/tmp/ghc-pwd" > + "./utils/hpc/dist-install/build/tmp/hpc" > + "./utils/haddock/dist/build/tmp/haddock" > + "./utils/hsc2hs/dist-install/build/tmp/hsc2hs" > + "./utils/runghc/dist-install/build/tmp/runghc" > + "./utils/ghc-cabal/dist-install/build/tmp/ghc-cabal" > + "./utils/hp2ps/dist/build/tmp/hp2ps" > + "./utils/ghc-pkg/dist-install/build/tmp/ghc-pkg" > + "./utils/unlit/dist/build/tmp/unlit" > + "./ghc/stage2/build/tmp/ghc-stage2")) Could we just list base names and do (append-map (lambda (program) (find-files "." (string-append "^" program "$"))) '("ghc-pwd" "hpc" ...)) > + (ld-so (string-append (assoc-ref inputs "libc") > + "/lib/ld-linux-x86-64.so.2")) Please use ,(glibc-dynamic-linker) for the base name. [...] > + (system* (string-append (getcwd) "/configure") > + (string-append "--prefix=" ghc-bootstrap-prefix) > + (string-append "--with-gmp-libraries=" gmp-lib) > + (string-append "--with-gmp-includes=" > gmp-include)) > + (setenv "PATH" > + (string-append (getenv "PATH") ":" > + ghc-bootstrap-prefix "/bin")) > + (zero? (system* "make" "install"))))) Perhaps move “make install” to a separate phase? Thanks for the great work! Eventually we should move Hugs to haskell.scm as well. Ludo’.
