commit:     cc71105828670c0a9d7314c938dfc806fac4a95c
Author:     Andrey Grozin <grozin <AT> gentoo <DOT> org>
AuthorDate: Sun Oct 15 08:26:51 2023 +0000
Commit:     Andrey Grozin <grozin <AT> gentoo <DOT> org>
CommitDate: Sun Oct 15 08:27:15 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=cc711058

sci-mathematics/fricas: now compiles with sbcl-2.3.9

Signed-off-by: Andrey Grozin <grozin <AT> gentoo.org>

 .../fricas/files/fricas-sbcl-2.3.9.patch           |  61 +++++++++++
 sci-mathematics/fricas/fricas-1.3.9-r2.ebuild      | 113 +++++++++++++++++++++
 2 files changed, 174 insertions(+)

diff --git a/sci-mathematics/fricas/files/fricas-sbcl-2.3.9.patch 
b/sci-mathematics/fricas/files/fricas-sbcl-2.3.9.patch
new file mode 100644
index 000000000000..6f7440afecf5
--- /dev/null
+++ b/sci-mathematics/fricas/files/fricas-sbcl-2.3.9.patch
@@ -0,0 +1,61 @@
+diff --git a/src/lisp/num_gmp.lisp b/src/lisp/num_gmp.lisp
+index b58001e..9538e3c 100644
+--- a/src/lisp/num_gmp.lisp
++++ b/src/lisp/num_gmp.lisp
+@@ -549,6 +549,20 @@
+ ;;; (gmp-bignum-isqrt (expt 10 50))
+ ;;; (gmp-bignum-isqrt (expt 2 127))
+ #+:sbcl
++
++(defmacro negate_bignum(x)
++    (let ((sym2
++          (find-symbol "NEGATE-BIGNUM-NOT-FULLY-NORMALIZED" "SB-BIGNUM")))
++        (if sym2
++            `(,sym2 ,x)
++            ;;; 'read-from-string' looks silly, but here we want error
++            ;;;  if NEGATE-BIGNUM is absent from SB-BIGNUM
++            (let ((sym1 (read-from-string "SB-BIGNUM::NEGATE-BIGNUM")))
++                 `(,sym1 ,x nil))
++        )
++    )
++)
++
+ (defun gmp-bignum-isqrt (x)
+   (let* ((len-x (sb-bignum::%bignum-length x))
+          (len-res (ceiling (+ 1 len-x) 2))
+@@ -652,8 +666,8 @@
+                   (sb-bignum::%bignum-length a)))
+          (b-plusp (sb-bignum::%bignum-0-or-plusp b
+                   (sb-bignum::%bignum-length b)))
+-         (a (if a-plusp a (sb-bignum::negate-bignum a)))
+-         (b (if b-plusp b (sb-bignum::negate-bignum b)))
++         (a (if a-plusp a (negate_bignum a)))
++         (b (if b-plusp b (negate_bignum b)))
+          (len-a (sb-bignum::%bignum-length a))
+          (len-b (sb-bignum::%bignum-length b))
+          (len-res (+ len-a len-b))
+@@ -697,10 +711,10 @@
+   (let* (
+     (nx (if (sb-bignum::%bignum-0-or-plusp x (sb-bignum::%bignum-length x))
+             (sb-bignum::copy-bignum x)
+-            (sb-bignum::negate-bignum x nil)))
++            (negate_bignum x)))
+     (ny (if (sb-bignum::%bignum-0-or-plusp y (sb-bignum::%bignum-length y))
+             (sb-bignum::copy-bignum y)
+-            (sb-bignum::negate-bignum y nil)))
++            (negate_bignum y)))
+     (xl (sb-bignum::%bignum-length nx))
+     (yl (sb-bignum::%bignum-length ny))
+     (rl (if (< xl yl) xl yl))
+@@ -735,9 +749,9 @@
+     (x-plusp (sb-bignum::%bignum-0-or-plusp x (sb-bignum::%bignum-length x)))
+     (y-plusp (sb-bignum::%bignum-0-or-plusp y (sb-bignum::%bignum-length y)))
+     (nx (if x-plusp x
+-           (sb-bignum::negate-bignum x nil)))
++           (negate_bignum x)))
+     (ny (if y-plusp y
+-           (sb-bignum::negate-bignum y nil)))
++           (negate_bignum y)))
+     (len-x (sb-bignum::%bignum-length nx))
+     (len-y (sb-bignum::%bignum-length ny))
+     (q nil)

diff --git a/sci-mathematics/fricas/fricas-1.3.9-r2.ebuild 
b/sci-mathematics/fricas/fricas-1.3.9-r2.ebuild
new file mode 100644
index 000000000000..07f9242ca06b
--- /dev/null
+++ b/sci-mathematics/fricas/fricas-1.3.9-r2.ebuild
@@ -0,0 +1,113 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+inherit elisp-common
+
+DESCRIPTION="FriCAS is a fork of Axiom computer algebra system"
+HOMEPAGE="https://fricas.sourceforge.net/
+       https://github.com/fricas/fricas
+       https://fricas.github.io/";
+SRC_URI="mirror://sourceforge/${PN}/${PV}/${P}-full.tar.bz2"
+
+LICENSE="BSD-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+# Supported lisps, number 0 is the default
+LISPS=( sbcl cmucl gcl ecl clisp clozurecl )
+# Version restrictions, . means no restrictions
+REST=(  .    .     .   .   .     . )
+# command name: . means just ${LISP}
+COMS=(  .    lisp  .   .   .     ccl )
+
+IUSE="${LISPS[*]} X emacs gmp"
+RDEPEND="X? ( x11-libs/libXpm x11-libs/libICE )
+       emacs? ( >=app-editors/emacs-23.1:* )
+       gmp? ( dev-libs/gmp:= )"
+
+# Generating lisp deps
+n=${#LISPS[*]}
+for ((n--; n > 0; n--)); do
+       LISP=${LISPS[$n]}
+       if [ "${REST[$n]}" = "." ]; then
+               DEP="dev-lisp/${LISP}"
+       else
+               DEP="${REST[$n]}"
+       fi
+       RDEPEND="${RDEPEND} ${LISP}? ( ${DEP}:= ) !${LISP}? ("
+done
+if [ "${REST[0]}" = "." ]; then
+       DEP="dev-lisp/${LISPS[0]}"
+else
+       DEP="${REST[0]}"
+fi
+RDEPEND="${RDEPEND} ${DEP}:="
+n=${#LISPS[*]}
+for ((n--; n > 0; n--)); do
+       RDEPEND="${RDEPEND} )"
+done
+
+DEPEND="${RDEPEND}"
+
+PATCHES=( "${FILESDIR}"/${PN}-sbcl-2.3.9.patch )
+
+# necessary for clisp and gcl
+RESTRICT="strip"
+
+src_configure() {
+       local LISP n GMP
+       LISP=sbcl
+       n=${#LISPS[*]}
+       for ((n--; n > 0; n--)); do
+               if use ${LISPS[$n]}; then
+                       LISP=${COMS[$n]}
+                       if [ "${LISP}" = "." ]; then
+                               LISP=${LISPS[$n]}
+                       fi
+               fi
+       done
+       einfo "Using lisp: ${LISP}"
+
+       # bug #650788
+       if [[ ${LISP} = sbcl || ${LISP} = ccl ]]
+       then GMP=$(use_with gmp)
+       else GMP=''
+       fi
+
+       # aldor is not yet in portage
+       econf --disable-aldor --with-lisp=${LISP} $(use_with X x) ${GMP}
+}
+
+src_compile() {
+       # bug #300132
+       emake -j1
+}
+
+src_test() {
+       emake -j1 all-input
+}
+
+src_install() {
+       emake -j1 DESTDIR="${D}" install
+       dodoc README.rst FAQ
+
+       if use emacs; then
+               sed -e "s|(setq load-path (cons (quote 
\"/usr/$(get_libdir)/fricas/emacs\") load-path)) ||" \
+                       -i "${D}"/usr/bin/efricas \
+                       || die "sed efricas failed"
+               elisp-install ${PN} "${D}"/usr/$(get_libdir)/${PN}/emacs/*.el
+               elisp-make-site-file 64${PN}-gentoo.el
+       else
+               rm "${D}"/usr/bin/efricas || die "rm efricas failed"
+       fi
+       rm -r "${D}"/usr/$(get_libdir)/${PN}/emacs || die "rm -r emacs failed"
+}
+
+pkg_postinst() {
+       use emacs && elisp-site-regen
+}
+
+pkg_postrm() {
+       use emacs && elisp-site-regen
+}

Reply via email to