about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/hyperscan/default.nix
blob: 53a3210caca8e76cbb24245fa2d40d83f2faa27e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
{ lib, stdenv, fetchFromGitHub, cmake, ragel, python27
, boost
}:

# NOTICE: pkgconfig, pcap and pcre intentionally omitted from build inputs
#         pcap used only in examples, pkgconfig used only to check for pcre
#         which is fixed 8.41 version requirement (nixpkgs have 8.42+, and
#         I not see any reason (for now) to backport 8.41.

stdenv.mkDerivation rec {
  name = "${pname}-${version}";
  pname = "hyperscan";
  version = "5.1.0";

  src = fetchFromGitHub {
    owner = "intel";
    repo = "hyperscan";
    sha256 = "0r2c7s7alnq14yhbfhpkq6m28a3pyfqd427115k0754afxi82vbq";
    rev = "v${version}";
  };

  outputs = [ "out" "dev" ];

  buildInputs = [ boost ];
  nativeBuildInputs = [ cmake ragel python27 ];

  cmakeFlags = [
    "-DFAT_RUNTIME=ON"
    "-DBUILD_AVX512=ON"
    "-DBUILD_STATIC_AND_SHARED=ON"
  ];

  prePatch = ''
    sed -i '/examples/d' CMakeLists.txt
  '';

  postInstall = ''
    mkdir -p $dev/lib
    mv $out/lib/*.a $dev/lib/
    ln -sf $out/lib/libhs.so $dev/lib/
    ln -sf $out/lib/libhs_runtime.so $dev/lib/
  '';

  postFixup = ''
    sed -i "s,$out/include,$dev/include," $dev/lib/pkgconfig/libhs.pc
    sed -i "s,$out/lib,$dev/lib," $dev/lib/pkgconfig/libhs.pc
  '';

  meta = {
    description = "High-performance multiple regex matching library";
    longDescription = ''
      Hyperscan is a high-performance multiple regex matching library.
      It follows the regular expression syntax of the commonly-used
      libpcre library, but is a standalone library with its own C API.

      Hyperscan uses hybrid automata techniques to allow simultaneous
      matching of large numbers (up to tens of thousands) of regular
      expressions and for the matching of regular expressions across 
      streams of data.

      Hyperscan is typically used in a DPI library stack.
    '';

    homepage = https://www.hyperscan.io/;
    maintainers = with lib.maintainers; [ avnik ];
    platforms = [ "x86_64-linux" "x86_64-darwin" ];
    license = lib.licenses.bsd3;
  };
}