# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI="5"

inherit eutils toolchain-funcs

DEB_VER="3"

DESCRIPTION="Tool for creating compressed filesystem type squashfs"
HOMEPAGE="http://squashfs.sourceforge.net"
SRC_URI="mirror://sourceforge/squashfs/squashfs${PV}.tar.gz
	mirror://debian/pool/main/${PN:0:1}/${PN}/${PN}_${PV}-${DEB_VER}.debian.tar.xz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="*"
IUSE="lz4 lzma lzo selinux xattr +xz"
REQUIRED_USE="selinux? ( xattr )"

RDEPEND="
	sys-libs/zlib
	!xz? ( !lzo? ( sys-libs/zlib ) )
	lz4? ( app-arch/lz4 )
	lzma? ( app-arch/xz-utils )
	lzo? ( dev-libs/lzo )
	xattr? (
		selinux? ( sys-libs/libselinux )
		sys-apps/attr
	)
	xz? ( app-arch/xz-utils )
"
DEPEND="${RDEPEND}"

S="${WORKDIR}/squashfs${PV}/${PN}"

src_prepare() {
	epatch "${WORKDIR}"/debian/patches/*.patch
	epatch "${FILESDIR}"/${P}-sysmacros.patch
	epatch "${FILESDIR}"/${P}-aligned-data.patch
	epatch "${FILESDIR}"/${P}-2gb.patch
	epatch "${FILESDIR}"/${P}-local-cve-fix.patch
	epatch "${FILESDIR}"/${P}-mem-overflow.patch
	epatch "${FILESDIR}"/${P}-xattrs.patch
	epatch "${FILESDIR}"/${P}-file-map.patch
	epatch "${FILESDIR}"/${P}-4k-align.patch
	epatch "${FILESDIR}"/${P}-selinux.patch
	epatch "${FILESDIR}"/${P}-fix-inline.patch
	epatch "${FILESDIR}"/${P}-rare-race-in-frag-wait.patch
	epatch "${FILESDIR}"/${P}-root-mode.patch
}

use10() { usex $1 1 0 ; }

src_configure() {
	# set up make command line variables in EMAKE_SQUASHFS_CONF
	EMAKE_SQUASHFS_CONF=(
		LZMA_XZ_SUPPORT=$(use10 lzma)
		LZO_SUPPORT=$(use10 lzo)
		LZ4_SUPPORT=$(use10 lz4)
		SELINUX_SUPPORT=$(use10 selinux)
		XATTR_SUPPORT=$(use10 xattr)
		XZ_SUPPORT=$(use10 xz)
	)

	tc-export CC
}

src_compile() {
	emake "${EMAKE_SQUASHFS_CONF[@]}"
}

src_install() {
	dobin mksquashfs unsquashfs
	cd ..
	dodoc CHANGES PERFORMANCE.README pseudo-file.example README* OLD-READMEs/*
	doman "${WORKDIR}"/debian/manpages/*.[0-9]
}
