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

EAPI=6

inherit autotools flag-o-matic toolchain-funcs

DEB_P="${PN}_${PV}"
DEB_PR=3.1

DESCRIPTION="Satellite tracking and orbital prediction"
HOMEPAGE="https://www.qsl.net/kd2bd/predict.html"
SRC_URI="mirror://debian/pool/main/${PN:0:1}/${PN}/${DEB_P}.orig.tar.gz
	mirror://debian/pool/main/${PN:0:1}/${PN}/${DEB_P}-${DEB_PR}.diff.gz"

LICENSE="GPL-2"
SLOT="0"
IUSE="doc gtk nls xforms xplanet"
KEYWORDS="amd64 ~ppc ~x86 ~amd64-linux ~x86-linux"

RDEPEND="
	sys-libs/ncurses:0=
	gtk? ( x11-libs/gtk+:2 )
	xforms? ( x11-libs/xforms )
	xplanet? ( x11-misc/xplanet[truetype] )"
DEPEND="
	${RDEPEND}
	virtual/pkgconfig
"

PATCHES=(
	"${FILESDIR}"/${P}-earthtrack.patch
	"${WORKDIR}"/${DEB_P}-${DEB_PR}.diff
)

src_prepare() {
	default
	sed -i -e 's:predict\(.*\)/:predict-2.2.3\1/:g' \
		debian/patches/140*.diff || die
	sed -i -e 's:\(a\|b\)/:predict-2.2.3/:g' \
		debian/patches/180*.diff || die
	eapply debian/patches/.
	# fix some further array out of bounds errors
	sed -i -e "s/satname\[ 26/satname\[ 25/g" \
		clients/gsat-1.1.0/src/db.c || die
	sed -i -e "s/satname\[ 26/satname\[ 25/g" \
		clients/gsat-1.1.0/src/comms.c || die
	sed -i -e "s/output\[20\];/output[21];/" \
		utils/moontracker/moontracker.c || die
	# fix underlinking
	sed -i -e '/AC_OUTPUT/i \
AC_SEARCH_LIBS([cos], [m]) \
AC_SEARCH_LIBS([dlclose], [dl])' \
		-e 's/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/' \
		-e 's/configure.in/configure.ac/' \
		clients/gsat-1.1.0/configure.in || die

	mv clients/gsat-1.1.0/configure.{in,ac} || die

	sed -i \
		-e 's/gcc/$(CC) $(CFLAGS) $(LDFLAGS)/g' \
		-e 's/-o/-lm -o/g' \
		clients/gsat-1.1.0/plugins/Makefile || die

	# fix the hardcoded /usr/lib
	PRED_DIR=/usr/$(get_libdir)/${PN}
	sed -i -e "s:/usr/lib/${PN}:${EPREFIX}/${PRED_DIR}:g" \
		predict.h vocalizer/vocalizer.c || die

	sed -i -e "s:/usr/lib:${EPREFIX}/usr/$(get_libdir):g" \
		clients/gsat-1.1.0/src/globals.h || die

	if use gtk; then
		cd "${S}"/clients/gsat-* || die
		rm config.sub missing || die
		eautoreconf
	fi
}

src_configure() {
	append-cflags -fcommon
	if use gtk; then
		cd "${S}"/clients/gsat-* || die
		econf $(use_enable nls)
	fi
}

src_compile() {
	# predict uses a ncurses based configure script
	# this is what it does if it was bash based ;)

	local COMPILER="$(tc-getCC) ${CFLAGS} ${LDFLAGS}"
	einfo "Compiling predict"
	${COMPILER} predict.c -lm $($(tc-getPKG_CONFIG) --libs ncurses) -lpthread \
		-o predict || die "failed predict"
	einfo "Compiling predict-g1yyh"
	${COMPILER} predict-g1yyh.c -lm $($(tc-getPKG_CONFIG) --libs ncurses) -lpthread -lmenu \
		-o predict-g1yyh || die "failed predict-g1yyh"
	einfo "Compiling vocalizer"
	${COMPILER} vocalizer/vocalizer.c \
		-o vocalizer/vocalizer || die "failed vocalizer"
	local c
	for c in fodtrack geosat moontracker; do
		einfo "Compiling ${c}"
		cd "${S}"/utils/${c}* || die
		${COMPILER} ${c}.c -lm -o ${c} || die "failed ${c}"
	done
	einfo "Compiling kep_reload"
	cd "${S}"/clients/kep_reload
	${COMPILER} kep_reload.c \
		-o kep_reload || die "failed kep_reload"

	if use xplanet; then
		einfo "Compiling earthtrack"
		cd "${S}"/clients/earthtrack || die
		${COMPILER} earthtrack.c \
			-lm -o earthtrack || die "failed earthtrack"
	fi

	if use xforms; then
		einfo "Compiling map"
		cd "${S}"/clients/map || die
		${COMPILER} map.c map_cb.c map_main.c -lforms -lX11 -lm \
			-o map || die "Failed compiling map"
	fi

	if use gtk; then
		einfo "Compiling gsat"
		cd "${S}"/clients/gsat-* || die
		emake
		emake -C plugins
	fi
}

src_install() {
	dobin predict predict-g1yyh "${FILESDIR}"/predict-update
	dodoc CHANGES CREDITS HISTORY README NEWS debian/README.Debian
	doman docs/man/predict.1
	newman debian/predict-g1yyh.man predict-g1yyh.1
	insinto ${PRED_DIR}/default
	doins default/predict.*
	use doc && dodoc docs/pdf/predict.pdf

	cd "${S}"/vocalizer || die
	dobin vocalizer
	dosym  ../../../bin/vocalizer ${PRED_DIR}/vocalizer/vocalizer
	insinto ${PRED_DIR}/vocalizer
	doins *.wav

	cd "${S}"/clients/kep_reload || die
	dobin kep_reload
	newdoc README README.kep_reload
	doman "${S}"/debian/kep_reload.1

	cd "${S}"/utils/fodtrack-0.1 || die
	insinto /etc
	doins fodtrack.conf
	doman fodtrack.conf.5 fodtrack.8
	dobin fodtrack
	newdoc README README.fodtrack

	cd "${S}"/utils/geosat || die
	dobin geosat
	newdoc README README.geosa
	newman "${S}"/debian/geosat.man geosat.1

	cd "${S}"/utils/moontracker || die
	dobin moontracker
	newdoc README README.moontracker
	doman "${S}"/debian/moontracker.1

	if use xplanet; then
		cd "${S}"/clients/earthtrack || die
		ln -s earthtrack earthtrack2 || die
		dobin earthtrack earthtrack2
		newdoc README README.earthtrack
		doman "${S}"/debian/earthtrack.1
	fi

	if use xforms; then
		cd "${S}"/clients/map || die
		newbin map predict-map
		newdoc CHANGES CHANGES.map
		newdoc README README.map
		doman "${S}"/debian/predict-map.1
	fi

	if use gtk; then
		cd "${S}"/clients/gsat-* || die
		exeinto /usr/$(get_libdir)/gsat/plugins
		doexe plugins/radio_{FT736,FT847,ICR10,print,test} plugins/rotor_{print,pictrack}
		dobin src/gsat
		doman "${S}"/debian/gsat.1
		local i
		for i in AUTHORS ChangeLog NEWS README Plugin_API; do
			newdoc ${i} ${i}.gsat
		done
	fi
}

pkg_postinst() {
	einfo "To use the clients the following line will"
	einfo "have to be inserted into /etc/services"
	einfo "predict    1210/udp"
	einfo "The port can be changed to anything"
	einfo "the name predict is what is needed to work"
	einfo "after that is set run 'predict -s'"
	einfo ""
	einfo "To get list of satellites run 'predict-update'"
	einfo "before running predict this script will also update"
	einfo "the list of satellites so they are up to date."
}