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

EAPI=7

inherit autotools readme.gentoo-r1

DESCRIPTION="AIDE (Advanced Intrusion Detection Environment) is a file integrity checker"
HOMEPAGE="https://aide.github.io/ https://github.com/aide/aide"

COMMIT="7949feff20501724a43929ee7894b005812ffb4f" # 20200614
SRC_URI="https://github.com/aide/aide/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="*"
IUSE="acl audit curl e2fs mhash postgres prelink selinux xattr zlib"

REQUIRED_USE="
	postgres? ( !mhash )
	"

COMMON_DEPEND="
	dev-libs/libpcre
	acl? ( virtual/acl )
	audit? ( sys-process/audit )
	curl? ( net-misc/curl )
	e2fs? ( sys-fs/e2fsprogs )
	!mhash? (
		dev-libs/libgcrypt:0=
		dev-libs/libgpg-error
	)
	mhash? ( app-crypt/mhash )
	postgres? ( dev-db/postgresql:= )
	prelink? ( dev-libs/elfutils )
	selinux? ( sys-libs/libselinux )
	xattr? ( sys-apps/attr )
	zlib? ( sys-libs/zlib )"

RDEPEND="
	${COMMON_DEPEND}
	selinux? ( sec-policy/selinux-aide )"

DEPEND="${COMMON_DEPEND}"

BDEPEND="
	sys-devel/bison
	sys-devel/flex
	virtual/pkgconfig
	prelink? ( sys-devel/prelink )"

HTML_DOCS=( doc/manual.html )

DISABLE_AUTOFORMATTING=1
DOC_CONTENTS="
Example configuration file was installed at '${EPREFIX}/etc/aide/aide.conf'.
Please edit it to meet your needs. Refer to aide.conf(5) manual page
for more information.

A helper script, aideinit, was installed and can be used to make AIDE
management easier. Please run 'aideinit --help' for more information."

PATCHES=(
	"${FILESDIR}/aide-0.16-fix-LIBS-LDFLAGS-mixing.patch"
	"${FILESDIR}/aide-0.16-fix-acl-configure-option.patch"

	# Remove not available gcrypt algorithm 7 DB_HAVAL
	# See: https://sourceforge.net/p/aide/bugs/105/
	"${FILESDIR}/${P}_define_hash_use_gcrypt.patch"
)

S="${WORKDIR}/${PN}-${COMMIT}"

pkg_setup() {
	if use postgres; then
		ewarn "\nWARNING!"
		ewarn "You need to choose one of the postgres versions before building"
		ewarn "\nPlease select a target postgres version/slot using:\n"
		ewarn "    ~# eselect postgresql list"
		ewarn "    ~# eselect postgresql set <version>\n"
	fi
}

src_prepare() {
	default
	sed -i -e 's| -Werror||g' configure.ac || die
	echo "m4_define([AIDE_VERSION], [${PV}])" > version.m4 || die
	eautoreconf
}

src_configure() {
	local myeconfargs=(
		--sysconfdir="${EPREFIX}/etc/${PN}"
		--with-confighmactype="sha512"		# Override default weak MD5 hash.
		--with-dbhmackey="sha512"			# Override default weak MD5 hash.
		# Disable broken l10n support: https://sourceforge.net/p/aide/bugs/98/
		# This doesn't affect anything because there are no localizations yet.
		--without-locale
		--disable-static
		$(use_with zlib)
		$(use_with curl)
		$(use_with acl posix-acl)
		$(use_with selinux)
		$(use_with prelink prelink "${EPREFIX}/usr/sbin/prelink")
		$(use_with xattr)
		$(use_with e2fs e2fsattrs)
		$(use_with mhash mhash)
		$(use_with !mhash gcrypt)
		$(use_with postgres psql)
		$(use_with audit)
	)

	econf "${myeconfargs[@]}"
}

src_install() {
	default
	readme.gentoo_create_doc

	insinto /etc/${PN}
	insopts -m0600
	newins "${FILESDIR}"/aide.conf-r1 aide.conf

	dosbin "${FILESDIR}"/aideinit
	dodoc -r contrib/ "${FILESDIR}"/aide.cron

	keepdir /var/{lib,log}/${PN}
}

pkg_postinst() {
	readme.gentoo_print_elog

	if use postgres; then
		elog "\nDue to a bad assumption by aide, you must issue the following"
		elog "command after the database initialization (aide --init ...):"
		elog '\n    ~# psql -c "update pg_index set indisunique=false from pg_class \\ '
		elog "          where pg_class.relname='TABLE_pkey' and \ "
		elog '          pg_class.oid=pg_index.indexrelid" -h HOSTNAME -p PORT DBASE USER'
		elog "\nwhere TABLE, HOSTNAME, PORT, DBASE, and USER are the same as"
		elog "in your aide.conf.\n"
	fi
}
