xref: /illumos-gate/usr/src/data/zoneinfo/update_manifest (revision 25b05a3ecbac136f5e1192d4d9e79dc14f895785)
106965442SAndy Fiddaman#!/usr/bin/ksh
206965442SAndy Fiddaman#
306965442SAndy Fiddaman# This file and its contents are supplied under the terms of the
406965442SAndy Fiddaman# Common Development and Distribution License ("CDDL"), version 1.0.
506965442SAndy Fiddaman# You may only use this file in accordance with the terms of version
606965442SAndy Fiddaman# 1.0 of the CDDL.
706965442SAndy Fiddaman#
806965442SAndy Fiddaman# A full copy of the text of the CDDL should have accompanied this
906965442SAndy Fiddaman# source. A copy of the CDDL is also available via the Internet at
1006965442SAndy Fiddaman# http://www.illumos.org/license/CDDL.
1106965442SAndy Fiddaman
1206965442SAndy Fiddaman# Copyright 2021 OmniOS Community Edition (OmniOSce) Association.
1306965442SAndy Fiddaman
1406965442SAndy Fiddamanset -o errexit -o pipefail
1506965442SAndy Fiddamantrap 'echo Error occured at line $LINENO' ERR
1606965442SAndy Fiddaman
1706965442SAndy Fiddamanif [[ ! -v CODEMGR_WS ]] || (($# < 1)); then
1806965442SAndy Fiddaman	cat <<- EOM
1906965442SAndy FiddamanThis script should be run within a bldenv by issuing 'make update' in
2006965442SAndy Fiddaman\$CODEMGR_WS/usr/src/data/zoneinfo
2106965442SAndy Fiddaman	EOM
2206965442SAndy Fiddaman	exit 1
2306965442SAndy Fiddamanfi
2406965442SAndy Fiddaman
25*25b05a3eSAndy FiddamanMANIFEST=$CODEMGR_WS/usr/src/pkg/manifests/system-data-zoneinfo.p5m
2606965442SAndy FiddamanPREFIX=usr/share/lib/zoneinfo
2706965442SAndy Fiddaman
2806965442SAndy Fiddamanif [[ ! -f "$MANIFEST" ]]; then
2906965442SAndy Fiddaman	echo "Could not find $MANIFEST"
3006965442SAndy Fiddaman	exit 1
3106965442SAndy Fiddamanfi
3206965442SAndy Fiddaman
3306965442SAndy Fiddamantypeset -A links
3406965442SAndy Fiddamantypeset -A targets
3506965442SAndy Fiddamanfor f in "$@"; do
3606965442SAndy Fiddaman	if [[ ! -r "$f" ]]; then
3706965442SAndy Fiddaman		echo "Could not read $f"
3806965442SAndy Fiddaman		exit 1
3906965442SAndy Fiddaman	fi
4006965442SAndy Fiddaman	echo "+++ Processing input file $f"
4106965442SAndy Fiddaman	grep '^Link' "$f" | tr -s '[:space:]' | \
4206965442SAndy Fiddaman	    while IFS=$' \t' read _ tgt src _; do
4306965442SAndy Fiddaman
4406965442SAndy Fiddaman		osrc=$src
4506965442SAndy Fiddaman		targets[$tgt]=1
4606965442SAndy Fiddaman
4706965442SAndy Fiddaman		printf "    %20s => %s\n" $src $tgt
4806965442SAndy Fiddaman
4906965442SAndy Fiddaman		while [[ $src == */* && ${src%%/*} == ${tgt%%/*} ]]; do
5006965442SAndy Fiddaman			src=${src#*/}
5106965442SAndy Fiddaman			tgt=${tgt#*/}
5206965442SAndy Fiddaman		done
5306965442SAndy Fiddaman
5406965442SAndy Fiddaman		# On no matches, grep -o exits non-zero, hence the || true to
5506965442SAndy Fiddaman		# satisfy the shell's errexit option.
5606965442SAndy Fiddaman		sslashes=$(echo $src | grep -o / | wc -l || true)
5706965442SAndy Fiddaman		r=
5806965442SAndy Fiddaman		while ((sslashes-- > 0)); do
5906965442SAndy Fiddaman			r+="../"
6006965442SAndy Fiddaman		done
6106965442SAndy Fiddaman		links[$osrc]="$r$tgt"
6206965442SAndy Fiddaman	done
6306965442SAndy Fiddamandone
6406965442SAndy Fiddaman
6506965442SAndy Fiddamantmpf1=`mktemp`
6606965442SAndy Fiddamantmpf2=`mktemp`
6706965442SAndy Fiddamantrap 'rm -f $tmpf1 $tmpf2' EXIT
6806965442SAndy Fiddaman[[ -n "$tmpf1" && -f "$tmpf1" ]]
6906965442SAndy Fiddaman[[ -n "$tmpf2" && -f "$tmpf2" ]]
7006965442SAndy Fiddaman
7106965442SAndy Fiddamancp $MANIFEST $tmpf1
7206965442SAndy Fiddamanpkgfmt -u $tmpf1
7306965442SAndy Fiddaman
7406965442SAndy Fiddamanecho "+++ Removing existing hardlinks from manifest"
7506965442SAndy Fiddamanegrep -v "^hardlink " $tmpf1 > $tmpf2
7606965442SAndy Fiddamanmv $tmpf2 $tmpf1
7706965442SAndy Fiddaman
7806965442SAndy Fiddamanecho "+++ Removing existing targets from manifest"
7906965442SAndy Fiddamanfor i in "${!links[@]}" "${!targets[@]}"; do
8006965442SAndy Fiddaman	egrep -v "^file path=$PREFIX/$i\$" $tmpf1 > $tmpf2
8106965442SAndy Fiddaman	mv $tmpf2 $tmpf1
8206965442SAndy Fiddamandone
8306965442SAndy Fiddaman
8406965442SAndy Fiddamanecho "+++ Adding new entries to manifest"
8506965442SAndy Fiddaman{
8606965442SAndy Fiddaman	for i in "${!targets[@]}"; do
8706965442SAndy Fiddaman		echo "file path=$PREFIX/$i"
8806965442SAndy Fiddaman	done
8906965442SAndy Fiddaman	for i in "${!links[@]}"; do
9006965442SAndy Fiddaman		echo "hardlink path=$PREFIX/$i target=${links[$i]}"
9106965442SAndy Fiddaman	done
9206965442SAndy Fiddaman} >> $tmpf1
9306965442SAndy Fiddaman
9406965442SAndy Fiddamanecho "+++ Formatting manifest"
9586d41711SAndy Fiddamanpkgfmt -fv2 $tmpf1
9606965442SAndy Fiddaman
9706965442SAndy Fiddamanmv $tmpf1 $MANIFEST
9806965442SAndy Fiddaman
99