summaryrefslogtreecommitdiff
path: root/Com/Simatime/buildGhc.nix
diff options
context:
space:
mode:
Diffstat (limited to 'Com/Simatime/buildGhc.nix')
-rw-r--r--Com/Simatime/buildGhc.nix54
1 files changed, 54 insertions, 0 deletions
diff --git a/Com/Simatime/buildGhc.nix b/Com/Simatime/buildGhc.nix
new file mode 100644
index 0000000..489651e
--- /dev/null
+++ b/Com/Simatime/buildGhc.nix
@@ -0,0 +1,54 @@
+
+nixpkgs:
+
+{ name # the main module namespace
+, nick # a short name, for the executable
+, deps # deps get passed to ghc
+}:
+
+with nixpkgs;
+
+let
+ nsToPath = ns: builtins.toString (builtins.replaceStrings ["."] ["/"] ns);
+
+ path = nsToPath name;
+
+ depsToPackageSet = packageSet: deps:
+ map (s: builtins.getAttr s packageSet) deps;
+
+ claySrc = pkgs.fetchFromGitHub {
+ owner = "sebastiaanvisser";
+ repo = "clay";
+ rev = "cc7729b1b42a79e261091ff7835f7fc2a7ae3cee";
+ sha256 = "1vd67976lvi5l4qq18zy6j44apynkl44ps04p8vwfx4gzr895dyp";
+ };
+
+ ghc865_ = pkgs.haskell.packages.ghc865.override (oldAttrs: {
+ overrides = with pkgs.haskell.lib; self: super: {
+ clay = self.callCabal2nix "clay" claySrc {};
+ wai-middleware-metrics = dontCheck super.wai-middleware-metrics;
+ };
+ });
+
+ ghc = ghc865_.ghcWithPackages (hp: depsToPackageSet hp deps);
+
+in stdenv.mkDerivation {
+ name = name;
+ version = "0";
+ src = ../../.; # this is the git root
+ nativeBuildInputs = [ ghc ];
+ strictDeps = true;
+ buildPhase = ''
+ #
+ mkdir -p $out/{bin,static} ${path}
+ #
+ # compile with ghc
+ #
+ ${ghc}/bin/ghc -Werror -i. \
+ --make ${path}.hs \
+ -main-is ${name} \
+ -o $out/bin/${nick}
+ '';
+ # the install process was handled above
+ installPhase = "exit 0";
+} // { env = ghc; }