diff options
Diffstat (limited to 'nixpkgs/pkgs/development/python-modules/protobuf')
-rw-r--r-- | nixpkgs/pkgs/development/python-modules/protobuf/3.nix | 90 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/python-modules/protobuf/default.nix | 24 |
2 files changed, 101 insertions, 13 deletions
diff --git a/nixpkgs/pkgs/development/python-modules/protobuf/3.nix b/nixpkgs/pkgs/development/python-modules/protobuf/3.nix new file mode 100644 index 000000000000..d9e3cce5f918 --- /dev/null +++ b/nixpkgs/pkgs/development/python-modules/protobuf/3.nix @@ -0,0 +1,90 @@ +{ buildPackages +, buildPythonPackage +, fetchpatch +, isPyPy +, lib +, protobuf +, pytestCheckHook +, pythonAtLeast +, tzdata +}: + +assert lib.versionAtLeast protobuf.version "3.21" -> throw "Protobuf 3.20 or older required"; + +buildPythonPackage { + inherit (protobuf) pname src; + + version = protobuf.version; + + sourceRoot = "${protobuf.src.name}/python"; + + patches = lib.optionals (pythonAtLeast "3.11") [ + (fetchpatch { + name = "support-python311.patch"; + url = "https://github.com/protocolbuffers/protobuf/commit/2206b63c4649cf2e8a06b66c9191c8ef862ca519.diff"; + stripLen = 1; # because sourceRoot above + hash = "sha256-3GaoEyZIhS3QONq8LEvJCH5TdO9PKnOgcQF0GlEiwFo="; + }) + ]; + + prePatch = '' + if [[ "$(<../version.json)" != *'"python": "'"$version"'"'* ]]; then + echo "Python library version mismatch. Derivation version: $version, actual: $(<../version.json)" + exit 1 + fi + ''; + + # Remove the line in setup.py that forces compiling with C++14. Upstream's + # CMake build has been updated to support compiling with other versions of + # C++, but the Python build has not. Without this, we observe compile-time + # errors using GCC. + # + # Fedora appears to do the same, per this comment: + # + # https://github.com/protocolbuffers/protobuf/issues/12104#issuecomment-1542543967 + # + postPatch = '' + sed -i "/extra_compile_args.append('-std=c++14')/d" setup.py + ''; + + nativeBuildInputs = lib.optional isPyPy tzdata; + + buildInputs = [ protobuf ]; + + propagatedNativeBuildInputs = [ + # For protoc of the same version. + buildPackages."protobuf${lib.versions.major protobuf.version}_${lib.versions.minor protobuf.version}" + ]; + + setupPyGlobalFlags = [ "--cpp_implementation" ]; + + nativeCheckInputs = [ + pytestCheckHook + ]; + + disabledTests = lib.optionals isPyPy [ + # error message differs + "testInvalidTimestamp" + # requires tracemalloc which pypy does not implement + # https://foss.heptapod.net/pypy/pypy/-/issues/3048 + "testUnknownFieldsNoMemoryLeak" + # assertion is not raised for some reason + "testStrictUtf8Check" + ]; + + pythonImportsCheck = [ + "google.protobuf" + "google.protobuf.internal._api_implementation" # Verify that --cpp_implementation worked + ]; + + passthru = { + inherit protobuf; + }; + + meta = with lib; { + description = "Protocol Buffers are Google's data interchange format"; + homepage = "https://developers.google.com/protocol-buffers/"; + license = licenses.bsd3; + maintainers = with maintainers; [ knedlsepp ]; + }; +} diff --git a/nixpkgs/pkgs/development/python-modules/protobuf/default.nix b/nixpkgs/pkgs/development/python-modules/protobuf/default.nix index 2676dc90d68b..3a42754de778 100644 --- a/nixpkgs/pkgs/development/python-modules/protobuf/default.nix +++ b/nixpkgs/pkgs/development/python-modules/protobuf/default.nix @@ -11,30 +11,28 @@ , tzdata }: +assert lib.versionOlder protobuf.version "21" -> throw "Protobuf 21 or newer required"; + let - versionMajor = lib.versions.major protobuf.version; - versionMinor = lib.versions.minor protobuf.version; - versionPatch = lib.versions.patch protobuf.version; + protobufVersionMajor = lib.versions.major protobuf.version; + protobufVersionMinor = lib.versions.minor protobuf.version; in buildPythonPackage { inherit (protobuf) pname src; - # protobuf 3.21 corresponds with its python library 4.21 - version = - if lib.versionAtLeast protobuf.version "3.21" - then "${toString (lib.toInt versionMajor + 1)}.${versionMinor}.${versionPatch}" - else protobuf.version; + # protobuf 21 corresponds with its python library 4.21 + version = "4.${protobufVersionMajor}.${protobufVersionMinor}"; sourceRoot = "${protobuf.src.name}/python"; - patches = lib.optionals (lib.versionAtLeast protobuf.version "3.22") [ + patches = lib.optionals (lib.versionAtLeast protobuf.version "22") [ # Replace the vendored abseil-cpp with nixpkgs' (substituteAll { src = ./use-nixpkgs-abseil-cpp.patch; abseil_cpp_include_path = "${lib.getDev protobuf.abseil-cpp}/include"; }) ] - ++ lib.optionals (pythonAtLeast "3.11" && lib.versionOlder protobuf.version "3.22") [ + ++ lib.optionals (pythonAtLeast "3.11" && lib.versionOlder protobuf.version "22") [ (fetchpatch { name = "support-python311.patch"; url = "https://github.com/protocolbuffers/protobuf/commit/2206b63c4649cf2e8a06b66c9191c8ef862ca519.diff"; @@ -69,14 +67,14 @@ buildPythonPackage { propagatedNativeBuildInputs = [ # For protoc of the same version. - buildPackages."protobuf${lib.versions.major protobuf.version}_${lib.versions.minor protobuf.version}" + buildPackages."protobuf_${protobufVersionMajor}" ]; setupPyGlobalFlags = [ "--cpp_implementation" ]; nativeCheckInputs = [ pytestCheckHook - ] ++ lib.optionals (lib.versionAtLeast protobuf.version "3.22") [ + ] ++ lib.optionals (lib.versionAtLeast protobuf.version "22") [ numpy ]; @@ -90,7 +88,7 @@ buildPythonPackage { "testStrictUtf8Check" ]; - disabledTestPaths = lib.optionals (lib.versionAtLeast protobuf.version "3.23") [ + disabledTestPaths = lib.optionals (lib.versionAtLeast protobuf.version "23") [ # The following commit (I think) added some internal test logic for Google # that broke generator_test.py. There is a new proto file that setup.py is # not generating into a .py file. However, adding this breaks a bunch of |