From 6acf130acb8fcd86ec011572d4a061482ea5e9e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Tornar=C3=ADa?= Date: Wed, 5 Jan 2022 16:51:00 -0300 Subject: [PATCH] maxima: fix #34849 and #34861 - patch maxima-sbcl so it uses gmp for arithmetic (closes #34849) also add libgmp to shlib_requires since it won't be detected - remove `nopie=yes` to fix #34861, replace by `nopie_files` - remove `nostrip=yes`, replace by `nostrip_files` - add checks for #34849 and #34861 - run testsuite only for full check (not in CI) - some html and info files are shipped with source: do not rebuild --- .../maxima/patches/maxima-sbcl-with-gmp.patch | 19 +++++++ srcpkgs/maxima/template | 52 ++++++++++++++++--- 2 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 srcpkgs/maxima/patches/maxima-sbcl-with-gmp.patch diff --git a/srcpkgs/maxima/patches/maxima-sbcl-with-gmp.patch b/srcpkgs/maxima/patches/maxima-sbcl-with-gmp.patch new file mode 100644 index 000000000000..074631ea2ba0 --- /dev/null +++ b/srcpkgs/maxima/patches/maxima-sbcl-with-gmp.patch @@ -0,0 +1,19 @@ +Patch maxima initialization for sbcl so it uses gmp for arithmetic + + +--- a/src/init-cl.lisp 2021-05-15 20:20:53.000000000 -0300 ++++ b/src/init-cl.lisp 2022-01-04 17:45:03.838273626 -0300 +@@ -574,8 +574,13 @@ + (delete-file file))))) + *temp-files-list*)) + ++#+sbcl ++(eval-when (:compile-toplevel :load-toplevel :execute) ++ (require 'sb-gmp)) ++ + (defun cl-user::run () + "Run Maxima in its own package." ++ #+sbcl (sb-gmp:install-gmp-funs) + (in-package :maxima) + (initialize-runtime-globals) + (let ((input-stream *standard-input*) diff --git a/srcpkgs/maxima/template b/srcpkgs/maxima/template index 1a4bec0dba18..69af367ca11d 100644 --- a/srcpkgs/maxima/template +++ b/srcpkgs/maxima/template @@ -1,7 +1,7 @@ # Template file for 'maxima' pkgname=maxima version=5.45.1 -revision=2 +revision=3 build_style=gnu-configure configure_args="$(vopt_enable clisp) $(vopt_enable sbcl sbcl-exec) $(vopt_enable ecl)" hostmakedepends="python3 perl emacs texinfo patchelf" @@ -15,8 +15,15 @@ homepage="http://maxima.sourceforge.net" distfiles="${SOURCEFORGE_SITE}/maxima/maxima-${version}.tar.gz" checksum=fe9016276970bef214a1a244348558644514d7fdfaa4fc8b9d0e87afcbb4e7dc -nostrip=yes -nopie=yes +# maxima-sbcl is nopie and should NOT be stripped or it won't work +nostrip_files=/usr/lib/maxima/$version/binary-sbcl/maxima +nopie_files=/usr/lib/maxima/$version/binary-sbcl/maxima + +if [ "$build_option_sbcl" ]; then + # binary-sbcl/maxima uses libgmp but this won't show up in objdump + shlib_requires=libgmp.so.10 +fi + build_options="clisp sbcl ecl" desc_option_clisp="Build with CLISP" desc_option_sbcl="Build with SBCL" @@ -24,6 +31,14 @@ desc_option_ecl="Build with ECL" build_options_default="sbcl ecl" vopt_conflict clisp sbcl +post_configure() { + # do not rebuild these files if they exist + touch -c doc/info/*.html + touch -c doc/info/maxima.info* + touch -c doc/info/maxima_toc.html + touch -c interfaces/xmaxima/doc/xmaxima.html +} + post_build() { if [ "$build_option_ecl" ]; then # everything will go in the same directory, use rpath=$ORIGIN @@ -38,13 +53,34 @@ post_build() { do_check() { if [ "$build_option_ecl" ]; then - echo "Check that maxima.fas works" - ecl --eval "(require 'maxima \"src/binary-ecl/maxima.fas\")" \ - --eval "(quit)" + echo "maxima-ecl: check that maxima.fas works (#34273)" + ecl --eval '(require :maxima "src/binary-ecl/maxima.fas")' \ + --eval '(quit)' + echo PASS + echo "maxima-ecl: check that unlimited heap-size works (#34861)" + ./maxima-local -q -l ecl --batch-string=":lisp \ + (ext:set-limit 'ext:heap-size 0) + showtime : true $ + a : 10^(10^5) $ + b : a^600 $ + c : a^600 $ + " + echo PASS + fi + if [ "$build_option_sbcl" ]; then + echo "maxima-sbcl: check that long arithmetic is fast (#34849)" + timeout -v 30s ./maxima-local -q -l sbcl --batch-string=" + showtime : true $ + a : 10^(10^5) $ + b : a^1000 $ + " + echo PASS fi - # now run the testsuite - make ${makejobs} check + if [ "$XBPS_CHECK_PKGS" = full ]; then + # run the testsuite for all versions enabled + make ${makejobs} check + fi } post_install() {