python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / development / libraries / hyperscan / default.nix
blob0e45b277a325e776439232ae4ed7fb0ca920810b
1 { lib, stdenv, fetchFromGitHub, cmake, ragel, python3
2 , util-linux, fetchpatch
3 , boost
4 , withStatic ? false # build only shared libs by default, build static+shared if true
5 }:
7 # NOTICE: pkg-config, pcap and pcre intentionally omitted from build inputs
8 #         pcap used only in examples, pkg-config used only to check for pcre
9 #         which is fixed 8.41 version requirement (nixpkgs have 8.42+, and
10 #         I not see any reason (for now) to backport 8.41.
12 stdenv.mkDerivation rec {
13   pname = "hyperscan";
14   version = "5.4.0";
16   src = fetchFromGitHub {
17     owner = "intel";
18     repo = pname;
19     sha256 = "sha256-AJAjaXVnGqIlMk+gb6lpTLUdZr8nxn2XSW4fj6j/cmk=";
20     rev = "v${version}";
21   };
23   outputs = [ "out" "dev" ];
25   buildInputs = [ boost ];
26   nativeBuildInputs = [
27     cmake ragel python3
28     # Consider simply using busybox for these
29     # Need at least: rev, sed, cut, nm
30     util-linux
31   ];
33   cmakeFlags = [
34     "-DFAT_RUNTIME=ON"
35     "-DBUILD_AVX512=ON"
36   ]
37   ++ lib.optional (withStatic) "-DBUILD_STATIC_AND_SHARED=ON"
38   ++ lib.optional (!withStatic) "-DBUILD_SHARED_LIBS=ON";
40   patches = [
41     (fetchpatch {
42       # part of https://github.com/intel/hyperscan/pull/336
43       url = "https://github.com/intel/hyperscan/commit/e2c4010b1fc1272cab816ba543940b3586e68a0c.patch";
44       sha256 = "sha256-doVNwROL6MTcgOW8jBwGTnxe0zvxjawiob/g6AvXLak=";
45     })
46   ];
48   postPatch = ''
49     sed -i '/examples/d' CMakeLists.txt
50     substituteInPlace libhs.pc.in \
51       --replace "libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@" "libdir=@CMAKE_INSTALL_LIBDIR@" \
52       --replace "includedir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@" "includedir=@CMAKE_INSTALL_INCLUDEDIR@"
53   '';
55   meta = with lib; {
56     description = "High-performance multiple regex matching library";
57     longDescription = ''
58       Hyperscan is a high-performance multiple regex matching library.
59       It follows the regular expression syntax of the commonly-used
60       libpcre library, but is a standalone library with its own C API.
62       Hyperscan uses hybrid automata techniques to allow simultaneous
63       matching of large numbers (up to tens of thousands) of regular
64       expressions and for the matching of regular expressions across
65       streams of data.
67       Hyperscan is typically used in a DPI library stack.
68     '';
70     homepage = "https://www.hyperscan.io/";
71     maintainers = with maintainers; [ avnik ];
72     platforms = [ "x86_64-linux" ]; # can't find nm on darwin ; might build on aarch64 but untested
73     license = licenses.bsd3;
74   };