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

EAPI=6

if [[ ${PV} == 9999 ]]; then
	EGIT_REPO_URI="https://github.com/systemd/systemd.git"
	inherit git-r3
else
	SRC_URI="https://github.com/systemd/systemd/archive/v${PV}/${P}.tar.gz -> systemd-${PV}.tar.gz"
	KEYWORDS="*"
fi

inherit bash-completion-r1 meson multilib-minimal ninja-utils systemd toolchain-funcs udev user

DESCRIPTION="System and service manager for Linux"
HOMEPAGE="https://www.freedesktop.org/wiki/Software/systemd"

LICENSE="GPL-2 LGPL-2.1 public-domain"
SLOT="0/2"
IUSE="-acl -gcrypt -http -lzma +pcre -qrcode -seccomp -selinux +split-usr"

S="$WORKDIR/systemd-${PV}"

MINKV="3.10"

COMMON_DEPEND=">=sys-apps/util-linux-2.30:0=[${MULTILIB_USEDEP}]
	sys-libs/libcap:0=[${MULTILIB_USEDEP}]
	!<sys-libs/glibc-2.16
	acl? ( sys-apps/acl:0= )
	gcrypt? ( >=dev-libs/libgcrypt-1.4.5:0=[${MULTILIB_USEDEP}] )
	http? (
		>=net-libs/libmicrohttpd-0.9.33:0=
	)
	lzma? ( >=app-arch/xz-utils-5.0.5-r1:0=[${MULTILIB_USEDEP}] )
	pcre? ( dev-libs/libpcre2 )
	qrcode? ( media-gfx/qrencode:0= )
	selinux? ( sys-libs/libselinux:0= )"

# baselayout-2.2 has /run
RDEPEND="${COMMON_DEPEND}
	>=sys-apps/baselayout-2.2
	!sys-apps/systemd"

DEPEND="
	>=sys-kernel/linux-headers-${MINKV}
"

# Newer linux-headers needed by ia64, bug #480218
BDEPEND="
	${COMMON_DEPEND}
	app-arch/xz-utils:0
	>=dev-util/meson-0.46
	dev-util/gperf
	>=dev-util/intltool-0.50
	>=sys-apps/coreutils-8.16
	>=sys-kernel/linux-headers-${MINKV}
	virtual/pkgconfig[${MULTILIB_USEDEP}]
"

pkg_setup() {
	:
}

src_unpack() {
	default
	[[ ${PV} != 9999 ]] || git-r3_src_unpack
}

src_prepare() {
	eapply "${FILESDIR}"
	default
}

src_configure() {
	# Prevent conflicts with i686 cross toolchain, bug 559726
	tc-export AR CC NM OBJCOPY RANLIB

	cros_optimize_package_for_speed

	multilib-minimal_src_configure
}

meson_use() {
	usex "$1" true false
}

meson_multilib() {
	if multilib_is_native_abi; then
		echo true
	else
		echo false
	fi
}

meson_multilib_native_use() {
	if multilib_is_native_abi && use "$1"; then
		echo true
	else
		echo false
	fi
}

multilib_src_configure() {
	local myconf=(
		--localstatedir="${EPREFIX}/var"
		-Dbashcompletiondir="$(get_bashcompdir)"
		# make sure we get /bin:/sbin in PATH
		-Dsplit-usr=$(usex split-usr true false)
		# The original gentoo systemd ebuild used the split-usr use flag
		# to control both the rootprefix and the split-usr config
		# options. Chrome OS is a split-usr system, but we want journald
		# to be installed in /usr/.
		-Drootprefix="${EPREFIX}/usr"
		-Defi=false
		-Dima=false
		# Optional components/dependencies
		-Dacl=$(meson_multilib_native_use acl)
		-Dapparmor=false
		-Daudit=false
		-Dlibcryptsetup=false
		-Dlibcurl=false
		-Delfutils=false
		-Dgcrypt=$(meson_use gcrypt)
		-Dgnutls=false
		-Dgnu-efi=false
		-Dmicrohttpd=$(meson_multilib_native_use http)
		-Dlz4=false
		-Dxz=$(meson_use lzma)
		-Dlibiptc=false
		-Dpam=false
		-Dpcre2=$(meson_multilib_native_use pcre)
		-Dpolkit=false
		-Dqrencode=$(meson_multilib_native_use qrcode)
		-Dseccomp=$(meson_multilib_native_use seccomp)
		-Dselinux=$(meson_multilib_native_use selinux)
		-Dadm-group=false
		-Dwheel-group=false
		-Dlibidn2=false
		-Dlibidn=false
	)

	meson_src_configure "${myconf[@]}"
}

multilib_src_compile() {
	eninja
}

multilib_src_install() {
	DESTDIR="${D}" eninja install
	mv ${D}/usr/$(get_libdir)/pkgconfig/{libsystemd,journald}.pc
}
