nixpkgs/pkgs/development/libraries/aws-sdk-cpp/default.nix
TQ Hirsch 9d7885276a aws-sdk-cpp: Fix library and include paths in generated cmake files
AWS's SDK by default tries to prepend its install root to each of the
library paths; this obviously fails with the absolute paths that Nix
gives it. Worse, it computes the installation root by walking up the
filesystem from its cmake file, so even if the AWSSDK_ROOT_DIR is
explicitly set to the root directory, it gets replaced with the path
to the derivation's dev output.

This is all fixed with a patch to the cmake files that generate the
installed configuration.

Once this is fixed, it *still* doesn't work because the export
generator built into cmake insists on adding `$out/include` to the
header search path; when importing this configuration in another
package, cmake will fail because `$out/include` doesn't exist (After
all, it was relocated by a fixup hook). A small postFixupHook will
recreate the directory and make cmake happy.
2020-04-14 23:40:55 +02:00

77 lines
2.3 KiB
Nix

{ lib, stdenv, fetchFromGitHub, cmake, curl, openssl, zlib, fetchpatch
, aws-c-common, aws-c-event-stream, 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
}:
stdenv.mkDerivation rec {
pname = "aws-sdk-cpp";
version = "1.7.90";
src = fetchFromGitHub {
owner = "awslabs";
repo = "aws-sdk-cpp";
rev = version;
sha256 = "0zpqi612qmm0n53crxiisv0vdif43ymg13kafy6vv43j2wmh66ga";
};
# 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
aws-c-common aws-c-event-stream aws-checksums
] ++ lib.optionals (stdenv.isDarwin &&
((builtins.elem "text-to-speech" apis) ||
(builtins.elem "*" apis)))
[ CoreAudio AudioToolbox ];
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=0"
] ++ 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" ];
preConfigure =
''
rm aws-cpp-sdk-core-tests/aws/auth/AWSCredentialsProviderTest.cpp
'';
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 = [
(fetchpatch {
url = "https://github.com/aws/aws-sdk-cpp/commit/42991ab549087c81cb630e5d3d2413e8a9cf8a97.patch";
sha256 = "0myq5cm3lvl5r56hg0sc0zyn1clbkd9ys0wr95ghw6bhwpvfv8gr";
})
./cmake-dirs.patch
];
meta = with lib; {
description = "A C++ interface for Amazon Web Services";
homepage = "https://github.com/awslabs/aws-sdk-cpp";
license = licenses.asl20;
platforms = platforms.unix;
maintainers = with maintainers; [ eelco orivej ];
};
}