d179098390
When building for aarch32 on aarch64 with extraPlatforms, libgcrypt fails to build because it tries to guess the host platform from uname, which returns the wrong result in this case. We fix this by always telling libgcrpyt what platform to build for.
63 lines
2.1 KiB
Nix
63 lines
2.1 KiB
Nix
{ stdenv, fetchurl, gettext, libgpgerror, enableCapabilities ? false, libcap
|
|
, buildPackages
|
|
}:
|
|
|
|
assert enableCapabilities -> stdenv.isLinux;
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "libgcrypt";
|
|
version = "1.8.5";
|
|
|
|
src = fetchurl {
|
|
url = "mirror://gnupg/libgcrypt/${pname}-${version}.tar.bz2";
|
|
sha256 = "1hvsazms1bfd769q0ngl0r9g5i4m9mpz9jmvvrdzyzk3rfa2ljiv";
|
|
};
|
|
|
|
outputs = [ "out" "dev" "info" ];
|
|
outputBin = "dev";
|
|
|
|
# The CPU Jitter random number generator must not be compiled with
|
|
# optimizations and the optimize -O0 pragma only works for gcc.
|
|
# The build enables -O2 by default for everything else.
|
|
hardeningDisable = stdenv.lib.optional stdenv.cc.isClang "fortify";
|
|
|
|
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
|
|
|
buildInputs = [ libgpgerror ]
|
|
++ stdenv.lib.optional stdenv.isDarwin gettext
|
|
++ stdenv.lib.optional enableCapabilities libcap;
|
|
|
|
configureFlags = [ "--with-libgpg-error-prefix=${libgpgerror.dev}" ]
|
|
++ stdenv.lib.optional stdenv.hostPlatform.isMusl "--disable-asm";
|
|
|
|
# Necessary to generate correct assembly when compiling for aarch32 on
|
|
# aarch64
|
|
configurePlatforms = [ "host" "build" ];
|
|
|
|
# Make sure libraries are correct for .pc and .la files
|
|
# Also make sure includes are fixed for callers who don't use libgpgcrypt-config
|
|
postFixup = ''
|
|
sed -i 's,#include <gpg-error.h>,#include "${libgpgerror.dev}/include/gpg-error.h",g' "$dev/include/gcrypt.h"
|
|
'' + stdenv.lib.optionalString enableCapabilities ''
|
|
sed -i 's,\(-lcap\),-L${libcap.lib}/lib \1,' $out/lib/libgcrypt.la
|
|
'';
|
|
|
|
# TODO: figure out why this is even necessary and why the missing dylib only crashes
|
|
# random instead of every test
|
|
preCheck = stdenv.lib.optionalString stdenv.isDarwin ''
|
|
mkdir -p $out/lib
|
|
cp src/.libs/libgcrypt.20.dylib $out/lib
|
|
'';
|
|
|
|
doCheck = true;
|
|
|
|
meta = with stdenv.lib; {
|
|
homepage = "https://www.gnu.org/software/libgcrypt/";
|
|
description = "General-purpose cryptographic library";
|
|
license = licenses.lgpl2Plus;
|
|
platforms = platforms.all;
|
|
maintainers = with maintainers; [ vrthra ];
|
|
repositories.git = "git://git.gnupg.org/libgcrypt.git";
|
|
};
|
|
}
|