Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 lib, 3 stdenv, 4 llvmPackages, 5 rustPlatform, 6 fetchFromGitHub, 7 pkg-config, 8 openssl, 9 nixosTests, 10}: 11 12let 13 version = "0.2.1"; 14 target = stdenv.hostPlatform.rust.rustcTargetSpec; 15 libExt = stdenv.hostPlatform.extensions.sharedLibrary; 16in 17rustPlatform.buildRustPackage { 18 pname = "rustls-libssl"; 19 inherit version; 20 21 src = fetchFromGitHub { 22 owner = "rustls"; 23 repo = "rustls-openssl-compat"; 24 rev = "v/${version}"; 25 hash = "sha256-/QSFrkFVSRBmpXHc80dJFnYwvVYceAFnoCtmAGtnmqo="; 26 }; 27 28 # NOTE: No longer necessary in the next release. 29 sourceRoot = "source/rustls-libssl"; 30 31 cargoHash = "sha256-eVdcYJnJVduRk3zK9VQ1rE6AwjaXAG1h1g/fVHr4mqQ="; 32 33 nativeBuildInputs = [ 34 pkg-config # for openssl-sys 35 llvmPackages.lld # build.rs specifies LLD as linker 36 ]; 37 buildInputs = [ 38 openssl 39 ]; 40 41 preCheck = '' 42 # tests dlopen libcrypto.so.3 43 export LD_LIBRARY_PATH=${lib.makeLibraryPath [ openssl ]} 44 ''; 45 46 # rustls-libssl normally wants to be swapped in for libssl, and reuses 47 # libcrypto. Here, we accomplish something similar by symlinking most of 48 # OpenSSL, replacing only libssl. 49 outputs = [ 50 "out" 51 "dev" 52 ]; 53 installPhase = '' 54 mkdir -p $out/lib $dev/lib/pkgconfig 55 56 mv target/${target}/release/libssl${libExt} $out/lib/libssl${libExt}.3 57 ln -s libssl${libExt}.3 $out/lib/libssl${libExt} 58 59 ln -s ${openssl.out}/lib/libcrypto${libExt}.3 $out/lib/ 60 ln -s libcrypto${libExt}.3 $out/lib/libcrypto${libExt} 61 62 if [[ -e ${openssl.out}/lib/engines-3 ]]; then 63 ln -s ${openssl.out}/lib/engines-3 $out/lib/ 64 fi 65 if [[ -e ${openssl.out}/lib/ossl-modules ]]; then 66 ln -s ${openssl.out}/lib/ossl-modules $out/lib/ 67 fi 68 69 ln -s ${openssl.dev}/include $dev/ 70 71 cp ${openssl.dev}/lib/pkgconfig/*.pc $dev/lib/pkgconfig/ 72 sed -i \ 73 -e "s|${openssl.out}|$out|g" \ 74 -e "s|${openssl.dev}|$dev|g" \ 75 $dev/lib/pkgconfig/*.pc 76 ''; 77 78 passthru.tests = nixosTests.rustls-libssl; 79 80 meta = { 81 description = "Partial reimplementation of the OpenSSL 3 libssl ABI using rustls"; 82 homepage = "https://github.com/rustls/rustls-openssl-compat"; 83 changelog = "https://github.com/rustls/rustls-openssl-compat/releases"; 84 license = lib.licenses.asl20; 85 platforms = lib.platforms.linux; 86 maintainers = with lib.maintainers; [ 87 stephank 88 cpu 89 ]; 90 }; 91}