diff --git a/pkgs/development/beam-modules/build-hex.nix b/pkgs/development/beam-modules/build-hex.nix index ff6e47e5a805..27ce64582f34 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 1fd899c53c97..00443350a7d9 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 {}; + inherit (stdenv.lib) fix' extends; - ## Non hex packages - hex = callPackage ./hex {}; - webdriver = callPackage ./webdriver {}; - }; -in self // self.hexPackages + # 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) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f2fc65da558d..ac90f7b3b953 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5986,7 +5986,7 @@ with pkgs; erlangR18 erlangR18_odbc erlangR18_javac erlangR18_odbc_javac erlangR19 erlangR19_odbc erlangR19_javac erlangR19_odbc_javac; - inherit (beam.packages) + inherit (beam.packages.erlang) rebar rebar3-open rebar3 hexRegistrySnapshot fetchHex beamPackages hex2nix cuter relxExe; diff --git a/pkgs/top-level/beam-packages.nix b/pkgs/top-level/beam-packages.nix index 3451816c0c5b..ccf22d6c5348 100644 --- a/pkgs/top-level/beam-packages.nix +++ b/pkgs/top-level/beam-packages.nix @@ -3,10 +3,11 @@ rec { lib = import ../development/beam-modules/lib.nix { inherit pkgs; }; + # Each interpreters = rec { - # R18 is the Default version. - erlang = erlangR18; + # R18 is the default version. + erlang = erlangR18; # The main switch to change default Erlang version. erlang_odbc = erlangR18_odbc; erlang_javac = erlangR18_javac; erlang_odbc_javac = erlangR18_odbc_javac; @@ -44,22 +45,24 @@ rec { odbcSupport = true; }; - # Other Beam languages. + # Other Beam languages. These are built with beam.interpreters.erlang. elixir = callPackage ../development/interpreters/elixir { debugInfo = true; }; lfe = callPackage ../development/interpreters/lfe { }; }; + # Helper function to generate package set with a specific Erlang version. + packagesWith = erlang: callPackage ../development/beam-modules { inherit erlang; }; + + # Each field in this tuple represents all Beam packages in nixpkgs built with + # appropriate Erlang/OTP version. packages = rec { - rebar = callPackage ../development/tools/build-managers/rebar { }; - rebar3-open = callPackage ../development/tools/build-managers/rebar3 { hermeticRebar3 = false; }; - rebar3 = callPackage ../development/tools/build-managers/rebar3 { hermeticRebar3 = true; }; - hexRegistrySnapshot = callPackage ../development/beam-modules/hex-registry-snapshot.nix { }; - fetchHex = callPackage ../development/beam-modules/fetch-hex.nix { }; - beamPackages = callPackage ../development/beam-modules { }; - hex2nix = beamPackages.callPackage ../development/tools/erlang/hex2nix { }; - cuter = callPackage ../development/tools/erlang/cuter { }; + # Packages built with default Erlang version. + erlang = packagesWith interpreters.erlang; + erlangR16 = packagesWith interpreters.erlangR16; + erlangR17 = packagesWith interpreters.erlangR17; + erlangR18 = packagesWith interpreters.erlangR18; + erlangR19 = packagesWith interpreters.erlangR19; - relxExe = callPackage ../development/tools/erlang/relx-exe {}; }; }