Skip to content

Commit

Permalink
elm: 0.18 -> 0.19
Browse files Browse the repository at this point in the history
update makeElmStuff to makeDotElm, create elm-elm.nix listing the elm
code that elm itself embeds, and pre-fetch it so that the elm build
can function offline.  also include a versions.dat file, as created
during an impure build of elm.  set ELM_HOME so that the elm build can
find these things.

continues NixOS#45448
  • Loading branch information
jerith666 committed Aug 24, 2018
1 parent e0e20fd commit e7d0df8
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 10 deletions.
37 changes: 27 additions & 10 deletions pkgs/development/compilers/elm/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,26 @@
# 3) Run ./elm2nix.rb in elm-reactor's directory.
# 4) Move the resulting 'package.nix' to 'packages/elm-reactor-elm.nix'.

# the elm binary embeds a piece of pre-compiled elm code, used by 'elm
# reactor'. this means that the build process for 'elm' effectively
# executes 'elm make'. that in turn expects to retrieve the elm
# dependencies of that code (elm/core, etc.) from
# package.elm-lang.org, as well as a cached bit of metadata
# (versions.dat).

# the makeDotElm function lets us retrieve these dependencies in the
# standard nix way. we have to copy them in (rather than symlink) and
# make them writable because the elm compiler writes other .dat files
# alongside the source code. versions.dat was produced during an
# impure build of this same code; the build complains that it can't
# update this cache, but continues past that warning.

# finally, we set ELM_HOME to point to these pre-fetched artifacts so
# that the default of ~/.elm isn't used.

let
makeElmStuff = deps:
let json = builtins.toJSON (lib.mapAttrs (name: info: info.version) deps);
makeDotElm = ver: deps:
let versionsDat = ./versions.dat;
cmds = lib.mapAttrsToList (name: info: let
pkg = stdenv.mkDerivation {

Expand All @@ -29,23 +46,23 @@ let

};
in ''
mkdir -p elm-stuff/packages/${name}
ln -s ${pkg} elm-stuff/packages/${name}/${info.version}
mkdir -p .elm/${ver}/package/${name}
cp -R ${pkg} .elm/${ver}/package/${name}/${info.version}
chmod -R +w .elm/${ver}/package/${name}/${info.version}
'') deps;
in ''
export HOME=/tmp
mkdir elm-stuff
cat > elm-stuff/exact-dependencies.json <<EOF
${json}
EOF
mkdir -p .elm/${ver}/package;
ln -s ${versionsDat} .elm/${ver}/package/versions.dat;
'' + lib.concatStrings cmds;

hsPkgs = haskell.packages.ghc822.override {
overrides = self: super:
let hlib = haskell.lib;
elmPkgs = {
elm = hlib.overrideCabal (self.callPackage ./packages/elm.nix { }) {
preConfigure = "export HOME=`pwd`";
preConfigure = ''
export ELM_HOME=`pwd`/.elm
'' + (makeDotElm "0.19.0" (import ./packages/elm-elm.nix));
};

/*
Expand Down
50 changes: 50 additions & 0 deletions pkgs/development/compilers/elm/packages/elm-elm.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
{
"elm/time" = {
version = "1.0.0";
sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1";
};
"elm/url" = {
version = "1.0.0";
sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4";
};
"elm/json" = {
version = "1.0.0";
sha256 = "1g0hafkqf2q633r7ir9wxpb1lnlzskhpsyi0h5bkzj0gl072zfnb";
};
"elm/html" = {
version = "1.0.0";
sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k";
};
"elm/parser" = {
version = "1.0.0";
sha256 = "0k4zlq30lrvawqvzwbvsl0hrmwf9s832mb41z7fdspm4549dj7wc";
};
"elm/http" = {
version = "1.0.0";
sha256 = "1igmm89ialzrjib1j8xagkxalq1x2gj4l0hfxcd66mpwmvg7psl8";
};
"elm/virtual-dom" = {
version = "1.0.0";
sha256 = "0hm8g92h7z39km325dlnhk8n00nlyjkqp3r3jppr37k2k13md6aq";
};
"elm/browser" = {
version = "1.0.0";
sha256 = "1apmvyax93nvmagwj00y16zx10kfv640cxpi64xgqbgy7d2wphy4";
};
"elm/core" = {
version = "1.0.0";
sha256 = "10kr86h4v5h4p0586q406a5wbl8xvr1jyrf6097zp2wb8sv21ylw";
};
"elm/svg" = {
version = "1.0.0";
sha256 = "08x0v8p9wm699jjmsnbq69pxv3jh60j4f6fg7y6hyr7xxj85y390";
};
"elm/project-metadata-utils" = {
version = "1.0.0";
sha256 = "1d4rd4grrnbdvj9gf00h7dr6hbkjzawgkzpizfrkp1z1pyr3mvq9";
};
"elm-explorations/markdown" = {
version = "1.0.0";
sha256 = "0k3110ixa4wwf3vkkdplagwah9ypr965qxr1y147rnsc1xsxmr6y";
};
}
Binary file added pkgs/development/compilers/elm/versions.dat
Binary file not shown.

0 comments on commit e7d0df8

Please sign in to comment.