Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / beam-modules / build-erlang-mk.nix
blobeb70517c82ec89ea1fbe527f4580038596daee68
1 { stdenv, writeText, erlang, perl, which, gitMinimal, wget, lib }:
3 { name
4 , version
5 , src
6 , setupHook ? null
7 , buildInputs ? [ ]
8 , beamDeps ? [ ]
9 , postPatch ? ""
10 , compilePorts ? false
11 , installPhase ? null
12 , buildPhase ? null
13 , configurePhase ? null
14 , meta ? { }
15 , enableDebugInfo ? false
16 , buildFlags ? [ ]
17 , ...
18 }@attrs:
20 let
21   debugInfoFlag = lib.optionalString (enableDebugInfo || erlang.debugInfo) "+debug_info";
23   shell = drv: stdenv.mkDerivation {
24     name = "interactive-shell-${drv.name}";
25     buildInputs = [ drv ];
26   };
28   pkg = self: stdenv.mkDerivation (attrs // {
29     app_name = name;
30     name = "${name}-${version}";
31     inherit version;
33     dontStrip = true;
35     inherit src;
37     setupHook =
38       if setupHook == null
39       then
40         writeText "setupHook.sh" ''
41           addToSearchPath ERL_LIBS "$1/lib/erlang/lib"
42         ''
43       else setupHook;
45     buildInputs = buildInputs ++ [ erlang perl which gitMinimal wget ];
46     propagatedBuildInputs = beamDeps;
48     buildFlags = [ "SKIP_DEPS=1" ]
49       ++ lib.optional (enableDebugInfo || erlang.debugInfo) ''ERL_OPTS="$ERL_OPTS +debug_info"''
50       ++ buildFlags;
52     configurePhase =
53       if configurePhase == null
54       then ''
55         runHook preConfigure
57         # We shouldnt need to do this, but it seems at times there is a *.app in
58         # the repo/package. This ensures we start from a clean slate
59         make SKIP_DEPS=1 clean
61         runHook postConfigure
62       ''
63       else configurePhase;
65     buildPhase =
66       if buildPhase == null
67       then ''
68         runHook preBuild
70         make $buildFlags "''${buildFlagsArray[@]}"
72         runHook postBuild
73       ''
74       else buildPhase;
76     installPhase =
77       if installPhase == null
78       then ''
79         runHook preInstall
81         mkdir -p $out/lib/erlang/lib/${name}
82         cp -r ebin $out/lib/erlang/lib/${name}/
83         cp -r src $out/lib/erlang/lib/${name}/
85         if [ -d include ]; then
86           cp -r include $out/lib/erlang/lib/${name}/
87         fi
89         if [ -d priv ]; then
90           cp -r priv $out/lib/erlang/lib/${name}/
91         fi
93         if [ -d doc ]; then
94           cp -r doc $out/lib/erlang/lib/${name}/
95         fi
97         runHook postInstall
98       ''
99       else installPhase;
101     passthru = {
102       packageName = name;
103       env = shell self;
104       inherit beamDeps;
105     };
106   });
108 lib.fix pkg