about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/em-modules
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/em-modules')
-rw-r--r--nixpkgs/pkgs/development/em-modules/generic/default.nix66
1 files changed, 66 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/em-modules/generic/default.nix b/nixpkgs/pkgs/development/em-modules/generic/default.nix
new file mode 100644
index 000000000000..f03e6e42739a
--- /dev/null
+++ b/nixpkgs/pkgs/development/em-modules/generic/default.nix
@@ -0,0 +1,66 @@
+{ pkgs, lib, emscripten, python }:
+
+{ buildInputs ? [], nativeBuildInputs ? []
+
+, enableParallelBuilding ? true
+
+, meta ? {}, ... } @ args:
+
+pkgs.stdenv.mkDerivation (
+  args // 
+  {
+
+  name = "emscripten-${args.name}";
+  buildInputs = [ emscripten python ] ++ buildInputs;
+  nativeBuildInputs = [ emscripten python ] ++ nativeBuildInputs;
+
+  # fake conftest results with emscripten's python magic
+  EMCONFIGURE_JS=2;
+
+  configurePhase = args.configurePhase or ''
+    # FIXME: Some tests require writing at $HOME
+    HOME=$TMPDIR
+    runHook preConfigure
+
+    emconfigure ./configure --prefix=$out
+
+    runHook postConfigure
+  '';
+
+  buildPhase = args.buildPhase or ''
+    runHook preBuild
+
+    HOME=$TMPDIR
+    emmake make
+
+    runHook postBuild
+  '';
+
+  doCheck = true;
+
+  checkPhase = args.checkPhase or ''
+    runHook preCheck
+
+    echo "Please provide a test for your emscripten based library/tool, see libxml2 as an exmple on how to use emcc/node to verify your build"
+    echo ""
+    echo "In normal C 'unresolved symbols' would yield an error and a breake of execution. In contrast, in emscripten they are only a warning which is ok given that emscripten assumptions about shared libraries."
+    echo "  -> https://github.com/kripken/emscripten/wiki/Linking"
+    echo "So just assume the dependencies were built using hydra, then YOU WILL NEVER see the warning and your code depending on a library will always fail!"
+    exit 1
+
+    runHook postCheck
+  '';
+
+  enableParallelBuilding = args.enableParallelBuilding or true;
+
+  meta = {
+    # Add default meta information
+    platforms = lib.platforms.all;
+    # Do not build this automatically
+    hydraPlatforms = [];
+  } // meta // {
+    # add an extra maintainer to every package
+    maintainers = (meta.maintainers or []) ++
+                  [ lib.maintainers.qknight ];
+  };
+})