1{
2 lib,
3 asioSupport ? true,
4 asio,
5 boost,
6 log4cxxSupport ? false,
7 log4cxx,
8 snappySupport ? false,
9 snappy,
10 zlibSupport ? true,
11 zlib,
12 zstdSupport ? true,
13 zstd,
14 gtest,
15 gtestSupport ? false,
16 cmake,
17 curl,
18 fetchFromGitHub,
19 protobuf,
20 jsoncpp,
21 openssl,
22 pkg-config,
23 stdenv,
24}:
25
26let
27 /*
28 Check if null or false
29 Example:
30 let result = enableFeature null
31 => "OFF"
32 let result = enableFeature false
33 => "OFF"
34 let result = enableFeature «derivation»
35 => "ON"
36 */
37 enableCmakeFeature = p: if (p == null || p == false) then "OFF" else "ON";
38
39 defaultOptionals = [
40 protobuf
41 ]
42 ++ lib.optional snappySupport snappy.dev
43 ++ lib.optional zlibSupport zlib
44 ++ lib.optional zstdSupport zstd
45 ++ lib.optional log4cxxSupport log4cxx
46 ++ lib.optional asioSupport asio
47 ++ lib.optional (!asioSupport) boost;
48
49in
50stdenv.mkDerivation (finalAttrs: {
51 pname = "libpulsar";
52 version = "3.7.2";
53
54 src = fetchFromGitHub {
55 owner = "apache";
56 repo = "pulsar-client-cpp";
57 rev = "v${finalAttrs.version}";
58 hash = "sha256-3kUyimyv0Si3zUFaIsIVdulzH8l2fxe6BO9a5L6n8I8=";
59 };
60
61 nativeBuildInputs = [
62 cmake
63 pkg-config
64 ]
65 ++ defaultOptionals
66 ++ lib.optional gtestSupport gtest.dev;
67
68 buildInputs = [
69 jsoncpp
70 openssl
71 curl
72 ]
73 ++ defaultOptionals;
74
75 cmakeFlags = [
76 "-DBUILD_TESTS=${enableCmakeFeature gtestSupport}"
77 "-DUSE_LOG4CXX=${enableCmakeFeature log4cxxSupport}"
78 "-DUSE_ASIO=${enableCmakeFeature asioSupport}"
79 ];
80
81 doInstallCheck = true;
82 installCheckPhase = ''
83 echo ${lib.escapeShellArg ''
84 #include <pulsar/Client.h>
85 int main (int argc, char **argv) {
86 pulsar::Client client("pulsar://localhost:6650");
87 return 0;
88 }
89 ''} > test.cc
90 $CXX test.cc -L $out/lib -I $out/include -lpulsar -o test
91 '';
92
93 meta = with lib; {
94 homepage = "https://pulsar.apache.org/docs/next/client-libraries-cpp/";
95 description = "Apache Pulsar C++ library";
96 changelog = "https://github.com/apache/pulsar-client-cpp/releases/tag/v${finalAttrs.version}";
97 platforms = platforms.all;
98 license = licenses.asl20;
99 maintainers = with maintainers; [
100 corbanr
101 gaelreyrol
102 ];
103 };
104})