linux_xanmod: 5.11.14 -> 5.11.15
[NixPkgs.git] / pkgs / development / python-modules / protobuf / default.nix
blob60c6f333275be9e1aef1b85be4738e5a19107883
1 { buildPackages
2 , lib
3 , fetchpatch
4 , python
5 , buildPythonPackage
6 , isPy37
7 , protobuf
8 , google-apputils
9 , six
10 , pyext
11 , libcxx
12 , isPy27
13 , disabled
14 , doCheck ? true
17 buildPythonPackage {
18   inherit (protobuf) pname src version;
19   inherit disabled;
20   doCheck = doCheck && !isPy27; # setuptools>=41.4 no longer collects correctly on python2
22   outputs = [ "out" "dev" ];
24   propagatedBuildInputs = [ six ] ++ lib.optionals isPy27 [ google-apputils ];
25   propagatedNativeBuildInputs = [ buildPackages.protobuf ]; # For protoc.
26   nativeBuildInputs = [ pyext ] ++ lib.optionals isPy27 [ google-apputils ];
27   buildInputs = [ protobuf ];
29   patches = lib.optional (isPy37 && (lib.versionOlder protobuf.version "3.6.1.2"))
30     # Python 3.7 compatibility (not needed for protobuf >= 3.6.1.2)
31     (fetchpatch {
32       url = "https://github.com/protocolbuffers/protobuf/commit/0a59054c30e4f0ba10f10acfc1d7f3814c63e1a7.patch";
33       sha256 = "09hw22y3423v8bbmc9xm07znwdxfbya6rp78d4zqw6fisdvjkqf1";
34       stripLen = 1;
35     })
36   ;
38   prePatch = ''
39     while [ ! -d python ]; do
40       cd *
41     done
42     cd python
43   '';
45   preConfigure = lib.optionalString (lib.versionAtLeast protobuf.version "2.6.0") ''
46     export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=cpp
47     export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION=2
48   '';
50   preBuild = ''
51     # Workaround for https://github.com/google/protobuf/issues/2895
52     ${python.pythonForBuild.interpreter} setup.py build
53   '' + lib.optionalString (lib.versionAtLeast protobuf.version "2.6.0") ''
54     ${python.pythonForBuild.interpreter} setup.py build_ext --cpp_implementation
55   '';
57   installFlags = lib.optional (lib.versionAtLeast protobuf.version "2.6.0")
58     "--install-option='--cpp_implementation'";
60   # the _message.so isn't installed, so we'll do that manually.
61   # if someone can figure out a less hacky way to get the _message.so to
62   # install, please do replace this.
63   postInstall = lib.optionalString (lib.versionAtLeast protobuf.version "2.6.0") ''
64     cp -v $(find build -name "_message*") $out/${python.sitePackages}/google/protobuf/pyext
65   '';
67   meta = with lib; {
68     description = "Protocol Buffers are Google's data interchange format";
69     homepage = "https://developers.google.com/protocol-buffers/";
70     license = licenses.bsd3;
71   };
73   passthru.protobuf = protobuf;