summary refs log blame commit diff
path: root/pkgs/development/beam-modules/lib.nix
blob: df0af405763741990ae7e1740fea1ad26b1fc4ff (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                 


     









                                                                        








                                                                     

                                                                         


                                                   




                                                                             
 

                                                                             
    






                                                                                           
 














                                                                             
       
                                          

                                                                                           






                                                             
 
 
{ 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;
      };

  /* Uses generic-builder to evaluate provided drv containing Elixir version
  specific data.

  drv: package containing version-specific args;
  vsn: minimum OTP version that Elixir will build on;
  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.

  Please note that "mkDerivation" defined here is the one called from 1.4.nix
  and similar files.
  */
  callElixir = drv: vsn: args:
    let
      inherit (stdenv.lib) versionAtLeast;
      builder = callPackage ../../development/interpreters/elixir/generic-builder.nix args;
    in
      if versionAtLeast (getVersion args.erlang) vsn
      then
        callPackage drv {
          mkDerivation = pkgs.makeOverridable builder;
        }
      else
        throw "Elixir requires at least Erlang/OTP R${vsn}.";

}