Skip to content

Commit 330c35d

Browse files
author
Release Manager
committed
gh-37011: allowing external ECM to be called gmp-ecm or ecm ECM executable in Fedora is called `gmp-ecm` This PR allows both names, `ecm` and `gmp-ecm`, to be used URL: #37011 Reported by: Dima Pasechnik Reviewer(s): Dima Pasechnik, Enrique Manuel Artal Bartolo, Gonzalo Tornaría, Matthias Köppe, Michael Orlitzky, Tobias Diez
2 parents 3ea5fa9 + 2ea4345 commit 330c35d

File tree

5 files changed

+56
-8
lines changed

5 files changed

+56
-8
lines changed

build/pkgs/ecm/spkg-configure.m4

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
SAGE_SPKG_CONFIGURE([ecm], [
22
m4_pushdef([SAGE_ECM_MINVER],[7.0.4])
3+
ECMBIN=ecm
34
SAGE_SPKG_DEPCHECK([gmp], [
45
AC_CHECK_HEADER(ecm.h, [
56
AX_ABSOLUTE_HEADER([ecm.h])
@@ -18,20 +19,21 @@ SAGE_SPKG_CONFIGURE([ecm], [
1819
AC_SEARCH_LIBS([ecm_factor], [ecm], [], [sage_spkg_install_ecm=yes])
1920
])
2021
])
21-
AC_PATH_PROG([ECMBIN], [ecm])
22-
if test x$ECMBIN != x; then
22+
AC_PATH_PROGS([ECMBIN], [ecm gmp-ecm])
23+
AS_IF([test x$ECMBIN != x], [
2324
ecmbin_version=`echo 121 | $ECMBIN 4 | grep ^GMP |
2425
$SED -n -e 's/GMP\-ECM \([[0-9]]*\.[[0-9]]*\.[[0-9]]*\).*/\1/p'`
25-
fi
26-
AS_IF([test -n "$ecmbin_version"], [
27-
AX_COMPARE_VERSION([$ecmbin_version], [ge], [$SAGE_ECM_MINVER], [
28-
ac_cv_ECMBIN="$ecmbin_version"
26+
AS_IF([test -n "$ecmbin_version"], [
27+
AX_COMPARE_VERSION([$ecmbin_version], [ge], [$SAGE_ECM_MINVER], [
28+
ac_cv_ECMBIN="$ecmbin_version"
29+
])
2930
])
30-
])
31+
], [ECMBIN=ecm])
3132
fi
3233
AS_IF([test -z "$ac_cv_ECM"], [sage_spkg_install_ecm=yes])
3334
AS_IF([test -z "$ac_cv_ECMBIN"], [sage_spkg_install_ecm=yes])
3435
], [sage_spkg_install_ecm=yes])
3536
])
3637
m4_popdef([SAGE_ECM_MINVER])
38+
AC_SUBST(SAGE_ECMBIN, $ECMBIN)
3739
])

pkgs/sage-conf/_sage_conf/_conf.py.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ ECL_CONFIG = "@SAGE_ECL_CONFIG@".replace('${prefix}', SAGE_LOCAL)
3232

3333
SAGE_NAUTY_BINS_PREFIX = "@SAGE_NAUTY_BINS_PREFIX@"
3434

35+
SAGE_ECMBIN = "@SAGE_ECMBIN@"
36+
3537
# Names or paths of the 4ti2 executables
3638
FOURTITWO_HILBERT = "@FOURTITWO_HILBERT@"
3739
FOURTITWO_MARKOV = "@FOURTITWO_MARKOV@"

src/sage/env.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ def var(key: str, *fallbacks: Optional[str], force: bool = False) -> Optional[st
220220
MAXIMA_FAS = var("MAXIMA_FAS")
221221
KENZO_FAS = var("KENZO_FAS")
222222
SAGE_NAUTY_BINS_PREFIX = var("SAGE_NAUTY_BINS_PREFIX", "")
223+
SAGE_ECMBIN = var("SAGE_ECMBIN")
223224
RUBIKS_BINS_PREFIX = var("RUBIKS_BINS_PREFIX", "")
224225
FOURTITWO_HILBERT = var("FOURTITWO_HILBERT")
225226
FOURTITWO_MARKOV = var("FOURTITWO_MARKOV")

src/sage/features/ecm.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# -*- coding: utf-8 -*-
2+
r"""
3+
Feature for testing the presence of ``ecm`` or ``gmp-ecm``
4+
"""
5+
# ****************************************************************************
6+
# Copyright (C) 2032 Dima Pasechnik <[email protected]>
7+
#
8+
# This program is free software: you can redistribute it and/or modify
9+
# it under the terms of the GNU General Public License as published by
10+
# the Free Software Foundation, either version 2 of the License, or
11+
# (at your option) any later version.
12+
# https://www.gnu.org/licenses/
13+
# ****************************************************************************
14+
15+
from . import Executable
16+
from sage.env import SAGE_ECMBIN
17+
18+
19+
class Ecm(Executable):
20+
r"""
21+
A :class:`~sage.features.Feature` describing the presence of :ref:`GMP-ECM <spkg_ecm>`.
22+
23+
EXAMPLES::
24+
25+
sage: from sage.features.ecm import Ecm
26+
sage: Ecm().is_present()
27+
FeatureTestResult('ecm', True)
28+
"""
29+
def __init__(self):
30+
r"""
31+
TESTS::
32+
33+
sage: from sage.features.ecm import Ecm
34+
sage: isinstance(Ecm(), Ecm)
35+
True
36+
"""
37+
Executable.__init__(self, name="ecm", executable=SAGE_ECMBIN,
38+
spkg="ecm", type="standard")
39+
40+
41+
def all_features():
42+
return [Ecm()]

src/sage/interfaces/ecm.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
from sage.structure.sage_object import SageObject
5656
from sage.rings.integer_ring import ZZ
5757

58+
from sage.env import SAGE_ECMBIN
5859

5960
class ECM(SageObject):
6061

@@ -182,7 +183,7 @@ def __init__(self, B1=10, B2=None, **kwds):
182183
self._cmd = self._make_cmd(B1, B2, kwds)
183184

184185
def _make_cmd(self, B1, B2, kwds):
185-
ecm = ['ecm']
186+
ecm = [SAGE_ECMBIN]
186187
options = []
187188
for x, v in kwds.items():
188189
if v is False:

0 commit comments

Comments
 (0)