summary refs log tree commit diff
diff options
context:
space:
mode:
authorDomen Kožar <domen@enlambda.com>2019-01-05 13:20:16 +0000
committerGitHub <noreply@github.com>2019-01-05 13:20:16 +0000
commit5ec91bac2f58d96528d6afbbb05a788ac40d2768 (patch)
treed1a63d48ec17618ac0e02088546519e079bd61c4
parent167578163a5031e8d7519b010824499db73fa62f (diff)
parent28293fb169ac78df15360c6d98da5022bda8f25a (diff)
downloadnixpkgs-5ec91bac2f58d96528d6afbbb05a788ac40d2768.tar
nixpkgs-5ec91bac2f58d96528d6afbbb05a788ac40d2768.tar.gz
nixpkgs-5ec91bac2f58d96528d6afbbb05a788ac40d2768.tar.bz2
nixpkgs-5ec91bac2f58d96528d6afbbb05a788ac40d2768.tar.lz
nixpkgs-5ec91bac2f58d96528d6afbbb05a788ac40d2768.tar.xz
nixpkgs-5ec91bac2f58d96528d6afbbb05a788ac40d2768.tar.zst
nixpkgs-5ec91bac2f58d96528d6afbbb05a788ac40d2768.zip
Merge pull request #53326 from domenkozar/elm-packaging-rehaul
Elm: automate packaging with elm2nix
-rw-r--r--doc/package-notes.xml18
-rw-r--r--pkgs/development/compilers/elm/README.md24
-rw-r--r--pkgs/development/compilers/elm/default.nix69
-rwxr-xr-xpkgs/development/compilers/elm/elm2nix.rb26
-rw-r--r--pkgs/development/compilers/elm/packages/elm-elm.nix50
-rw-r--r--pkgs/development/compilers/elm/packages/elm-srcs.nix62
-rw-r--r--pkgs/development/compilers/elm/packages/elm.nix1
-rw-r--r--pkgs/development/compilers/elm/packages/tasty-quickcheck.nix14
-rwxr-xr-xpkgs/development/compilers/elm/update.sh9
-rw-r--r--pkgs/development/compilers/elm/versions.datbin83377 -> 94810 bytes
10 files changed, 109 insertions, 164 deletions
diff --git a/doc/package-notes.xml b/doc/package-notes.xml
index 803d343aa09..e23593107d8 100644
--- a/doc/package-notes.xml
+++ b/doc/package-notes.xml
@@ -307,23 +307,19 @@ packageOverrides = pkgs: {
 </screen>
   </para>
  </section>
+
  <section xml:id="sec-elm">
   <title>Elm</title>
 
   <para>
-   The Nix expressions for Elm reside in
-   <filename>pkgs/development/compilers/elm</filename>. They are generated
-   automatically by <command>update-elm.rb</command> script. One should specify
-   versions of Elm packages inside the script, clear the
-   <filename>packages</filename> directory and run the script from inside it.
-   <literal>elm-reactor</literal> is special because it also has Elm package
-   dependencies. The process is not automated very much for now -- you should
-   get the <literal>elm-reactor</literal> source tree (e.g. with
-   <command>nix-shell</command>) and run <command>elm2nix.rb</command> inside
-   it. Place the resulting <filename>package.nix</filename> file into
-   <filename>packages/elm-reactor-elm.nix</filename>.
+   To update Elm compiler, see <filename>nixpkgs/pkgs/development/compilers/elm/README.md</filename>.
+  </para>
+
+  <para>
+   To package Elm applications, <link xlink:href="https://github.com/hercules-ci/elm2nix#elm2nix">read about elm2nix</link>.
   </para>
  </section>
+
  <section xml:id="sec-shell-helpers">
   <title>Interactive shell helpers</title>
 
diff --git a/pkgs/development/compilers/elm/README.md b/pkgs/development/compilers/elm/README.md
new file mode 100644
index 00000000000..f0254d0f954
--- /dev/null
+++ b/pkgs/development/compilers/elm/README.md
@@ -0,0 +1,24 @@
+# To update Elm:
+
+Modify revision in ./update.sh and run it
+
+# Notes about the build process:
+
+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.
+
+More: https://blog.hercules-ci.com/elm/2019/01/03/elm2nix-0.1/
diff --git a/pkgs/development/compilers/elm/default.nix b/pkgs/development/compilers/elm/default.nix
index 47a0d459a93..aa8d9da9faa 100644
--- a/pkgs/development/compilers/elm/default.nix
+++ b/pkgs/development/compilers/elm/default.nix
@@ -2,95 +2,40 @@
 , haskell, nodejs
 , fetchurl, fetchpatch, makeWrapper, git }:
 
-# To update:
-
-# 1) Modify ./update.sh and run it
-
-# 2) to generate versions.dat:
-# 2.1) git clone https://github.com/elm/compiler.git
-# 2.2) cd compiler
-# 2.3) cabal2nix --shell . | sed 's/"default",/"ghc822",/' > shell.nix
-# 2.4) nix-shell
-# 2.5) mkdir .elm
-# 2.6) export ELM_HOME=$(pwd)/.elm
-# 2.7) cabal build
-# 2.8) cp .elm/0.19.0/package/versions.dat ...
-
-# 3) generate a template for elm-elm.nix with:
-# (
-#   echo "{";
-#   jq '.dependencies | .direct, .indirect | to_entries | .[] | { (.key) : { version : .value, sha256:  "" } } ' \
-#   < ui/browser/elm.json \
-#   | sed 's/:/ =/' \
-#   | sed 's/^[{}]//' \
-#   | sed -E 's/(["}]),?$/\1;/' \
-#   | sed -E 's/"(version|sha256)"/\1/' \
-#   | grep -v '^$';
-#   echo "}"
-# )
-#
-# ... then fill in the sha256s
-
-# Notes:
-
-# 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
   fetchElmDeps = import ./fetchElmDeps.nix { inherit stdenv lib fetchurl; };
-  hsPkgs = haskell.packages.ghc822.override {
+  hsPkgs = haskell.packages.ghc863.override {
     overrides = self: super: with haskell.lib;
       let elmPkgs = {
             elm = overrideCabal (self.callPackage ./packages/elm.nix { }) (drv: {
               # sadly with parallelism most of the time breaks compilation
               enableParallelBuilding = false;
-              preConfigure = fetchElmDeps {
-                elmPackages = (import ./packages/elm-elm.nix);
+              preConfigure = self.fetchElmDeps {
+                elmPackages = (import ./packages/elm-srcs.nix);
                 versionsDat = ./versions.dat;
               };
               buildTools = drv.buildTools or [] ++ [ makeWrapper ];
-              patches = [
-                (fetchpatch {
-                  url = "https://github.com/elm/compiler/pull/1784/commits/78d2d8eab310552b1b877a3e90e1e57e7a09ddec.patch";
-                  sha256 = "0vdhk16xqm2hxw12s1b91a0bmi8w4wsxc086qlzglgnjxrl5b3w4";
-                })
-              ];
+              jailbreak = true;
               postInstall = ''
                 wrapProgram $out/bin/elm \
                   --prefix PATH ':' ${lib.makeBinPath [ nodejs ]}
               '';
             });
 
-
-
             /*
             The elm-format expression is updated via a script in the https://github.com/avh4/elm-format repo:
             `pacakge/nix/build.sh`
             */
-            elm-format = self.callPackage ./packages/elm-format.nix {};
+            elm-format = justStaticExecutables (doJailbreak (self.callPackage ./packages/elm-format.nix {}));
+
             inherit fetchElmDeps;
+            elmVersion = elmPkgs.elm.version;
           };
       in elmPkgs // {
         inherit elmPkgs;
-        elmVersion = elmPkgs.elm.version;
 
         # Needed for elm-format
         indents = self.callPackage ./packages/indents.nix {};
-        tasty-quickcheck = self.callPackage ./packages/tasty-quickcheck.nix {};
       };
   };
 in hsPkgs.elmPkgs
diff --git a/pkgs/development/compilers/elm/elm2nix.rb b/pkgs/development/compilers/elm/elm2nix.rb
deleted file mode 100755
index fab5551ca15..00000000000
--- a/pkgs/development/compilers/elm/elm2nix.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env ruby
-
-require 'json'
-
-system("elm-package install -y")
-depsSrc = JSON.parse(File.read("elm-stuff/exact-dependencies.json"))
-deps = Hash[ depsSrc.map { |pkg, ver|
-  url = "https://github.com/#{pkg}/archive/#{ver}.tar.gz"
-  sha256 = `nix-prefetch-url #{url}`
-
-  [ pkg, { version: ver,
-           sha256: sha256.strip
-         }
-  ]
-} ]
-
-File.open("package.nix", 'w') do |file|
-  file.puts "{"
-    for pkg, info in deps
-      file.puts "  \"#{pkg}\" = {"
-      file.puts "    version = \"#{info[:version]}\";"
-      file.puts "    sha256 = \"#{info[:sha256]}\";"
-      file.puts "  };"
-    end
-  file.puts "}"
-end
diff --git a/pkgs/development/compilers/elm/packages/elm-elm.nix b/pkgs/development/compilers/elm/packages/elm-elm.nix
deleted file mode 100644
index a38e21daa06..00000000000
--- a/pkgs/development/compilers/elm/packages/elm-elm.nix
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "elm/browser" = {
-    version = "1.0.0";
-    sha256 = "1apmvyax93nvmagwj00y16zx10kfv640cxpi64xgqbgy7d2wphy4";
-  };
-  "elm/core" = {
-    version = "1.0.0";
-    sha256 = "10kr86h4v5h4p0586q406a5wbl8xvr1jyrf6097zp2wb8sv21ylw";
-  };
-  "elm/html" = {
-    version = "1.0.0";
-    sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k";
-  };
-  "elm/http" = {
-    version = "1.0.0";
-    sha256 = "1igmm89ialzrjib1j8xagkxalq1x2gj4l0hfxcd66mpwmvg7psl8";
-  };
-  "elm/json" = {
-    version = "1.0.0";
-    sha256 = "1g0hafkqf2q633r7ir9wxpb1lnlzskhpsyi0h5bkzj0gl072zfnb";
-  };
-  "elm/project-metadata-utils" = {
-    version = "1.0.0";
-    sha256 = "1d4rd4grrnbdvj9gf00h7dr6hbkjzawgkzpizfrkp1z1pyr3mvq9";
-  };
-  "elm/svg" = {
-    version = "1.0.0";
-    sha256 = "08x0v8p9wm699jjmsnbq69pxv3jh60j4f6fg7y6hyr7xxj85y390";
-  };
-  "elm-explorations/markdown" = {
-    version = "1.0.0";
-    sha256 = "0k3110ixa4wwf3vkkdplagwah9ypr965qxr1y147rnsc1xsxmr6y";
-  };
-  "elm/parser" = {
-    version = "1.0.0";
-    sha256 = "0k4zlq30lrvawqvzwbvsl0hrmwf9s832mb41z7fdspm4549dj7wc";
-  };
-  "elm/time" = {
-    version = "1.0.0";
-    sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1";
-  };
-  "elm/url" = {
-    version = "1.0.0";
-    sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4";
-  };
-  "elm/virtual-dom" = {
-    version = "1.0.0";
-    sha256 = "0hm8g92h7z39km325dlnhk8n00nlyjkqp3r3jppr37k2k13md6aq";
-  };
-}
diff --git a/pkgs/development/compilers/elm/packages/elm-srcs.nix b/pkgs/development/compilers/elm/packages/elm-srcs.nix
new file mode 100644
index 00000000000..e1f941626dd
--- /dev/null
+++ b/pkgs/development/compilers/elm/packages/elm-srcs.nix
@@ -0,0 +1,62 @@
+{
+
+      "elm-explorations/markdown" = {
+        sha256 = "0k3110ixa4wwf3vkkdplagwah9ypr965qxr1y147rnsc1xsxmr6y";
+        version = "1.0.0";
+      };
+
+      "elm/json" = {
+        sha256 = "1g0hafkqf2q633r7ir9wxpb1lnlzskhpsyi0h5bkzj0gl072zfnb";
+        version = "1.0.0";
+      };
+
+      "elm/html" = {
+        sha256 = "1n3gpzmpqqdsldys4ipgyl1zacn0kbpc3g4v3hdpiyfjlgh8bf3k";
+        version = "1.0.0";
+      };
+
+      "elm/svg" = {
+        sha256 = "08x0v8p9wm699jjmsnbq69pxv3jh60j4f6fg7y6hyr7xxj85y390";
+        version = "1.0.0";
+      };
+
+      "elm/project-metadata-utils" = {
+        sha256 = "1d4rd4grrnbdvj9gf00h7dr6hbkjzawgkzpizfrkp1z1pyr3mvq9";
+        version = "1.0.0";
+      };
+
+      "elm/browser" = {
+        sha256 = "1apmvyax93nvmagwj00y16zx10kfv640cxpi64xgqbgy7d2wphy4";
+        version = "1.0.0";
+      };
+
+      "elm/core" = {
+        sha256 = "10kr86h4v5h4p0586q406a5wbl8xvr1jyrf6097zp2wb8sv21ylw";
+        version = "1.0.0";
+      };
+
+      "elm/http" = {
+        sha256 = "1igmm89ialzrjib1j8xagkxalq1x2gj4l0hfxcd66mpwmvg7psl8";
+        version = "1.0.0";
+      };
+
+      "elm/parser" = {
+        sha256 = "0k4zlq30lrvawqvzwbvsl0hrmwf9s832mb41z7fdspm4549dj7wc";
+        version = "1.0.0";
+      };
+
+      "elm/url" = {
+        sha256 = "0av8x5syid40sgpl5vd7pry2rq0q4pga28b4yykn9gd9v12rs3l4";
+        version = "1.0.0";
+      };
+
+      "elm/time" = {
+        sha256 = "0vch7i86vn0x8b850w1p69vplll1bnbkp8s383z7pinyg94cm2z1";
+        version = "1.0.0";
+      };
+
+      "elm/virtual-dom" = {
+        sha256 = "0hm8g92h7z39km325dlnhk8n00nlyjkqp3r3jppr37k2k13md6aq";
+        version = "1.0.0";
+      };
+}
diff --git a/pkgs/development/compilers/elm/packages/elm.nix b/pkgs/development/compilers/elm/packages/elm.nix
index 41998f4c9b3..67e63ea2b8e 100644
--- a/pkgs/development/compilers/elm/packages/elm.nix
+++ b/pkgs/development/compilers/elm/packages/elm.nix
@@ -13,6 +13,7 @@ mkDerivation {
     url = "https://github.com/elm/compiler";
     sha256 = "13jks6c6i80z71mjjfg46ri570g5ini0k3xw3857v6z66zcl56x4";
     rev = "d5cbc41aac23da463236bbc250933d037da4055a";
+    fetchSubmodules = true;
   };
   isLibrary = false;
   isExecutable = true;
diff --git a/pkgs/development/compilers/elm/packages/tasty-quickcheck.nix b/pkgs/development/compilers/elm/packages/tasty-quickcheck.nix
deleted file mode 100644
index 54235489edf..00000000000
--- a/pkgs/development/compilers/elm/packages/tasty-quickcheck.nix
+++ /dev/null
@@ -1,14 +0,0 @@
-{ mkDerivation, base, pcre-light, QuickCheck, random, stdenv
-, tagged, tasty, tasty-hunit
-}:
-mkDerivation {
-  pname = "tasty-quickcheck";
-  version = "0.9.2";
-  sha256 = "c5920adeab6e283d5e3ab45f3c80a1b011bedfbe4a3246a52606da2e1da95873";
-  libraryHaskellDepends = [ base QuickCheck random tagged tasty ];
-  testHaskellDepends = [ base pcre-light tasty tasty-hunit ];
-  doCheck = false;
-  homepage = "https://github.com/feuerbach/tasty";
-  description = "QuickCheck support for the Tasty test framework";
-  license = stdenv.lib.licenses.mit;
-}
diff --git a/pkgs/development/compilers/elm/update.sh b/pkgs/development/compilers/elm/update.sh
index 2b5d85feeb2..920b95e5ad9 100755
--- a/pkgs/development/compilers/elm/update.sh
+++ b/pkgs/development/compilers/elm/update.sh
@@ -1 +1,8 @@
-cabal2nix https://github.com/elm/compiler --revision  32059a289d27e303fa1665e9ada0a52eb688f302 > packages/elm.nix
+#!/usr/bin/env nix-shell
+#!nix-shell -p cabal2nix elm2nix -i bash ../../..
+
+cabal2nix https://github.com/elm/compiler --revision d5cbc41aac23da463236bbc250933d037da4055a > packages/elm.nix
+elm2nix snapshot > versions.dat
+pushd "$(nix-build -A elmPackages.elm.src --no-out-link ../../../..)/ui/browser"
+  elm2nix convert > $OLDPWD/packages/elm-srcs.nix
+popd
diff --git a/pkgs/development/compilers/elm/versions.dat b/pkgs/development/compilers/elm/versions.dat
index 824ab383057..9dcfd8a2808 100644
--- a/pkgs/development/compilers/elm/versions.dat
+++ b/pkgs/development/compilers/elm/versions.dat
Binary files differ