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

EAPI="6"

PYTHON_COMPAT=( python2_7 python3_{4,5,6,7} )
CMAKE_MAKEFILE_GENERATOR="ninja"

inherit flag-o-matic bash-completion-r1 ninja-utils toolchain-funcs cmake-utils python-r1 python-utils-r1

MY_PV="${PV/_p/_r}"
MY_P=${PN}-${MY_PV}

DESCRIPTION="Android platform tools (adb, fastboot, and mkbootimg)"
HOMEPAGE="https://android.googlesource.com/platform/system/core.git/"
# See helper scripts in files/ for creating these tarballs and getting this hash.
BORINGSSL_SHA1="45210dd4e21ace9d28cb76b3f83303fcdd2efcce"
GLIBC_GETTID_PATCH="${P}-fix-build-with-glibc-2.30.patch"
# The ninja file was created by running the ruby script from archlinux by hand and fixing the build vars.
# No point in depending on something large/uncommon like ruby just to generate a ninja file.
SRC_URI="https://git.archlinux.org/svntogit/community.git/snapshot/community-0ffb7b41d599741d100a6a00a4bb20e162cd3f90.tar.xz -> ${MY_P}-arch.tar.xz
	https://github.com/android/platform_system_core/archive/android-${MY_PV}.tar.gz -> ${MY_P}-core.tar.gz
	https://github.com/google/boringssl/archive/${BORINGSSL_SHA1}.tar.gz -> boringssl-${BORINGSSL_SHA1}.tar.gz
	mirror://gentoo/${MY_P}-e2fsprogs.tar.xz https://dev.gentoo.org/~zmedico/dist/${MY_P}-e2fsprogs.tar.xz
	mirror://gentoo/${MY_P}-extras.tar.xz https://dev.gentoo.org/~zmedico/dist/${MY_P}-extras.tar.xz
	mirror://gentoo/${MY_P}-selinux.tar.xz https://dev.gentoo.org/~zmedico/dist/${MY_P}-selinux.tar.xz
	mirror://gentoo/${MY_P}-f2fs-tools.tar.xz https://dev.gentoo.org/~zmedico/dist/${MY_P}-f2fs-tools.tar.xz
	mirror://gentoo/${MY_P}.ninja.xz https://dev.gentoo.org/~zmedico/dist/${MY_P}.ninja.xz
	https://raw.githubusercontent.com/nmeum/android-tools/8a30dba5768304176fd78aaa131242f6b880f828/patches/core/0022-Use-glibc-s-gettid-when-using-glibc-2.30.patch -> ${GLIBC_GETTID_PATCH}"

# The entire source code is Apache-2.0, except for fastboot which is BSD-2.
LICENSE="Apache-2.0 BSD-2"
SLOT="0"
KEYWORDS="*"
IUSE="python"

DEPEND="sys-libs/zlib:=
	dev-libs/libpcre2:=
	dev-libs/openssl:=
	virtual/libusb:1="
RDEPEND="${DEPEND}
	python? ( ${PYTHON_DEPS} )"
DEPEND+="
	dev-lang/go"

S=${WORKDIR}
CMAKE_USE_DIR="${S}/boringssl"

unpack_into() {
	local archive="$1"
	local dir="$2"

	mkdir -p "${dir}"
	pushd "${dir}" >/dev/null || die
	unpack "${archive}"
	if [[ ${dir} != ./* ]] ; then
		mv */* ./ || die
	fi
	popd >/dev/null
}

src_unpack() {
	unpack_into "${MY_P}-arch.tar.xz" arch
	unpack_into "${MY_P}-core.tar.gz" core
	unpack_into "${MY_P}-e2fsprogs.tar.xz" ./e2fsprogs
	unpack_into "${MY_P}-extras.tar.xz" extras
	unpack_into "${MY_P}-f2fs-tools.tar.xz" ./f2fs-tools
	unpack_into "${MY_P}-selinux.tar.xz" ./selinux
	unpack_into boringssl-${BORINGSSL_SHA1}.tar.gz boringssl

	unpack "${MY_P}.ninja.xz"
	mv "${MY_P}.ninja" "build.ninja" || die

	# Avoid depending on gtest just for its prod headers when boringssl bundles it.
	ln -s ../../boringssl/third_party/googletest/include/gtest core/include/ || die
}

src_prepare() {
	sed -e 's:elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i386"):\0\n  set(ARCH "x86")\nelseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i586"):' \
		-i "${S}"/boringssl/CMakeLists.txt || die #668792

	cd "${S}"/core || die
	eapply "${WORKDIR}"/arch/trunk/fix_build_core.patch
	eapply "${FILESDIR}"/android-tools-8.1.0_p1-build.patch
	eapply "${FILESDIR}"/android-tools-9.0.0-vsock.patch
	eapply "${FILESDIR}"/android-tools-9.0.0-homedir.patch
	eapply "${DISTDIR}/${GLIBC_GETTID_PATCH}"

	cd "${S}"/selinux || die
	eapply "${WORKDIR}"/arch/trunk/fix_build_selinux.patch

	cd "${S}"/e2fsprogs || die
	eapply "${WORKDIR}"/arch/trunk/fix_build_e2fsprogs.patch

	cd "${S}"/extras
	sed -e 's|^#include <sys/cdefs.h>$|/*\0*/|' \
		-e 's|^__BEGIN_DECLS$|#ifdef __cplusplus\nextern "C" {\n#endif|' \
		-e 's|^__END_DECLS$|#ifdef __cplusplus\n}\n#endif|' \
		-i ext4_utils/include/ext4_utils/ext4_crypt{,_init_extensions}.h || die #580686

	cd "${S}"/boringssl || die
	eapply "${FILESDIR}"/android-tools-9.0.0-armasm.patch
	# Backport clang fallthru patches to fix newer clang builds.
	# https://boringssl-review.googlesource.com/c/boringssl/+/37244
	# https://boringssl-review.googlesource.com/c/boringssl/+/37247
	eapply "${FILESDIR}"/android-tools-clang-fallthru.patch

	cd "${S}" || die
	default

	sed -E \
		-e "s|^(CC =).*|\\1 $(tc-getCC)|g" \
		-e "s|^(CXX =).*|\\1 $(tc-getCXX)|g" \
		-e "s|^(CFLAGS =).*|\\1 ${CFLAGS}|g" \
		-e "s|^(CPPFLAGS =).*|\\1 ${CPPFLAGS}|g" \
		-e "s|^(CXXFLAGS =).*|\\1 ${CXXFLAGS}|g" \
		-e "s|^(LDFLAGS =).*|\\1 ${LDFLAGS}|g" \
		-e "s|^(PKGVER =).*|\\1 ${MY_PV}|g" \
		-i build.ninja || die

	# The pregenerated ninja file expects the build/ dir.
	BUILD_DIR="${CMAKE_USE_DIR}/build"
	cmake-utils_src_prepare
}

src_configure() {
	append-lfs-flags

	local mycmakeargs=(
		-DCMAKE_SYSTEM_PROCESSOR="${CHOST%%-*}"
	)

	cmake-utils_src_configure
}

src_compile() {
	# We only need a few libs from boringssl.
	cmake-utils_src_compile libcrypto.a libssl.a

	eninja
}

src_install() {
	dobin adb e2fsdroid ext2simg fastboot mke2fs.android
	dodoc core/adb/*.{txt,TXT} core/fastboot/README.md
	use python && python_foreach_impl python_doexe core/mkbootimg/mkbootimg
	newbashcomp arch/trunk/bash_completion.fastboot fastboot
}
