gnu: Add lcalc.

* gnu/packages/sagemath.scm (lcalc): New variable.
* gnu/packages/patches/lcalc-default-parameters-1.patch,
gnu/packages/patches/lcalc-default-parameters-2.patch,
gnu/packages/patches/lcalc-lcommon-h.patch,
gnu/packages/patches/lcalc-using-namespace-std.patch: New files.
* gnu/local.mk (dist_patch_DATA): Register patches.
master
Andreas Enge 2019-06-20 18:36:13 +02:00
parent 88f913e8ad
commit fedb9571eb
No known key found for this signature in database
GPG Key ID: F7D5C9BF765C61E3
6 changed files with 209 additions and 0 deletions

View File

@ -973,6 +973,10 @@ dist_patch_DATA = \
%D%/packages/patches/kodi-set-libcurl-ssl-parameters.patch \
%D%/packages/patches/kodi-skip-test-449.patch \
%D%/packages/patches/laby-make-install.patch \
%D%/packages/patches/lcalc-default-parameters-1.patch \
%D%/packages/patches/lcalc-default-parameters-2.patch \
%D%/packages/patches/lcalc-lcommon-h.patch \
%D%/packages/patches/lcalc-using-namespace-std.patch \
%D%/packages/patches/lcms-CVE-2018-16435.patch \
%D%/packages/patches/ldc-bootstrap-disable-tests.patch \
%D%/packages/patches/ldc-disable-phobos-tests.patch \

View File

@ -0,0 +1,26 @@
Patch taken from the Sage packaging system.
diff -Naur lcalc-1.23-vanilla/include/Ldirichlet_series.h lcalc-1.23-fixed-gcc.4.9/include/Ldirichlet_series.h
--- lcalc-1.23-vanilla/include/Ldirichlet_series.h 2012-08-08 23:21:55.000000000 +0200
+++ lcalc-1.23-fixed-gcc.4.9/include/Ldirichlet_series.h 2014-04-21 14:37:59.027464849 +0200
@@ -43,7 +43,7 @@
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
template <class ttype>
Complex L_function <ttype>::
-dirichlet_series(Complex s, long long N=-1)
+dirichlet_series(Complex s, long long N)
{
Complex z=0.;
long long m,n;
diff -Naur lcalc-1.23-vanilla/include/L.h lcalc-1.23-fixed-gcc.4.9/include/L.h
--- lcalc-1.23-vanilla/include/L.h 2012-08-08 23:21:55.000000000 +0200
+++ lcalc-1.23-fixed-gcc.4.9/include/L.h 2014-04-21 14:32:04.003467348 +0200
@@ -491,7 +491,7 @@
//#include "Ldirichlet_series.h" //for computing Dirichlet series
Complex partial_dirichlet_series(Complex s, long long N1, long long N2);
- Complex dirichlet_series(Complex s, long long N);
+ Complex dirichlet_series(Complex s, long long N=-1LL);
//#include "Ltaylor_series.h" //for computing taylor series for Dirichlet series
//void compute_taylor_series(int N, int K, Complex s_0, Complex *series);

View File

@ -0,0 +1,58 @@
Patch taken from the Sage packaging system.
--- lcalc-1.23/include/Lgamma.h 2012-08-08 23:21:55.000000000 +0200
+++ lcalc-1.23/include/Lgamma.h 2014-05-18 21:15:27.786889718 +0200
@@ -77,7 +77,7 @@
//n=0 should just give log_GAMMA(z)... thus making log_GAMMA
//code obsolete. But leave log_GAMMA intact anyways.
template <class ttype>
-precise(ttype) log_GAMMA (ttype z,int n=0)
+precise(ttype) log_GAMMA (ttype z,int n)
{
int M;
precise(ttype) log_G,r,r2,y;
@@ -230,7 +230,7 @@
//value exp_w which holds exp(-w)
//computes G(z,w), so there's an extra w^(-z) factor.
template <class ttype>
-Complex inc_GAMMA (ttype z,ttype w, const char *method="temme", ttype exp_w = 0, bool recycle=false)
+Complex inc_GAMMA (ttype z,ttype w, const char *method, ttype exp_w, bool recycle)
{
Complex G;
@@ -334,7 +334,7 @@
template <class ttype>
-ttype cfrac_GAMMA (ttype z,ttype w, ttype exp_w=0, bool recycle=false) //computes G(z,w) via continued fraction
+ttype cfrac_GAMMA (ttype z,ttype w, ttype exp_w, bool recycle) //computes G(z,w) via continued fraction
{
ttype G;
@@ -424,7 +424,7 @@
}
template <class ttype>
-ttype asympt_GAMMA (ttype z,ttype w, ttype exp_w = 0, bool recycle=false) //computes G(z,w) via asymptotic series
+ttype asympt_GAMMA (ttype z,ttype w, ttype exp_w, bool recycle) //computes G(z,w) via asymptotic series
{
if(my_verbose>3) cout << "called asympt_GAMMA("<<z<<","<<w<<")"<< endl;
@@ -446,7 +446,7 @@
template <class ttype>
-ttype comp_inc_GAMMA (ttype z,ttype w,ttype exp_w = 0, bool recycle=false) //computes g(z,w)
+ttype comp_inc_GAMMA (ttype z,ttype w,ttype exp_w, bool recycle) //computes g(z,w)
{
ttype g;
@@ -604,7 +604,7 @@
}
template <class ttype>
-Complex gamma_sum(Complex s, int what_type, ttype *coeff, int N, Double g, Complex l, Double Q, Long Period, Complex delta=1, const char *method="temme")
+Complex gamma_sum(Complex s, int what_type, ttype *coeff, int N, Double g, Complex l, Double Q, Long Period, Complex delta, const char *method)
{
Complex SUM=0;

View File

@ -0,0 +1,13 @@
Patch taken from the Sage packaging system.
--- src/include/Lcommon.h 2010-01-31 15:16:45.000000000 +0000
+++ src/include/Lcommon.h 2011-03-08 21:19:11.849443238 +0000
@@ -25,7 +25,7 @@
#ifdef USE_MPFR
inline double lcalc_to_double(const double& x) { return x; }
#endif
-//inline double lcalc_to_double(const long double& x) { return x; }
+inline double lcalc_to_double(const long double& x) { return x; }
inline double lcalc_to_double(const int& x) { return x; }
inline double lcalc_to_double(const long long& x) { return x; }
inline double lcalc_to_double(const short& x) { return x; }

View File

@ -0,0 +1,43 @@
Patch taken from the Sage packaging system.
diff --git a/include/Lcommon.h b/include/Lcommon.h
index 1b3be43..bf40532 100644
--- a/include/Lcommon.h
+++ b/include/Lcommon.h
@@ -48,7 +48,7 @@ const bool outputSeries=true; // Whether to output the coefficients or just th
// Loop i from m to n
// Useful in tidying up most for loops
-#define loop(i,m,n) for(typeof(m) i=(m); i!=(n); i++)
+#define loop(i,m,n) for(auto i=(m); i!=(n); i++)
// A class for calculations involving polynomials of small degree
// Not efficient enough for huge polynomials
diff --git a/include/Lcommon_ld.h b/include/Lcommon_ld.h
index 86ae4df..33c560c 100644
--- a/include/Lcommon_ld.h
+++ b/include/Lcommon_ld.h
@@ -53,7 +53,7 @@ const bool outputSeries=true; // Whether to output the coefficients or just th
// Loop i from m to n
// Useful in tidying up most for loops
-#define loop(i,m,n) for(typeof(m) i=(m); i!=(n); i++)
+#define loop(i,m,n) for(auto i=(m); i!=(n); i++)
// A class for calculations involving polynomials of small degree
// Not efficient enough for huge polynomials
diff --git a/include/Lglobals.h b/include/Lglobals.h
index 60002e4..ca2606c 100644
--- a/include/Lglobals.h
+++ b/include/Lglobals.h
@@ -24,9 +24,9 @@
#ifndef Lglobals_H
#define Lglobals_H
+#include <valarray>
using namespace std;
-#include <valarray>
#ifdef USE_MPFR
#include "Lgmpfrxx.h"
typedef mpfr_class Double;

View File

@ -24,6 +24,7 @@
#:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module (gnu packages)
#:use-module (gnu packages algebra)
#:use-module (gnu packages autotools)
#:use-module (gnu packages bdw-gc)
@ -353,3 +354,67 @@ Boolean variables. As a unique approach, binary decision diagrams are
used as internal storage type for polynomial structures.")
(license license:gpl2+)
(home-page "https://gitlab.com/sagemath/zn_poly")))
(define-public lcalc
(package
(name "lcalc")
(version "1.23")
;; The original home page of the project has disappeared, as well as
;; code hosted by the original author on Google Code. The latter has
;; been copied to gitlab.com/sagemath and purportedly contains patches
;; for a never released version 1.3, that supposedly follows 1.23.
;; We use the tarball as well as the patches hosted inside the sage
;; package system distributed with the sage tarball.
(source
(origin
(method url-fetch)
(uri (string-append "ftp://ftp.fu-berlin.de/unix/misc/sage/spkg/"
"upstream/lcalc/lcalc-1.23.tar.bz2"))
(sha256
(base32
"1c6dsdshgxhqppjxvxhp8yhpxaqvnz3d1mlh26r571gkq8z2bm43"))
(patches (search-patches "lcalc-lcommon-h.patch"
"lcalc-default-parameters-1.patch"
"lcalc-default-parameters-2.patch"
"lcalc-using-namespace-std.patch"))))
(build-system gnu-build-system)
(arguments
`(#:tests? #f ;no tests
#:phases
(modify-phases %standard-phases
(delete 'configure)
(add-before 'build 'prepare-build
(lambda* (#:key outputs #:allow-other-keys)
(chdir "src")
(let ((out (assoc-ref outputs "out")))
(substitute* "Makefile"
(("^INSTALL_DIR= /usr/local")
(string-append "INSTALL_DIR=" out))
;; Sage renames the include directory, so we do it also.
(("include/Lfunction")
"include/libLfunction")
;; Add --std=c++11 to be compatible with the "auto" keyword
;; introduced by lcalc-using-namespace-std.patch.
(("^#EXTRA= -pg")
"EXTRA=--std=c++11")))
#t))
(add-before 'install 'make-output-dirs
(lambda* (#:key outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin"))
(lib (string-append out "/lib"))
(include (string-append out "/include")))
(mkdir-p bin)
(mkdir-p lib)
(mkdir-p include))
#t)))))
;; FIXME:
;; We need to add pari-gp and probably pari related patches from the
;; sage project, as well as uncomment the line setting PARI_DEFINE in
;; the Makefile to get the full functionality of this package.
;; For the time being, we hope that sage can be compiled without.
(synopsis "C++ library for L-functions")
(description "Lcalc computes L-functions, in particular the Riemann
zeta function and its twists by quadratic characters.")
(license license:gpl2+)
(home-page "https://gitlab.com/sagemath/sage")))