#
# 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
sys-apps/systemd
"


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
}
