# Template file for 'maxima'
pkgname=maxima
version=5.47.0
revision=4
build_style=gnu-configure
configure_args="$(vopt_enable clisp) $(vopt_enable sbcl) $(vopt_enable ecl)
 makeinfo_found=true"
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="Gonzalo Tornaría <tornaria@cmat.edu.uy>"
license="GPL-2.0-only"
homepage="http://maxima.sourceforge.net"
changelog="https://sourceforge.net/p/maxima/code/ci/master/tree/changelogs/ChangeLog-${version%.*}.md?format=raw"
distfiles="${SOURCEFORGE_SITE}/maxima/maxima-${version}.tar.gz"
checksum=9104021b24fd53e8c03a983509cb42e937a925e8c0c85c335d7709a14fd40f7a
nocross=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
	# build standalone executable
	configure_args+=" --enable-sbcl-exec"
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="ecl"

# sbcl is only available for these architectures
case "$XBPS_TARGET_MACHINE" in
	i686|x86_64*|armv7l|ppc64le*)
		build_options_default+=" sbcl"
		;;
esac

vopt_conflict clisp sbcl

pre_build() {
	# 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 doc/info/maxima-index.lisp
	touch -c doc/info/maxima-index-html.lisp
	touch -c interfaces/xmaxima/doc/xmaxima.info
	touch -c interfaces/xmaxima/doc/xmaxima.html
}

post_build() {
	# this one needs to be done after building
	touch -c interfaces/emacs/imaxima/imaxima.info
}

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 -f ${DESTDIR}/usr/share/info/dir
}

maxima-src_package() {
	depends="${sourcepkg}-${version}_${revision}"
	short_desc+=" - source files"
	pkg_install() {
		vmove usr/share/maxima/${version}/src
	}
}

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 xmaxima $(vopt_if ecl maxima-ecl)"
