{ungoogled-,}chromium,chromedriver: 130.0.6723.58 -> 130.0.6723.69 (#351519)
[NixPkgs.git] / pkgs / development / interpreters / erlang / generic-builder.nix
blob2b363d4a06e6b3343dd359bd555af3364c708e08
1 { pkgs
2 , lib
3 , stdenv
4 , fetchFromGitHub
5 , makeWrapper
6 , gawk
7 , gnum4
8 , gnused
9 , libxml2
10 , libxslt
11 , ncurses
12 , openssl
13 , perl
14 , runtimeShell
15 , autoconf
16 , openjdk11 ? null # javacSupport
17 , unixODBC ? null # odbcSupport
18 , libGL ? null
19 , libGLU ? null
20 , wxGTK ? null
21 , xorg ? null
22 , ex_doc ? null
23 , parallelBuild ? false
24 , systemd
25 , wxSupport ? true
26 , ex_docSupport ? false
27 , systemdSupport ? lib.meta.availableOn stdenv.hostPlatform systemd # systemd support in epmd
28   # updateScript deps
29 , writeScript
30 , common-updater-scripts
31 , coreutils
32 , git
33 , wrapGAppsHook3
35 { baseName ? "erlang"
36 , version
37 , sha256 ? null
38 , rev ? "OTP-${version}"
39 , src ? fetchFromGitHub { inherit rev sha256; owner = "erlang"; repo = "otp"; }
40 , enableHipe ? true
41 , enableDebugInfo ? false
42 , enableThreads ? true
43 , enableSmpSupport ? true
44 , enableKernelPoll ? true
45 , javacSupport ? false
46 , javacPackages ? [ openjdk11 ]
47 , odbcSupport ? false
48 , odbcPackages ? [ unixODBC ]
49 , opensslPackage ? openssl
50 , wxPackages ? [ libGL libGLU wxGTK xorg.libX11 wrapGAppsHook3 ]
51 , preUnpack ? ""
52 , postUnpack ? ""
53 , patches ? [ ]
54 , patchPhase ? ""
55 , prePatch ? ""
56 , postPatch ? ""
57 , configureFlags ? [ ]
58 , configurePhase ? ""
59 , preConfigure ? ""
60 , postConfigure ? ""
61 , buildPhase ? ""
62 , preBuild ? ""
63 , postBuild ? ""
64 , installPhase ? ""
65 , preInstall ? ""
66 , postInstall ? ""
67 , installTargets ? if ((lib.versionOlder version "27.0") || ex_docSupport) then [ "install" "install-docs" ] else [ "install" ]
68 , checkPhase ? ""
69 , preCheck ? ""
70 , postCheck ? ""
71 , fixupPhase ? ""
72 , preFixup ? ""
73 , postFixup ? ""
74 , meta ? { }
77 assert wxSupport -> (if stdenv.hostPlatform.isDarwin
78 then wxGTK != null
79 else libGL != null && libGLU != null && wxGTK != null && xorg != null);
81 assert odbcSupport -> unixODBC != null;
82 assert javacSupport -> openjdk11 != null;
83 assert ex_docSupport -> ex_doc != null;
85 let
86   inherit (lib) optional optionals optionalAttrs optionalString;
87   wxPackages2 = if stdenv.hostPlatform.isDarwin then [ wxGTK ] else wxPackages;
90 stdenv.mkDerivation ({
91   # name is used instead of pname to
92   # - not have to pass pnames as argument
93   # - have a separate pname for erlang (main module)
94   name = "${baseName}"
95     + optionalString javacSupport "_javac"
96     + optionalString odbcSupport "_odbc"
97     + "-${version}";
99   inherit src version;
101   LANG = "C.UTF-8";
103   nativeBuildInputs = [ autoconf makeWrapper perl gnum4 libxslt libxml2 ];
105   buildInputs = [ ncurses opensslPackage ]
106     ++ optionals wxSupport wxPackages2
107     ++ optionals odbcSupport odbcPackages
108     ++ optionals javacSupport javacPackages
109     ++ optional systemdSupport systemd
110     ++ optionals stdenv.hostPlatform.isDarwin (with pkgs.darwin.apple_sdk.frameworks; [ AGL Carbon Cocoa WebKit ]);
112   debugInfo = enableDebugInfo;
114   # On some machines, parallel build reliably crashes on `GEN    asn1ct_eval_ext.erl` step
115   enableParallelBuilding = parallelBuild;
117   postPatch = ''
118     patchShebangs make
120     ${postPatch}
121   '' + optionalString (lib.versionOlder "25" version) ''
122     substituteInPlace lib/os_mon/src/disksup.erl \
123       --replace-fail '"sh ' '"${runtimeShell} '
124   '';
126   # For OTP 27+ we need ex_doc to build the documentation
127   # When ex_docSupport is enabled, grab the raw ex_doc executable from the ex_doc
128   # derivation. Next, patch the first line to use the escript that will be
129   # built during the build phase of this derivation. Finally, building the
130   # documentation requires the erlang-logo.png asset.
131   preConfigure = ''
132     ./otp_build autoconf
133   '' + optionalString ex_docSupport ''
134     mkdir -p $out/bin
135     cp ${ex_doc}/bin/.ex_doc-wrapped $out/bin/ex_doc
136     sed -i "1 s:^.*$:#!$out/bin/escript:" $out/bin/ex_doc
137     export EX_DOC=$out/bin/ex_doc
139     mkdir -p $out/lib/erlang/system/doc/assets
140     cp $src/system/doc/assets/erlang-logo.png $out/lib/erlang/system/doc/assets
141   '';
143   configureFlags = [ "--with-ssl=${lib.getOutput "out" opensslPackage}" ]
144     ++ [ "--with-ssl-incl=${lib.getDev opensslPackage}" ] # This flag was introduced in R24
145     ++ optional enableThreads "--enable-threads"
146     ++ optional enableSmpSupport "--enable-smp-support"
147     ++ optional enableKernelPoll "--enable-kernel-poll"
148     ++ optional enableHipe "--enable-hipe"
149     ++ optional javacSupport "--with-javac"
150     ++ optional odbcSupport "--with-odbc=${unixODBC}"
151     ++ optional wxSupport "--enable-wx"
152     ++ optional systemdSupport "--enable-systemd"
153     ++ optional stdenv.hostPlatform.isDarwin "--enable-darwin-64bit"
154     # make[3]: *** [yecc.beam] Segmentation fault: 11
155     ++ optional (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isx86_64) "--disable-jit"
156     ++ configureFlags;
158   # install-docs will generate and install manpages and html docs
159   # (PDFs are generated only when fop is available).
161   postInstall = ''
162     ln -s $out/lib/erlang/lib/erl_interface*/bin/erl_call $out/bin/erl_call
164     ${postInstall}
165   '';
167   # Some erlang bin/ scripts run sed and awk
168   postFixup = ''
169     wrapProgram $out/lib/erlang/bin/erl --prefix PATH ":" "${gnused}/bin/"
170     wrapProgram $out/lib/erlang/bin/start_erl --prefix PATH ":" "${lib.makeBinPath [ gnused gawk ]}"
171   '';
173   passthru = {
174     updateScript =
175       let major = builtins.head (builtins.splitVersion version);
176       in
177       writeScript "update.sh" ''
178         #!${stdenv.shell}
179         set -ox errexit
180         PATH=${lib.makeBinPath [ common-updater-scripts coreutils git gnused ]}
181         latest=$(list-git-tags --url=https://github.com/erlang/otp.git | sed -n 's/^OTP-${major}/${major}/p' | sort -V | tail -1)
182         if [ "$latest" != "${version}" ]; then
183           nixpkgs="$(git rev-parse --show-toplevel)"
184           nix_file="$nixpkgs/pkgs/development/interpreters/erlang/${major}.nix"
185           update-source-version ${baseName}R${major} "$latest" --version-key=version --print-changes --file="$nix_file"
186         else
187           echo "${baseName}R${major} is already up-to-date"
188         fi
189       '';
190   };
192   meta = with lib; ({
193     homepage = "https://www.erlang.org/";
194     downloadPage = "https://www.erlang.org/download.html";
195     description = "Programming language used for massively scalable soft real-time systems";
197     longDescription = ''
198       Erlang is a programming language used to build massively scalable
199       soft real-time systems with requirements on high availability.
200       Some of its uses are in telecoms, banking, e-commerce, computer
201       telephony and instant messaging. Erlang's runtime system has
202       built-in support for concurrency, distribution and fault
203       tolerance.
204     '';
206     platforms = platforms.unix;
207     maintainers = teams.beam.members;
208     license = licenses.asl20;
209   } // meta);
211 // optionalAttrs (preUnpack != "") { inherit preUnpack; }
212 // optionalAttrs (postUnpack != "") { inherit postUnpack; }
213 // optionalAttrs (patches != [ ]) { inherit patches; }
214 // optionalAttrs (prePatch != "") { inherit prePatch; }
215 // optionalAttrs (patchPhase != "") { inherit patchPhase; }
216 // optionalAttrs (configurePhase != "") { inherit configurePhase; }
217 // optionalAttrs (preConfigure != "") { inherit preConfigure; }
218 // optionalAttrs (postConfigure != "") { inherit postConfigure; }
219 // optionalAttrs (buildPhase != "") { inherit buildPhase; }
220 // optionalAttrs (preBuild != "") { inherit preBuild; }
221 // optionalAttrs (postBuild != "") { inherit postBuild; }
222 // optionalAttrs (checkPhase != "") { inherit checkPhase; }
223 // optionalAttrs (preCheck != "") { inherit preCheck; }
224 // optionalAttrs (postCheck != "") { inherit postCheck; }
225 // optionalAttrs (installPhase != "") { inherit installPhase; }
226 // optionalAttrs (installTargets != [ ]) { inherit installTargets; }
227 // optionalAttrs (preInstall != "") { inherit preInstall; }
228 // optionalAttrs (fixupPhase != "") { inherit fixupPhase; }
229 // optionalAttrs (preFixup != "") { inherit preFixup; }
230 // optionalAttrs (postFixup != "") { inherit postFixup; }