#!/usr/bin/env bash
#############################################################################
##
## Distribution clean script for packaging
## Last updated on April 7, 2026
##
## This file is part of Logtalk
## SPDX-FileCopyrightText: 1998-2026 Paulo Moura
## SPDX-License-Identifier: Apache-2.0
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
#############################################################################
set -eu
VERSION="${1:-2026a}"
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
TMP_DIR=$(mktemp -d "${TMPDIR:-/tmp}/tzif-zone-ids.XXXXXX")
ARCHIVE="$TMP_DIR/tzdata${VERSION}.tar.gz"
CANONICAL="$TMP_DIR/canonical.txt"
ALIASES_RAW="$TMP_DIR/aliases-raw.txt"
ALIASES="$TMP_DIR/aliases.txt"
OUTPUT="$SCRIPT_DIR/tzif_zone_ids.lgt"
cleanup() {
rm -rf "$TMP_DIR"
}
trap cleanup EXIT HUP INT TERM
curl -fsSLo "$ARCHIVE" "https://data.iana.org/time-zones/releases/tzdata${VERSION}.tar.gz"
tar -xzf "$ARCHIVE" -C "$TMP_DIR"
awk '/^Zone[ ]/ {print $2}' \
"$TMP_DIR"/africa \
"$TMP_DIR"/antarctica \
"$TMP_DIR"/asia \
"$TMP_DIR"/australasia \
"$TMP_DIR"/europe \
"$TMP_DIR"/northamerica \
"$TMP_DIR"/southamerica \
"$TMP_DIR"/etcetera \
"$TMP_DIR"/factory \
| LC_ALL=C sort -u > "$CANONICAL"
awk '/^Link[ ]/ {print $2 "\t" $3}' "$TMP_DIR"/backward \
| LC_ALL=C sort -u > "$ALIASES_RAW"
awk 'NR == FNR {canonical[$1] = 1; next} !canonical[$2]' "$CANONICAL" "$ALIASES_RAW" > "$ALIASES"
{
cat <
% SPDX-FileCopyrightText: 2026 Paulo Moura
% SPDX-License-Identifier: Apache-2.0
%
% Licensed under the Apache License, Version 2.0 (the "License");
% you may not use this file except in compliance with the License.
% You may obtain a copy of the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS,
% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
% See the License for the specific language governing permissions and
% limitations under the License.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:- object(tzif_zone_ids).
:- info([
version is 1:0:0,
author is 'Paulo Moura',
date is 2026-04-07,
comment is 'Bundled canonical TZDB zone ids and backward-compatible aliases derived from IANA TZDB ${VERSION}.'
]).
:- public(tzdb_version/1).
:- mode(tzdb_version(-atom), one).
:- info(tzdb_version/1, [
comment is 'Bundled IANA TZDB release used to derive the zone-id table.',
argnames is ['Version']
]).
:- public(known_zone_id/1).
:- mode(known_zone_id(+atom), zero_or_one).
:- info(known_zone_id/1, [
comment is 'True when the argument is a bundled canonical TZDB zone id or backward-compatible alias.',
argnames is ['ZoneId']
]).
:- public(zone_id_kind/2).
:- mode(zone_id_kind(+atom, -compound), zero_or_one).
:- info(zone_id_kind/2, [
comment is 'Classifies a bundled zone id as canonical or as a backward-compatible alias targeting another zone id.',
argnames is ['ZoneId', 'Kind']
]).
tzdb_version('${VERSION}').
known_zone_id(ZoneId) :-
zone_id_kind(ZoneId, _),
!.
EOF
awk '{printf "\tzone_id_kind('\''%s'\'', canonical).\n", $0}' "$CANONICAL"
awk -F '\t' '{printf "\tzone_id_kind('\''%s'\'', alias('\''%s'\'')).\n", $2, $1}' "$ALIASES"
cat < "$OUTPUT"
printf 'Generated %s with %s canonical ids and %s aliases from IANA TZDB %s\n' \
"$OUTPUT" \
"$(wc -l < "$CANONICAL" | tr -d ' ')" \
"$(wc -l < "$ALIASES" | tr -d ' ')" \
"$VERSION"