-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhaskell-data.nix
39 lines (37 loc) · 1.2 KB
/
haskell-data.nix
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
# Makes a Cabal package with just a 'data' directory with proper 'data-filers' stanza
pkgs: { srcs, cabalDataPatterns, cabalPackageName, cabalPackageVersion ? "0.1.0.0" }:
let
cabalTemplate = pkgs.writeTextFile {
name = "haskell-data.nix-cabal-template";
text = ''
cabal-version: 3.0
name: ${cabalPackageName}
version: ${cabalPackageVersion}
synopsis: A Cabal project that contains data files
build-type: Simple
data-files: ${builtins.concatStringsSep ", " (builtins.map (d: "data/${d}") cabalDataPatterns)}
library
default-language: Haskell2010
build-depends: base >=4.16
exposed-modules: Paths_${builtins.replaceStrings ["-"] ["_"] cabalPackageName}
'';
};
in
pkgs.stdenv.mkDerivation {
inherit srcs;
name = cabalPackageName;
buildInputs = [
pkgs.cabal-install
];
sourceRoot = ".";
buildPhase = ''
mkdir data;
cp -r -t data ${builtins.concatStringsSep " " (builtins.map (src: "${src}/*") srcs)};
cat ${cabalTemplate} > ${cabalPackageName}.cabal;
'';
installPhase = ''
mkdir $out;
cp -r data $out/;
mv ${cabalPackageName}.cabal $out/;
'';
}