diff options
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/development/libraries/protobuf/generic.nix')
-rw-r--r-- | infra/libkookie/nixpkgs/pkgs/development/libraries/protobuf/generic.nix | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/development/libraries/protobuf/generic.nix b/infra/libkookie/nixpkgs/pkgs/development/libraries/protobuf/generic.nix new file mode 100644 index 000000000000..32d6f70d1eb6 --- /dev/null +++ b/infra/libkookie/nixpkgs/pkgs/development/libraries/protobuf/generic.nix @@ -0,0 +1,61 @@ +{ stdenv, version, src +, autoreconfHook, zlib, gtest +, ... +}: + +stdenv.mkDerivation { + pname = "protobuf"; + inherit version; + + inherit src; + + postPatch = '' + rm -rf gtest + cp -r ${gtest.src}/googletest gtest + chmod -R a+w gtest + '' + stdenv.lib.optionalString stdenv.isDarwin '' + substituteInPlace src/google/protobuf/testing/googletest.cc \ + --replace 'tmpnam(b)' '"'$TMPDIR'/foo"' + ''; + + outputs = [ "out" "lib" ]; + + nativeBuildInputs = [ autoreconfHook ]; + buildInputs = [ zlib ]; + + # The generated C++ code uses static initializers which mutate a global data + # structure. This causes problems for an executable when: + # + # 1) it dynamically links to two libs, both of which contain generated C++ for + # the same proto file, and + # 2) the two aforementioned libs both dynamically link to libprotobuf. + # + # One solution is to statically link libprotobuf, that way the global + # variables are not shared; in fact, this is necessary for the python Mesos + # binding to not crash, as the python lib contains two C extensions which + # both refer to the same proto schema. + # + # See: https://github.com/NixOS/nixpkgs/pull/19064#issuecomment-255082684 + # https://github.com/google/protobuf/issues/1489 + dontDisableStatic = true; + configureFlags = [ + "CFLAGS=-fPIC" + "CXXFLAGS=-fPIC" + ]; + + doCheck = true; + + meta = { + description = "Protocol Buffers - Google's data interchange format"; + longDescription = + '' Protocol Buffers are a way of encoding structured data in an + efficient yet extensible format. Google uses Protocol Buffers for + almost all of its internal RPC protocols and file formats. + ''; + license = "mBSD"; + homepage = "https://developers.google.com/protocol-buffers/"; + platforms = stdenv.lib.platforms.unix; + }; + + passthru.version = version; +} |