#!/bin/bash

set -e
shopt -s extglob

SCRIPT=`readlink -fn "$0"`

# Build can't handle spaces in directory names
if [ ! -d "$(dirname "${BUILD_ROOT/ /_}")" ]; then ln -s "$(dirname "${BUILD_ROOT}")" "$(dirname "${BUILD_ROOT/ /_}")"; fi
export BUILT_PRODUCTS_DIR=${BUILT_PRODUCTS_DIR/ /_}
if [ ! -d "$(dirname "${OBJROOT/ /_}")" ]; then ln -s "$(dirname "${OBJROOT}")" "$(dirname "${OBJROOT/ /_}")"; fi
export OBJECT_FILE_DIR=${OBJECT_FILE_DIR/ /_}

if [ "${ACTION}" == "clean" ]; then
	echo Remove "${OBJECT_FILE_DIR}"
	[ -n "${OBJECT_FILE_DIR}" -a -d "${OBJECT_FILE_DIR}" ] && rm -rf "${OBJECT_FILE_DIR}"
else
	# For meson, ninja & nasm
	PATH=$PATH:/opt/homebrew/bin:/usr/local/bin

	echo Build in ${OBJECT_FILE_DIR}
	for ARCH in $ARCHS; do
		mkdir -p "${OBJECT_FILE_DIR}/${ARCH}"
		cd "${OBJECT_FILE_DIR}/${ARCH}"
		if [ -f config.h -a config.h -nt "${SCRIPT}" ]; then
			echo Skipping meson
		else
			rm -f config.h
			if [ $ARCH == arm64 ]; then
				cat > cross.meson <<ARM64
[binaries]
c = ['/usr/bin/cc', '-arch', 'arm64']
pkg-config = 'pkg-config'
strip = '/usr/bin/strip'

[host_machine]
system = 'darwin'
subsystem = 'macos'
kernel = 'xnu'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'
ARM64
			elif [ $ARCH == x86_64 ]; then
				cat > cross.meson <<X86_64
[binaries]
c = ['/usr/bin/cc', '-arch', 'x86_64', '-march=skylake']
nasm = 'nasm'
pkg-config = 'pkg-config'
strip = ['/usr/bin/strip']

[host_machine]
system = 'darwin'
subsystem = 'macos'
kernel = 'xnu'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'
X86_64
			fi
			if [ "${CONFIGURATION}" == "Debug" ]; then
				FLAGS="--buildtype=debug"
			else
				FLAGS="--buildtype=debugoptimized --optimization=3"
			fi
			meson setup --reconfigure "${SRCROOT}/${TARGET_NAME}" ${FLAGS} --cross-file cross.meson -Ddefault_library=both -Dprefix="${BUILT_PRODUCTS_DIR}/${ARCH}" -Dc_args="-fapplication-extension"
		fi
		ninja -j `sysctl -n hw.physicalcpu` install

		# Fix up install name
		DYLIB=$(basename "`otool -DX "${BUILT_PRODUCTS_DIR}/${ARCH}/lib/libdav1d.dylib"`")
		install_name_tool -id "@rpath/${DYLIB}" "${BUILT_PRODUCTS_DIR}/${ARCH}/lib/libdav1d.dylib"
	done

	# Combine into Universal
	echo Installing into ${BUILT_PRODUCTS_DIR}/universal
	mkdir -p "${BUILT_PRODUCTS_DIR}/universal/include"
	cp -pr "${BUILT_PRODUCTS_DIR}/${ARCHS/ */}/include/dav1d" "${BUILT_PRODUCTS_DIR}/universal/include/"

	mkdir -p "${CONFIGURATION_BUILD_DIR}/universal/lib/pkgconfig"
	cp -p "${BUILT_PRODUCTS_DIR}/${ARCHS/ */}/lib/pkgconfig/dav1d.pc" "${BUILT_PRODUCTS_DIR}/universal/lib/pkgconfig/"

	lipo -create "${BUILT_PRODUCTS_DIR}/"+(${ARCHS/ /|})"/lib/libdav1d.a" -output "${BUILT_PRODUCTS_DIR}/universal/lib/libdav1d.a"
	# Install using the dylib's "install name" since that's what other FFmpeg dylibs will look for
	DYLIB=$(basename "`otool -DX "${BUILT_PRODUCTS_DIR}/${ARCHS/ */}/lib/libdav1d.dylib"`")
	lipo -create "${BUILT_PRODUCTS_DIR}/"+(${ARCHS/ /|})"/lib/libdav1d.dylib" -output "${BUILT_PRODUCTS_DIR}/universal/lib/${DYLIB}"
	if [ "${DEBUG_INFORMATION_FORMAT}" == "dwarf-with-dsym" ]; then
		dsymutil "${BUILT_PRODUCTS_DIR}/universal/lib/${DYLIB}" -o "${DWARF_DSYM_FOLDER_PATH}/${DYLIB}${DWARF_DSYM_FILE_NAME}"
		strip -x "${BUILT_PRODUCTS_DIR}/universal/lib/${DYLIB}"
	fi
fi
