Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / top-level / emscripten-packages.nix
blobf4d2fd06a90cdf8a013c2704e01626b216c2d4a4
1 { pkgs }:
3 with pkgs;
5 # emscripten toolchain abstraction for nix
6 # https://github.com/NixOS/nixpkgs/pull/16208
8 rec {
9   json_c = (pkgs.json_c.override {
10     stdenv = pkgs.emscriptenStdenv;
11   }).overrideAttrs
12     (old: {
13       nativeBuildInputs = [ pkg-config cmake ];
14       propagatedBuildInputs = [ zlib ];
15       configurePhase = ''
16         HOME=$TMPDIR
17         mkdir -p .emscriptencache
18         export EM_CACHE=$(pwd)/.emscriptencache
19         emcmake cmake . $cmakeFlags -DCMAKE_INSTALL_PREFIX=$out -DCMAKE_INSTALL_INCLUDEDIR=$dev/include
20       '';
21       checkPhase = ''
22         echo "================= testing json_c using node ================="
24         echo "Compiling a custom test"
25         set -x
26         emcc -O2 -s EMULATE_FUNCTION_POINTER_CASTS=1 tests/test1.c \
27           `pkg-config zlib --cflags` \
28           `pkg-config zlib --libs` \
29           -I . \
30           libjson-c.a \
31           -o ./test1.js
33         echo "Using node to execute the test which basically outputs an error on stderr which we grep for"
34         ${pkgs.nodejs}/bin/node ./test1.js
36         set +x
37         if [ $? -ne 0 ]; then
38           echo "test1.js execution failed -> unit test failed, please fix"
39           exit 1;
40         else
41           echo "test1.js execution seems to work! very good."
42         fi
43         echo "================= /testing json_c using node ================="
44       '';
45     });
47   libxml2 = (pkgs.libxml2.override {
48     stdenv = emscriptenStdenv;
49     pythonSupport = false;
50   }).overrideAttrs
51     (old: {
52       propagatedBuildInputs = [ zlib ];
53       nativeBuildInputs = (old.nativeBuildInputs or []) ++ [ pkg-config ];
55       # just override it with nothing so it does not fail
56       autoreconfPhase = "echo autoreconfPhase not used...";
57       configurePhase = ''
58         HOME=$TMPDIR
59         mkdir -p .emscriptencache
60         export EM_CACHE=$(pwd)/.emscriptencache
61         emconfigure ./configure --prefix=$out --without-python
62       '';
63       checkPhase = ''
64         echo "================= testing libxml2 using node ================="
66         echo "Compiling a custom test"
67         set -x
68         emcc -O2 -s EMULATE_FUNCTION_POINTER_CASTS=1 xmllint.o \
69         ./.libs/''
70       + pkgs.lib.optionalString pkgs.stdenv.isDarwin "libxml2.dylib "
71       + pkgs.lib.optionalString (!pkgs.stdenv.isDarwin) "libxml2.a "
72       + '' `pkg-config zlib --cflags` `pkg-config zlib --libs` -o ./xmllint.test.js \
73         --embed-file ./test/xmlid/id_err1.xml
75         echo "Using node to execute the test which basically outputs an error on stderr which we grep for"
76         ${pkgs.nodejs}/bin/node ./xmllint.test.js --noout test/xmlid/id_err1.xml 2>&1 | grep 0bar
78         set +x
79         if [ $? -ne 0 ]; then
80           echo "xmllint unit test failed, please fix this package"
81           exit 1;
82         else
83           echo "since there is no stupid text containing 'foo xml:id' it seems to work! very good."
84         fi
85         echo "================= /testing libxml2 using node ================="
86       '';
87     });
89   xmlmirror = pkgs.buildEmscriptenPackage rec {
90     pname = "xmlmirror";
91     version = "unstable-2016-06-05";
93     buildInputs = [ libtool gnumake libxml2 nodejs openjdk json_c ];
94     nativeBuildInputs = [ pkg-config zlib autoconf automake ];
96     src = pkgs.fetchgit {
97       url = "https://gitlab.com/odfplugfest/xmlmirror.git";
98       rev = "4fd7e86f7c9526b8f4c1733e5c8b45175860a8fd";
99       sha256 = "1jasdqnbdnb83wbcnyrp32f36w3xwhwp0wq8lwwmhqagxrij1r4b";
100     };
102     configurePhase = ''
103       rm -f fastXmlLint.js*
104       # a fix for ERROR:root:For asm.js, TOTAL_MEMORY must be a multiple of 16MB, was 234217728
105       # https://gitlab.com/odfplugfest/xmlmirror/issues/8
106       sed -e "s/TOTAL_MEMORY=234217728/TOTAL_MEMORY=268435456/g" -i Makefile.emEnv
107       # https://github.com/kripken/emscripten/issues/6344
108       # https://gitlab.com/odfplugfest/xmlmirror/issues/9
109       sed -e "s/\$(JSONC_LDFLAGS) \$(ZLIB_LDFLAGS) \$(LIBXML20_LDFLAGS)/\$(JSONC_LDFLAGS) \$(LIBXML20_LDFLAGS) \$(ZLIB_LDFLAGS) /g" -i Makefile.emEnv
110       # https://gitlab.com/odfplugfest/xmlmirror/issues/11
111       sed -e "s/-o fastXmlLint.js/-s EXTRA_EXPORTED_RUNTIME_METHODS='[\"ccall\", \"cwrap\"]' -o fastXmlLint.js/g" -i Makefile.emEnv
112       mkdir -p .emscriptencache
113       export EM_CACHE=$(pwd)/.emscriptencache
114     '';
116     buildPhase = ''
117       HOME=$TMPDIR
118       make -f Makefile.emEnv
119     '';
121     outputs = [ "out" "doc" ];
123     installPhase = ''
124       mkdir -p $out/share
125       mkdir -p $doc/share/${pname}
127       cp Demo* $out/share
128       cp -R codemirror-5.12 $out/share
129       cp fastXmlLint.js* $out/share
130       cp *.xsd $out/share
131       cp *.js $out/share
132       cp *.xhtml $out/share
133       cp *.html $out/share
134       cp *.json $out/share
135       cp *.rng $out/share
136       cp README.md $doc/share/${pname}
137     '';
138     checkPhase = ''
139     '';
140   };
142   zlib = (pkgs.zlib.override {
143     stdenv = pkgs.emscriptenStdenv;
144   }).overrideAttrs
145     (old: {
146       nativeBuildInputs = (old.nativeBuildInputs or []) ++ [ pkg-config ];
147       # we need to reset this setting!
148       env = (old.env or { }) // { NIX_CFLAGS_COMPILE = ""; };
149       dontStrip = true;
150       outputs = [ "out" ];
151       buildPhase = ''
152         emmake make
153       '';
154       installPhase = ''
155         emmake make install
156       '';
157       checkPhase = ''
158         echo "================= testing zlib using node ================="
160         echo "Compiling a custom test"
161         set -x
162         emcc -O2 -s EMULATE_FUNCTION_POINTER_CASTS=1 test/example.c -DZ_SOLO \
163         -L. libz.a -I . -o example.js
165         echo "Using node to execute the test"
166         ${pkgs.nodejs}/bin/node ./example.js
168         set +x
169         if [ $? -ne 0 ]; then
170           echo "test failed for some reason"
171           exit 1;
172         else
173           echo "it seems to work! very good."
174         fi
175         echo "================= /testing zlib using node ================="
176       '';
178       postPatch = pkgs.lib.optionalString pkgs.stdenv.isDarwin ''
179         substituteInPlace configure \
180           --replace '/usr/bin/libtool' 'ar' \
181           --replace 'AR="libtool"' 'AR="ar"' \
182           --replace 'ARFLAGS="-o"' 'ARFLAGS="-r"'
183       '';
184     });