EAPI=8

inherit desktop flag-o-matic xdg wrapper
inherit cmake

DESCRIPTION="Open Source 2D CAD"
HOMEPAGE="http://www.qcad.org/"
SRC_URI="https://github.com/${PN}/${PN}/archive/v${PV}.tar.gz -> ${PN}-${PV}.tar.gz
         https://github.com/${PN}/${PN}jsapi/archive/v${PV}.tar.gz -> ${PN}jsapi-${PV}.tar.gz
         https://github.com/${PN}/qtjsapi/archive/v${PV}.tar.gz -> qtjsapi-${PV}.tar.gz"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="amd64 x86"

L10N=( de en es fr it ja nl pl pt ru sl sk sv fi hr hu zh_CN cs TW lt )

IUSE=""

for lingua in ${L10N[*]}; do
	IUSE+=" l10n_${lingua}"
done

DEPEND="
	dev-libs/glib
	media-libs/glu
	media-libs/mesa
	dev-qt/qtbase:6=[gui,opengl,sql]
	dev-qt/qttools:6=[assistant]
"
RDEPEND="${DEPEND}"
BDEPEND="dev-util/patchelf"

CMAKE_IN_SOURCE_BUILD=myHovercraftIsFullOfEels
CMAKE_USE_DIR=${WORKDIR}/${PN}

src_prepare() {
	# qcad is split into three repos and hardcodes in the repos the directory names(!) for the other repos
	ln -s ${PN}-${PV} ../${PN}
	ln -s ${PN}jsapi-${PV} ../${PN}jsapi
	ln -s qtjsapi-${PV} ../qtjsapi

	CMAKE_USE_DIR=${WORKDIR}/${PN} cmake_src_prepare
	CMAKE_USE_DIR=${WORKDIR}/qtjsapi cmake_src_prepare
	CMAKE_USE_DIR=${WORKDIR}/${PN}jsapi cmake_src_prepare

	default
}

src_configure() {
	# -Werror=strict-aliasing
	append-flags -fno-strict-aliasing -fPIC
	# 931904
	filter-lto
	
	CMAKE_USE_DIR=${WORKDIR}/${PN} cmake_src_configure
	CMAKE_USE_DIR=${WORKDIR}/qtjsapi cmake_src_configure
	CMAKE_USE_DIR=${WORKDIR}/${PN}jsapi cmake_src_configure
}

src_compile() {
	CMAKE_USE_DIR=${WORKDIR}/${PN} cmake_src_compile
	CMAKE_USE_DIR=${WORKDIR}/qtjsapi cmake_src_compile
	CMAKE_USE_DIR=${WORKDIR}/${PN}jsapi cmake_src_compile
}

src_install() {
	# WARNING: ${BUILD_DIR} is set now to …/qcadjsapi (that was last dir to work with)
	
	# Create Wayland desktop entry
	cp qcad.desktop qcad-wayland.desktop || die
	sed -i 's/Exec=qcad/Exec=qcad -platform xcb/g' qcad-wayland.desktop || die
	sed -i 's/Name=QCAD/Name=QCAD (Wayland)/g' qcad-wayland.desktop || die

	domenu qcad.desktop qcad-wayland.desktop
	doicon "scripts/${PN}_icon.svg"
	doicon --size 256 "scripts/${PN}_icon.png"

	for lingua in "${L10N[@]}"; do
		if ! use "l10n_${lingua}"; then
			find . -type f -name "*_${lingua}.*" -delete || die
		fi
	done

	insinto "/usr/$(get_libdir)/${PN}/"
	doins -r scripts fonts patterns linetypes themes
	insopts -m0755

	if [[ "${CMAKE_BUILD_TYPE}" == Release ]]; then
		doins -r release/*.so
		doins release/qcad-bin
	else
		doins -r debug/*.so
		doins debug/qcad-bin
	fi

	make_wrapper "${PN}" "/usr/$(get_libdir)/${PN}/qcad-bin" "" "/usr/$(get_libdir)/${PN}:/usr/$(get_libdir)/${PN}/plugins"

	doins -r plugins

	doins src/3rdparty/dxflib/libdxflib.so
	doins src/3rdparty/stemmer/libstemmer.so

	patchelf --set-rpath "\$ORIGIN:\$ORIGIN/plugins" "${ED}/usr/$(get_libdir)/${PN}"/{qcad-bin,*.so} || die
	patchelf --set-rpath "\$ORIGIN:\$ORIGIN/.." "${ED}/usr/$(get_libdir)/${PN}/plugins"/*.so || die
	patchelf --set-rpath "\$ORIGIN:\$ORIGIN/../.." "${ED}/usr/$(get_libdir)/${PN}/plugins/designer"/*.so || die

	docinto examples
	dodoc -r examples/*
	docompress -x "/usr/share/doc/${PF}/examples"
}

pkg_postinst() {
	xdg_pkg_postinst
}