1{
2 lib,
3 stdenv,
4 fetchurl,
5}:
6
7stdenv.mkDerivation rec {
8 pname = "gperf";
9 version = "3.1";
10
11 src = fetchurl {
12 url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
13 sha256 = "1qispg6i508rq8pkajh26cznwimbnj06wq9sd85vg95v8nwld1aq";
14 };
15
16 patches = [
17 # Clang 16 defaults to C++17, which does not allow `register` as a storage class specifier.
18 ./gperf-c++17-register-fix.patch
19 ];
20
21 enableParallelBuilding = true;
22
23 meta = {
24 description = "Perfect hash function generator";
25
26 longDescription = ''
27 GNU gperf is a perfect hash function generator. For a given
28 list of strings, it produces a hash function and hash table, in
29 form of C or C++ code, for looking up a value depending on the
30 input string. The hash function is perfect, which means that
31 the hash table has no collisions, and the hash table lookup
32 needs a single string comparison only.
33
34 GNU gperf is highly customizable. There are options for
35 generating C or C++ code, for emitting switch statements or
36 nested ifs instead of a hash table, and for tuning the algorithm
37 employed by gperf.
38 '';
39
40 license = lib.licenses.gpl3Plus;
41
42 homepage = "https://www.gnu.org/software/gperf/";
43 platforms = lib.platforms.unix;
44 mainProgram = "gperf";
45 };
46}