-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathrun-hackage-build.nix
More file actions
61 lines (49 loc) · 1.53 KB
/
run-hackage-build.nix
File metadata and controls
61 lines (49 loc) · 1.53 KB
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
{ pkgs, writeTextFile, ... }:
let
ghc = pkgs.haskell.compiler.ghc984;
deps = pkgs.callPackage ./build-depends.nix {};
mkShellFrag = pkg: ''
PATH="$PATH:${pkg}/bin"
PKG_CONFIG_PATH="$PKG_CONFIG_PATH:${pkgs.lib.getDev pkg}/lib/pkgconfig"
'';
mkCabalFrag = pkg: ''
extra-lib-dirs: ${pkgs.lib.getLib pkg}/lib
extra-include-dirs: ${pkgs.lib.getInclude pkg}/include
'';
cabalFrag = pkgs.writeText "cabal-fragment"
(pkgs.lib.concatMapStringsSep "\n" mkCabalFrag deps);
# This is a wrapper of cabal-install which derives a new cabal.config
# containing extra-lib-dirs and extra-include-dirs of the configured
# build dependencies.
cabal-install = pkgs.writeScriptBin "cabal" ''
config="$(mktemp cabal-config.XXX)"
args=()
while [[ $# -gt 0 ]]; do
case $1 in
--config-file=*)
cfg="''${1#*=}"
cat "$cfg" >> "$config"
shift ;;
--config-file)
shift
cat "$cfg" >> "$config"
shift ;;
*) args=( "''${args[@]}" "$1" ); shift ;;
esac
done
cat ${cabalFrag} >> "$config"
${pkgs.cabal-install}/bin/cabal --config-file="$config" ''${args[@]}
ret=$?
rm -f $config
exit $ret
'';
script = ''
#!/bin/sh
PATH="$PATH:${ghc}/bin:${pkgs.curl}/bin:${cabal-install}/bin:${pkgs.pkg-config}/bin"
export PATH
${pkgs.lib.concatMapStringsSep "\n" mkShellFrag deps}
export PKG_CONFIG_PATH
${pkgs.hackage-server}/bin/hackage-build $@
'';
in
pkgs.writeScriptBin "hackage-build" script