summaryrefslogtreecommitdiff
path: root/.gitlab/shell.nix
blob: 37e6585879d4d6a92e92f51d3863582f74fff01a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
{ system ? "aarch64-darwin"
#, nixpkgs ? fetchTarball https://github.com/angerman/nixpkgs/archive/257cb120334.tar.gz #apple-silicon.tar.gz
, pkgs ? import <nixpkgs> { inherit system; }
, compiler ? if system == "aarch64-darwin" then "ghc8103Binary" else "ghc8103"
}: pkgs.mkShell {
  # this prevents nix from trying to write the env-vars file.
  # we can't really, as NIX_BUILD_TOP/env-vars is not set.
  noDumpEnvVars=1;

  # stop polluting LDFLAGS with -liconv
  dontAddExtraLibs = true;

  # we need to inject ncurses into --with-curses-libraries.
  # the real fix is to teach terminfo to use libcurses on macOS.
  CONFIGURE_ARGS = "--with-intree-gmp --with-curses-libraries=${pkgs.ncurses.out}/lib";

  # magic speedup pony :facepalm:
  #
  # nix has the ugly habbit of duplicating ld flags more than necessary.  This
  # somewhat consolidates this.
  shellHook = (with pkgs.haskell; ''
  export NIX_LDFLAGS=$(for a in $NIX_LDFLAGS; do echo $a; done |sort|uniq|xargs)
  export NIX_LDFLAGS_FOR_TARGET=$(for a in $NIX_LDFLAGS_FOR_TARGET; do echo $a; done |sort|uniq|xargs)
  export NIX_LDFLAGS_FOR_TARGET=$(comm -3 <(for l in $NIX_LDFLAGS_FOR_TARGET; do echo $l; done) <(for l in $NIX_LDFLAGS; do echo $l; done))

  export GHC=${compiler.${compiler}}/bin/ghc
  export ALEX=${packages.${compiler}.alex}/bin/alex
  export HAPPY=${packages.${compiler}.happy}/bin/happy
  export CABAL=${packages.${compiler}.cabal-install}/bin/cabal
  '');

  nativeBuildInputs = (with pkgs; [
    haskell.compiler.${compiler}
    haskell.packages.${compiler}.cabal-install
    haskell.packages.${compiler}.alex
    haskell.packages.${compiler}.happy # _1_19_12 is needed for older GHCs.

    clang_11
    llvm_11

    automake
    autoconf
    m4

    gmp
    ncurses
    libiconv
    zlib.out
    zlib.dev
    glibcLocales
    # locale doesn't build yet :-/
    # locale

    git

    python3
    # python3Full
    # python3Packages.sphinx
    perl

    which
    wget
    file

    xz
    xlibs.lndir

    cacert ])
  ++ (with pkgs.darwin.apple_sdk.frameworks; [ Foundation Security ]);
}