linux_xanmod: 5.11.14 -> 5.11.15
[NixPkgs.git] / pkgs / development / libraries / protobuf / generic.nix
blob7d64df43626081ab3d9a042ca49de11e77a37e29
1 { lib, stdenv, version, src
2 , autoreconfHook, zlib, gtest
3 , ...
4 }:
6 stdenv.mkDerivation {
7   pname = "protobuf";
8   inherit version;
10   inherit src;
12   postPatch = ''
13     rm -rf gtest
14     cp -r ${gtest.src}/googletest gtest
15     chmod -R a+w gtest
16   '' + lib.optionalString stdenv.isDarwin ''
17     substituteInPlace src/google/protobuf/testing/googletest.cc \
18       --replace 'tmpnam(b)' '"'$TMPDIR'/foo"'
19   '';
21   outputs = [ "out" "lib" ];
23   nativeBuildInputs = [ autoreconfHook ];
24   buildInputs = [ zlib ];
26   # The generated C++ code uses static initializers which mutate a global data
27   # structure. This causes problems for an executable when:
28   #
29   # 1) it dynamically links to two libs, both of which contain generated C++ for
30   #    the same proto file, and
31   # 2) the two aforementioned libs both dynamically link to libprotobuf.
32   #
33   # One solution is to statically link libprotobuf, that way the global
34   # variables are not shared; in fact, this is necessary for the python Mesos
35   # binding to not crash, as the python lib contains two C extensions which
36   # both refer to the same proto schema.
37   #
38   # See: https://github.com/NixOS/nixpkgs/pull/19064#issuecomment-255082684
39   #      https://github.com/google/protobuf/issues/1489
40   dontDisableStatic = true;
41   configureFlags = [
42     "CFLAGS=-fPIC"
43     "CXXFLAGS=-fPIC"
44   ];
46   doCheck = true;
48   meta = {
49     description = "Protocol Buffers - Google's data interchange format";
50     longDescription =
51       '' Protocol Buffers are a way of encoding structured data in an
52          efficient yet extensible format.  Google uses Protocol Buffers for
53          almost all of its internal RPC protocols and file formats.
54       '';
55     license = "mBSD";
56     homepage = "https://developers.google.com/protocol-buffers/";
57     platforms = lib.platforms.unix;
58   };
60   passthru.version = version;