#!/bin/sh

## live-build(7) - System Build Scripts
## Copyright (C) 2006-2012 Daniel Baumann <daniel@debian.org>
##
## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
## This is free software, and you are welcome to redistribute it
## under certain conditions; see COPYING for details.


set -e

# Including common functions
( . "${LIVE_BUILD}/scripts/build.sh" > /dev/null 2>&1 || true ) || . /usr/lib/live/build.sh

# Setting static variables
DESCRIPTION="$(Echo 'install local packages into binary')"
HELP=""
USAGE="${PROGRAM} [--force]"

Arguments "${@}"

# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults

Echo_message "Begin installing local package lists..."

# Requiring stage file
Require_stagefile .build/config .build/bootstrap

# Checking stage file
Check_stagefile .build/binary_package-lists

# Checking lock file
Check_lockfile .lock

# Creating lock file
Create_lockfile .lock

#kylin add efi
ARCHITECTURE="$(echo ${LB_ARCHITECTURES} | sed -e 's| |/|g')"
case ${ARCHITECTURE} in
        'arm64'|'amd64'|'mips64el'|'loongarch64')
                ky_chroot_has_efi="$(cat binary/casper/filesystem.manifest | grep grub-efi- | wc -l)"
               if [ "${ky_chroot_has_efi}" = "0" ];then
                       touch .build/chroot_no_efi
               else
                       touch .build/chroot_has_efi
               fi
                ;;
        *)
                touch .build/chroot_no_efi
                ;;
esac
#end kylin efi

if ls config/package-lists/*.list > /dev/null 2>&1 || \
   ls config/package-lists/*.list.binary > /dev/null 2>&1
then
	case "${LB_BUILD_WITH_CHROOT}" in
		true)
			# Restoring cache
			Restore_cache cache/packages.chroot

			# Check depends
			Check_package chroot/usr/bin/apt-ftparchive apt-utils
			Check_package chroot/usr/bin/grep-aptavail dctrl-tools

			# Installing depends
			Install_package
			;;

		false)
			if [ ! -e /usr/bin/apt-ftparchive ]; then
				# apt-utils
				Echo_error "/usr/bin/apt-ftparchive - no such file."
				exit 1
			fi

			if [ ! -e /usr/bin/grep-aptavail ]; then
				# dctrl-tools
				Echo_error "/usr/bin/grep-aptavail - no such file."
				exit 1
			fi
			;;
	esac

	if [ -e "${LIVE_BUILD}/share/bin/Packages" ]
	then
		cp "${LIVE_BUILD}/share/bin/Packages" chroot/bin
	else
		cp /usr/share/live/build/bin/Packages chroot/bin
	fi

	mkdir -p chroot/binary.deb/archives/partial

	case "$LB_STRIP_POOL" in
		true)
			Echo_message "Will not create new dpkg/status"
			;;
		*)
			mv chroot/var/lib/dpkg/status chroot/var/lib/dpkg/status.tmp
			touch chroot/var/lib/dpkg/status
	esac

	for LIST in config/package-lists/*.list \
		    config/package-lists/*.list.binary
	do
		if [ -e "${LIST}" ]
		then
			# Generate package list
			Expand_packagelist "${LIST}" "config/package-lists" > chroot/root/"$(basename ${LIST})"

			# Downloading additional packages
			Chroot chroot "xargs --arg-file=/root/$(basename ${LIST}) apt-get ${APT_OPTIONS} -o Dir::Cache=/binary.deb --download-only install"

			# Remove package list
			rm chroot/root/"$(basename ${LIST})"
		fi
	done

	#kylin add efi
	case ${ARCHITECTURE} in
		'arm64'|'amd64'|'mips64el'|'loongarch64')
			efi_pkg_num="$(ls chroot/binary.deb/archives/grub-efi*.deb | wc -l)"
			if [ "${efi_pkg_num}" = "0" ];then
				touch .build/binary_no_efi
			else
				touch .build/binary_has_efi
			fi
			;;
		*)
			touch .build/binary_no_efi
			;;
	esac
	#end kylin efi

	for FILE in chroot/binary.deb/archives/*.deb
	do
		SOURCE="$(dpkg -f ${FILE} Source | awk '{ print $1 }')"
		SECTION="$(dpkg -f ${FILE} Section | awk '{ print $1 }')"

		if [ -z "${SOURCE}" ]
		then
			SOURCE="$(basename ${FILE} | awk -F_ '{ print $1 }')"
		fi

		case "${SOURCE}" in
			lib?*)
				LETTER="$(echo ${SOURCE} | sed 's|\(....\).*|\1|')"
				;;

			*)
				LETTER="$(echo ${SOURCE} | sed 's|\(.\).*|\1|')"
				;;
		esac

		if echo "${SECTION}" | grep -qs contrib
		then
			if [ "${LB_MODE}" = "ubuntu" ]
			then
				SECTION="multiverse"
			else
				SECTION="contrib"
			fi
		elif echo "${SECTION}" | grep -qs non-free
		then
			if [ "${LB_MODE}" = "ubuntu" ]
			then
				SECTION="multiverse"
			else
				SECTION="non-free"
			fi
		else
			SECTION="main"
		fi

		# Install directory
		mkdir -p binary/pool/${SECTION}/"${LETTER}"/"${SOURCE}"

		# Move files
		mv "${FILE}" binary/pool/${SECTION}/"${LETTER}"/"${SOURCE}"
	done

	cd binary
	# kylin archive standard
        mkdir -p pool/main pool/restricted pool/universe pool/multiverse
        # end

	for SECTION in pool/*
	do
		SECTION="$(basename ${SECTION})"

		if [ "${LB_ARCHITECTURES}" = "amd64" ]
		then
			mkdir -p dists/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-i386
			touch dists/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-i386/Packages
			gzip -9 -c dists/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-i386/Packages > dists/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-i386/Packages.gz

		fi

		mkdir -p dists/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-${LB_ARCHITECTURES}
		apt-ftparchive packages pool/${SECTION} > dists/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-${LB_ARCHITECTURES}/Packages
		gzip -9 -c dists/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-${LB_ARCHITECTURES}/Packages > dists/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-${LB_ARCHITECTURES}/Packages.gz
	done

	cd "${OLDPWD}"

	rm -f chroot/bin/Packages

	rm -rf chroot/binary.deb

	case "$LB_STRIP_POOL" in
		true)
			Echo_message "Will not create new dpkg/status"
			;;
		*)
			mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
			;;
	esac

	case "${LB_BUILD_WITH_CHROOT}" in
		true)
			# Removing depends
			Remove_package

			# Saving cache
			Save_cache cache/packages.chroot
			;;
	esac

	# Creating stage file
	Create_stagefile .build/binary_package-lists
fi
