about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/compilers/hhvm/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/hhvm/default.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/hhvm/default.nix68
1 files changed, 68 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/hhvm/default.nix b/nixpkgs/pkgs/development/compilers/hhvm/default.nix
new file mode 100644
index 000000000000..010dacd0c71a
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/hhvm/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, fetchgit, cmake, pkgconfig, boost, libunwind, libmemcached
+, pcre, libevent, gd, curl, libxml2, icu, flex, bison, openssl, zlib, php
+, expat, libcap, oniguruma, libdwarf, libmcrypt, tbb, gperftools, glog, libkrb5
+, bzip2, openldap, readline, libelf, uwimap, binutils, cyrus_sasl, pam, libpng
+, libxslt, freetype, gdb, git, perl, mysql, gmp, libyaml, libedit
+, libvpx, imagemagick, fribidi, gperf, which, ocamlPackages
+}:
+
+stdenv.mkDerivation rec {
+  name    = "hhvm-${version}";
+  version = "3.23.2";
+
+  # use git version since we need submodules
+  src = fetchgit {
+    url    = "https://github.com/facebook/hhvm.git";
+    rev    = "HHVM-${version}";
+    sha256 = "1nic49j8nghx82lgvz0b95r78sqz46qaaqv4nx48p8yrj9ysnd7i";
+    fetchSubmodules = true;
+  };
+
+  buildInputs =
+    [ cmake pkgconfig boost libunwind mysql.connector-c libmemcached pcre gdb git perl
+      libevent gd curl libxml2 icu flex bison openssl zlib php expat libcap
+      oniguruma libdwarf libmcrypt tbb gperftools bzip2 openldap readline
+      libelf uwimap binutils cyrus_sasl pam glog libpng libxslt libkrb5
+      gmp libyaml libedit libvpx imagemagick fribidi gperf which
+      ocamlPackages.ocaml ocamlPackages.ocamlbuild
+    ];
+
+  patches = [
+    ./flexible-array-members-gcc6.patch
+  ];
+
+  enableParallelBuilding = true;
+  dontUseCmakeBuildDir = true;
+  NIX_LDFLAGS = "-lpam -L${pam}/lib";
+
+  # work around broken build system
+  NIX_CFLAGS_COMPILE = "-I${freetype.dev}/include/freetype2";
+
+  # the cmake package does not handle absolute CMAKE_INSTALL_INCLUDEDIR correctly
+  # (setting it to an absolute path causes include files to go to $out/$out/include,
+  #  because the absolute path is interpreted with root at $out).
+  cmakeFlags = "-DCMAKE_INSTALL_INCLUDEDIR=include";
+
+  prePatch = ''
+    substituteInPlace ./configure \
+      --replace "/usr/bin/env bash" ${stdenv.shell}
+    substituteInPlace ./third-party/ocaml/CMakeLists.txt \
+      --replace "/bin/bash" ${stdenv.shell}
+    perl -pi -e 's/([ \t(])(isnan|isinf)\(/$1std::$2(/g' \
+      hphp/runtime/base/*.cpp \
+      hphp/runtime/ext/std/*.cpp \
+      hphp/runtime/ext_zend_compat/php-src/main/*.cpp \
+      hphp/runtime/ext_zend_compat/php-src/main/*.h
+    sed '1i#include <functional>' -i third-party/mcrouter/src/mcrouter/lib/cycles/Cycles.h
+    patchShebangs .
+  '';
+
+  meta = {
+    description = "High-performance JIT compiler for PHP/Hack";
+    homepage    = "https://hhvm.com";
+    license     = "PHP/Zend";
+    platforms   = [ "x86_64-linux" ];
+    maintainers = [ stdenv.lib.maintainers.thoughtpolice ];
+    broken = true; # Since 2018-04-21, see https://hydra.nixos.org/build/73059373
+  };
+}