about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/libraries/thrift
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/thrift')
-rw-r--r--nixpkgs/pkgs/development/libraries/thrift/default.nix140
-rw-r--r--nixpkgs/pkgs/development/libraries/thrift/disable-failing-test.patch12
2 files changed, 152 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/thrift/default.nix b/nixpkgs/pkgs/development/libraries/thrift/default.nix
new file mode 100644
index 000000000000..3d0a9d8a7874
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/thrift/default.nix
@@ -0,0 +1,140 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, boost
+, zlib
+, libevent
+, openssl
+, python3
+, cmake
+, pkg-config
+, bison
+, flex
+, static ? stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "thrift";
+  version = "0.18.1";
+
+  src = fetchurl {
+    url = "https://archive.apache.org/dist/thrift/${version}/${pname}-${version}.tar.gz";
+    hash = "sha256-BMbxDl14jKeOE+4u8NIVLHsHDAr1VIPWuULinP8pZyY=";
+  };
+
+  # Workaround to make the Python wrapper not drop this package:
+  # pythonFull.buildEnv.override { extraLibs = [ thrift ]; }
+  pythonPath = [];
+
+  nativeBuildInputs = [
+    bison
+    cmake
+    flex
+    pkg-config
+  ];
+
+  buildInputs = [
+    boost
+  ] ++ lib.optionals (!static) [
+    (python3.withPackages (ps: [ps.twisted]))
+  ];
+
+  propagatedBuildInputs = [
+    libevent
+    openssl
+    zlib
+  ];
+
+  postPatch = ''
+    # Python 3.10 related failures:
+    # SystemError: PY_SSIZE_T_CLEAN macro must be defined for '#' formats
+    # AttributeError: module 'collections' has no attribute 'Hashable'
+    substituteInPlace test/py/RunClientServer.py \
+      --replace "'FastbinaryTest.py'," "" \
+      --replace "'TestEof.py'," "" \
+      --replace "'TestFrozen.py'," ""
+  '';
+
+  preConfigure = ''
+    export PY_PREFIX=$out
+  '';
+
+  patches = [
+    # ToStringTest.cpp is failing from some reason due to locale issue, this
+    # doesn't disable all UnitTests as in Darwin.
+    ./disable-failing-test.patch
+    (fetchpatch {
+      name = "setuptools-gte-62.1.0.patch"; # https://github.com/apache/thrift/pull/2635
+      url = "https://github.com/apache/thrift/commit/c41ad9d5119e9bdae1746167e77e224f390f2c42.diff";
+      hash = "sha256-FkErrg/6vXTomS4AsCsld7t+Iccc55ZiDaNjJ3W1km0=";
+    })
+    (fetchpatch {
+      name = "thrift-install-FindLibevent.patch"; # https://github.com/apache/thrift/pull/2726
+      url = "https://github.com/apache/thrift/commit/2ab850824f75d448f2ba14a468fb77d2594998df.diff";
+      hash = "sha256-ejMKFG/cJgoPlAFzVDPI4vIIL7URqaG06/IWdQ2NkhY=";
+    })
+    (fetchpatch {
+      name = "thrift-fix-tests-OpenSSL3.patch"; # https://github.com/apache/thrift/pull/2760
+      url = "https://github.com/apache/thrift/commit/eae3ac418f36c73833746bcd53e69ed8a12f0e1a.diff";
+      hash = "sha256-0jlN4fo94cfGFUKcLFQgVMI/x7uxn5OiLiFk6txVPzs=";
+    })
+  ];
+
+  cmakeFlags = [
+    "-DBUILD_JAVASCRIPT:BOOL=OFF"
+    "-DBUILD_NODEJS:BOOL=OFF"
+
+    # FIXME: Fails to link in static mode with undefined reference to
+    # `boost::unit_test::unit_test_main(bool (*)(), int, char**)'
+    "-DBUILD_TESTING:BOOL=${if static then "OFF" else "ON"}"
+  ] ++ lib.optionals static [
+    "-DWITH_STATIC_LIB:BOOL=ON"
+    "-DOPENSSL_USE_STATIC_LIBS=ON"
+  ];
+
+  disabledTests = [
+    "PythonTestSSLSocket"
+    "PythonThriftTNonblockingServer"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # Tests that hang up in the Darwin sandbox
+    "SecurityTest"
+    "SecurityFromBufferTest"
+    "python_test"
+
+    # fails on hydra, passes locally
+    "concurrency_test"
+
+    # Tests that fail in the Darwin sandbox when trying to use network
+    "UnitTests"
+    "TInterruptTest"
+    "TServerIntegrationTest"
+    "processor"
+    "TNonblockingServerTest"
+    "TNonblockingSSLServerTest"
+    "StressTest"
+    "StressTestConcurrent"
+    "StressTestNonBlocking"
+  ];
+
+  doCheck = !static;
+
+  checkPhase = ''
+    runHook preCheck
+
+    ${lib.optionalString stdenv.isDarwin "DY"}LD_LIBRARY_PATH=$PWD/lib ctest -E "($(echo "$disabledTests" | tr " " "|"))"
+
+    runHook postCheck
+  '';
+
+  enableParallelChecking = false;
+
+  meta = with lib; {
+    description = "Library for scalable cross-language services";
+    mainProgram = "thrift";
+    homepage = "https://thrift.apache.org/";
+    license = licenses.asl20;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/development/libraries/thrift/disable-failing-test.patch b/nixpkgs/pkgs/development/libraries/thrift/disable-failing-test.patch
new file mode 100644
index 000000000000..4307d58ddedb
--- /dev/null
+++ b/nixpkgs/pkgs/development/libraries/thrift/disable-failing-test.patch
@@ -0,0 +1,12 @@
+diff --git i/lib/cpp/test/CMakeLists.txt w/lib/cpp/test/CMakeLists.txt
+index 19854e1a3..9d428a166 100644
+--- i/lib/cpp/test/CMakeLists.txt
++++ w/lib/cpp/test/CMakeLists.txt
+@@ -77,7 +77,6 @@ set(UnitTest_SOURCES
+     TMemoryBufferTest.cpp
+     TBufferBaseTest.cpp
+     Base64Test.cpp
+-    ToStringTest.cpp
+     TypedefTest.cpp
+     TServerSocketTest.cpp
+     TServerTransportTest.cpp