require timezone.inc

DEPENDS = "tzcode-native"

inherit allarch

S = "${WORKDIR}"

DEFAULT_TIMEZONE ?= "Universal"
INSTALL_TIMEZONE_FILE ?= "1"

TZONES = " \
    africa antarctica asia australasia europe northamerica southamerica \
    factory etcetera backward \
"

# "slim" is the default since 2020b
# "fat" is needed by e.g. MariaDB's mysql_tzinfo_to_sql
ZIC_FMT ?= "slim"

do_compile() {
	for zone in ${TZONES}; do
		${STAGING_BINDIR_NATIVE}/zic -b ${ZIC_FMT} -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null ${S}/${zone}
		${STAGING_BINDIR_NATIVE}/zic -b ${ZIC_FMT} -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null ${S}/${zone}
		${STAGING_BINDIR_NATIVE}/zic -b ${ZIC_FMT} -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds ${S}/${zone}
	done
}

do_install() {
	install -d ${D}$exec_prefix ${D}${datadir}/zoneinfo
	cp -pPR ${WORKDIR}$exec_prefix ${D}${base_prefix}
	# libc is removing zoneinfo files from package
	cp -pP "${S}/zone.tab" ${D}${datadir}/zoneinfo
	cp -pP "${S}/zone1970.tab" ${D}${datadir}/zoneinfo
	cp -pP "${S}/iso3166.tab" ${D}${datadir}/zoneinfo
	cp -pP "${S}/leapseconds" ${D}${datadir}/zoneinfo
	cp -pP "${S}/leap-seconds.list" ${D}${datadir}/zoneinfo

	# Install default timezone
	if [ -e ${D}${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ]; then
		install -d ${D}${sysconfdir}
		if [ "${INSTALL_TIMEZONE_FILE}" = "1" ]; then
			echo ${DEFAULT_TIMEZONE} > ${D}${sysconfdir}/timezone
		fi
		ln -s ${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ${D}${sysconfdir}/localtime
	else
		bberror "DEFAULT_TIMEZONE is set to an invalid value."
		exit 1
	fi

	chown -R root:root ${D}
}

pkg_postinst:${PN}() {
	etc_lt="$D${sysconfdir}/localtime"
	src="$D${sysconfdir}/timezone"

	if [ -e "$src" ]; then
		tz=$(sed -e 's:#.*::' -e 's:[[:space:]]*::g' -e '/^$/d' "$src")
	fi

	if [ ! -z "$tz" -a ! -e "$D${datadir}/zoneinfo/$tz" ]; then
		echo "You have an invalid TIMEZONE setting in $src"
		echo "Your $etc_lt has been reset to Universal; enjoy!"
		tz="Universal"
		echo "Updating $etc_lt with $D${datadir}/zoneinfo/$tz"
		if [ -L "$etc_lt" ]; then
			rm -f "$etc_lt"
		fi
		ln -s "${datadir}/zoneinfo/$tz" "$etc_lt"
	fi
}

# Packages are primarily organized by directory with a major city in most time
# zones in the base package
TZ_PACKAGES = " \
    tzdata-core tzdata-misc tzdata-posix tzdata-right tzdata-africa \
    tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \
    tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific \
"
PACKAGES = "${TZ_PACKAGES} ${PN}"

FILES:tzdata-africa += "${datadir}/zoneinfo/Africa"

FILES:tzdata-americas += " \
    ${datadir}/zoneinfo/America \
    ${datadir}/zoneinfo/US \
    ${datadir}/zoneinfo/Brazil \
    ${datadir}/zoneinfo/Canada \
    ${datadir}/zoneinfo/Mexico \
    ${datadir}/zoneinfo/Chile \
"

FILES:tzdata-antarctica += "${datadir}/zoneinfo/Antarctica"

FILES:tzdata-arctic += "${datadir}/zoneinfo/Arctic"

FILES:tzdata-asia += " \
    ${datadir}/zoneinfo/Asia \
    ${datadir}/zoneinfo/Indian \
    ${datadir}/zoneinfo/Mideast \
"

FILES:tzdata-atlantic += "${datadir}/zoneinfo/Atlantic"

FILES:tzdata-australia += "${datadir}/zoneinfo/Australia"

FILES:tzdata-europe += "${datadir}/zoneinfo/Europe"

FILES:tzdata-pacific += "${datadir}/zoneinfo/Pacific"

FILES:tzdata-posix += "${datadir}/zoneinfo/posix"

FILES:tzdata-right += "${datadir}/zoneinfo/right"

FILES:tzdata-misc += " \
    ${datadir}/zoneinfo/Cuba \
    ${datadir}/zoneinfo/Egypt \
    ${datadir}/zoneinfo/Eire \
    ${datadir}/zoneinfo/Factory \
    ${datadir}/zoneinfo/GB-Eire \
    ${datadir}/zoneinfo/Hongkong \
    ${datadir}/zoneinfo/Iceland \
    ${datadir}/zoneinfo/Iran \
    ${datadir}/zoneinfo/Israel \
    ${datadir}/zoneinfo/Jamaica \
    ${datadir}/zoneinfo/Japan \
    ${datadir}/zoneinfo/Kwajalein \
    ${datadir}/zoneinfo/Libya \
    ${datadir}/zoneinfo/Navajo \
    ${datadir}/zoneinfo/Poland \
    ${datadir}/zoneinfo/Portugal \
    ${datadir}/zoneinfo/Singapore \
    ${datadir}/zoneinfo/Turkey \
"

FILES:tzdata-core += " \
    ${sysconfdir}/localtime \
    ${sysconfdir}/timezone \
    ${datadir}/zoneinfo/leapseconds \
    ${datadir}/zoneinfo/leap-seconds.list \
    ${datadir}/zoneinfo/Pacific/Honolulu \
    ${datadir}/zoneinfo/America/Anchorage \
    ${datadir}/zoneinfo/America/Los_Angeles \
    ${datadir}/zoneinfo/America/Denver \
    ${datadir}/zoneinfo/America/Chicago \
    ${datadir}/zoneinfo/America/New_York \
    ${datadir}/zoneinfo/America/Caracas \
    ${datadir}/zoneinfo/America/Sao_Paulo \
    ${datadir}/zoneinfo/Europe/London \
    ${datadir}/zoneinfo/Europe/Paris \
    ${datadir}/zoneinfo/Africa/Cairo \
    ${datadir}/zoneinfo/Europe/Moscow \
    ${datadir}/zoneinfo/Asia/Dubai \
    ${datadir}/zoneinfo/Asia/Karachi \
    ${datadir}/zoneinfo/Asia/Dhaka \
    ${datadir}/zoneinfo/Asia/Bangkok \
    ${datadir}/zoneinfo/Asia/Hong_Kong \
    ${datadir}/zoneinfo/Asia/Tokyo \
    ${datadir}/zoneinfo/Australia/Darwin \
    ${datadir}/zoneinfo/Australia/Adelaide \
    ${datadir}/zoneinfo/Australia/Brisbane \
    ${datadir}/zoneinfo/Australia/Sydney \
    ${datadir}/zoneinfo/Pacific/Noumea \
    ${datadir}/zoneinfo/CET \
    ${datadir}/zoneinfo/CST6CDT \
    ${datadir}/zoneinfo/EET \
    ${datadir}/zoneinfo/EST \
    ${datadir}/zoneinfo/EST5EDT \
    ${datadir}/zoneinfo/GB \
    ${datadir}/zoneinfo/GMT \
    ${datadir}/zoneinfo/GMT+0 \
    ${datadir}/zoneinfo/GMT-0 \
    ${datadir}/zoneinfo/GMT0 \
    ${datadir}/zoneinfo/Greenwich \
    ${datadir}/zoneinfo/HST \
    ${datadir}/zoneinfo/MET \
    ${datadir}/zoneinfo/MST \
    ${datadir}/zoneinfo/MST7MDT \
    ${datadir}/zoneinfo/NZ \
    ${datadir}/zoneinfo/NZ-CHAT \
    ${datadir}/zoneinfo/PRC \
    ${datadir}/zoneinfo/PST8PDT \
    ${datadir}/zoneinfo/ROC \
    ${datadir}/zoneinfo/ROK \
    ${datadir}/zoneinfo/UCT \
    ${datadir}/zoneinfo/UTC \
    ${datadir}/zoneinfo/Universal \
    ${datadir}/zoneinfo/W-SU \
    ${datadir}/zoneinfo/WET \
    ${datadir}/zoneinfo/Zulu \
    ${datadir}/zoneinfo/zone.tab \
    ${datadir}/zoneinfo/zone1970.tab \
    ${datadir}/zoneinfo/iso3166.tab \
    ${datadir}/zoneinfo/Etc \
"

CONFFILES:tzdata-core = "${sysconfdir}/localtime ${sysconfdir}/timezone"

ALLOW_EMPTY:${PN} = "1"

RDEPENDS:${PN} = "${TZ_PACKAGES}"
