python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / development / interpreters / dhall / build-dhall-package.nix
blobf58546a9d3c614b0f1bb901958b6ed31277b1cfa
1 { dhall, dhall-docs, haskell, lib, lndir, runCommand, writeText }:
3 { name
5   # Expressions to add to the cache before interpreting the code
6 , dependencies ? []
8   # A Dhall expression
9   #
10   # Carefully note that the following expression must be devoid of uncached HTTP
11   # imports.  This is because the expression will be evaluated using an
12   # interpreter with HTTP support disabled, so all HTTP imports have to be
13   # protected by an integrity check that can be satisfied via cached
14   # dependencies.
15   #
16   # You can add a dependency to the cache using the preceding `dependencies`
17   # option
18 , code
20   # `buildDhallPackage` can include both a "source distribution" in
21   # `source.dhall` and a "binary distribution" in `binary.dhall`:
22   #
23   # * `source.dhall` is a dependency-free αβ-normalized Dhall expression
24   #
25   # * `binary.dhall` is an expression of the form: `missing sha256:${HASH}`
26   #
27   #   This expression requires you to install the cache product located at
28   #   `.cache/dhall/1220${HASH}` to successfully resolve
29   #
30   # By default, `buildDhallPackage` only includes "binary.dhall" to conserve
31   # space within the Nix store, but if you set the following `source` option to
32   # `true` then the package will also include `source.dhall`.
33 , source ? false
35   # Directory to generate documentation for (i.e. as the `--input` option to the
36   # `dhall-docs` command.)
37   #
38   # If `null`, then no documentation is generated.
39 , documentationRoot ? null
41   # Base URL prepended to paths copied to the clipboard
42   #
43   # This is used in conjunction with `documentationRoot`, and is unused if
44   # `documentationRoot` is `null`.
45 , baseImportUrl ? null
48 let
49   # HTTP support is disabled in order to force that HTTP dependencies are built
50   # using Nix instead of using Dhall's support for HTTP imports.
51   dhallNoHTTP = haskell.lib.compose.appendConfigureFlag "-f-with-http" dhall;
53   file = writeText "${name}.dhall" code;
55   cache = ".cache";
57   data = ".local/share";
59   cacheDhall = "${cache}/dhall";
61   dataDhall = "${data}/dhall";
63   sourceFile = "source.dhall";
66   runCommand name { inherit dependencies; } ''
67     set -eu
69     mkdir -p ${cacheDhall}
71     for dependency in $dependencies; do
72       ${lndir}/bin/lndir -silent $dependency/${cacheDhall} ${cacheDhall}
73     done
75     export XDG_CACHE_HOME=$PWD/${cache}
77     mkdir -p $out/${cacheDhall}
79     ${dhallNoHTTP}/bin/dhall --alpha --file '${file}' > $out/${sourceFile}
81     SHA_HASH=$(${dhallNoHTTP}/bin/dhall hash <<< $out/${sourceFile})
83     HASH_FILE="''${SHA_HASH/sha256:/1220}"
85     ${dhallNoHTTP}/bin/dhall encode --file $out/${sourceFile} > $out/${cacheDhall}/$HASH_FILE
87     echo "missing $SHA_HASH" > $out/binary.dhall
89     ${lib.optionalString (!source) "rm $out/${sourceFile}"}
91     ${lib.optionalString (documentationRoot != null) ''
92     mkdir -p $out/${dataDhall}
94     XDG_DATA_HOME=$out/${data} ${dhall-docs}/bin/dhall-docs --output-link $out/docs ${lib.cli.toGNUCommandLineShell { } {
95       base-import-url = baseImportUrl;
97       input = documentationRoot;
99       package-name = name;
100     }}
101     ''}
102   ''