2021-10-11 18:20:23 -03:00

134 lines
3.1 KiB
Bash

#!/bin/sh
# %Z%%M% %I% %E% SMI
#
# populate a source tree.
#
# We assume that we start out in a directory (presumably /usr/src)
# with the subdirectory 'SCCS_DIRECTORIES' which contains the SCCS source
# in the form:
#
# ...
# stuff
# stuff/SCCS
# stuff/SCCS/(SCCS source files for stuff...)
# stuff/morestuff
# stuff/morestuff/SCCS
# stuff/morestuff/SCCS/(SCCS source files for morestuff....)
# ...
#
# This script will make a directory tree rooted in this directory
# of the structure:
#
# ...
# stuff
# stuff/morestuff
# ...
# And add in, as relative path symbolic links the SCCS directories
# in the tree rooted in SCCS_DIRECTORIES...
#
# (e.g., stuff/SCCS is a symlink that points to ../SCCS_DIRECTORIES/stuff/SCCS)
#
#################
# set up a trap to clean up after ourselves if we are killed...
#
trap 'ln -s SCCS_DIRECTORIES/SCCS;make clobber;exit 100' 2 3 15
#
# Are we building a specific release? If we are and the corresponding
# SID list doesn't exist, we might as well quit right now.
#
if [ -f RELEASE ]; then
SID_FILE=`cat RELEASE`.SID
if [ ! -f SIDlist/$SID_FILE \
-a ! -f SCCS_DIRECTORIES/SIDlist/SCCS/s.$SID_FILE ]; then
echo "Error: SID file $1 does not exist"
exit 1
fi
fi
#
# The only real problem child is /usr/src/SCCS->/usr/src/SCCS_DIRECTORIES/SCCS
# which we'll handle as a special case...
#
echo "Finding sub-directories in SCCS_DIRECTORIES...."
rm -f SCCS
find SCCS_DIRECTORIES -type d -print | sed -e '/lost+found/d' \
-e '/^SCCS_DIRECTORIES$/d' -e '/^SCCS_DIRECTORIES\/SCCS/d' > major_list
#
# Make directories
#
echo " Making sub-directories in current directory...."
for i in `grep -v 'SCCS$' major_list| sed 's/^SCCS_DIRECTORIES\///'`
do
if [ ! -d $i ]
then
mkdir $i
if [ $? -ne 0 ]
then
echo "........mkdir failed on directory" $i
fi
fi
done
echo "Making relative path symbolic links to SCCS...."
for SCCS_DIR in `grep 'SCCS$' major_list`
do
#
# Trim off SCCS_DIRECTORIES
#
symln=`echo $SCCS_DIR| sed 's/SCCS_DIRECTORIES.//'`
#
# Calculate relative dot-dot....
#
dotdot=`echo $symln |sed -e 's/.SCCS//' -e 's/\// /g' -e 's/$/ /' \
-e 's/[^ ]* /..\//g'`
#
# put together full symlink name
#
realdir=${dotdot}${SCCS_DIR}
#
# command is ln -s relpath symln
#
ln -s $realdir $symln
if [ $? -ne 0 ]
then
echo "........symlink failed on command: ln -s " $realdir $symln
fi
done
ln -s SCCS_DIRECTORIES/SCCS
if [ $? -ne 0 ]
then
echo "........symlink failed on command: ln -s SCCS_DIRECTORIES/SCCS"
fi
rm -f major_list
#
# Are we building a specific release? If not, we're done.
#
if [ ! -f RELEASE ]; then
echo "Done...."
exit 0
fi
#
# Make sure the SID_FILE is checked out. (We already know it exists.)
#
if [ ! -f SIDlist/$SID_FILE ]; then
/usr/sccs/get -GSIDlist/$SID_FILE SIDlist/SCCS/s.$SID_FILE
fi
#
# Now descend through the tree and check out the files specified
# in the SID list.
#
echo "Checking out files for release `basename $SID_FILE .SID`..."
egrep -v '^#' SIDlist/$SID_FILE \
| awk '{ print $1" "$1" "$2 }' | sed 's/SCCS\/s\.//' \
| awk '{ printf "/usr/sccs/get -s -r%s -G%s %s;", $3, $1, $2 }' \
| tee errs.populate | sh -s
echo "Done...."
rm errs.populate
exit 0