about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/ghcjs/8.10/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/ghcjs/8.10/default.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/ghcjs/8.10/default.nix121
1 files changed, 121 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/ghcjs/8.10/default.nix b/nixpkgs/pkgs/development/compilers/ghcjs/8.10/default.nix
new file mode 100644
index 000000000000..f8e7c31353f7
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/ghcjs/8.10/default.nix
@@ -0,0 +1,121 @@
+{ stdenv
+, pkgsHostHost
+, callPackage
+, fetchgit
+, ghcjsSrcJson ? null
+, ghcjsSrc ? fetchgit (builtins.fromJSON (builtins.readFile ghcjsSrcJson))
+, bootPkgs
+, stage0
+, haskellLib
+, cabal-install
+, nodejs
+, makeWrapper
+, xorg
+, gmp
+, pkg-config
+, gcc
+, lib
+, ghcjsDepOverrides ? (_:_:{})
+, haskell
+, linkFarm
+, buildPackages
+}:
+
+let
+  passthru = {
+    configuredSrc = callPackage ./configured-ghcjs-src.nix {
+      inherit ghcjsSrc;
+      inherit (bootPkgs) ghc alex;
+      inherit (bootGhcjs) version;
+      happy = bootPkgs.happy_1_19_12;
+    };
+    bootPkgs = bootPkgs.extend (lib.foldr lib.composeExtensions (_:_:{}) [
+      (self: _: import stage0 {
+        inherit (passthru) configuredSrc;
+        inherit (self) callPackage;
+      })
+
+      (callPackage ./common-overrides.nix {
+        inherit haskellLib;
+      })
+      ghcjsDepOverrides
+    ]);
+
+    targetPrefix = "";
+    inherit bootGhcjs;
+    inherit (bootGhcjs) version;
+    isGhcjs = true;
+
+    enableShared = true;
+
+    socket-io = pkgsHostHost.nodePackages."socket.io";
+
+    haskellCompilerName = "ghcjs-${bootGhcjs.version}";
+  };
+
+  bootGhcjs = haskellLib.justStaticExecutables passthru.bootPkgs.ghcjs;
+
+  # This provides the stuff we need from the emsdk
+  emsdk = linkFarm "emsdk" [
+    { name = "upstream/bin"; path = buildPackages.clang + "/bin";}
+    { name = "upstream/emscripten"; path = buildPackages.emscripten + "/bin"; }
+  ];
+
+in stdenv.mkDerivation {
+    name = bootGhcjs.name;
+    src = passthru.configuredSrc;
+    nativeBuildInputs = [
+      bootGhcjs
+      passthru.bootPkgs.ghc
+      cabal-install
+      nodejs
+      makeWrapper
+      xorg.lndir
+      gmp
+      pkg-config
+    ] ++ lib.optionals stdenv.isDarwin [
+      gcc # https://github.com/ghcjs/ghcjs/issues/663
+    ];
+    dontConfigure = true;
+    dontInstall = true;
+    buildPhase = ''
+      export HOME=$TMP
+      mkdir $HOME/.cabal
+      touch $HOME/.cabal/config
+      cd lib/boot
+
+      mkdir -p $out/bin
+      mkdir -p $out/lib/${bootGhcjs.name}
+      lndir ${bootGhcjs}/bin $out/bin
+      chmod -R +w $out/bin
+      rm $out/bin/ghcjs-boot
+      cp ${bootGhcjs}/bin/ghcjs-boot $out/bin
+      rm $out/bin/haddock
+      cp ${bootGhcjs}/bin/haddock $out/bin
+      cp ${bootGhcjs}/bin/private-ghcjs-hsc2hs $out/bin/ghcjs-hsc2hs
+
+      wrapProgram $out/bin/ghcjs-boot --set ghcjs_libexecdir $out/bin
+
+      wrapProgram $out/bin/ghcjs --add-flags "-B$out/lib/${bootGhcjs.name}"
+      wrapProgram $out/bin/haddock --add-flags "-B$out/lib/${bootGhcjs.name}"
+      wrapProgram $out/bin/ghcjs-pkg --add-flags "--global-package-db=$out/lib/${bootGhcjs.name}/package.conf.d"
+      wrapProgram $out/bin/ghcjs-hsc2hs --add-flags "-I$out/lib/${bootGhcjs.name}/include --template=$out/lib/${bootGhcjs.name}/include/template-hsc.h"
+
+      env PATH=$out/bin:$PATH $out/bin/ghcjs-boot --with-emsdk=${emsdk} --no-haddock
+    '';
+
+    enableParallelBuilding = true;
+
+    inherit passthru;
+
+    meta = {
+      platforms = with lib.platforms; linux ++ darwin;
+
+      # Hydra limits jobs to only outputting 1 gigabyte worth of files.
+      # GHCJS outputs over 3 gigabytes.
+      # https://github.com/NixOS/nixpkgs/pull/137066#issuecomment-922335563
+      hydraPlatforms = lib.platforms.none;
+
+      maintainers = with lib.maintainers; [ obsidian-systems-maintenance ];
+    };
+  }