diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/protobuf')
9 files changed, 210 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/protobuf/3.11.nix b/nixpkgs/pkgs/development/libraries/protobuf/3.11.nix new file mode 100644 index 000000000000..c5d8b21b1ac4 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/protobuf/3.11.nix @@ -0,0 +1,6 @@ +{ callPackage, ... }: + +callPackage ./generic-v3.nix { + version = "3.11.4"; + sha256 = "00g61f1yd8z5l0z0svmr3hms38ph35lcx2y7hivw6fahslw0l8yw"; +} diff --git a/nixpkgs/pkgs/development/libraries/protobuf/3.17.nix b/nixpkgs/pkgs/development/libraries/protobuf/3.17.nix new file mode 100644 index 000000000000..d869b9ce76ef --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/protobuf/3.17.nix @@ -0,0 +1,6 @@ +{ callPackage, ... }: + +callPackage ./generic-v3.nix { + version = "3.17.3"; + sha256 = "08644kaxhpjs38q5q4fp01yr0wakg1ijha4g3lzp2ifg7y3c465d"; +} diff --git a/nixpkgs/pkgs/development/libraries/protobuf/3.19.nix b/nixpkgs/pkgs/development/libraries/protobuf/3.19.nix new file mode 100644 index 000000000000..e47bb62e736a --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/protobuf/3.19.nix @@ -0,0 +1,6 @@ +{ callPackage, ... }: + +callPackage ./generic-v3.nix { + version = "3.19.4"; + sha256 = "sha256-mxQ8XonVgctfaNAyd3vqQHMLHVnkjBa9EObk47vxH24="; +} diff --git a/nixpkgs/pkgs/development/libraries/protobuf/3.20.nix b/nixpkgs/pkgs/development/libraries/protobuf/3.20.nix new file mode 100644 index 000000000000..93d180159b87 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/protobuf/3.20.nix @@ -0,0 +1,6 @@ +{ callPackage, abseil-cpp, ... }: + +callPackage ./generic-v3.nix { + version = "3.20.1"; + sha256 = "sha256-pAMacD0UQetqysZHszu5slPqp0iREtDmHFv1cgcUBJA="; +} diff --git a/nixpkgs/pkgs/development/libraries/protobuf/3.21.nix b/nixpkgs/pkgs/development/libraries/protobuf/3.21.nix new file mode 100644 index 000000000000..70c6095ae7b6 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/protobuf/3.21.nix @@ -0,0 +1,6 @@ +{ callPackage, abseil-cpp, ... }: + +callPackage ./generic-v3-cmake.nix { + version = "3.21.2"; + sha256 = "sha256-DUv07pWiZV7jNeSA2ClDOz9DY0x/hiJynxkbSTeJOSs="; +} diff --git a/nixpkgs/pkgs/development/libraries/protobuf/3.7.nix b/nixpkgs/pkgs/development/libraries/protobuf/3.7.nix new file mode 100644 index 000000000000..9bfb307e3286 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/protobuf/3.7.nix @@ -0,0 +1,6 @@ +{ callPackage, ... }: + +callPackage ./generic-v3.nix { + version = "3.7.1"; + sha256 = "00zkijvj80bmhlj8290x4bc416mng2dlbzwc4bkvfmbal1fx93m2"; +} diff --git a/nixpkgs/pkgs/development/libraries/protobuf/3.8.nix b/nixpkgs/pkgs/development/libraries/protobuf/3.8.nix new file mode 100644 index 000000000000..2ea03643b3ae --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/protobuf/3.8.nix @@ -0,0 +1,6 @@ +{ callPackage, ... }: + +callPackage ./generic-v3.nix { + version = "3.8.0"; + sha256 = "0vll02a6k46k720wfh25sl4hdai0130s3ix2l1wh6j1lm9pi7bm8"; +} diff --git a/nixpkgs/pkgs/development/libraries/protobuf/generic-v3-cmake.nix b/nixpkgs/pkgs/development/libraries/protobuf/generic-v3-cmake.nix new file mode 100644 index 000000000000..0b6967a67385 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/protobuf/generic-v3-cmake.nix @@ -0,0 +1,107 @@ +# The cmake version of this build is meant to enable both cmake and .pc being exported +# this is important because grpc exports a .cmake file which also expects for protobuf +# to have been exported through cmake as well. +{ lib +, stdenv +, abseil-cpp +, buildPackages +, cmake +, fetchFromGitHub +, fetchpatch +, gtest +, zlib +, version +, sha256 + +# downstream dependencies +, python3 + +, ... +}: + +let + self = stdenv.mkDerivation { + pname = "protobuf"; + inherit version; + + src = fetchFromGitHub { + owner = "protocolbuffers"; + repo = "protobuf"; + rev = "v${version}"; + inherit sha256; + }; + + # re-create submodule logic + postPatch = '' + rm -rf gmock + cp -r ${gtest.src}/googlemock third_party/gmock + cp -r ${gtest.src}/googletest third_party/ + chmod -R a+w third_party/ + + ln -s ../googletest third_party/gmock/gtest + ln -s ../gmock third_party/googletest/googlemock + ln -s $(pwd)/third_party/googletest third_party/googletest/googletest + '' + lib.optionalString stdenv.isDarwin '' + substituteInPlace src/google/protobuf/testing/googletest.cc \ + --replace 'tmpnam(b)' '"'$TMPDIR'/foo"' + ''; + + patches = lib.optionals (lib.versionOlder version "3.22") [ + # fix protobuf-targets.cmake installation paths, and allow for CMAKE_INSTALL_LIBDIR to be absolute + # https://github.com/protocolbuffers/protobuf/pull/10090 + (fetchpatch { + url = "https://github.com/protocolbuffers/protobuf/commit/a7324f88e92bc16b57f3683403b6c993bf68070b.patch"; + sha256 = "sha256-SmwaUjOjjZulg/wgNmR/F5b8rhYA2wkKAjHIOxjcQdQ="; + }) + ]; + + nativeBuildInputs = let + protobufVersion = "${lib.versions.major version}_${lib.versions.minor version}"; + in [ + cmake + ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + # protoc of the same version must be available for build. For non-cross builds, it's able to + # re-use the executable generated as part of the build + buildPackages."protobuf${protobufVersion}" + ]; + + buildInputs = [ + abseil-cpp + zlib + ]; + + # After 3.20, CMakeLists.txt can now be found at the top-level, however + # a stub cmake/CMakeLists.txt still exists for compatibility with previous build assumptions + cmakeDir = "../cmake"; + cmakeFlags = [ + "-Dprotobuf_ABSL_PROVIDER=package" + ] ++ lib.optionals (!stdenv.targetPlatform.isStatic) [ + "-Dprotobuf_BUILD_SHARED_LIBS=ON" + ]; + + # unfortunately the shared libraries have yet to been patched by nix, thus tests will fail + doCheck = false; + + passthru = { + tests = { + pythonProtobuf = python3.pkgs.protobuf.override(_: { + protobuf = self; + }); + }; + }; + + meta = { + description = "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 = lib.licenses.bsd3; + platforms = lib.platforms.unix; + homepage = "https://developers.google.com/protocol-buffers/"; + maintainers = with lib.maintainers; [ jonringer ]; + }; + }; +in + self diff --git a/nixpkgs/pkgs/development/libraries/protobuf/generic-v3.nix b/nixpkgs/pkgs/development/libraries/protobuf/generic-v3.nix new file mode 100644 index 000000000000..130f681d8496 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/protobuf/generic-v3.nix @@ -0,0 +1,61 @@ +{ lib, stdenv +, fetchFromGitHub +, autoreconfHook, zlib, gtest, buildPackages +, version, sha256 +, ... +}: + +let +mkProtobufDerivation = buildProtobuf: stdenv: stdenv.mkDerivation { + pname = "protobuf"; + inherit version; + + # make sure you test also -A pythonPackages.protobuf + src = fetchFromGitHub { + owner = "protocolbuffers"; + repo = "protobuf"; + rev = "v${version}"; + inherit sha256; + }; + + postPatch = '' + rm -rf gmock + cp -r ${gtest.src}/googlemock gmock + cp -r ${gtest.src}/googletest googletest + chmod -R a+w gmock + chmod -R a+w googletest + ln -s ../googletest gmock/gtest + '' + lib.optionalString stdenv.isDarwin '' + substituteInPlace src/google/protobuf/testing/googletest.cc \ + --replace 'tmpnam(b)' '"'$TMPDIR'/foo"' + ''; + + nativeBuildInputs = [ autoreconfHook buildPackages.which buildPackages.stdenv.cc buildProtobuf ]; + + buildInputs = [ zlib ]; + configureFlags = if buildProtobuf == null then [] else [ "--with-protoc=${buildProtobuf}/bin/protoc" ]; + + enableParallelBuilding = true; + + doCheck = true; + + dontDisableStatic = true; + + meta = { + description = "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. + ''; + homepage = "https://developers.google.com/protocol-buffers/"; + license = lib.licenses.bsd3; + mainProgram = "protoc"; + platforms = lib.platforms.unix; + }; + + passthru.version = version; +}; +in mkProtobufDerivation(if (stdenv.buildPlatform != stdenv.hostPlatform) + then (mkProtobufDerivation null buildPackages.stdenv) + else null) stdenv |