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

EAPI=7

inherit toolchain-funcs

# Snapshot to fix build failure with >= bison 3.7
# bug #735572
MY_COMMIT="4973feb538b5b98b9d8ac2f8f474202f6d73de78"
DESCRIPTION="An implementation of the Optimized Link State Routing protocol"
HOMEPAGE="http://www.olsr.org/"
SRC_URI="https://github.com/OLSR/olsrd/archive/${MY_COMMIT}.tar.gz -> ${P}.tar.gz"
#SRC_URI="https://github.com/OLSR/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/${PN}-${MY_COMMIT}"

LICENSE="BSD LGPL-2.1"
SLOT="0"
KEYWORDS="amd64 ~x86"
IUSE="gtk pud"

RDEPEND="gtk? (
		dev-libs/glib:2
		x11-libs/gdk-pixbuf:2
		x11-libs/gtk+:2
	)
	pud? ( sci-geosciences/gpsd )"
DEPEND="${RDEPEND}
	x11-base/xorg-proto"
BDEPEND="app-alternatives/yacc
	app-alternatives/lex
	virtual/pkgconfig"

PATCHES=(
	"${FILESDIR}"/${PN}-0.9.0.2-gtk.patch
	"${FILESDIR}"/${PN}-0.9.8-clang16-buildfix.patch
)

src_prepare() {
	default

	# fix parallel make
	# respect AR
	# verbose build
	# fix default prefix, bug #453440
	sed -i \
		-e '/@echo "\[/d' \
		-e 's|$(MAKECMD)|$(MAKE)|g' \
		-e 's|@$(CC)|$(CC)|g' \
		-e 's|@ar |$(AR) |g' \
		-e '/^prefix/s:/usr/local:/usr:' \
		$( find -name 'Makefile*' ) || die

	# respect LDFLAGS
	sed -i \
		-e 's|$(CC)|& $(OLSRD_LDFLAGS)|g' \
		lib/pud/nmealib/Makefile lib/pud/wireformat/Makefile || die
}

src_configure() {
	if ! use pud; then
		sed -i -e '/^SUBDIRS/ s|pud||g' Makefile || die
	fi
}

src_compile() {
	tc-export PKG_CONFIG

	emake \
		CC="$(tc-getCC)" \
		LIBDIR="/usr/$(get_libdir)/${PN}" \
		OLSRD_LDFLAGS="${LDFLAGS}" \
		OS=linux \
		VERBOSE=1 \
		build_all

	if use gtk; then
		emake -C gui/linux-gtk LIBDIR="/usr/$(get_libdir)/${PN}" CC="$(tc-getCC)"
	fi
}

src_install() {
	# See bug #715392 re LDCONFIG
	emake \
		DESTDIR="${D}" \
		DOCDIR_OLSRD="${D}/usr/share/doc/${PF}" \
		LIBDIR="${D}/usr/$(get_libdir)/${PN}" \
		OS=linux \
		STRIP=true \
		LDCONFIG=true \
		install_all

	if use gtk; then
		emake -C gui/linux-gtk \
			DESTDIR="${D}" \
			LIBDIR="${D}/usr/$(get_libdir)/${PN}" \
			install
	fi

	doinitd "${FILESDIR}"/${PN}

	gzip -d \
		"${ED}"/usr/share/man/man5/olsrd.conf.5.gz \
		"${ED}"/usr/share/man/man8/olsrd.8.gz \
		|| die

	dodoc CHANGELOG \
		valgrind-howto.txt files/olsrd.conf.default.rfc \
		files/olsrd.conf.default.lq \
		lib/arprefresh/README_ARPREFRESH \
		lib/bmf/README_BMF \
		lib/dot_draw/README_DOT_DRAW \
		lib/dyn_gw/README_DYN_GW \
		lib/dyn_gw_plain/README_DYN_GW_PLAIN \
		lib/httpinfo/README_HTTPINFO \
		lib/mini/README_MINI \
		lib/nameservice/README_NAMESERVICE \
		lib/pgraph/README_PGRAPH \
		lib/quagga/README_QUAGGA \
		lib/secure/README_SECURE \
		lib/txtinfo/README_TXTINFO \
		lib/watchdog/README_WATCHDOG
}