1*06965442SAndy Fiddaman#!/usr/bin/ksh 2*06965442SAndy Fiddaman# 3*06965442SAndy Fiddaman# This file and its contents are supplied under the terms of the 4*06965442SAndy Fiddaman# Common Development and Distribution License ("CDDL"), version 1.0. 5*06965442SAndy Fiddaman# You may only use this file in accordance with the terms of version 6*06965442SAndy Fiddaman# 1.0 of the CDDL. 7*06965442SAndy Fiddaman# 8*06965442SAndy Fiddaman# A full copy of the text of the CDDL should have accompanied this 9*06965442SAndy Fiddaman# source. A copy of the CDDL is also available via the Internet at 10*06965442SAndy Fiddaman# http://www.illumos.org/license/CDDL. 11*06965442SAndy Fiddaman 12*06965442SAndy Fiddaman# Copyright 2021 OmniOS Community Edition (OmniOSce) Association. 13*06965442SAndy Fiddaman 14*06965442SAndy Fiddamanset -o errexit -o pipefail 15*06965442SAndy Fiddamantrap 'echo Error occured at line $LINENO' ERR 16*06965442SAndy Fiddaman 17*06965442SAndy Fiddamanif [[ ! -v CODEMGR_WS ]] || (($# < 1)); then 18*06965442SAndy Fiddaman cat <<- EOM 19*06965442SAndy FiddamanThis script should be run within a bldenv by issuing 'make update' in 20*06965442SAndy Fiddaman\$CODEMGR_WS/usr/src/data/zoneinfo 21*06965442SAndy Fiddaman EOM 22*06965442SAndy Fiddaman exit 1 23*06965442SAndy Fiddamanfi 24*06965442SAndy Fiddaman 25*06965442SAndy FiddamanMANIFEST=$CODEMGR_WS/usr/src/pkg/manifests/system-data-zoneinfo.mf 26*06965442SAndy FiddamanPREFIX=usr/share/lib/zoneinfo 27*06965442SAndy Fiddaman 28*06965442SAndy Fiddamanif [[ ! -f "$MANIFEST" ]]; then 29*06965442SAndy Fiddaman echo "Could not find $MANIFEST" 30*06965442SAndy Fiddaman exit 1 31*06965442SAndy Fiddamanfi 32*06965442SAndy Fiddaman 33*06965442SAndy Fiddamantypeset -A links 34*06965442SAndy Fiddamantypeset -A targets 35*06965442SAndy Fiddamanfor f in "$@"; do 36*06965442SAndy Fiddaman if [[ ! -r "$f" ]]; then 37*06965442SAndy Fiddaman echo "Could not read $f" 38*06965442SAndy Fiddaman exit 1 39*06965442SAndy Fiddaman fi 40*06965442SAndy Fiddaman echo "+++ Processing input file $f" 41*06965442SAndy Fiddaman grep '^Link' "$f" | tr -s '[:space:]' | \ 42*06965442SAndy Fiddaman while IFS=$' \t' read _ tgt src _; do 43*06965442SAndy Fiddaman 44*06965442SAndy Fiddaman osrc=$src 45*06965442SAndy Fiddaman targets[$tgt]=1 46*06965442SAndy Fiddaman 47*06965442SAndy Fiddaman printf " %20s => %s\n" $src $tgt 48*06965442SAndy Fiddaman 49*06965442SAndy Fiddaman while [[ $src == */* && ${src%%/*} == ${tgt%%/*} ]]; do 50*06965442SAndy Fiddaman src=${src#*/} 51*06965442SAndy Fiddaman tgt=${tgt#*/} 52*06965442SAndy Fiddaman done 53*06965442SAndy Fiddaman 54*06965442SAndy Fiddaman # On no matches, grep -o exits non-zero, hence the || true to 55*06965442SAndy Fiddaman # satisfy the shell's errexit option. 56*06965442SAndy Fiddaman sslashes=$(echo $src | grep -o / | wc -l || true) 57*06965442SAndy Fiddaman r= 58*06965442SAndy Fiddaman while ((sslashes-- > 0)); do 59*06965442SAndy Fiddaman r+="../" 60*06965442SAndy Fiddaman done 61*06965442SAndy Fiddaman links[$osrc]="$r$tgt" 62*06965442SAndy Fiddaman done 63*06965442SAndy Fiddamandone 64*06965442SAndy Fiddaman 65*06965442SAndy Fiddamantmpf1=`mktemp` 66*06965442SAndy Fiddamantmpf2=`mktemp` 67*06965442SAndy Fiddamantrap 'rm -f $tmpf1 $tmpf2' EXIT 68*06965442SAndy Fiddaman[[ -n "$tmpf1" && -f "$tmpf1" ]] 69*06965442SAndy Fiddaman[[ -n "$tmpf2" && -f "$tmpf2" ]] 70*06965442SAndy Fiddaman 71*06965442SAndy Fiddamancp $MANIFEST $tmpf1 72*06965442SAndy Fiddamanpkgfmt -u $tmpf1 73*06965442SAndy Fiddaman 74*06965442SAndy Fiddamanecho "+++ Removing existing hardlinks from manifest" 75*06965442SAndy Fiddamanegrep -v "^hardlink " $tmpf1 > $tmpf2 76*06965442SAndy Fiddamanmv $tmpf2 $tmpf1 77*06965442SAndy Fiddaman 78*06965442SAndy Fiddamanecho "+++ Removing existing targets from manifest" 79*06965442SAndy Fiddamanfor i in "${!links[@]}" "${!targets[@]}"; do 80*06965442SAndy Fiddaman egrep -v "^file path=$PREFIX/$i\$" $tmpf1 > $tmpf2 81*06965442SAndy Fiddaman mv $tmpf2 $tmpf1 82*06965442SAndy Fiddamandone 83*06965442SAndy Fiddaman 84*06965442SAndy Fiddamanecho "+++ Adding new entries to manifest" 85*06965442SAndy Fiddaman{ 86*06965442SAndy Fiddaman for i in "${!targets[@]}"; do 87*06965442SAndy Fiddaman echo "file path=$PREFIX/$i" 88*06965442SAndy Fiddaman done 89*06965442SAndy Fiddaman for i in "${!links[@]}"; do 90*06965442SAndy Fiddaman echo "hardlink path=$PREFIX/$i target=${links[$i]}" 91*06965442SAndy Fiddaman done 92*06965442SAndy Fiddaman} >> $tmpf1 93*06965442SAndy Fiddaman 94*06965442SAndy Fiddamanecho "+++ Formatting manifest" 95*06965442SAndy Fiddamanpkgfmt -f v1 $tmpf1 96*06965442SAndy Fiddaman 97*06965442SAndy Fiddamanmv $tmpf1 $MANIFEST 98*06965442SAndy Fiddaman 99