# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit elisp git-r3 git-extras

DESCRIPTION="SLIME, the Superior Lisp Interaction Mode (Extended)"
HOMEPAGE="http://common-lisp.net/project/slime/"
# EGIT_REPO_URI="https://github.com/slime/slime.git"
# EGIT_BRANCH="master"
EGIT_REPO_URI="https://github.com/akater/slime.git"
EGIT_BRANCH="master"
EGIT_CLONE_TYPE="mirror"

LICENSE="GPL-2 xref? ( xref.lisp )"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="doc company +system-cl-lib system-macrostep xref"
RESTRICT=test # tests fail to contact sbcl

RDEPEND="virtual/commonlisp
	dev-lisp/asdf
	system-macrostep? ( >=app-emacs/macrostep-0.9 )"
BDEPEND="${RDEPEND}
	>=sys-apps/texinfo-5.1
	doc? ( virtual/texi2dvi )"
PDEPEND="company? ( app-emacs/slime-company )"
# Suggested variable, may be in future eapi
# SDEPEND="company? ( app-emacs/slime-company )"

CLPACKAGE=swank
CLSYSTEMS=swank
SITEFILE=70${PN}-gentoo.el

src_prepare() {
	git branch work
	git switch work
	git-merge modern-symbols
	git-merge no-obsolete-functions
	git-merge main-fixes
	git-merge slime-asdf-fixes
	git-merge grab-multiple-outputs

	# bundled cl-lib is likely only needed for emacs 23
	if use system-cl-lib ; then
		rm lib/cl-lib.el
		eapply "${FILESDIR}/${PN}"-2.30-system-cl-lib.patch
	else
		# here, we better emit a warning
		# if eselect emacs show | grep emacs- | sed "s/ *emacs-//"
		# is 23 or older
		eapply "${FILESDIR}/${PN}"-2.30-no-system-cl-lib.patch
	fi

	default
	# Remove xref.lisp (which is non-free) unless USE flag is set
	use xref || rm -f xref.lisp

	eapply "${FILESDIR}/${PN}"-2.25-move-one-defalias.patch

	if use system-macrostep ; then
		rm lib/macrostep.el
		eapply "${FILESDIR}/${PN}"-2.25-system-macrostep.patch
	else
		eapply "${FILESDIR}/${PN}"-2.25-no-system-macrostep.patch
	fi
}

src_compile() {
	elisp-compile *.el
	BYTECOMPFLAGS="${BYTECOMPFLAGS} -L contrib -l slime" \
		elisp-compile contrib/*.el lib/*.el

	emake -C doc slime.info
	if use doc ; then
		VARTEXFONTS="${T}"/fonts \
			emake -C doc all
	fi
}

src_install() {
	# Install core
	elisp-install ${PN} *.{el,elc,lisp}

	# Install contribs
	elisp-install ${PN}/contrib/ contrib/*.{el,elc,lisp,scm,goo}

	# Install lib
	elisp-install ${PN}/lib/ lib/*.{el,elc}

	# Install swank
	elisp-install ${PN}/swank/ swank/*.lisp

	elisp-site-file-install "${FILESDIR}"/${SITEFILE}
	# Install docs
	dodoc README.md CONTRIBUTING.md NEWS PROBLEMS
	newdoc contrib/README.md README-contrib.md
	doinfo doc/slime.info
	use doc && dodoc doc/*.pdf

	# Bug #656760
	touch "${ED}${SITELISP}/${PN}/lib/.nosearch" || die
}