2018-07-08 22:07:41 +01:00
|
|
|
{ stdenv
|
|
|
|
, lib
|
|
|
|
, fetchurl
|
|
|
|
, perl
|
|
|
|
, gmp
|
|
|
|
, gf2x ? null
|
|
|
|
# I asked the ntl maintainer weather or not to include gf2x by default:
|
|
|
|
# > If I remember correctly, gf2x is now thread safe, so there's no reason not to use it.
|
|
|
|
, withGf2x ? true
|
|
|
|
, tune ? false # tune for current system; non reproducible and time consuming
|
2016-09-12 18:26:30 +01:00
|
|
|
}:
|
|
|
|
|
2018-07-08 22:07:41 +01:00
|
|
|
assert withGf2x -> gf2x != null;
|
|
|
|
|
2016-09-12 18:26:30 +01:00
|
|
|
stdenv.mkDerivation rec {
|
|
|
|
name = "ntl-${version}";
|
2018-07-08 22:07:41 +01:00
|
|
|
version = "11.2.1";
|
2016-09-12 18:26:30 +01:00
|
|
|
src = fetchurl {
|
|
|
|
url = "http://www.shoup.net/ntl/ntl-${version}.tar.gz";
|
2018-07-08 22:07:41 +01:00
|
|
|
sha256 = "04avzmqflx2a33n7v9jj32g83p7m6z712fg1mw308jk5ca2qp489";
|
2016-09-12 18:26:30 +01:00
|
|
|
};
|
|
|
|
|
2018-07-08 22:07:41 +01:00
|
|
|
buildInputs = [
|
|
|
|
gmp
|
|
|
|
];
|
|
|
|
|
|
|
|
nativeBuildInputs = [
|
|
|
|
perl # needed for ./configure
|
|
|
|
];
|
2016-09-12 18:26:30 +01:00
|
|
|
|
|
|
|
sourceRoot = "${name}/src";
|
|
|
|
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
2018-07-08 22:07:41 +01:00
|
|
|
dontAddPrefix = true; # DEF_PREFIX instead
|
2016-09-12 18:26:30 +01:00
|
|
|
|
2018-07-08 22:07:41 +01:00
|
|
|
# reference: http://shoup.net/ntl/doc/tour-unix.html
|
|
|
|
configureFlags = [
|
|
|
|
"DEF_PREFIX=$(out)"
|
|
|
|
"SHARED=on" # genereate a shared library (as well as static)
|
|
|
|
"NATIVE=off" # don't target code to current hardware (reproducibility, portability)
|
|
|
|
"TUNE=${
|
|
|
|
if tune then
|
|
|
|
"auto"
|
|
|
|
else if stdenv.targetPlatform.isx86 then
|
|
|
|
"x86" # "chooses options that should be well suited for most x86 platforms"
|
|
|
|
else
|
|
|
|
"generic" # "chooses options that should be OK for most platforms"
|
|
|
|
}"
|
|
|
|
] ++ lib.optionals withGf2x [
|
|
|
|
"NTL_GF2X_LIB=on"
|
|
|
|
"GF2X_PREFIX=${gf2x}"
|
|
|
|
];
|
2016-09-12 18:26:30 +01:00
|
|
|
|
2018-07-08 22:07:41 +01:00
|
|
|
doCheck = true; # takes some time
|
2016-09-12 18:26:30 +01:00
|
|
|
|
2018-07-08 22:07:41 +01:00
|
|
|
meta = with lib; {
|
2016-09-12 18:26:30 +01:00
|
|
|
description = "A Library for doing Number Theory";
|
|
|
|
longDescription = ''
|
|
|
|
NTL is a high-performance, portable C++ library providing data
|
|
|
|
structures and algorithms for manipulating signed, arbitrary
|
|
|
|
length integers, and for vectors, matrices, and polynomials over
|
|
|
|
the integers and over finite fields.
|
|
|
|
'';
|
|
|
|
homepage = http://www.shoup.net/ntl/;
|
2018-07-08 22:07:41 +01:00
|
|
|
maintainers = with maintainers; [ timokau ];
|
|
|
|
license = licenses.gpl2Plus;
|
|
|
|
platforms = platforms.all;
|
2016-09-12 18:26:30 +01:00
|
|
|
};
|
|
|
|
}
|