nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 cargo,
6 rustPlatform,
7 cargo-c,
8 validatePkgConfig,
9 buildPackages,
10 libiconv,
11 curl,
12 apacheHttpd,
13 testers,
14}:
15
16stdenv.mkDerivation (finalAttrs: {
17 pname = "rustls-ffi";
18 version = "0.15.0";
19
20 src = fetchFromGitHub {
21 owner = "rustls";
22 repo = "rustls-ffi";
23 tag = "v${finalAttrs.version}";
24 hash = "sha256-m92kWH+J8wuGmI0msrp2aginY1K51iqgi3+u4ncmfts=";
25 };
26
27 cargoDeps = rustPlatform.fetchCargoVendor {
28 inherit (finalAttrs) pname version src;
29 hash = "sha256-gqc6en59QQpD14hOgRuGEPWLvrkyGn9tPR9vQmRAxIg=";
30 };
31
32 propagatedBuildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
33 libiconv
34 ];
35
36 nativeBuildInputs = [
37 cargo
38 rustPlatform.cargoSetupHook
39 cargo-c
40 validatePkgConfig
41 ];
42
43 buildPhase = ''
44 runHook preBuild
45 ${buildPackages.rust.envVars.setEnv} cargo cbuild -j $NIX_BUILD_CORES --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
46 runHook postBuild
47 '';
48
49 installPhase = ''
50 runHook preInstall
51 ${buildPackages.rust.envVars.setEnv} cargo cinstall -j $NIX_BUILD_CORES --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
52 runHook postInstall
53 '';
54
55 checkPhase = ''
56 runHook preCheck
57 ${buildPackages.rust.envVars.setEnv} cargo ctest -j $NIX_BUILD_CORES --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
58 runHook postCheck
59 '';
60
61 passthru.tests = {
62 curl = curl.override {
63 opensslSupport = false;
64 rustlsSupport = true;
65 rustls-ffi = finalAttrs.finalPackage;
66 };
67 pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
68 };
69
70 meta = {
71 description = "C-to-rustls bindings";
72 homepage = "https://github.com/rustls/rustls-ffi/";
73 pkgConfigModules = [ "rustls" ];
74 license = with lib.licenses; [
75 mit
76 asl20
77 isc
78 ];
79 maintainers = [ lib.maintainers.lesuisse ];
80 };
81})