diff options
author | Gleb Peregud <gleber.p@gmail.com> | 2017-06-17 16:28:41 +0200 |
---|---|---|
committer | Gleb Peregud <gleber.p@gmail.com> | 2017-06-19 19:53:15 +0200 |
commit | d1b9c9d2cddf2e57964fde7e4f468c8767a77b3b (patch) | |
tree | 89b1a30dc484aeeef2f432d7578f0b2ac45f8e74 /pkgs/development/beam-modules | |
parent | 31703358bd38845e5bcc47df3c564f0e132272c5 (diff) |
erlang: refactor: build packages per Erlang/OTP.
This change introduces a fixpoint, which allows to do deep override when building packages defined in pkgs/development/beam-modules/default.hex. This allows to provide beam.packages.erlang{,R16,R17,R18,R19} which contains the same packages built with different Erlang/OTP versions. Top-level attribute beamPackages points at beam.packages.erlangR18, the same applies to other top-level Erlang packages. TODO: - beam.packages.erlang{R16,R17} is almost useless, since rebar/rebar3 does not build using these versions; - all packages in beam.packages which use buildMix are actually built with erlangR18; - update documentation.
Diffstat (limited to 'pkgs/development/beam-modules')
-rw-r--r-- | pkgs/development/beam-modules/build-hex.nix | 3 | ||||
-rw-r--r-- | pkgs/development/beam-modules/default.nix | 57 |
2 files changed, 45 insertions, 15 deletions
diff --git a/pkgs/development/beam-modules/build-hex.nix b/pkgs/development/beam-modules/build-hex.nix index ff6e47e5a8056..27ce64582f34f 100644 --- a/pkgs/development/beam-modules/build-hex.nix +++ b/pkgs/development/beam-modules/build-hex.nix @@ -1,13 +1,14 @@ { stdenv, buildRebar3, fetchHex }: { name, version, sha256 +, builder ? buildRebar3 , hexPkg ? name , ... }@attrs: with stdenv.lib; let - pkg = self: buildRebar3 (attrs // { + pkg = self: builder (attrs // { src = fetchHex { pkg = hexPkg; diff --git a/pkgs/development/beam-modules/default.nix b/pkgs/development/beam-modules/default.nix index 1fd899c53c97d..00443350a7d9c 100644 --- a/pkgs/development/beam-modules/default.nix +++ b/pkgs/development/beam-modules/default.nix @@ -1,16 +1,45 @@ -{ stdenv, pkgs }: +{ stdenv, pkgs, erlang, overrides ? (self: super: {}) }: let - self = rec { - hexPackages = import ./hex-packages.nix { stdenv = stdenv; callPackage = self.callPackage; pkgs = pkgs; }; - callPackage = pkgs.lib.callPackageWith (pkgs // self // hexPackages); - buildRebar3 = callPackage ./build-rebar3.nix {}; - buildHex = callPackage ./build-hex.nix {}; - buildErlangMk = callPackage ./build-erlang-mk.nix {}; - buildMix = callPackage ./build-mix.nix {}; - - ## Non hex packages - hex = callPackage ./hex {}; - webdriver = callPackage ./webdriver {}; - }; -in self // self.hexPackages + inherit (stdenv.lib) fix' extends; + + # FIXME: add support for overrideScope + callPackageWithScope = scope: drv: args: stdenv.lib.callPackageWith scope drv args; + mkScope = scope: pkgs // scope; + + packages = self: + let + defaultScope = mkScope self; + callPackage = drv: args: callPackageWithScope defaultScope drv args; + in + import ./hex-packages.nix { + inherit pkgs stdenv callPackage; + } // { + inherit callPackage erlang; + beamPackages = self; + + rebar = callPackage ../tools/build-managers/rebar { }; + rebar3-open = callPackage ../tools/build-managers/rebar3 { + hermeticRebar3 = false; + }; + rebar3 = callPackage ../tools/build-managers/rebar3 { + hermeticRebar3 = true; + }; + + hexRegistrySnapshot = callPackage ./hex-registry-snapshot.nix { }; + fetchHex = callPackage ./fetch-hex.nix { }; + + buildRebar3 = callPackage ./build-rebar3.nix {}; + buildHex = callPackage ./build-hex.nix {}; + buildErlangMk = callPackage ./build-erlang-mk.nix {}; + buildMix = callPackage ./build-mix.nix {}; + + ## Non hex packages + hex = callPackage ./hex {}; + webdriver = callPackage ./webdriver {}; + + hex2nix = callPackage ../tools/erlang/hex2nix { }; + cuter = callPackage ../tools/erlang/cuter { }; + relxExe = callPackage ../tools/erlang/relx-exe {}; + }; +in fix' (extends overrides packages) |