#
# Copyright (C) 2023 Jeffery To
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

python3_mk_path:=$(dir $(lastword $(MAKEFILE_LIST)))
include $(python3_mk_path)python3-host.mk

PYTHON3_HOST_BUILD?=1

PYTHON3_HOST_BUILD_CONFIG_SETTINGS?=
PYTHON3_HOST_BUILD_VARS?=
PYTHON3_HOST_BUILD_ARGS?=
PYTHON3_HOST_BUILD_PATH?=

PYTHON3_HOST_INSTALL_VARS?=

PYTHON3_HOST_WHEEL_NAME?=$(subst -,_,$(if $(PYPI_SOURCE_NAME),$(PYPI_SOURCE_NAME),$(PKG_NAME)))
PYTHON3_HOST_WHEEL_VERSION?=$(PKG_VERSION)

PYTHON3_HOST_BUILD_DIR?=$(HOST_BUILD_DIR)/$(PYTHON3_HOST_BUILD_PATH)


PYTHON3_HOST_DIR_NAME:=$(lastword $(subst /,$(space),$(CURDIR)))
PYTHON3_HOST_STAGING_DIR:=$(TMP_DIR)/host-stage-$(PYTHON3_HOST_DIR_NAME)
PYTHON3_HOST_STAGING_FILES_LIST_DIR:=$(HOST_BUILD_PREFIX)/stamp
PYTHON3_HOST_STAGING_FILES_LIST:=$(PYTHON3_HOST_STAGING_FILES_LIST_DIR)/$(PYTHON3_HOST_DIR_NAME).list

define Py3Host/Compile/Bootstrap
	$(call HostPython3/Run, \
		$(HOST_BUILD_DIR), \
		-m flit_core.wheel \
			--outdir "$(PYTHON3_HOST_BUILD_DIR)"/openwrt-build \
			"$(PYTHON3_HOST_BUILD_DIR)" \
	)
endef

define Py3Host/Compile
	$(call HostPython3/Run, \
		$(HOST_BUILD_DIR), \
		-m build \
			--no-isolation \
			--outdir "$(PYTHON3_HOST_BUILD_DIR)"/openwrt-build \
			--wheel \
			$(foreach setting,$(PYTHON3_HOST_BUILD_CONFIG_SETTINGS),--config-setting=$(setting)) \
			$(PYTHON3_HOST_BUILD_ARGS) \
			"$(PYTHON3_HOST_BUILD_DIR)" \
			, \
		$(PYTHON3_HOST_BUILD_VARS) \
	)
endef

define Py3Host/Install/Installer
	$(call HostPython3/Run, \
		$(HOST_BUILD_DIR), \
		-m installer \
			--overwrite-existing \
			--prefix "$(1)" \
			"$(PYTHON3_HOST_BUILD_DIR)"/openwrt-build/$(PYTHON3_HOST_WHEEL_NAME)-$(PYTHON3_HOST_WHEEL_VERSION)-*.whl \
			, \
		$(PYTHON3_HOST_INSTALL_VARS) \
	)
endef

define Py3Host/Install
	rm -rf "$(PYTHON3_HOST_STAGING_DIR)"
	mkdir -p "$(PYTHON3_HOST_STAGING_DIR)" "$(PYTHON3_HOST_STAGING_FILES_LIST_DIR)"

	$(call Py3Host/Install/Installer,$(PYTHON3_HOST_STAGING_DIR))

	$(call Py3Host/Uninstall,$(1))

	cd "$(PYTHON3_HOST_STAGING_DIR)" && find ./ > "$(PYTHON3_HOST_STAGING_DIR).files"

	$(call locked, \
		mv "$(PYTHON3_HOST_STAGING_DIR).files" "$(PYTHON3_HOST_STAGING_FILES_LIST)" && \
		$(CP) "$(PYTHON3_HOST_STAGING_DIR)"/* "$(1)/", \
		host-staging-dir \
	)

	rm -rf "$(PYTHON3_HOST_STAGING_DIR)"
endef

define Py3Host/Uninstall
	if [ -f "$(PYTHON3_HOST_STAGING_FILES_LIST)" ]; then \
		"$(SCRIPT_DIR)/clean-package.sh" \
			"$(PYTHON3_HOST_STAGING_FILES_LIST)" \
			"$(1)" ; \
		rm -f "$(PYTHON3_HOST_STAGING_FILES_LIST)" ; \
	fi
endef

ifeq ($(strip $(PYTHON3_HOST_BUILD)),1)
  Host/Compile=$(Py3Host/Compile)
  Host/Install=$(Py3Host/Install)
  Host/Uninstall=$(call Py3Host/Uninstall,$(HOST_BUILD_PREFIX))
endif
