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