2021-01-21 17:00:13 +00:00
|
|
|
{ lib, stdenv, fetchurl, m4
|
2019-04-17 23:52:25 +00:00
|
|
|
, cxx ? !stdenv.hostPlatform.useAndroidPrebuilt && !stdenv.hostPlatform.isWasm
|
2022-05-18 11:50:23 +00:00
|
|
|
, buildPackages
|
2020-12-20 06:11:26 +00:00
|
|
|
, withStatic ? stdenv.hostPlatform.isStatic
|
|
|
|
}:
|
2015-03-26 05:59:04 +00:00
|
|
|
|
2020-06-26 20:44:45 +00:00
|
|
|
# Note: this package is used for bootstrapping fetchurl, and thus
|
|
|
|
# cannot use fetchpatch! All mutable patches (generated by GitHub or
|
|
|
|
# cgit) that are needed here should be included directly in Nixpkgs as
|
|
|
|
# files.
|
|
|
|
|
2021-01-21 17:00:13 +00:00
|
|
|
let inherit (lib) optional; in
|
2015-03-26 05:59:04 +00:00
|
|
|
|
2015-10-15 15:43:23 +00:00
|
|
|
let self = stdenv.mkDerivation rec {
|
2022-02-22 13:46:26 +00:00
|
|
|
pname = "gmp${lib.optionalString cxx "-with-cxx"}";
|
2021-11-16 21:51:10 +00:00
|
|
|
version = "6.2.1";
|
2015-03-26 05:59:04 +00:00
|
|
|
|
|
|
|
src = fetchurl { # we need to use bz2, others aren't in bootstrapping stdenv
|
2021-11-16 21:51:10 +00:00
|
|
|
urls = [ "mirror://gnu/gmp/gmp-${version}.tar.bz2" "ftp://ftp.gmplib.org/pub/gmp-${version}/gmp-${version}.tar.bz2" ];
|
2020-11-18 04:30:58 +00:00
|
|
|
sha256 = "0z2ddfiwgi0xbf65z4fg4hqqzlhv0cc6hdcswf3c6n21xdmk5sga";
|
2015-03-26 05:59:04 +00:00
|
|
|
};
|
|
|
|
|
2021-12-08 00:12:46 +00:00
|
|
|
patches = [ ./6.2.1-CVE-2021-43618.patch ];
|
|
|
|
|
2016-04-17 12:32:35 +00:00
|
|
|
#outputs TODO: split $cxx due to libstdc++ dependency
|
2015-10-28 10:34:02 +00:00
|
|
|
# maybe let ghc use a version with *.so shared with rest of nixpkgs and *.a added
|
|
|
|
# - see #5855 for related discussion
|
2016-08-29 00:30:01 +00:00
|
|
|
outputs = [ "out" "dev" "info" ];
|
2015-10-15 15:43:23 +00:00
|
|
|
passthru.static = self.out;
|
2015-10-28 10:34:02 +00:00
|
|
|
|
2022-05-21 16:58:22 +00:00
|
|
|
strictDeps = true;
|
2017-06-26 03:10:03 +00:00
|
|
|
depsBuildBuild = [ buildPackages.stdenv.cc ];
|
2022-05-18 11:50:23 +00:00
|
|
|
nativeBuildInputs = [ m4 ];
|
2015-03-26 05:59:04 +00:00
|
|
|
|
2018-08-03 15:58:20 +00:00
|
|
|
configureFlags = [
|
|
|
|
"--with-pic"
|
2021-01-21 17:00:13 +00:00
|
|
|
(lib.enableFeature cxx "cxx")
|
2015-03-26 05:59:04 +00:00
|
|
|
# Build a "fat binary", with routines for several sub-architectures
|
|
|
|
# (x86), except on Solaris where some tests crash with "Memory fault".
|
2020-04-18 20:51:19 +00:00
|
|
|
# See <https://hydra.nixos.org/build/2760931>, for instance.
|
2015-03-26 05:59:04 +00:00
|
|
|
#
|
|
|
|
# no darwin because gmp uses ASM that clang doesn't like
|
2021-01-21 17:00:13 +00:00
|
|
|
(lib.enableFeature (!stdenv.isSunOS && stdenv.hostPlatform.isx86) "fat")
|
2018-11-29 23:52:55 +00:00
|
|
|
# The config.guess in GMP tries to runtime-detect various
|
|
|
|
# ARM optimization flags via /proc/cpuinfo (and is also
|
|
|
|
# broken on multicore CPUs). Avoid this impurity.
|
|
|
|
"--build=${stdenv.buildPlatform.config}"
|
2018-08-03 15:58:20 +00:00
|
|
|
] ++ optional (cxx && stdenv.isDarwin) "CPPFLAGS=-fexceptions"
|
2018-06-14 19:44:26 +00:00
|
|
|
++ optional (stdenv.isDarwin && stdenv.is64bit) "ABI=64"
|
2019-09-10 02:21:46 +00:00
|
|
|
# to build a .dll on windows, we need --disable-static + --enable-shared
|
|
|
|
# see https://gmplib.org/manual/Notes-for-Particular-Systems.html
|
|
|
|
++ optional (!withStatic && stdenv.hostPlatform.isWindows) "--disable-static --enable-shared"
|
2020-11-19 07:43:15 +00:00
|
|
|
++ optional (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) "--disable-assembly";
|
2015-03-26 05:59:04 +00:00
|
|
|
|
2018-01-08 07:19:47 +00:00
|
|
|
doCheck = true; # not cross;
|
2015-03-26 05:59:04 +00:00
|
|
|
|
|
|
|
dontDisableStatic = withStatic;
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2021-01-21 17:00:13 +00:00
|
|
|
meta = with lib; {
|
2020-04-01 01:11:51 +00:00
|
|
|
homepage = "https://gmplib.org/";
|
2015-03-26 05:59:04 +00:00
|
|
|
description = "GNU multiple precision arithmetic library";
|
2022-11-13 22:27:20 +00:00
|
|
|
license = with licenses; [
|
|
|
|
lgpl3Only
|
|
|
|
gpl2Only
|
|
|
|
];
|
2015-03-26 05:59:04 +00:00
|
|
|
|
|
|
|
longDescription =
|
|
|
|
'' GMP is a free library for arbitrary precision arithmetic, operating
|
|
|
|
on signed integers, rational numbers, and floating point numbers.
|
|
|
|
There is no practical limit to the precision except the ones implied
|
|
|
|
by the available memory in the machine GMP runs on. GMP has a rich
|
|
|
|
set of functions, and the functions have a regular interface.
|
|
|
|
|
|
|
|
The main target applications for GMP are cryptography applications
|
|
|
|
and research, Internet security applications, algebra systems,
|
|
|
|
computational algebra research, etc.
|
|
|
|
|
|
|
|
GMP is carefully designed to be as fast as possible, both for small
|
|
|
|
operands and for huge operands. The speed is achieved by using
|
|
|
|
fullwords as the basic arithmetic type, by using fast algorithms,
|
|
|
|
with highly optimised assembly code for the most common inner loops
|
|
|
|
for a lot of CPUs, and by a general emphasis on speed.
|
|
|
|
|
|
|
|
GMP is faster than any other bignum library. The advantage for GMP
|
|
|
|
increases with the operand sizes for many operations, since GMP uses
|
|
|
|
asymptotically faster algorithms.
|
|
|
|
'';
|
|
|
|
|
|
|
|
platforms = platforms.all;
|
2021-10-14 08:59:33 +00:00
|
|
|
maintainers = [ maintainers.vrthra ];
|
2015-03-26 05:59:04 +00:00
|
|
|
};
|
2015-10-15 15:43:23 +00:00
|
|
|
};
|
|
|
|
in self
|