summary refs log tree commit diff
path: root/pkgs/development/libraries/aws-sdk-cpp/default.nix
blob: 8bf009ddacba5457a573bb583acc60db3fd041a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, cmake
, curl
, openssl
, s2n-tls
, zlib
, aws-crt-cpp
, aws-c-cal
, aws-c-common
, aws-c-event-stream
, aws-c-io
, aws-checksums
, CoreAudio
, AudioToolbox
, # Allow building a limited set of APIs, e.g. ["s3" "ec2"].
  apis ? ["*"]
, # Whether to enable AWS' custom memory management.
  customMemoryManagement ? true
}:

let
  host_os = if stdenv.hostPlatform.isDarwin then "APPLE"
       else if stdenv.hostPlatform.isAndroid then "ANDROID"
       else if stdenv.hostPlatform.isWindows then "WINDOWS"
       else if stdenv.hostPlatform.isLinux then "LINUX"
       else throw "Unknown host OS";
in

stdenv.mkDerivation rec {
  pname = "aws-sdk-cpp";
  version = if stdenv.system == "i686-linux" then "1.9.150"
    else "1.9.238";

  src = fetchFromGitHub {
    owner = "aws";
    repo = "aws-sdk-cpp";
    rev = version;
    sha256 = if version == "1.9.150" then "fgLdXWQKHaCwulrw9KV3vpQ71DjnQAL4heIRW7Rk7UY="
      else "sha256-pEmsTfZXsvJMV79dGkjDNbUVajwyoYgzE5DCsC53pGY=";
  };

  postPatch = ''
    # Missing includes for GCC11
    sed '5i#include <thread>' -i \
      aws-cpp-sdk-cloudfront-integration-tests/CloudfrontOperationTest.cpp \
      aws-cpp-sdk-cognitoidentity-integration-tests/IdentityPoolOperationTest.cpp \
      aws-cpp-sdk-dynamodb-integration-tests/TableOperationTest.cpp \
      aws-cpp-sdk-elasticfilesystem-integration-tests/ElasticFileSystemTest.cpp \
      aws-cpp-sdk-lambda-integration-tests/FunctionTest.cpp \
      aws-cpp-sdk-mediastore-data-integration-tests/MediaStoreDataTest.cpp \
      aws-cpp-sdk-queues/source/sqs/SQSQueue.cpp \
      aws-cpp-sdk-redshift-integration-tests/RedshiftClientTest.cpp \
      aws-cpp-sdk-s3-crt-integration-tests/BucketAndObjectOperationTest.cpp \
      aws-cpp-sdk-s3-integration-tests/BucketAndObjectOperationTest.cpp \
      aws-cpp-sdk-s3control-integration-tests/S3ControlTest.cpp \
      aws-cpp-sdk-sqs-integration-tests/QueueOperationTest.cpp \
      aws-cpp-sdk-transfer-tests/TransferTests.cpp
    # Flaky on Hydra
    rm aws-cpp-sdk-core-tests/aws/auth/AWSCredentialsProviderTest.cpp
    # Includes aws-c-auth private headers, so only works with submodule build
    rm aws-cpp-sdk-core-tests/aws/auth/AWSAuthSignerTest.cpp
  '' + lib.optionalString stdenv.hostPlatform.isMusl ''
    # TestRandomURLMultiThreaded fails
    rm aws-cpp-sdk-core-tests/http/HttpClientTest.cpp
  '';

  # FIXME: might be nice to put different APIs in different outputs
  # (e.g. libaws-cpp-sdk-s3.so in output "s3").
  outputs = [ "out" "dev" ];

  nativeBuildInputs = [ cmake curl ];

  buildInputs = [
    curl openssl zlib
  ] ++ lib.optionals (stdenv.isDarwin &&
                        ((builtins.elem "text-to-speech" apis) ||
                         (builtins.elem "*" apis)))
         [ CoreAudio AudioToolbox ];

  # propagation is needed for Security.framework to be available when linking
  propagatedBuildInputs = [ aws-crt-cpp ];

  cmakeFlags = [
    "-DBUILD_DEPS=OFF"
    "-DCMAKE_SKIP_BUILD_RPATH=OFF"
  ] ++ lib.optional (!customMemoryManagement) "-DCUSTOM_MEMORY_MANAGEMENT=0"
  ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
    "-DENABLE_TESTING=OFF"
    "-DCURL_HAS_H2=1"
    "-DCURL_HAS_TLS_PROXY=1"
    "-DTARGET_ARCH=${host_os}"
  ] ++ lib.optional (apis != ["*"])
    "-DBUILD_ONLY=${lib.concatStringsSep ";" apis}";

  # fix build with gcc9, can be removed after bumping to current version
  NIX_CFLAGS_COMPILE = [ "-Wno-error" ];

  # aws-cpp-sdk-core-tests/aws/client/AWSClientTest.cpp
  # seem to have a datarace
  enableParallelChecking = false;

  postFixupHooks = [
    # This bodge is necessary so that the file that the generated -config.cmake file
    # points to an existing directory.
    "mkdir -p $out/include"
  ];

  __darwinAllowLocalNetworking = true;

  patches = [
    ./cmake-dirs.patch
  ]
    ++ lib.optional (lib.versionOlder version "1.9.163")
      (fetchpatch {
        url = "https://github.com/aws/aws-sdk-cpp/commit/b102aaf5693c4165c84b616ab9ffb9edfb705239.diff";
        sha256 = "sha256-38QBo3MEFpyHPb8jZEURRPkoeu4DqWhVeErJayiHKF0=";
      });

  # Builds in 2+h with 2 cores, and ~10m with a big-parallel builder.
  requiredSystemFeatures = [ "big-parallel" ];

  meta = with lib; {
    description = "A C++ interface for Amazon Web Services";
    homepage = "https://github.com/aws/aws-sdk-cpp";
    license = licenses.asl20;
    platforms = platforms.unix;
    maintainers = with maintainers; [ eelco orivej ];
  };
}