nixpkgs/pkgs/development/beam-modules/lib.nix
Gleb Peregud 7797e1a1dd erlang: put Elixir/LFE into per-OTP packageset.
This makes beam.package.erlangR19.abnf to be actually built with R19,
instead of the default R18. It means that Elixir and LFE are provided in
two versions, one built with R18 and with R19.

Please note that Elixir does not build with R16 and R17 - trying to
access beam.packages.erlang{R16,R17}.elixir will throw an error.
2017-06-19 19:58:57 +02:00

46 lines
1.4 KiB
Nix

{ pkgs, stdenv }:
rec {
/* Similar to callPackageWith/callPackage, but without makeOverridable
*/
callPackageWith = autoArgs: fn: args:
let
f = if builtins.isFunction fn then fn else import fn;
auto = builtins.intersectAttrs (builtins.functionArgs f) autoArgs;
in f (auto // args);
callPackage = callPackageWith pkgs;
/* Erlang/OTP-specific version retrieval, returns 19 for OTP R19 */
getVersion = x:
let
parse = drv: (builtins.parseDrvName drv).version;
in builtins.replaceStrings ["B" "-"] ["." "."] (
if builtins.isString x
then parse x
else x.version or (parse x.name));
/* Uses generic-builder to evaluate provided drv containing OTP-version
specific data.
drv: package containing version-specific args;
builder: generic builder for all Erlang versions;
args: arguments merged into version-specific args, used mostly to customize
dependencies;
Arguments passed to the generic-builder are overridable, used to
enable/disable high-level OTP features, like ODBC or WX support;
Please note that "mkDerivation" defined here is the one called from R16.nix
and similar files.
*/
callErlang = drv: args:
let
builder = callPackage ../../development/interpreters/erlang/generic-builder.nix args;
in
callPackage drv {
mkDerivation = pkgs.makeOverridable builder;
};
}