summary refs log tree commit diff
path: root/pkgs/development/beam-modules
diff options
context:
space:
mode:
authork32 <10274441+k32@users.noreply.github.com>2019-01-16 22:51:19 +0100
committerk32 <10274441+k32@users.noreply.github.com>2019-02-06 19:45:40 +0100
commitd4b243905f2181111b52d5a58b2119469ed689fc (patch)
tree895379986d9b69a9cfcbb503c92bf040908da34a /pkgs/development/beam-modules
parented5ec8b375e6a2b254c6110ff5124b3a95e019d7 (diff)
downloadnixpkgs-d4b243905f2181111b52d5a58b2119469ed689fc.tar
nixpkgs-d4b243905f2181111b52d5a58b2119469ed689fc.tar.gz
nixpkgs-d4b243905f2181111b52d5a58b2119469ed689fc.tar.bz2
nixpkgs-d4b243905f2181111b52d5a58b2119469ed689fc.tar.lz
nixpkgs-d4b243905f2181111b52d5a58b2119469ed689fc.tar.xz
nixpkgs-d4b243905f2181111b52d5a58b2119469ed689fc.tar.zst
nixpkgs-d4b243905f2181111b52d5a58b2119469ed689fc.zip
rebar3: 3.6.1 -> 3.9.0
Remove hermetic patch (make it compatible with the upstream)
(Mostly) eliminate the need for hex package registry
Diffstat (limited to 'pkgs/development/beam-modules')
-rw-r--r--pkgs/development/beam-modules/default.nix30
-rw-r--r--pkgs/development/beam-modules/fetch-rebar-deps.nix32
-rw-r--r--pkgs/development/beam-modules/rebar3-release.nix85
3 files changed, 122 insertions, 25 deletions
diff --git a/pkgs/development/beam-modules/default.nix b/pkgs/development/beam-modules/default.nix
index f71379459dc..a1eedaad6a0 100644
--- a/pkgs/development/beam-modules/default.nix
+++ b/pkgs/development/beam-modules/default.nix
@@ -23,12 +23,8 @@ let
         hexRegistrySnapshot = callPackage ./hex-registry-snapshot.nix { };
 
         rebar = callPackage ../tools/build-managers/rebar { };
-        rebar3-open = callPackage ../tools/build-managers/rebar3 {
-          hermeticRebar3 = false;
-        };
-        rebar3 = callPackage ../tools/build-managers/rebar3 {
-          hermeticRebar3 = true;
-        };
+        rebar3-open = callPackage ../tools/build-managers/rebar3 { };
+        rebar3 = callPackage ../tools/build-managers/rebar3 { };
 
         # rebar3 port compiler plugin is required by buildRebar3
         pc_1_6_0 = callPackage ./pc {};
@@ -36,6 +32,9 @@ let
 
         fetchHex = callPackage ./fetch-hex.nix { };
 
+        fetchRebar3Deps = callPackage ./fetch-rebar-deps.nix { };
+        rebar3Relx = callPackage ./rebar3-release.nix { };
+
         buildRebar3 = callPackage ./build-rebar3.nix {};
         buildHex = callPackage ./build-hex.nix {};
         buildErlangMk = callPackage ./build-erlang-mk.nix {};
@@ -75,25 +74,6 @@ let
         lfe = lfe_1_2;
         lfe_1_2 = lib.callLFE ../interpreters/lfe/1.2.nix { inherit erlang buildRebar3 buildHex; };
 
-        # We list all base hex packages for beam tooling explicitly to ensure
-        # tha the tooling does not break during hex-packages.nix updates.
-        erlware_commons_1_0_0 = buildHex {
-          name    = "erlware_commons";
-          version = "1.0.0";
-          sha256 = "0wkphbrjk19lxdwndy92v058qwcaz13bcgdzp33h21aa7vminzx7";
-          beamDeps = [ cf_0_2_2 ];
-        };
-        cf_0_2_2 = buildHex {
-          name = "cf";
-          version = "0.2.2";
-          sha256 = "08cvy7skn5d2k4manlx5k3anqgjdvajjhc5jwxbaszxw34q3na28";
-        };
-        getopt_0_8_2 = buildHex {
-          name = "getopt";
-          version = "0.8.2";
-          sha256 = "1xw30h59zbw957cyjd8n50hf9y09jnv9dyry6x3avfwzcyrnsvkk";
-        };
-
         # Non hex packages. Examples how to build Rebar/Mix packages with and
         # without helper functions buildRebar3 and buildMix.
         hex = callPackage ./hex {};
diff --git a/pkgs/development/beam-modules/fetch-rebar-deps.nix b/pkgs/development/beam-modules/fetch-rebar-deps.nix
new file mode 100644
index 00000000000..a94d803f0d3
--- /dev/null
+++ b/pkgs/development/beam-modules/fetch-rebar-deps.nix
@@ -0,0 +1,32 @@
+{ stdenv, rebar3, curl }:
+
+{ name, version, sha256, src
+, meta ? {}
+}:
+
+with stdenv.lib;
+
+stdenv.mkDerivation ({
+  name = "rebar-deps-${name}-${version}";
+
+  phases = [ "downloadPhase" "installPhase" ];
+
+  downloadPhase = ''
+    cp ${src} .
+    HOME='.' DEBUG=1 ${rebar3}/bin/rebar3 get-deps
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/_checkouts"
+    for i in ./_build/default/lib/* ; do
+       echo "$i"
+       cp -R "$i" "$out/_checkouts"
+    done
+  '';
+
+  outputHashAlgo = "sha256";
+  outputHashMode = "recursive";
+  outputHash = sha256;
+
+  impureEnvVars = stdenv.lib.fetchers.proxyImpureEnvVars;
+})
diff --git a/pkgs/development/beam-modules/rebar3-release.nix b/pkgs/development/beam-modules/rebar3-release.nix
new file mode 100644
index 00000000000..837d0ccf15c
--- /dev/null
+++ b/pkgs/development/beam-modules/rebar3-release.nix
@@ -0,0 +1,85 @@
+{ stdenv, writeText, erlang, rebar3, openssl, libyaml,
+  pc, lib }:
+
+{ name, version
+, src
+, checkouts ? null
+, releaseType
+, buildInputs ? []
+, setupHook ? null
+, profile ? "default"
+, installPhase ? null
+, buildPhase ? null
+, configurePhase ? null
+, meta ? {}
+, enableDebugInfo ? false
+, ... }@attrs:
+
+with stdenv.lib;
+
+let
+  debugInfoFlag = lib.optionalString (enableDebugInfo || erlang.debugInfo) "debug-info";
+
+  shell = drv: stdenv.mkDerivation {
+          name = "interactive-shell-${drv.name}";
+          buildInputs = [ drv ];
+    };
+
+  customPhases = filterAttrs
+    (_: v: v != null)
+    { inherit setupHook configurePhase buildPhase installPhase; };
+
+  pkg = self: stdenv.mkDerivation (attrs // {
+
+    name = "${name}-${version}";
+    inherit version;
+
+    buildInputs = buildInputs ++ [ erlang rebar3 openssl ];
+    propagatedBuildInputs = [checkouts];
+
+    dontStrip = true;
+
+    inherit src;
+
+    setupHook = writeText "setupHook.sh" ''
+       addToSearchPath ERL_LIBS "$1/lib/erlang/lib/"
+    '';
+
+    configurePhase = ''
+      runHook preConfigure
+      ${if checkouts != null then
+          ''cp --no-preserve=all -R ${checkouts}/_checkouts .''
+        else
+          ''''}
+      runHook postConfigure
+    '';
+
+    buildPhase = ''
+      runHook preBuild
+      HOME=. DEBUG=1 rebar3 as ${profile} ${if releaseType == "escript"
+                                            then '' escriptize''
+                                            else '' release''}
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      dir=${if releaseType == "escript"
+            then ''bin''
+            else ''rel''}
+      mkdir -p "$out/$dir"
+      cp -R --preserve=mode "_build/${profile}/$dir" "$out"
+      runHook postInstall
+    '';
+
+    meta = {
+      inherit (erlang.meta) platforms;
+    } // meta;
+
+    passthru = {
+      packageName = name;
+      env = shell self;
+   };
+  } // customPhases);
+in
+  fix pkg