#
# Copyright 2020 Google LLC
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# version 2 as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
EAPI=7
inherit cros-debug toolchain-funcs

DESCRIPTION="Backend-agnostic network configuration in YAML"

HOMEPAGE="https://netplan.io/"

SRC_URI="https://github.com/CanonicalLtd/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="GPL-3"

SLOT="0"

KEYWORDS="*"

IUSE="systemd"
REQUIRED_USE="systemd"

DEPEND=">=dev-libs/glib-2.58.3-r5
>=dev-libs/libyaml-0.2.2
"


RDEPEND=">=dev-python/netifaces-0.10.9
>=dev-libs/libyaml-0.2.2
>=dev-python/pyyaml-3.13[libyaml(+)]"

src_prepare() {

	# Adding this patch so that makefile accepts custom pkg-config
	eapply "${FILESDIR}/netplan-0.100-modify-makefile-to-accept-custom-pkg-config.patch"

	sed -i -e "s:\$(DOCDIR)/netplan:\$(DOCDIR)/${PF}:" Makefile || die

	# baselayout-1 compat
	if has_version ">=sys-apps/baselayout-2.0.0"; then
		sed -i -e 's:sbin/wpa_supplicant:usr/sbin/wpa_supplicant:' src/networkd.c || die
	fi

	eapply_user
}

src_compile() {
	emake clean
	emake DESTDIR="${D}" LIBDIR="\${PREFIX}/$(get_libdir)" HOSTPKGCONFIG="$(tc-getPKG_CONFIG)" CC="$(tc-getCC)" CFLAGS="${CFLAGS} -Wno-unused-variable"
}

src_install() {
	if [[ -f Makefile ]] || [[ -f GNUmakefile ]] || [[ -f makefile ]] ; then
		emake DESTDIR="${D}" LIBDIR="\${PREFIX}/$(get_libdir)" HOSTPKGCONFIG="$(tc-getPKG_CONFIG)" CC="$(tc-getCC)" CFLAGS="${CFLAGS} -Wno-unused-variable" install
	fi
	einstalldocs
}
