#!/bin/bash

# Make sure that all systems have the same sort order and date format
export LC_ALL=C

# change directory to script location
cd "$(dirname $0)"

SCRIPT=$(basename $0)
HEADER="# Autogenerated by ${SCRIPT}, DO NOT EDIT."

KF6_RELEASES=( 6.29 6.30 )
KF6_RELEASE=${KF6_RELEASE:-6.29}

PLASMA_RELEASES=( 6.6 6.7 6.8 )
PLASMA_RELEASE=${PLASMA_RELEASE:-6.6}

GEAR_RELEASES=( 26.04 26.08 )
GEAR_RELEASE=${GEAR_RELEASE:-26.04}

# regenerate keywords
pushd ../package.accept_keywords/ > /dev/null
if [[ -n ${KF6_RELEASES} ]]; then
	for release in "${KF6_RELEASES[@]}"; do
		if [[ -d ".kde-frameworks-${release}" ]]; then
			echo -e "${HEADER}" > "kde-frameworks-${release}.keywords"
			cat ".kde-frameworks-${release}/"* | grep -P -v '^>=kde-frameworks/(?!kf-env)' | \
				sed -e '/^~.*[.-]9999\:[0-9]*$/s/$/ **/' -e '/^@/d' >> "kde-frameworks-${release}.keywords"
		fi
	done
fi

for release in "${PLASMA_RELEASES[@]}"; do
	echo -e "${HEADER}" > "kde-plasma-${release}.keywords"
	if [[ -d ".kde-plasma-${release}" ]]; then
		cat ".kde-plasma-${release}/"* | sed '/^~.*[.-]9999$/s/$/ **/' >> "kde-plasma-${release}.keywords"
	fi
done

# ... and for completely unkeyworded packages, add "**"
# for plasma, we just want the latest release, as there won't be a branch
# for the older version (nor ebuilds for live)
for release in "${PLASMA_RELEASES[-1]}"; do
	if [[ -d ".kde-plasma-${release}" ]]; then
		rm -rf ".kde-plasma-${release}.49.9999"
		mkdir -p ".kde-plasma-${release}.49.9999"
		echo -e "${HEADER}" > "kde-plasma-${release}.49.9999.keywords"
		for file in ".kde-plasma-${release}"/*; do
			newfile=".kde-plasma-${release}.49.9999"/$(basename "${file}")
			sed -e "/^<[a-z0-9-]*\/.*\.50$/{s/\.50/.49.9999/;s/^</~/};/^~.*[.-]9999$/s/$/ **/" \
				-e "/^@/d" "${file}" > "${newfile}"
			# echo "${newfile}"
		done
		cat ".kde-plasma-${release}.49.9999"/* >> "kde-plasma-${release}.49.9999.keywords"
	fi
done

for release in "${GEAR_RELEASES[@]}"; do
	echo -e "${HEADER}" > "kde-gear-${release}.keywords"
	if [[ -d ".kde-gear-${release}" ]]; then
		cat ".kde-gear-${release}/"* | \
			sed -e '/^~.*[.-]9999$/s/$/ **/' -e '/^@/d' >> "kde-gear-${release}.keywords"
	fi
done

# ... and for completely unkeyworded packages, add "**"
for release in "${GEAR_RELEASES[@]}"; do
	if [[ -d ".kde-gear-${release}" ]]; then
		rm -rf ".kde-gear-${release}.49.9999"
		mkdir -p ".kde-gear-${release}.49.9999"
		echo -e "${HEADER}" > "kde-gear-${release}.49.9999.keywords"
		for file in ".kde-gear-${release}"/*; do
			newfile=".kde-gear-${release}.49.9999"/$(basename "${file}")
			sed -e "/^<[a-z0-9-]*\/.*\.50$/{s/\.50/.49.9999/;s/^</~/};/^~.*[.-]9999$/s/$/ **/" \
				-e "/^@/d" "${file}" > "${newfile}"
			# echo "${newfile}"
		done
		cat ".kde-gear-${release}.49.9999"/* >> "kde-gear-${release}.49.9999.keywords"
	fi
done

if [[ -d .kde-frameworks-live.base ]]; then
	rm -rf .kde-frameworks-live
	mkdir -p .kde-frameworks-live
	echo -e "${HEADER}" > kde-frameworks-live.keywords
	for file in .kde-frameworks-live.base/*; do
		newfile=.kde-frameworks-live/$(basename "${file}")
		sed -e '/^~.*[.-]9999\:[0-9]*$/s/$/ **/'  -e '/^@/d' "${file}" > "${newfile}"
	done
	cat .kde-frameworks-live/* >> kde-frameworks-live.keywords
fi

if [[ -d .kde-plasma-live.base ]]; then
	rm -rf .kde-plasma-live
	mkdir -p .kde-plasma-live
	echo -e "${HEADER}" > kde-plasma-live.keywords
	for file in .kde-plasma-live.base/*; do
		newfile=.kde-plasma-live/$(basename "${file}")
		sed '/^~.*[.-]9999$/s/$/ **/' "${file}" > "${newfile}"
	done
	cat .kde-plasma-live/* >> kde-plasma-live.keywords
fi

if [[ -d .kde-gear-live.base ]]; then
	rm -rf .kde-gear-live
	mkdir -p .kde-gear-live
	echo -e "${HEADER}" > kde-gear-live.keywords
	for file in .kde-gear-live.base/*; do
		newfile=.kde-gear-live/$(basename "${file}")
		sed -e '/^~.*[.-]9999$/s/$/ **/' -e '/^@/d' "${file}" > "${newfile}"
	done
	cat .kde-gear-live/* >> kde-gear-live.keywords
fi
popd > /dev/null

# regenerate unmask entries (base for package mask)
pushd ../package.unmask/ > /dev/null
for release in "${KF6_RELEASES[@]}" live; do
	if [[ -d ".kde-frameworks-${release}" ]]; then
		echo -e "${HEADER}" > "kde-frameworks-${release}"
		cat ".kde-frameworks-${release}/"* | \
			grep -P -v '^>=kde-frameworks/(?!kf-env)' >> "kde-frameworks-${release}"
		sed -i "kde-frameworks-${release}" -e "/^@/d"
	fi
done

for release in "${PLASMA_RELEASES[@]}" live; do
	echo -e "${HEADER}" > "kde-plasma-${release}"
	if [[ -d ".kde-plasma-${release}" ]]; then
		cat ".kde-plasma-${release}/"* >> "kde-plasma-${release}"
	fi
done

for release in "${GEAR_RELEASES[@]}" live; do
	echo -e "${HEADER}" > "kde-gear-${release}"
	if [[ -d ".kde-gear-${release}" ]]; then
		cat ".kde-gear-${release}/"* >> "kde-gear-${release}"
		sed -i "kde-gear-${release}" -e "/^@/d"
	fi
done
popd > /dev/null

# regenerate mask entries (base for package mask)
pushd ../package.mask/ > /dev/null
for release in "${KF6_RELEASES[@]}" live; do
	if [[ -d "../package.unmask/.kde-frameworks-${release}" ]]; then
		echo -e "${HEADER}" > "kde-frameworks-${release}"
		cat "../package.unmask/.kde-frameworks-${release}/"* | \
			grep -P -v '^>=kde-frameworks/(?!kf-env)' >> "kde-frameworks-${release}"
		sed -i "kde-frameworks-${release}" \
			-e "/^<kde-frameworks\/.*-6\..\.50:6$/{s/-6\..\.50/-${release}/;s/^</>=/}" -e '/^@/d'
	fi
done

for release in "${PLASMA_RELEASES[@]}" live; do
	echo -e "${HEADER}" > "kde-plasma-${release}"
	if [[ -d "../package.unmask/.kde-plasma-${release}" ]]; then
		cat "../package.unmask/.kde-plasma-${release}/"* >> "kde-plasma-${release}"
		sed -i "kde-plasma-${release}" \
			-e "/^<kde-plasma\/.*-5\..\.50:5$/{s/-5\..\.50/-${release}/;s/^</>=/}"
	fi
done

for release in "${GEAR_RELEASES[@]}" live; do
	echo -e "${HEADER}" > "kde-gear-${release}"
	if [[ -d "../package.unmask/.kde-gear-${release}" ]]; then
		cat "../package.unmask/.kde-gear-${release}/"* >> "kde-gear-${release}"
		sed -i "kde-gear-${release}" \
			-e "/^<kde-gear\/.*-14\..\.50:5$/{s/-14\..\.50/-${release}/;s/^</>=/}" -e '/^@/d'
	fi
done
popd > /dev/null

# regenerate unversioned sets
pushd ../../sets/ > /dev/null
for set in *frameworks-*${KF6_RELEASE}; do
	newfile=${set/%-${KF6_RELEASE}}
	echo -e "${HEADER}" > "${newfile}"
	sed -r "/@/s/-${KF6_RELEASE}//g;/9999$/s/~//;s/<//;\@kde-frameworks/@s/-(9999|6\.[0-9]+\.50)//" "${set}" >> "${newfile}"
done

for set in *plasma-${PLASMA_RELEASE}; do
	newfile=${set/%-${PLASMA_RELEASE}}
	echo -e "${HEADER}" > "${newfile}"
	sed -r "/@/s/-${PLASMA_RELEASE}//g;/9999$/s/~//;s/<//;\@kde-plasma/@s/-(9999|${PLASMA_RELEASE}\.50)//" "${set}" >> "${newfile}"
done

for set in *-${GEAR_RELEASE}; do
	newfile=${set/%-${GEAR_RELEASE}}
	echo -e "${HEADER}" > "${newfile}"
	sed -r "/@/s/-${GEAR_RELEASE}//g;/9999$/s/~//;s/<//;\@[a-z-]+/@s/-(9999|${GEAR_RELEASE}\.50)//" "${set}" >> "${newfile}"
done

popd > /dev/null

# regenerate CONTRIBUTORS file
pushd ../ > /dev/null
newfile="CONTRIBUTORS"
echo -e "${HEADER}" > "${newfile}"
git log --all --format='%aN <%aE>' | sort -u >> "${newfile}"
popd > /dev/null
