evcc: 0.131.4 -> 0.131.5
[NixPkgs.git] / pkgs / by-name / go / google-cloud-cpp / package.nix
blobaf00bc1690f73a8aba7be30474e1fbcad224f9ec
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , substituteAll
5 , c-ares
6 , cmake
7 , crc32c
8 , curl
9 , gbenchmark
10 , grpc
11 , gtest
12 , ninja
13 , nlohmann_json
14 , openssl
15 , pkg-config
16 , protobuf
17 , pkgsBuildHost
18   # default list of APIs: https://github.com/googleapis/google-cloud-cpp/blob/v1.32.1/CMakeLists.txt#L173
19 , apis ? [ "*" ]
20 , staticOnly ? stdenv.hostPlatform.isStatic
22 let
23   # defined in cmake/GoogleapisConfig.cmake
24   googleapisRev = "6a474b31c53cc1797710206824a17b364a835d2d";
25   googleapis = fetchFromGitHub {
26     name = "googleapis-src";
27     owner = "googleapis";
28     repo = "googleapis";
29     rev = googleapisRev;
30     hash = "sha256-t5oX6Gc1WSMSBDftXA9RZulckUenxOEHBYeq2qf8jnY=";
31   };
33 stdenv.mkDerivation rec {
34   pname = "google-cloud-cpp";
35   version = "2.29.0";
37   src = fetchFromGitHub {
38     owner = "googleapis";
39     repo = "google-cloud-cpp";
40     rev = "v${version}";
41     sha256 = "sha256-gCq8Uc+s/rnJWsGlI7f+tvAZHH8K69+H/leUOKE2GCY=";
42   };
44   patches = [
45     (substituteAll {
46       src = ./hardcode-googleapis-path.patch;
47       url = googleapis;
48     })
49   ];
51   nativeBuildInputs = [
52     cmake
53     ninja
54     pkg-config
55   ] ++ lib.optionals (!doInstallCheck) [
56     # enable these dependencies when doInstallCheck is false because we're
57     # unconditionally building tests and benchmarks
58     #
59     # when doInstallCheck is true, these deps are added to nativeInstallCheckInputs
60     gbenchmark
61     gtest
62   ];
64   buildInputs = [
65     c-ares
66     crc32c
67     (curl.override { inherit openssl; })
68     grpc
69     nlohmann_json
70     openssl
71     protobuf
72   ];
74   doInstallCheck = true;
76   preInstallCheck =
77     let
78       # These paths are added to (DY)LD_LIBRARY_PATH because they contain
79       # testing-only shared libraries that do not need to be installed, but
80       # need to be loadable by the test executables.
81       #
82       # Setting (DY)LD_LIBRARY_PATH is only necessary when building shared libraries.
83       additionalLibraryPaths = [
84         "$PWD/google/cloud/bigtable"
85         "$PWD/google/cloud/bigtable/benchmarks"
86         "$PWD/google/cloud/pubsub"
87         "$PWD/google/cloud/spanner"
88         "$PWD/google/cloud/spanner/benchmarks"
89         "$PWD/google/cloud/storage"
90         "$PWD/google/cloud/storage/benchmarks"
91         "$PWD/google/cloud/testing_util"
92       ];
93       ldLibraryPathName = "${lib.optionalString stdenv.hostPlatform.isDarwin "DY"}LD_LIBRARY_PATH";
94     in
95     lib.optionalString doInstallCheck (
96       lib.optionalString (!staticOnly) ''
97         export ${ldLibraryPathName}=${lib.concatStringsSep ":" additionalLibraryPaths}
98       ''
99     );
101   installCheckPhase = let
102     disabledTests = lib.optionalString stdenv.hostPlatform.isDarwin ''
103       common_internal_async_connection_ready_test
104       bigtable_async_read_stream_test
105       bigtable_metadata_update_policy_test
106       bigtable_bigtable_benchmark_test
107       bigtable_embedded_server_test
108     '';
109   in ''
110     runHook preInstallCheck
112     # Disable any integration tests, which need to contact the internet.
113     ctest \
114       --label-exclude integration-test \
115       --exclude-from-file <(echo '${disabledTests}')
117     runHook postInstallCheck
118   '';
120   nativeInstallCheckInputs = lib.optionals doInstallCheck [
121     gbenchmark
122     gtest
123   ];
125   cmakeFlags = [
126     "-DBUILD_SHARED_LIBS:BOOL=${if staticOnly then "OFF" else "ON"}"
127     # unconditionally build tests to catch linker errors as early as possible
128     # this adds a good chunk of time to the build
129     "-DBUILD_TESTING:BOOL=ON"
130     "-DGOOGLE_CLOUD_CPP_ENABLE_EXAMPLES:BOOL=OFF"
131   ] ++ lib.optionals (apis != [ "*" ]) [
132     "-DGOOGLE_CLOUD_CPP_ENABLE=${lib.concatStringsSep ";" apis}"
133   ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
134     "-DGOOGLE_CLOUD_CPP_GRPC_PLUGIN_EXECUTABLE=${lib.getBin pkgsBuildHost.grpc}/bin/grpc_cpp_plugin"
135   ];
137   requiredSystemFeatures = [ "big-parallel" ];
139   meta = with lib; {
140     license = with licenses; [ asl20 ];
141     homepage = "https://github.com/googleapis/google-cloud-cpp";
142     description = "C++ Idiomatic Clients for Google Cloud Platform services";
143     platforms = lib.platforms.linux ++ lib.platforms.darwin;
144     maintainers = with maintainers; [ cpcloud ];
145   };