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 2525b05a3eSAndy 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 33*427b4c5cSAndy Fiddamanfunction find_cmd { 34*427b4c5cSAndy Fiddaman typeset cmd="$1" 35*427b4c5cSAndy Fiddaman typeset var=$(echo $cmd | tr '[:lower:]' '[:upper:]') 36*427b4c5cSAndy Fiddaman typeset -n path="$var" 37*427b4c5cSAndy Fiddaman path=$(whence -fp "$cmd") 38*427b4c5cSAndy Fiddaman if (($? != 0)) || [ ! -x "$path" ]; then 39*427b4c5cSAndy Fiddaman echo "Cannot find executable '$cmd' in PATH" 40*427b4c5cSAndy Fiddaman exit 1 41*427b4c5cSAndy Fiddaman fi 42*427b4c5cSAndy Fiddaman} 43*427b4c5cSAndy Fiddaman 44*427b4c5cSAndy Fiddaman# This script uses a few commands which are not part of illumos and are 45*427b4c5cSAndy Fiddaman# expected to be available in the path. 46*427b4c5cSAndy Fiddamanfind_cmd pkgfmt 47*427b4c5cSAndy Fiddaman 4806965442SAndy Fiddamantypeset -A links 4906965442SAndy Fiddamantypeset -A targets 5006965442SAndy Fiddamanfor f in "$@"; do 5106965442SAndy Fiddaman if [[ ! -r "$f" ]]; then 5206965442SAndy Fiddaman echo "Could not read $f" 5306965442SAndy Fiddaman exit 1 5406965442SAndy Fiddaman fi 5506965442SAndy Fiddaman echo "+++ Processing input file $f" 5606965442SAndy Fiddaman grep '^Link' "$f" | tr -s '[:space:]' | \ 5706965442SAndy Fiddaman while IFS=$' \t' read _ tgt src _; do 5806965442SAndy Fiddaman 5906965442SAndy Fiddaman osrc=$src 6006965442SAndy Fiddaman targets[$tgt]=1 6106965442SAndy Fiddaman 6206965442SAndy Fiddaman printf " %20s => %s\n" $src $tgt 6306965442SAndy Fiddaman 6406965442SAndy Fiddaman while [[ $src == */* && ${src%%/*} == ${tgt%%/*} ]]; do 6506965442SAndy Fiddaman src=${src#*/} 6606965442SAndy Fiddaman tgt=${tgt#*/} 6706965442SAndy Fiddaman done 6806965442SAndy Fiddaman 6906965442SAndy Fiddaman # On no matches, grep -o exits non-zero, hence the || true to 7006965442SAndy Fiddaman # satisfy the shell's errexit option. 7106965442SAndy Fiddaman sslashes=$(echo $src | grep -o / | wc -l || true) 7206965442SAndy Fiddaman r= 7306965442SAndy Fiddaman while ((sslashes-- > 0)); do 7406965442SAndy Fiddaman r+="../" 7506965442SAndy Fiddaman done 7606965442SAndy Fiddaman links[$osrc]="$r$tgt" 7706965442SAndy Fiddaman done 7806965442SAndy Fiddamandone 7906965442SAndy Fiddaman 8006965442SAndy Fiddamantmpf1=`mktemp` 8106965442SAndy Fiddamantmpf2=`mktemp` 8206965442SAndy Fiddamantrap 'rm -f $tmpf1 $tmpf2' EXIT 8306965442SAndy Fiddaman[[ -n "$tmpf1" && -f "$tmpf1" ]] 8406965442SAndy Fiddaman[[ -n "$tmpf2" && -f "$tmpf2" ]] 8506965442SAndy Fiddaman 8606965442SAndy Fiddamancp $MANIFEST $tmpf1 87*427b4c5cSAndy Fiddaman$PKGFMT -u $tmpf1 8806965442SAndy Fiddaman 8906965442SAndy Fiddamanecho "+++ Removing existing hardlinks from manifest" 9006965442SAndy Fiddamanegrep -v "^hardlink " $tmpf1 > $tmpf2 9106965442SAndy Fiddamanmv $tmpf2 $tmpf1 9206965442SAndy Fiddaman 9306965442SAndy Fiddamanecho "+++ Removing existing targets from manifest" 9406965442SAndy Fiddamanfor i in "${!links[@]}" "${!targets[@]}"; do 9506965442SAndy Fiddaman egrep -v "^file path=$PREFIX/$i\$" $tmpf1 > $tmpf2 9606965442SAndy Fiddaman mv $tmpf2 $tmpf1 9706965442SAndy Fiddamandone 9806965442SAndy Fiddaman 9906965442SAndy Fiddamanecho "+++ Adding new entries to manifest" 10006965442SAndy Fiddaman{ 10106965442SAndy Fiddaman for i in "${!targets[@]}"; do 10206965442SAndy Fiddaman echo "file path=$PREFIX/$i" 10306965442SAndy Fiddaman done 10406965442SAndy Fiddaman for i in "${!links[@]}"; do 10506965442SAndy Fiddaman echo "hardlink path=$PREFIX/$i target=${links[$i]}" 10606965442SAndy Fiddaman done 10706965442SAndy Fiddaman} >> $tmpf1 10806965442SAndy Fiddaman 10906965442SAndy Fiddamanecho "+++ Formatting manifest" 110*427b4c5cSAndy Fiddaman$PKGFMT -fv2 $tmpf1 11106965442SAndy Fiddaman 11206965442SAndy Fiddamanmv $tmpf1 $MANIFEST 11306965442SAndy Fiddaman 114