fork
Configure Feed
Select the types of activity you want to include in your feed.
lol
fork
Configure Feed
Select the types of activity you want to include in your feed.
1{ lib, stdenv, fetchFromGitHub, coreutils, ocaml-ng, zlib, pcre, neko, mbedtls, Security }:
2
3let
4 ocamlDependencies = version:
5 if lib.versionAtLeast version "4.2"
6 then with ocaml-ng.ocamlPackages; [
7 ocaml
8 findlib
9 sedlex_2
10 xml-light
11 ptmap
12 camlp5
13 sha
14 dune_2
15 luv
16 ocaml_extlib
17 ] else if lib.versionAtLeast version "4.0"
18 then with ocaml-ng.ocamlPackages_4_10; [
19 ocaml
20 findlib
21 sedlex_2
22 xml-light
23 ptmap
24 camlp5
25 sha
26 dune_2
27 luv
28 ocaml_extlib-1-7-7
29 ] else with ocaml-ng.ocamlPackages_4_05; [
30 ocaml
31 camlp4
32 ];
33
34 defaultPatch = ''
35 substituteInPlace extra/haxelib_src/src/haxelib/client/Main.hx \
36 --replace '"neko"' '"${neko}/bin/neko"'
37 '';
38
39 generic = { sha256, version, prePatch ? defaultPatch }:
40 stdenv.mkDerivation {
41 pname = "haxe";
42 inherit version;
43
44 buildInputs = [ zlib pcre neko ]
45 ++ lib.optional (lib.versionAtLeast version "4.1") mbedtls
46 ++ lib.optional (lib.versionAtLeast version "4.1" && stdenv.isDarwin) Security
47 ++ ocamlDependencies version;
48
49 src = fetchFromGitHub {
50 owner = "HaxeFoundation";
51 repo = "haxe";
52 rev = version;
53 fetchSubmodules = true;
54 inherit sha256;
55 };
56
57 inherit prePatch;
58
59 buildFlags = [ "all" "tools" ];
60
61 installPhase = ''
62 install -vd "$out/bin" "$out/lib/haxe/std"
63 cp -vr haxe haxelib std "$out/lib/haxe"
64
65 # make wrappers which provide a temporary HAXELIB_PATH with symlinks to multiple repositories HAXELIB_PATH may point to
66 for name in haxe haxelib; do
67 cat > $out/bin/$name <<EOF
68 #!{bash}/bin/bash
69
70 if [[ "\$HAXELIB_PATH" =~ : ]]; then
71 NEW_HAXELIB_PATH="\$(${coreutils}/bin/mktemp -d)"
72
73 IFS=':' read -ra libs <<< "\$HAXELIB_PATH"
74 for libdir in "\''${libs[@]}"; do
75 for lib in "\$libdir"/*; do
76 if [ ! -e "\$NEW_HAXELIB_PATH/\$(${coreutils}/bin/basename "\$lib")" ]; then
77 ${coreutils}/bin/ln -s "--target-directory=\$NEW_HAXELIB_PATH" "\$lib"
78 fi
79 done
80 done
81 export HAXELIB_PATH="\$NEW_HAXELIB_PATH"
82 $out/lib/haxe/$name "\$@"
83 rm -rf "\$NEW_HAXELIB_PATH"
84 else
85 exec $out/lib/haxe/$name "\$@"
86 fi
87 EOF
88 chmod +x $out/bin/$name
89 done
90 '';
91
92 setupHook = ./setup-hook.sh;
93
94 dontStrip = true;
95
96 # While it might be a good idea to run the upstream test suite, let's at
97 # least make sure we can actually run the compiler.
98 doInstallCheck = true;
99 installCheckPhase = ''
100 # Get out of the source directory to make sure the stdlib from the
101 # sources doesn't interfere with the installed one.
102 mkdir installcheck
103 pushd installcheck > /dev/null
104 cat >> InstallCheck.hx <<EOF
105 class InstallCheck {
106 public static function main() trace("test");
107 }
108 EOF
109 "$out/bin/haxe" -js installcheck.js -main InstallCheck
110 grep -q 'console\.log.*test' installcheck.js
111 popd > /dev/null
112 '';
113
114 meta = with lib; {
115 description = "Programming language targeting JavaScript, Flash, NekoVM, PHP, C++";
116 homepage = "https://haxe.org";
117 license = with licenses; [ gpl2Plus mit ]; # based on upstream opam file
118 maintainers = [ maintainers.marcweber maintainers.locallycompact ];
119 platforms = platforms.linux ++ platforms.darwin;
120 };
121 };
122in {
123 # this old version is required to compile some libraries
124 haxe_3_2 = generic {
125 version = "3.2.1";
126 sha256 = "1x9ay5a2llq46fww3k07jxx8h1vfpyxb522snc6702a050ki5vz3";
127 prePatch = ''
128 sed -i -e 's|"/usr/lib/haxe/std/";|"'"$out/lib/haxe/std/"'";\n&|g' main.ml
129 substituteInPlace extra/haxelib_src/src/tools/haxelib/Main.hx \
130 --replace '"neko"' '"${neko}/bin/neko"'
131 '';
132 };
133 haxe_3_4 = generic {
134 version = "3.4.6";
135 sha256 = "1myc4b8fwp0f9vky17wv45n34a583f5sjvajsc93f5gm1wanp4if";
136 prePatch = ''
137 ${defaultPatch}
138 sed -i -re 's!(let +prefix_path += +).*( +in)!\1"'"$out/"'"\2!' src/main.ml
139 '';
140 };
141 haxe_4_0 = generic {
142 version = "4.0.5";
143 sha256 = "0f534pchdx0m057ixnk07ab4s518ica958pvpd0vfjsrxg5yjkqa";
144 };
145 haxe_4_1 = generic {
146 version = "4.1.5";
147 sha256 = "0rns6d28qzkbai6yyws08yzbyvxfn848nj0fsji7chdi0y7pzzj0";
148 };
149 haxe_4_2 = generic {
150 version = "4.2.1";
151 sha256 = "sha256-0j6M21dh8DB1gC/bPYNJrVuDbJyqQbP+61ItO5RBUcA=";
152 };
153}