void-packages/srcpkgs/maxima/template
Gonzalo Tornaría 3370c5ebd1 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
2022-01-11 16:55:28 +01:00

147 lines
4.3 KiB
Bash

# Template file for 'maxima'
pkgname=maxima
version=5.45.1
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"
makedepends="$(vopt_if clisp clisp) $(vopt_if sbcl sbcl) $(vopt_if ecl ecl)"
depends="$(vopt_if clisp clisp) rlwrap"
checkdepends="gnuplot"
short_desc="Computer Algebra System"
maintainer="Bosco Garcia <jboscogg@gmail.org>"
license="GPL-2.0-only"
homepage="http://maxima.sourceforge.net"
distfiles="${SOURCEFORGE_SITE}/maxima/maxima-${version}.tar.gz"
checksum=fe9016276970bef214a1a244348558644514d7fdfaa4fc8b9d0e87afcbb4e7dc
# 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"
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
patchelf --remove-rpath src/binary-ecl/libmaxima-ecl.so
patchelf --set-rpath \$ORIGIN \
src/binary-ecl/{maxima,maxima.fas}
patchelf \
--replace-needed binary-ecl/libmaxima-ecl.so libmaxima-ecl.so \
src/binary-ecl/{maxima,maxima.fas}
fi
}
do_check() {
if [ "$build_option_ecl" ]; then
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
if [ "$XBPS_CHECK_PKGS" = full ]; then
# run the testsuite for all versions enabled
make ${makejobs} check
fi
}
post_install() {
vmkdir usr/share/doc
ln -sf ../maxima/${version}/doc ${DESTDIR}/usr/share/doc/maxima
# symlink man pages for rmaxima and xmaxima
ln -s maxima.1 ${DESTDIR}/usr/share/man/man1/rmaxima.1
ln -s maxima.1 ${DESTDIR}/usr/share/man/man1/xmaxima.1
# info files are used for maxima help, and need to be uncompressed
# removing this file prevents compression of info files
rm ${DESTDIR}/usr/share/info/dir
}
maxima-src_package() {
depends="${sourcepkg}-${version}_${revision}"
short_desc+=" - source files"
pkg_install() {
vmove usr/share/maxima/${version}/src
}
}
maxima-emacs_package() {
short_desc+=" - Emacs interface"
depends="${sourcepkg}-${version}_${revision} virtual?emacs"
pkg_install() {
vmove usr/share/emacs
}
}
xmaxima_package() {
short_desc+=" - Tk interface"
depends="${sourcepkg}-${version}_${revision} tk"
pkg_install() {
vmove usr/bin/xmaxima
vmove usr/share/man/man1/xmaxima.1
vmove usr/share/maxima/${version}/xmaxima
vmove usr/share/info/xmaxima.info
vinstall ${FILESDIR}/maxima.desktop 644 usr/share/applications
vmkdir usr/share/pixmaps
ln -sf /usr/share/maxima/${version}/xmaxima/maxima-new.png \
${PKGDESTDIR}/usr/share/pixmaps/maxima
}
}
maxima-ecl_package() {
short_desc+=" - compiled with ECL"
depends="${sourcepkg}-${version}_${revision}"
pkg_install() {
BINARY_ECL=/usr/lib/maxima/${version}/binary-ecl
vmove ${BINARY_ECL}
vinstall src/binary-ecl/libmaxima-ecl.so 755 ${BINARY_ECL}
vinstall src/binary-ecl/maxima.fas 755 ${BINARY_ECL}
# symlink maxima.fas in ECLDIR
ECLDIR=$(ecl -eval "(princ (SI:GET-LIBRARY-PATHNAME))" -eval "(quit)")
vmkdir ${ECLDIR}
ln -sr ${PKGDESTDIR}/${BINARY_ECL}/maxima.fas ${PKGDESTDIR}/${ECLDIR}
}
}
subpackages="maxima-src maxima-emacs xmaxima $(vopt_if ecl maxima-ecl)"