{ lib, stdenv, fetchFromGitHub, coreutils, ocaml-ng, zlib, pcre, pcre2, neko, mbedtls_2, Security }: let ocamlDependencies = version: if lib.versionAtLeast version "4.3" then with ocaml-ng.ocamlPackages_4_14; [ ocaml findlib sedlex xml-light ptmap camlp5 sha dune_3 luv extlib ] else with ocaml-ng.ocamlPackages_4_10; [ ocaml findlib sedlex xml-light ptmap camlp5 sha dune_3 luv extlib-1-7-7 ]; defaultPatch = '' substituteInPlace extra/haxelib_src/src/haxelib/client/Main.hx \ --replace '"neko"' '"${neko}/bin/neko"' ''; generic = { hash, version, prePatch ? defaultPatch }: stdenv.mkDerivation { pname = "haxe"; inherit version; buildInputs = [ zlib neko ] ++ (if lib.versionAtLeast version "4.3" then [pcre2] else [pcre]) ++ lib.optional (lib.versionAtLeast version "4.1") mbedtls_2 ++ lib.optional (lib.versionAtLeast version "4.1" && stdenv.isDarwin) Security ++ ocamlDependencies version; src = fetchFromGitHub { owner = "HaxeFoundation"; repo = "haxe"; rev = version; fetchSubmodules = true; inherit hash; }; inherit prePatch; buildFlags = [ "all" "tools" ]; installPhase = '' install -vd "$out/bin" "$out/lib/haxe/std" cp -vr haxe haxelib std "$out/lib/haxe" # make wrappers which provide a temporary HAXELIB_PATH with symlinks to multiple repositories HAXELIB_PATH may point to for name in haxe haxelib; do cat > $out/bin/$name < /dev/null cat >> InstallCheck.hx < /dev/null ''; meta = with lib; { description = "Programming language targeting JavaScript, Flash, NekoVM, PHP, C++"; homepage = "https://haxe.org"; license = with licenses; [ gpl2Plus mit ]; # based on upstream opam file maintainers = [ maintainers.marcweber maintainers.locallycompact maintainers.logo ]; platforms = platforms.linux ++ platforms.darwin; }; }; in { haxe_4_0 = generic { version = "4.0.5"; hash = "sha256-Ck/py+tZS7dBu/uikhSLKBRNljpg2h5PARX0Btklozg="; }; haxe_4_1 = generic { version = "4.1.5"; hash = "sha256-QP5/jwexQXai1A5Iiwiyrm+/vkdAc+9NVGt+jEQz2mY="; }; haxe_4_3 = generic { version = "4.3.4"; hash = "sha256-XGV4VG8nUofHGjHbtrLA+2kIpnnPqw5IlcNrP3EsL+Q="; }; }