nixpkgs/pkgs/development/libraries/libgcrypt/default.nix
Gaelan Steele d179098390 libgcrypt: always pass build and host to configure
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.
2020-06-19 11:08:34 +02:00

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";
};
}