diff options
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/hhvm')
-rw-r--r-- | nixpkgs/pkgs/development/compilers/hhvm/default.nix | 68 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/compilers/hhvm/flexible-array-members-gcc6.patch | 20 |
2 files changed, 88 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 + }; +} diff --git a/nixpkgs/pkgs/development/compilers/hhvm/flexible-array-members-gcc6.patch b/nixpkgs/pkgs/development/compilers/hhvm/flexible-array-members-gcc6.patch new file mode 100644 index 000000000000..61b6e5e8d8c3 --- /dev/null +++ b/nixpkgs/pkgs/development/compilers/hhvm/flexible-array-members-gcc6.patch @@ -0,0 +1,20 @@ +diff --git a/third-party/re2/src/re2/dfa.cc b/third-party/re2/src/re2/dfa.cc +index 483f678..3aa3610 100644 +--- a/third-party/re2/src/re2/dfa.cc ++++ b/third-party/re2/src/re2/dfa.cc +@@ -101,8 +101,13 @@ class DFA { + uint flag_; // Empty string bitfield flags in effect on the way + // into this state, along with kFlagMatch if this + // is a matching state. +- std::atomic<State*> next_[]; // Outgoing arrows from State, +- // one per input byte class ++// Work around the bug affecting flexible array members in GCC 6.1 and 6.2. ++// (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70932) ++#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ == 6 && __GNUC_MINOR__ >= 1 ++ std::atomic<State*> next_[0]; // Outgoing arrows from State, one per input byte class ++#else ++ std::atomic<State*> next_[]; // Outgoing arrows from State, one per input byte class ++#endif + }; + + enum { |