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

EAPI=7
inherit toolchain-funcs flag-o-matic

MY_P="${PN}${PV//.}"
DESCRIPTION="Info ZIP (encryption support)"
HOMEPAGE="http://www.info-zip.org/"
SRC_URI="mirror://sourceforge/infozip/${MY_P}.zip"

LICENSE="Info-ZIP"
SLOT="0"
KEYWORDS="*"
IUSE="bzip2 crypt natspec unicode"

DEPEND="${RDEPEND}"
RDEPEND="bzip2? ( app-arch/bzip2 )
	natspec? ( dev-libs/libnatspec )"
BDEPEND="app-arch/unzip"

S="${WORKDIR}/${MY_P}"

PATCHES=(
	"${FILESDIR}/${P}"-no-crypt.patch #238398
	"${FILESDIR}/${P}"-pic.patch
	"${FILESDIR}/${P}"-exec-stack.patch #122849
	"${FILESDIR}/${P}"-build.patch #200995
	"${FILESDIR}/${P}"-zipnote-freeze.patch #322047
	"${FILESDIR}/${P}"-format-security.patch #512414
)

src_prepare() {
	default
	use natspec && eapply "${FILESDIR}/${PN}"-3.0-natspec.patch #275244
}

src_configure() {
	append-cppflags \
		-DLARGE_FILE_SUPPORT \
		-DUIDGID_NOT_16BIT \
		-D$(usex bzip2 '' NO)BZIP2_SUPPORT \
		-D$(usex crypt '' NO)CRYPT \
		-D$(usex unicode '' NO)UNICODE_SUPPORT
	# Third arg disables bzip2 logic as we handle it ourselves above.
	sh ./unix/configure "$(tc-getCC)" "-I. -DUNIX ${CFLAGS} ${CPPFLAGS}" "${T}" || die
	if use bzip2 ; then
		sed -i -e "s:LFLAGS2=:&'-lbz2 ':" flags || die
	fi
}

src_compile() {
	emake \
		CPP="$(tc-getCPP)" \
		-f unix/Makefile generic
}

src_install() {
	dobin zip zipnote zipsplit
	doman man/zip{,note,split}.1
	if use crypt ; then
		dobin zipcloak
		doman man/zipcloak.1
	fi
	dodoc BUGS CHANGES README* TODO WHATSNEW WHERE proginfo/*.txt
}
