# Template file for 'x265'
pkgname=x265
version=4.2
revision=1
build_wrksrc=source
build_style=cmake
configure_args="-DENABLE_PIC=1 -DEXTRA_LINK_FLAGS='-L.'
 -DEXTRA_LIB='x265_main10.a;x265_main12.a' -DLINKED_10BIT=TRUE -DLINKED_12BIT=TRUE"
short_desc="Open Source H.265/HEVC video encoder"
maintainer="Orphaned <orphan@voidlinux.org>"
license="GPL-2.0-or-later"
homepage="http://x265.org/"
changelog="https://raw.githubusercontent.com/Multicorewareinc/x265/refs/heads/master/doc/reST/releasenotes.rst"
distfiles="https://github.com/Multicorewareinc/x265/releases/download/${version}/x265_${version}.tar.gz"
checksum=40b1ea0453e0309f0eba934e0ddf533f8f6295966679e8894e8f1c1c8d5e1210

build_options="altivec assembly"

desc_option_altivec="Enable AltiVec support on ppc64 (POWER8 and higher only)"
desc_option_assembly="Enable assembly support on x86/ARM"

case "$XBPS_TARGET_MACHINE" in
	ppc64le*) build_options_default="altivec" ;;
	# on ARM, enabling it currently fails with undefined reference to
	# x265::setupAssemblyPrimitives(x265::EncoderPrimitives&, int)
	x86_64* | i686*) build_options_default="assembly" ;;
	*) ;;
esac

if [ "$build_option_assembly" ]; then
	case "$XBPS_TARGET_MACHINE" in
	x86_64* | i686*)
		# see https://bitbucket.org/multicoreware/x265_git/issues/559
		configure_args+=" -DCMAKE_ASM_NASM_FLAGS=-w-macro-params-legacy"
		hostmakedepends+=" nasm"
		;;
	*) ;;
	esac
fi

case "$XBPS_TARGET_MACHINE" in
ppc64*)
	# altivec does not build without power8 being enabled
	configure_args+=" -DENABLE_ALTIVEC=$(vopt_if altivec ON OFF)
		 -DCPU_POWER8=$(vopt_if altivec ON OFF)"
	;;
*) configure_args+=" -DENABLE_ASSEMBLY=$(vopt_if assembly ON OFF)" ;;
esac

pre_configure() {
	if [ "$CROSS_BUILD" ]; then
		vsed -i CMakeLists.txt -e "s; -mcpu=native;;"
	fi
	# PATH="/usr/libexec/chroot-git:$PATH"
}

post_configure() {
	# We need to build the library multiple times in order to support multiple bit depths
	# The libraries are linked together using -DDEXTRA_LIB=...

	configure_args="${configure_args/-DEXTRA_LIB=.*/}"
	configure_args="${configure_args/-DLINKED_10BIT=.*/}"
	configure_args="${configure_args/-DLINKED_12BIT=.*/}"

	# source/common/x86/intrapred16.asm:20642: error: invalid combination of opcode and operands
	case "$XBPS_TARGET_MACHINE" in
		i686*) configure_args="${configure_args/-DENABLE_ASSEMBLY=.*/} -DENABLE_ASSEMBLY=OFF" ;;
		*) ;;
	esac

	(
		cmake_builddir="build-10" \
		configure_args="${configure_args} -DHIGH_BIT_DEPTH=TRUE -DENABLE_CLI=FALSE -DEXPORT_C_API=FALSE -DENABLE_SHARED=FALSE" \
		do_configure
	)

	(
		cmake_builddir="build-12" \
		configure_args="${configure_args} -DHIGH_BIT_DEPTH=TRUE -DMAIN12=TRUE -DENABLE_CLI=FALSE -DEXPORT_C_API=FALSE -DENABLE_SHARED=FALSE" \
		do_configure
	)
}

pre_build() {
	(
		cd build-10
		export NINJA_STATUS="[1/3][%f/%t] "
		ninja ${makejobs} ${make_build_args} ${make_build_target}
	)

	(
		cd build-12
		export NINJA_STATUS="[2/3][%f/%t] "
		ninja ${makejobs} ${make_build_args} ${make_build_target}
	)

	ln -sf ../build-10/libx265.a build/libx265_main10.a
	ln -sf ../build-12/libx265.a build/libx265_main12.a
}

x265-devel_package() {
	depends="${sourcepkg}>=${version}_${revision}"
	short_desc+=" - development files"
	pkg_install() {
		vmove usr/include
		vmove usr/lib/pkgconfig
		vmove "usr/lib/*.so"
		vmove "usr/lib/*.a"
	}
}
