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

EAPI=8

inherit flag-o-matic

MY_P="${PN/f/F}-$(ver_rs 4 -)"
MY_PV="R$(ver_cut 1)_$(ver_cut 2)_$(ver_cut 3)"

DESCRIPTION="Relational database offering many ANSI SQL:2003 and some SQL:2008 features"
HOMEPAGE="http://www.firebirdsql.org/"
SRC_URI="https://github.com/FirebirdSQL/${PN}/releases/download/${MY_PV}/${MY_P}.tar.bz2"

LICENSE="IDPL Interbase-1.0"
SLOT="0"

KEYWORDS="~amd64 ~x86"

IUSE="doc examples +server xinetd"

CDEPEND="acct-group/firebird
	acct-user/firebird
	dev-libs/libtommath
	dev-libs/libedit
	dev-libs/icu:="

DEPEND="${CDEPEND}"

RDEPEND="${CDEPEND}
	xinetd? ( virtual/inetd )"

RESTRICT="userpriv"

S="${WORKDIR}/${MY_P}"

check_sed() {
	MSG="sed of $3, required $2 lines modified $1"
	einfo "${MSG}"
	[[ $1 -ge $2 ]] || die "${MSG}"
}

src_prepare() {
	if [[ -e /var/run/${PN}/${PN}.pid ]] ; then
		ewarn
		ewarn "The presence of server connections may prevent isql or gsec"
		ewarn "from establishing an embedded connection. Accordingly,"
		ewarn "creating employee.fdb or security3.fdb could fail."
		ewarn "It is more secure to stop firebird daemon before running emerge."
		ewarn
	fi

	eapply_user

	# Rename references to isql to fbsql
	# sed vs patch for portability and addtional location changes
	check_sed "$(sed -i -e 's:"isql :"fbsql :w /dev/stdout' \
		src/isql/isql.epp | wc -l)" "1" "src/isql/isql.epp" # 1 line
	check_sed "$(sed -i -e 's:isql :fbsql :w /dev/stdout' \
		src/msgs/history2.sql | wc -l)" "4" "src/msgs/history2.sql" # 4 lines
	check_sed "$(sed -i -e 's:--- ISQL:--- FBSQL:w /dev/stdout' \
		-e 's:isql :fbsql :w /dev/stdout' \
		-e 's:ISQL :FBSQL :w /dev/stdout' \
		src/msgs/messages2.sql | wc -l)" "6" "src/msgs/messages2.sql" # 6 lines

	sed -i -e 's|-ggdb ||g' \
			-e 's|-pipe ||g' \
			-e 's|$(COMMON_FLAGS) $(OPTIMIZE_FLAGS)|$(COMMON_FLAGS)|g' \
			builds/posix/prefix.linux* || die

	sed -i -e "s|\$(this)|/usr/$(get_libdir)/firebird/intl|g" \
			builds/install/misc/fbintl.conf
	sed -i -e "s|\$(this)|/usr/$(get_libdir)/firebird/plugins|g" \
			src/plugins/udr_engine/udr_engine.conf

	# Building and using embedded btyacc avoids running eautoreconf
	# eapply "${FILESDIR}"/deps-flags.patch
	# rm -rf "${S}"/extern || die
	# eautoreconf
}

src_configure() {
	filter-flags -fprefetch-loop-arrays

	# Do not use $(get_libdir) in econf
	econf \
		--prefix=/usr/lib/${PN} \
		--with-editline \
		--with-system-editline \
		--with-fbbin=/usr/bin \
		--with-fbsbin=/usr/sbin \
		--with-fbconf=/etc/${PN} \
		--with-fblib=/usr/lib \
		--with-fbinclude=/usr/include \
		--with-fbdoc=/usr/share/doc/${P} \
		--with-fbudf=/usr/lib/${PN}/UDF \
		--with-fbsample=/usr/share/${PN}/examples \
		--with-fbsample-db=/usr/share/${PN}/examples/empbuild \
		--with-fbhelp=/usr/share/${PN}/help \
		--with-fbintl=/usr/lib/${PN}/intl \
		--with-fbmisc=/usr/share/${PN}/misc \
		--with-fbsecure-db=/etc/${PN} \
		--with-fbmsg=/usr/share/${PN}/msg \
		--with-fblog=/var/log/${PN} \
		--with-fbglock=/var/run/${PN} \
		--with-fbplugins=/usr/lib/${PN}/plugins \
		--with-gnu-ld
}

src_install() {
	use doc && dodoc -r doc

	cd "${S}/gen/Release/${PN}" || die

	doheader include/*
	dolib.so lib/*.so*

	# links for backwards compatibility
	insinto /usr/$(get_libdir)
	dosym libfbclient.so /usr/$(get_libdir)/libgds.so
	dosym libfbclient.so /usr/$(get_libdir)/libgds.so.0
	dosym libfbclient.so /usr/$(get_libdir)/libfbclient.so.1

	insinto /usr/share/${PN}/msg
	doins *.msg

	use server || return

	einfo "Renaming isql -> fbsql"
	mv bin/isql bin/fbsql || die "failed to rename isql -> fbsql"

	local bins="fbsql fbsvcmgr fbtracemgr gbak gfix gpre gsec gsplit gstat nbackup qli"
	for bin in ${bins}; do
		dobin bin/${bin}
	done

	dosbin bin/{firebird,fbguard,fb_lock_print}

	insinto /usr/share/${PN}/help
	insopts -m0660 -o firebird -g firebird
	doins help/help.fdb

	exeinto /usr/$(get_libdir)/${PN}/intl
	doexe intl/libfbintl.so
	dosym libfbintl.so /usr/$(get_libdir)/${PN}/intl/fbintl.so
	insinto /usr/$(get_libdir)/${PN}/intl
	insopts -m0644 -o root -g root
	doins intl/fbintl.conf

	# install plugins
	exeinto /usr/$(get_libdir)/${PN}/plugins
	doexe plugins/*.so
	exeinto /usr/$(get_libdir)/${PN}/plugins/udr
	doexe plugins/udr/*.so

	exeinto /usr/$(get_libdir)/${PN}/UDF
	doexe UDF/*.so

	insinto /etc/logrotate.d
	newins "${FILESDIR}/${PN}.logrotate" ${PN}

	# install conf files
	insinto /etc/${PN}/plugins
	doins plugins/udr_engine.conf

	insinto /etc/${PN}
	doins {databases,fbtrace,firebird,plugins}.conf

	# install secutity3.fdb
	insopts -m0660 -o firebird -g firebird
	doins security3.fdb

	if use xinetd; then
		insinto /etc/xinetd.d
		newins "${FILESDIR}/${PN}.xinetd.3" ${PN}
	else
		newinitd "${FILESDIR}/${PN}.init.d" ${PN}
	fi

	if use examples; then
		cd examples
		insinto /usr/share/${PN}/examples
		insopts -m0644 -o root -g root
		doins -r api
		doins -r dbcrypt
		doins -r include
		doins -r interfaces
		doins -r package
		doins -r stat
		doins -r udf
		doins -r udr
		doins CMakeLists.txt
		doins functions.c
		doins README
		insinto /usr/share/${PN}/examples/empbuild
		insopts -m0660 -o firebird -g firebird
		doins empbuild/employee.fdb
	fi

	einfo "Starting with version 3, server mode is set in firebird.conf"
	einfo "Currently set to default : superserver"
	einfo "If you're using UDFs, please remember to move them"
	einfo "to /usr/lib/firebird/UDF"
}