singular: 4.2.0p2 -> 4.3.0

This commit is contained in:
Mauricio Collares 2021-09-13 22:55:53 -03:00
parent 6bee346467
commit 0a6b5115f6
5 changed files with 17 additions and 439 deletions

View File

@ -1,7 +1,7 @@
{ stdenv, fetchFromGitHub, gmp, bison, perl, ncurses, readline, coreutils, pkg-config
, lib
, fetchpatch
, autoreconfHook
, buildPackages
, sharutils
, file
, flint
@ -11,6 +11,7 @@
, lrcalc
, doxygen
, graphviz
, latex2html
# upstream generates docs with texinfo 4. later versions of texinfo
# use letters instead of numbers for post-appendix chapters, and we
# want it to match the upstream format because sage depends on it.
@ -22,66 +23,25 @@
stdenv.mkDerivation rec {
pname = "singular";
version = "4.2.0p2";
version = "4.3.0";
# since the tarball does not contain tests or documentation (and
# there is no separate tests tarball for 4.2.0), we fetch from
# GitHub.
# since the tarball does not contain tests, we fetch from GitHub.
src = fetchFromGitHub {
owner = "Singular";
repo = "Singular";
# 4.2.0p2 is not tagged, but the tarball matches the commit below.
rev = "6f68939ddf612d96e3caaaaa8275f77613ac1da8";
sha256 = "sha256-BJNzYylzDqD/5YjzjxPRb/c96tYiuGy9Y+A7qf3ZSG8=";
# if a release is tagged it will be in the format below.
# rev = "Release${lib.replaceStrings ["."] ["-"] version}";
# if a release is tagged (which sometimes does not happen), it will
# be in the format below.
# rev = "Release-${lib.replaceStrings ["."] ["-"] version}";
rev = "d895b0f1f543c61eb03adddad20f08655a419d4e";
sha256 = "sha256-c5Qr6VUuPKjfw8fowjJJz3oGAyUwo/K0WeMvU5djzVA=";
# the repository's .gitattributes file contains the lines "/Tst/
# export-ignore" and "/doc/ export-ignore" so some directories are
# not included in the tarball downloaded by fetchzip. setting
# fetchSubmodules works around this by using fetchgit instead of
# fetchzip.
fetchSubmodules = true;
# not included in the tarball downloaded by fetchzip.
forceFetchGit = true;
};
patches = [
# fix timeouts when docbuilding with >= 64 cpus
# https://github.com/Singular/Singular/issues/1117
./vspace-MAX_PROCESS.patch
# add aarch64 support to cpu-check.m4. copied from redhat.
./redhat-aarch64.patch
# the newest version of ax-prog-cc-for-build.m4 seems to trigger
# linker errors. see
# https://github.com/alsa-project/alsa-firmware/issues/3 for a
# related issue.
./use-older-ax-prog-cc-for-build.patch
# https://github.com/Singular/Singular/issues/1086
(fetchpatch {
name = "schubert-lib-fails-with-too-many-cpus.patch";
url = "https://github.com/Singular/Singular/commit/3cda50c00a849455efa2502e56596955491a353a.patch";
sha256 = "sha256-fgYd+2vT32w5Ki8kKx6PfZn2e4QSJcYWOwEFXtc+lSA=";
})
] ++ lib.optionals enableDocs [
# singular supports building without 4ti2, bertini, normaliz or
# topcom just fine, but the docbuilding does not skip manual pages
# tagged as depending on those binaries (probably a bug in
# doc2tex.pl::HandleLib, since it seems to ignore "-exclude"
# argumens). skip them manually.
./disable-docs-for-optional-unpackaged-deps.patch
# fix some non-ascii characters in doc/decodegb.doc
(fetchpatch {
name = "decodegb-ascii.patch";
url = "https://github.com/Singular/Singular/commit/36966d9009de572ee4dbc487f3e5744098fe91be.patch";
sha256 = "sha256-9WcEov/oOQRC584ag6WVHFwY2aCjbM75HWyvZoEwppw=";
})
];
configureFlags = [
"--with-ntl=${ntl}"
"--disable-pyobject-module"
@ -114,6 +74,7 @@ stdenv.mkDerivation rec {
] ++ lib.optionals enableGfanlib [
cddlib
];
nativeBuildInputs = [
bison
perl
@ -123,9 +84,11 @@ stdenv.mkDerivation rec {
] ++ lib.optionals enableDocs [
doxygen
graphviz
latex2html
texinfo4
texlive.combined.scheme-small
];
depsBuildBuild = [ buildPackages.stdenv.cc ];
preAutoreconf = ''
find . -type f -readable -writable -exec sed \
@ -137,21 +100,14 @@ stdenv.mkDerivation rec {
hardeningDisable = lib.optional stdenv.isi686 "stackprotector";
# The Makefile actually defaults to `make install` anyway
buildPhase = ''
# do nothing
'';
doCheck = true; # very basic checks, does not test any libraries
installPhase = ''
mkdir -p "$out"
cp -r Singular/LIB "$out/lib"
make install
'' + lib.optionalString enableDocs ''
# Sage uses singular.hlp (which is not in the tarball)
# Sage uses singular.info, which is not installed by default
mkdir -p $out/share/info
cp doc/singular.hlp $out/share/info
cp doc/singular.info $out/share/info
'' + ''
# Make sure patchelf picks up the right libraries
rm -rf libpolys factory resources omalloc Singular
@ -211,5 +167,6 @@ stdenv.mkDerivation rec {
license = licenses.gpl3; # Or GPLv2 at your option - but not GPLv4
homepage = "http://www.singular.uni-kl.de";
downloadPage = "http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/SOURCES/";
mainProgram = "Singular";
};
}

View File

@ -1,112 +0,0 @@
commit 9e8b044d982e132cf35a106a1cc0cf7e77b27f7c
Author: Mauricio Collares <mauricio@collares.org>
Date: Thu Apr 15 20:33:21 2021 -0300
Disable manual sections using optional packages not yet in Nixpkgs
* normaliz.lib depends on normaliz.
* polymake.lib depends on topcom.
* recover.lib depends on bertini.
* sing4ti2.lib depends on 4ti2.
* tateProdCplxNegGrad.lib uses multigrading.lib, which depends on 4ti2.
diff --git a/doc/singular.doc b/doc/singular.doc
index 64b969d39..e704f95f0 100644
--- a/doc/singular.doc
+++ b/doc/singular.doc
@@ -407,7 +407,6 @@ LIB "all.lib";
* nfmodsyz_lib:: Syzygy modules of submodules of free modules over algebraic number fields
* noether_lib:: Noether normalization of an ideal
* normal_lib:: procedure for normalization
-* normaliz_lib:: integral closure, normalization for monomial ideals, toric ideals
* pointid_lib:: factorized lex GB of the vanishing ideal of a set of points
* primdec_lib:: procedures for primary decomposition
* primdecint_lib:: primary decomposition over the integers
@@ -416,7 +415,6 @@ LIB "all.lib";
* reesclos_lib:: Rees Algebra and integral closure of an ideal
* rstandard_lib:: Janet bases and border bases for ideals
* sagbi_lib:: Subalgebras bases Analogous to Groebner bases for ideals
-* sing4ti2_lib:: interface to program 4ti2
* symodstd_lib:: Groebner bases for symmetric ideals
* toric_lib:: toric ideals
@end menu
@@ -521,10 +519,6 @@ LIB "all.lib";
@node normal_lib
@subsection normal_lib
@c lib normal.lib
-@c ---------------------------------------------------------
-@node normaliz_lib
-@subsection normaliz_lib
-@c lib normaliz.lib tag:normaliz
@c ----------------------------------------------------------
@node pointid_lib
@subsection pointid_lib
@@ -558,10 +552,6 @@ LIB "all.lib";
@subsection sagbi_lib
@c lib sagbi.lib
@c ---------------------------------------------------------
-@node sing4ti2_lib
-@subsection sing4ti2_lib
-@c lib sing4ti2.lib tag:sing4ti2
-@c ----------------------------------------------------------
@node symodstd_lib
@subsection symodstd_lib
@c lib symodstd.lib
@@ -873,7 +863,6 @@ iniD, reslist, sumlist, dividelist, createlist
* solve_lib:: procedures to solve polynomial systems
* triang_lib:: procedures for decomposing zero-dimensional ideals
* ntsolve_lib:: one real solution of polynomial systems (Newton iteration)
-* recover_lib:: Hybrid numerical/symbolical algorithms
* rootisolation_lib:: real root isolation with intervals
* signcond_lib:: computing realizable sign conditions
* zeroset_lib:: procedures for roots and factorization
@@ -904,10 +893,6 @@ iniD, reslist, sumlist, dividelist, createlist
@subsection ntsolve_lib
@c lib ntsolve.lib
@c ---------------------------------------------------------
-@node recover_lib
-@subsection recover_lib
-@c lib recover.lib tag:bertini
-@c ----------------------------------------------------------
@node rootisolation_lib
@subsection rootisolation_lib
@c lib rootisolation.lib
@@ -1108,7 +1093,6 @@ but not for serious computations.
* cimonom_lib:: complete intersection for toric ideals
* gfan_lib:: A gfanlib interface for Singular
* gitfan_lib:: Compute GIT-fans
-* polymake_lib:: interface to TOPCOM
* realizationMatroids_lib:: Realizability for Tropical Fan Curves
* tropical_lib:: interface to gfan
* tropicalNewton_lib:: Newton polygons in tropical geometry
@@ -1125,10 +1109,7 @@ but not for serious computations.
@node gitfan_lib
@subsection gitfan_lib
@c lib gitfan.lib
-@c ----------------------------------------------------------
-@node polymake_lib
-@subsection polymake_lib
-@c lib polymake.lib tag:topcom
+
@c ----------------------------------------------------------
@node realizationMatroids_lib
@subsection realizationMatroids_lib
@@ -1219,7 +1200,6 @@ Comments should be send to the author of the library directly.
* stanleyreisner_lib:: T1 and T2 for a general Stanley-Reiser ring
* swalk_lib:: Sagbi Walk Conversion Algorithm
* systhreads_lib:: multi-threaded objects
-* tateProdCplxNegGrad_lib:: sheaf cohomology on product of projective spaces
* VecField_lib:: vector fields
@end menu
@c ----------------------------------------------------------
@@ -1310,10 +1290,6 @@ Todos/Issues:
@subsection systhreads_lib
@c lib systhreads.lib
@c ---------------------------------------------------------
-@node tateProdCplxNegGrad_lib
-@subsection tateProdCplxNegGrad_lib
-@c lib tateProdCplxNegGrad.lib
-@c ---------------------------------------------------------
@node VecField_lib
@subsection VecField_lib
@c lib VecField.lib

View File

@ -1,38 +0,0 @@
diff --git a/m4/cpu-check.m4 b/m4/cpu-check.m4
index 3cf0a7f08..12bb926ac 100644
--- a/m4/cpu-check.m4
+++ b/m4/cpu-check.m4
@@ -37,6 +37,18 @@ if test "$ac_cv_singcpuname" = ppc; then
AC_DEFINE(SI_CPU_PPC,1,"PPC")
AC_SUBST(SI_CPU_PPC)
fi
+if test "$ac_cv_singcpuname" = arm -o "$ac_cv_singcpuname" = armel; then
+ AC_DEFINE(SI_CPU_ARM,1,"ARM")
+ AC_SUBST(SI_CPU_ARM)
+fi
+if test "$ac_cv_singcpuname" = aarch64; then
+ AC_DEFINE(SI_CPU_AARCH64,1,"AARCH64")
+ AC_SUBST(SI_CPU_AARCH64)
+fi
+if test "$ac_cv_singcpuname" = s390; then
+ AC_DEFINE(SI_CPU_S390,1,"S390")
+ AC_SUBST(SI_CPU_S390)
+fi
# UNAME and PATH
AC_MSG_CHECKING(uname for Singular)
@@ -65,6 +77,14 @@ dnl testet on: ppc_Linux, 740/750 PowerMac G3, 512k L2 cache
[powerpc*|ppc*], [AC_DEFINE(HAVE_GENERIC_MULT,1,multiplication is fast on the cpu: a*b is with mod otherwise using tables of logartihms)],
dnl the following settings seems to be better on arm processors
[arm*], [],
+dnl FIXME: need to run some tests
+ [aarch64*], [
+ AC_DEFINE(HAVE_MULT_MOD,1,multiplication is fast on the cpu: a*b is with mod otherwise using tables of logartihms)
+ AC_DEFINE(HAVE_GENERIC_ADD,1,use branch for addition in Z/p otherwise it uses a generic add)
+ AC_DEFINE(HAVE_DIV_MOD,1,division using extend euclidian algorithm otherwise using tables of logartihms)
+ ],
+dnl FIXME: need to run some tests
+ [s390*], [AC_DEFINE(HAVE_GENERIC_ADD,1,use branch for addition in Z/p otherwise it uses a generic add)],
[]
)

View File

@ -1,194 +0,0 @@
diff --git a/m4/ax_prog_cc_for_build.m4 b/m4/ax_prog_cc_for_build.m4
index f7410d74b..12cb005a5 100644
--- a/m4/ax_prog_cc_for_build.m4
+++ b/m4/ax_prog_cc_for_build.m4
@@ -32,35 +32,31 @@
# and this notice are preserved. This file is offered as-is, without any
# warranty.
-#serial 18
+#serial 9
AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD])
AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_PROG_CPP])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
dnl Use the standard macros, but make them use other variable names
dnl
pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl
-pushdef([ac_cv_prog_cc_c89], ac_cv_build_prog_cc_c89)dnl
pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl
pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl
pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl
pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl
-pushdef([ac_cv_c_compiler_gnu], ac_cv_build_c_compiler_gnu)dnl
pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl
pushdef([ac_cv_objext], ac_cv_build_objext)dnl
pushdef([ac_exeext], ac_build_exeext)dnl
pushdef([ac_objext], ac_build_objext)dnl
pushdef([CC], CC_FOR_BUILD)dnl
pushdef([CPP], CPP_FOR_BUILD)dnl
-pushdef([GCC], GCC_FOR_BUILD)dnl
pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl
pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl
-pushdef([EXEEXT], BUILD_EXEEXT)dnl
pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl
-pushdef([OBJEXT], BUILD_OBJEXT)dnl
pushdef([host], build)dnl
pushdef([host_alias], build_alias)dnl
pushdef([host_cpu], build_cpu)dnl
@@ -71,29 +67,27 @@ pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl
pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl
pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl
pushdef([ac_cv_host_os], ac_cv_build_os)dnl
-pushdef([ac_tool_prefix], ac_build_tool_prefix)dnl
-pushdef([am_cv_CC_dependencies_compiler_type], am_cv_build_CC_dependencies_compiler_type)dnl
-pushdef([am_cv_prog_cc_c_o], am_cv_build_prog_cc_c_o)dnl
-pushdef([cross_compiling], cross_compiling_build)dnl
+pushdef([ac_cpp], ac_build_cpp)dnl
+pushdef([ac_compile], ac_build_compile)dnl
+pushdef([ac_link], ac_build_link)dnl
-cross_compiling_build=no
+save_cross_compiling=$cross_compiling
+save_ac_tool_prefix=$ac_tool_prefix
+cross_compiling=no
+ac_tool_prefix=
-ac_build_tool_prefix=
-AS_IF([test -n "$build"], [ac_build_tool_prefix="$build-"],
- [test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"])
-
-AC_LANG_PUSH([C])
AC_PROG_CC
-_AC_COMPILER_EXEEXT
-_AC_COMPILER_OBJEXT
AC_PROG_CPP
+AC_EXEEXT
+
+ac_tool_prefix=$save_ac_tool_prefix
+cross_compiling=$save_cross_compiling
dnl Restore the old definitions
dnl
-popdef([cross_compiling])dnl
-popdef([am_cv_prog_cc_c_o])dnl
-popdef([am_cv_CC_dependencies_compiler_type])dnl
-popdef([ac_tool_prefix])dnl
+popdef([ac_link])dnl
+popdef([ac_compile])dnl
+popdef([ac_cpp])dnl
popdef([ac_cv_host_os])dnl
popdef([ac_cv_host_vendor])dnl
popdef([ac_cv_host_cpu])dnl
@@ -104,33 +98,25 @@ popdef([host_vendor])dnl
popdef([host_cpu])dnl
popdef([host_alias])dnl
popdef([host])dnl
-popdef([OBJEXT])dnl
popdef([LDFLAGS])dnl
-popdef([EXEEXT])dnl
popdef([CPPFLAGS])dnl
popdef([CFLAGS])dnl
-popdef([GCC])dnl
popdef([CPP])dnl
popdef([CC])dnl
popdef([ac_objext])dnl
popdef([ac_exeext])dnl
popdef([ac_cv_objext])dnl
popdef([ac_cv_exeext])dnl
-popdef([ac_cv_c_compiler_gnu])dnl
popdef([ac_cv_prog_cc_g])dnl
popdef([ac_cv_prog_cc_cross])dnl
popdef([ac_cv_prog_cc_works])dnl
-popdef([ac_cv_prog_cc_c89])dnl
popdef([ac_cv_prog_gcc])dnl
popdef([ac_cv_prog_CPP])dnl
-dnl restore global variables ac_ext, ac_cpp, ac_compile,
-dnl ac_link, ac_compiler_gnu (dependant on the current
-dnl language after popping):
-AC_LANG_POP([C])
-
dnl Finally, set Makefile variables
dnl
+BUILD_EXEEXT=$ac_build_exeext
+BUILD_OBJEXT=$ac_build_objext
AC_SUBST(BUILD_EXEEXT)dnl
AC_SUBST(BUILD_OBJEXT)dnl
AC_SUBST([CFLAGS_FOR_BUILD])dnl
diff --git a/m4/ax_prog_cxx_for_build.m4 b/m4/ax_prog_cxx_for_build.m4
index 4d976769f..17c19a89f 100644
--- a/m4/ax_prog_cxx_for_build.m4
+++ b/m4/ax_prog_cxx_for_build.m4
@@ -31,7 +31,7 @@
# and this notice are preserved. This file is offered as-is, without any
# warranty.
-#serial 4
+#serial 3
AU_ALIAS([AC_PROG_CXX_FOR_BUILD], [AX_PROG_CXX_FOR_BUILD])
AC_DEFUN([AX_PROG_CXX_FOR_BUILD], [dnl
@@ -49,7 +49,6 @@ pushdef([ac_cv_prog_cxx_cross], ac_cv_build_prog_cxx_cross)dnl
pushdef([ac_cv_prog_cxx_g], ac_cv_build_prog_cxx_g)dnl
pushdef([CXX], CXX_FOR_BUILD)dnl
pushdef([CXXCPP], CXXCPP_FOR_BUILD)dnl
-pushdef([GXX], GXX_FOR_BUILD)dnl
pushdef([CXXFLAGS], CXXFLAGS_FOR_BUILD)dnl
pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl
pushdef([CXXCPPFLAGS], CXXCPPFLAGS_FOR_BUILD)dnl
@@ -63,25 +62,26 @@ pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl
pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl
pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl
pushdef([ac_cv_host_os], ac_cv_build_os)dnl
-pushdef([ac_tool_prefix], ac_build_tool_prefix)dnl
-pushdef([am_cv_CXX_dependencies_compiler_type], am_cv_build_CXX_dependencies_compiler_type)dnl
-pushdef([cross_compiling], cross_compiling_build)dnl
+pushdef([ac_cxxcpp], ac_build_cxxcpp)dnl
+pushdef([ac_compile], ac_build_compile)dnl
+pushdef([ac_link], ac_build_link)dnl
-cross_compiling_build=no
+save_cross_compiling=$cross_compiling
+save_ac_tool_prefix=$ac_tool_prefix
+cross_compiling=no
+ac_tool_prefix=
-ac_build_tool_prefix=
-AS_IF([test -n "$build"], [ac_build_tool_prefix="$build-"],
- [test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"])
-
-AC_LANG_PUSH([C++])
AC_PROG_CXX
AC_PROG_CXXCPP
+ac_tool_prefix=$save_ac_tool_prefix
+cross_compiling=$save_cross_compiling
+
dnl Restore the old definitions
dnl
-popdef([cross_compiling])dnl
-popdef([am_cv_CXX_dependencies_compiler_type])dnl
-popdef([ac_tool_prefix])dnl
+popdef([ac_link])dnl
+popdef([ac_compile])dnl
+popdef([ac_cxxcpp])dnl
popdef([ac_cv_host_os])dnl
popdef([ac_cv_host_vendor])dnl
popdef([ac_cv_host_cpu])dnl
@@ -103,10 +103,6 @@ popdef([ac_cv_prog_cxx_works])dnl
popdef([ac_cv_prog_gxx])dnl
popdef([ac_cv_prog_CXXCPP])dnl
-dnl restore global variables (dependant on the current
-dnl language after popping):
-AC_LANG_POP([C++])
-
dnl Finally, set Makefile variables
dnl
AC_SUBST([CXXFLAGS_FOR_BUILD])dnl

View File

@ -1,35 +0,0 @@
diff --git a/kernel/GBEngine/kChinese.cc b/kernel/GBEngine/kChinese.cc
index 829a66609..84655caf2 100644
--- a/kernel/GBEngine/kChinese.cc
+++ b/kernel/GBEngine/kChinese.cc
@@ -209,6 +209,8 @@ ideal id_ChineseRemainder_0(ideal *xx, number *q, int rl, const ring r)
return NULL;
}
int cpus=(int)(long)feOptValue(FE_OPT_CPUS);
+ if (cpus>=vspace::internals::MAX_PROCESS)
+ cpus=vspace::internals::MAX_PROCESS-1;
if ((cpus==1) || (2*cpus>=cnt))
/* at least 2 polys for each process, or switch to seriell version */
return id_ChineseRemainder(xx,q,rl,r);
@@ -295,6 +297,8 @@ ideal id_Farey_0(ideal x, number N, const ring r)
{
int cnt=IDELEMS(x)*x->nrows;
int cpus=(int)(long)feOptValue(FE_OPT_CPUS);
+ if (cpus>=vspace::internals::MAX_PROCESS)
+ cpus=vspace::internals::MAX_PROCESS-1;
if (2*cpus>=cnt) /* at least 2 polys for each process,
or switch to seriell version */
return id_Farey(x,N,r);
diff --git a/kernel/GBEngine/kverify.cc b/kernel/GBEngine/kverify.cc
index 909d84994..aa06d6624 100644
--- a/kernel/GBEngine/kverify.cc
+++ b/kernel/GBEngine/kverify.cc
@@ -176,6 +176,8 @@ BOOLEAN kVerify2(ideal F, ideal Q)
/*---------------------------------------------------------------------*/
BOOLEAN all_okay=TRUE;
int cpus=(int)(long)feOptValue(FE_OPT_CPUS);
+ if (cpus>=vspace::internals::MAX_PROCESS)
+ cpus=vspace::internals::MAX_PROCESS-1;
int parent_pid=getpid();
using namespace vspace;
vmem_init();