From 7a9ce374f19a283c055901a4f3e2008e908afeab Mon Sep 17 00:00:00 2001 From: Dima Pasechnik Date: Fri, 5 Jan 2024 01:11:23 +0000 Subject: [PATCH 1/5] allowing external ECM to be called gmp-ecm, not ecm This is how it is called in Fedora --- build/pkgs/ecm/spkg-configure.m4 | 5 ++++- pkgs/sage-conf/_sage_conf/_conf.py.in | 2 ++ src/sage/env.py | 1 + src/sage/interfaces/ecm.py | 3 ++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/build/pkgs/ecm/spkg-configure.m4 b/build/pkgs/ecm/spkg-configure.m4 index d456f1d8f2c..5b80e4c4044 100644 --- a/build/pkgs/ecm/spkg-configure.m4 +++ b/build/pkgs/ecm/spkg-configure.m4 @@ -1,5 +1,6 @@ SAGE_SPKG_CONFIGURE([ecm], [ m4_pushdef([SAGE_ECM_MINVER],[7.0.4]) + SAGE_ECM_BIN=ecm SAGE_SPKG_DEPCHECK([gmp], [ AC_CHECK_HEADER(ecm.h, [ AX_ABSOLUTE_HEADER([ecm.h]) @@ -18,8 +19,9 @@ SAGE_SPKG_CONFIGURE([ecm], [ AC_SEARCH_LIBS([ecm_factor], [ecm], [], [sage_spkg_install_ecm=yes]) ]) ]) - AC_PATH_PROG([ECMBIN], [ecm]) + AC_PATH_PROGS([ECMBIN], [ecm gmp-ecm]) if test x$ECMBIN != x; then + SAGE_ECM_BIN=`basename $ECMBIN` ecmbin_version=`echo 121 | $ECMBIN 4 | grep ^GMP | $SED -n -e 's/GMP\-ECM \([[0-9]]*\.[[0-9]]*\.[[0-9]]*\).*/\1/p'` fi @@ -34,4 +36,5 @@ SAGE_SPKG_CONFIGURE([ecm], [ ], [sage_spkg_install_ecm=yes]) ]) m4_popdef([SAGE_ECM_MINVER]) + AC_SUBST(SAGE_ECMBIN, $SAGE_ECM_BIN) ]) diff --git a/pkgs/sage-conf/_sage_conf/_conf.py.in b/pkgs/sage-conf/_sage_conf/_conf.py.in index ccc1c9695fb..54a59fdbacf 100644 --- a/pkgs/sage-conf/_sage_conf/_conf.py.in +++ b/pkgs/sage-conf/_sage_conf/_conf.py.in @@ -32,6 +32,8 @@ ECL_CONFIG = "@SAGE_ECL_CONFIG@".replace('${prefix}', SAGE_LOCAL) SAGE_NAUTY_BINS_PREFIX = "@SAGE_NAUTY_BINS_PREFIX@" +SAGE_ECMBIN = "@SAGE_ECMBIN@" + # Names or paths of the 4ti2 executables FOURTITWO_HILBERT = "@FOURTITWO_HILBERT@" FOURTITWO_MARKOV = "@FOURTITWO_MARKOV@" diff --git a/src/sage/env.py b/src/sage/env.py index da9bad48da9..a6a99ca9303 100644 --- a/src/sage/env.py +++ b/src/sage/env.py @@ -220,6 +220,7 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st MAXIMA_FAS = var("MAXIMA_FAS") KENZO_FAS = var("KENZO_FAS") SAGE_NAUTY_BINS_PREFIX = var("SAGE_NAUTY_BINS_PREFIX", "") +SAGE_ECMBIN = var("SAGE_ECMBIN") RUBIKS_BINS_PREFIX = var("RUBIKS_BINS_PREFIX", "") FOURTITWO_HILBERT = var("FOURTITWO_HILBERT") FOURTITWO_MARKOV = var("FOURTITWO_MARKOV") diff --git a/src/sage/interfaces/ecm.py b/src/sage/interfaces/ecm.py index a2c882643c4..ae1379861f2 100644 --- a/src/sage/interfaces/ecm.py +++ b/src/sage/interfaces/ecm.py @@ -55,6 +55,7 @@ from sage.structure.sage_object import SageObject from sage.rings.integer_ring import ZZ +from sage.env import SAGE_ECMBIN class ECM(SageObject): @@ -182,7 +183,7 @@ def __init__(self, B1=10, B2=None, **kwds): self._cmd = self._make_cmd(B1, B2, kwds) def _make_cmd(self, B1, B2, kwds): - ecm = ['ecm'] + ecm = [SAGE_ECMBIN] options = [] for x, v in kwds.items(): if v is False: From 2c53f08ef9253a1f84c737403c58e586d2cf358f Mon Sep 17 00:00:00 2001 From: Dima Pasechnik Date: Fri, 5 Jan 2024 09:20:20 +0000 Subject: [PATCH 2/5] add sage.features.ecm --- src/sage/features/ecm.py | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/sage/features/ecm.py diff --git a/src/sage/features/ecm.py b/src/sage/features/ecm.py new file mode 100644 index 00000000000..79a1e77918f --- /dev/null +++ b/src/sage/features/ecm.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +r""" +Feature for testing the presence of ``ecm`` or ``gmp-ecm`` +""" +# **************************************************************************** +# Copyright (C) 2032 Dima Pasechnik +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# https://www.gnu.org/licenses/ +# **************************************************************************** + +from . import Executable +from sage.env import SAGE_ECMBIN + + +class Ecm(Executable): + r""" + A :class:`~sage.features.Feature` describing the presence of :ref:`GMP-ECM `. + + EXAMPLES:: + + sage: from sage.features.ecm import Ecm + sage: Ecm().is_present() + FeatureTestResult('ecm', True) + """ + def __init__(self): + r""" + TESTS:: + + sage: from sage.features.ecm import Ecm + sage: isinstance(Ecm(), Ecm) + True + """ + Executable.__init__(self, name="ecm", executable=SAGE_ECMBIN, + spkg="ecm", type="standard") + + +def all_features(): + return [Ecm()] From afeffaa28b494cb9752868b122a0657ca269e59e Mon Sep 17 00:00:00 2001 From: Dima Pasechnik Date: Fri, 5 Jan 2024 09:56:50 +0000 Subject: [PATCH 3/5] replace SAGE_ECMBIN with ECM --- build/pkgs/ecm/spkg-configure.m4 | 2 +- pkgs/sage-conf/_sage_conf/_conf.py.in | 2 +- src/sage/env.py | 2 +- src/sage/features/ecm.py | 4 ++-- src/sage/interfaces/ecm.py | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build/pkgs/ecm/spkg-configure.m4 b/build/pkgs/ecm/spkg-configure.m4 index 5b80e4c4044..d5da087c148 100644 --- a/build/pkgs/ecm/spkg-configure.m4 +++ b/build/pkgs/ecm/spkg-configure.m4 @@ -36,5 +36,5 @@ SAGE_SPKG_CONFIGURE([ecm], [ ], [sage_spkg_install_ecm=yes]) ]) m4_popdef([SAGE_ECM_MINVER]) - AC_SUBST(SAGE_ECMBIN, $SAGE_ECM_BIN) + AC_SUBST(ECM, $SAGE_ECM_BIN) ]) diff --git a/pkgs/sage-conf/_sage_conf/_conf.py.in b/pkgs/sage-conf/_sage_conf/_conf.py.in index 54a59fdbacf..b4e1d2e750e 100644 --- a/pkgs/sage-conf/_sage_conf/_conf.py.in +++ b/pkgs/sage-conf/_sage_conf/_conf.py.in @@ -32,7 +32,7 @@ ECL_CONFIG = "@SAGE_ECL_CONFIG@".replace('${prefix}', SAGE_LOCAL) SAGE_NAUTY_BINS_PREFIX = "@SAGE_NAUTY_BINS_PREFIX@" -SAGE_ECMBIN = "@SAGE_ECMBIN@" +ECM = "@ECM@" # Names or paths of the 4ti2 executables FOURTITWO_HILBERT = "@FOURTITWO_HILBERT@" diff --git a/src/sage/env.py b/src/sage/env.py index a6a99ca9303..54ca5431133 100644 --- a/src/sage/env.py +++ b/src/sage/env.py @@ -220,7 +220,7 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st MAXIMA_FAS = var("MAXIMA_FAS") KENZO_FAS = var("KENZO_FAS") SAGE_NAUTY_BINS_PREFIX = var("SAGE_NAUTY_BINS_PREFIX", "") -SAGE_ECMBIN = var("SAGE_ECMBIN") +ECM = var("ECM") RUBIKS_BINS_PREFIX = var("RUBIKS_BINS_PREFIX", "") FOURTITWO_HILBERT = var("FOURTITWO_HILBERT") FOURTITWO_MARKOV = var("FOURTITWO_MARKOV") diff --git a/src/sage/features/ecm.py b/src/sage/features/ecm.py index 79a1e77918f..1df11efe067 100644 --- a/src/sage/features/ecm.py +++ b/src/sage/features/ecm.py @@ -13,7 +13,7 @@ # **************************************************************************** from . import Executable -from sage.env import SAGE_ECMBIN +from sage.env import ECM class Ecm(Executable): @@ -34,7 +34,7 @@ def __init__(self): sage: isinstance(Ecm(), Ecm) True """ - Executable.__init__(self, name="ecm", executable=SAGE_ECMBIN, + Executable.__init__(self, name="ecm", executable=ECM, spkg="ecm", type="standard") diff --git a/src/sage/interfaces/ecm.py b/src/sage/interfaces/ecm.py index ae1379861f2..33a62fe0bf1 100644 --- a/src/sage/interfaces/ecm.py +++ b/src/sage/interfaces/ecm.py @@ -55,7 +55,7 @@ from sage.structure.sage_object import SageObject from sage.rings.integer_ring import ZZ -from sage.env import SAGE_ECMBIN +from sage.env import ECM class ECM(SageObject): @@ -183,7 +183,7 @@ def __init__(self, B1=10, B2=None, **kwds): self._cmd = self._make_cmd(B1, B2, kwds) def _make_cmd(self, B1, B2, kwds): - ecm = [SAGE_ECMBIN] + ecm = [ECM] options = [] for x, v in kwds.items(): if v is False: From c84929a28de6bbe97b3d5bccbdcd633ba5c89f70 Mon Sep 17 00:00:00 2001 From: Dima Pasechnik Date: Sun, 7 Jan 2024 21:20:48 +0000 Subject: [PATCH 4/5] Revert "replace SAGE_ECMBIN with ECM" This reverts commit e1d3f3797809f567dbebf830d3a44ab3f60cf8cd. --- build/pkgs/ecm/spkg-configure.m4 | 2 +- pkgs/sage-conf/_sage_conf/_conf.py.in | 2 +- src/sage/env.py | 2 +- src/sage/features/ecm.py | 4 ++-- src/sage/interfaces/ecm.py | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build/pkgs/ecm/spkg-configure.m4 b/build/pkgs/ecm/spkg-configure.m4 index d5da087c148..5b80e4c4044 100644 --- a/build/pkgs/ecm/spkg-configure.m4 +++ b/build/pkgs/ecm/spkg-configure.m4 @@ -36,5 +36,5 @@ SAGE_SPKG_CONFIGURE([ecm], [ ], [sage_spkg_install_ecm=yes]) ]) m4_popdef([SAGE_ECM_MINVER]) - AC_SUBST(ECM, $SAGE_ECM_BIN) + AC_SUBST(SAGE_ECMBIN, $SAGE_ECM_BIN) ]) diff --git a/pkgs/sage-conf/_sage_conf/_conf.py.in b/pkgs/sage-conf/_sage_conf/_conf.py.in index b4e1d2e750e..54a59fdbacf 100644 --- a/pkgs/sage-conf/_sage_conf/_conf.py.in +++ b/pkgs/sage-conf/_sage_conf/_conf.py.in @@ -32,7 +32,7 @@ ECL_CONFIG = "@SAGE_ECL_CONFIG@".replace('${prefix}', SAGE_LOCAL) SAGE_NAUTY_BINS_PREFIX = "@SAGE_NAUTY_BINS_PREFIX@" -ECM = "@ECM@" +SAGE_ECMBIN = "@SAGE_ECMBIN@" # Names or paths of the 4ti2 executables FOURTITWO_HILBERT = "@FOURTITWO_HILBERT@" diff --git a/src/sage/env.py b/src/sage/env.py index 54ca5431133..a6a99ca9303 100644 --- a/src/sage/env.py +++ b/src/sage/env.py @@ -220,7 +220,7 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st MAXIMA_FAS = var("MAXIMA_FAS") KENZO_FAS = var("KENZO_FAS") SAGE_NAUTY_BINS_PREFIX = var("SAGE_NAUTY_BINS_PREFIX", "") -ECM = var("ECM") +SAGE_ECMBIN = var("SAGE_ECMBIN") RUBIKS_BINS_PREFIX = var("RUBIKS_BINS_PREFIX", "") FOURTITWO_HILBERT = var("FOURTITWO_HILBERT") FOURTITWO_MARKOV = var("FOURTITWO_MARKOV") diff --git a/src/sage/features/ecm.py b/src/sage/features/ecm.py index 1df11efe067..79a1e77918f 100644 --- a/src/sage/features/ecm.py +++ b/src/sage/features/ecm.py @@ -13,7 +13,7 @@ # **************************************************************************** from . import Executable -from sage.env import ECM +from sage.env import SAGE_ECMBIN class Ecm(Executable): @@ -34,7 +34,7 @@ def __init__(self): sage: isinstance(Ecm(), Ecm) True """ - Executable.__init__(self, name="ecm", executable=ECM, + Executable.__init__(self, name="ecm", executable=SAGE_ECMBIN, spkg="ecm", type="standard") diff --git a/src/sage/interfaces/ecm.py b/src/sage/interfaces/ecm.py index 33a62fe0bf1..ae1379861f2 100644 --- a/src/sage/interfaces/ecm.py +++ b/src/sage/interfaces/ecm.py @@ -55,7 +55,7 @@ from sage.structure.sage_object import SageObject from sage.rings.integer_ring import ZZ -from sage.env import ECM +from sage.env import SAGE_ECMBIN class ECM(SageObject): @@ -183,7 +183,7 @@ def __init__(self, B1=10, B2=None, **kwds): self._cmd = self._make_cmd(B1, B2, kwds) def _make_cmd(self, B1, B2, kwds): - ecm = [ECM] + ecm = [SAGE_ECMBIN] options = [] for x, v in kwds.items(): if v is False: From 2ea4345a959b177d32847b20478d27745abe0ed5 Mon Sep 17 00:00:00 2001 From: Dima Pasechnik Date: Sun, 7 Jan 2024 21:29:45 +0000 Subject: [PATCH 5/5] remove call to baseline --- build/pkgs/ecm/spkg-configure.m4 | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/build/pkgs/ecm/spkg-configure.m4 b/build/pkgs/ecm/spkg-configure.m4 index 5b80e4c4044..dbc76db0001 100644 --- a/build/pkgs/ecm/spkg-configure.m4 +++ b/build/pkgs/ecm/spkg-configure.m4 @@ -1,6 +1,6 @@ SAGE_SPKG_CONFIGURE([ecm], [ m4_pushdef([SAGE_ECM_MINVER],[7.0.4]) - SAGE_ECM_BIN=ecm + ECMBIN=ecm SAGE_SPKG_DEPCHECK([gmp], [ AC_CHECK_HEADER(ecm.h, [ AX_ABSOLUTE_HEADER([ecm.h]) @@ -20,21 +20,20 @@ SAGE_SPKG_CONFIGURE([ecm], [ ]) ]) AC_PATH_PROGS([ECMBIN], [ecm gmp-ecm]) - if test x$ECMBIN != x; then - SAGE_ECM_BIN=`basename $ECMBIN` + AS_IF([test x$ECMBIN != x], [ ecmbin_version=`echo 121 | $ECMBIN 4 | grep ^GMP | $SED -n -e 's/GMP\-ECM \([[0-9]]*\.[[0-9]]*\.[[0-9]]*\).*/\1/p'` - fi - AS_IF([test -n "$ecmbin_version"], [ - AX_COMPARE_VERSION([$ecmbin_version], [ge], [$SAGE_ECM_MINVER], [ - ac_cv_ECMBIN="$ecmbin_version" + AS_IF([test -n "$ecmbin_version"], [ + AX_COMPARE_VERSION([$ecmbin_version], [ge], [$SAGE_ECM_MINVER], [ + ac_cv_ECMBIN="$ecmbin_version" + ]) ]) - ]) + ], [ECMBIN=ecm]) fi AS_IF([test -z "$ac_cv_ECM"], [sage_spkg_install_ecm=yes]) AS_IF([test -z "$ac_cv_ECMBIN"], [sage_spkg_install_ecm=yes]) ], [sage_spkg_install_ecm=yes]) ]) m4_popdef([SAGE_ECM_MINVER]) - AC_SUBST(SAGE_ECMBIN, $SAGE_ECM_BIN) + AC_SUBST(SAGE_ECMBIN, $ECMBIN) ])