Files
seta75D 2e8a93c394 Init
2021-10-11 18:20:23 -03:00

212 lines
5.6 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
:
#@(#)link_sys.sh 1.1 92/07/30 SMI
######################################################################
## purpose: To duplicate the /usr/src directories
## under a feature source tree, and link all the
## required sources from /usr/src TO the feature
## source tree. This saves disk space, in that a single set
## of /usr/src files (mounted read only) can be used
## for multiple feature tape builds on the same system,
## without populating the feature tape source
## directories with actual copies of referenced sources.
##
## A typical application would be to run 'link_sys' under
## $feature_tree/sys to build a kernel to support new drivers.
#
## general steps:
##
## 1) Set up your feature source tree with proper SCCS links
## 2) Do a recursive get of your modified sources
## 3) Run 'link_sys'
##
## All intermediate files generated during 'make' will be
## located under the feature tree.
##
##--------------------------EXAMPLE-----------------------------------
##
## If you want to build a kernel using modified drivers (in sys/sundev)
## from the 4.0.3 reference sources located on due you would do these:
##
## 1) Find a system running 4.0.3 FCS
##
## 2) Mount the 4.0.3 reference source; you will use this to
## flesh out the dirs required to build your new kernel
## due:/usr/src.403 /refsrc/403 nfs ro,hard,intr 0 0
##
## 3) Set up your own source tree to contain your changes:
##
## If you already have your feature source tree available,
## just mount it and do a recursive get to populate your
## work area, and proceed to Step 4.
##
## OTHERWISE, create them now using these steps:
##
## Create the SCCS_DIRECTORIES structure:
## set linksrc=/home/linksrc (or whatever)
## mkdir $linksrc
## mkdir $linksrc/SCCS_DIRECTORIES
## mkdir $linksrc/SCCS_DIRECTORIES/sys
## mkdir $linksrc/SCCS_DIRECTORIES/sys/sundev
## mkdir $linksrc/SCCS_DIRECTORIES/sys/sundev/SCCS
## (repeat with other dirs, as necessary)
##
## Create your links to SCCS_DIRECTORIES, thus:
## cd $linksrc
## using RE utils:
## linksccs $linksrc
## or manually:
## mkdir sys
## mkdir sys/sundev
## cd sys/sundev
## ln -s ../../SCCS_DIRECTORIES/sys/sundev/SCCS SCCS
## cd $linksrc/sys/sundev
## cp -p newdriver/st.c .
## sccs create st.c; rm ,*
## ...
## 4) Link up to everything else in sys from 403 reference src,
## using this utility.
##
## cd $linksrc/sys
## link_sys (Takes ~20 minutes to process sys hierarchy)
## Typical response to script queries are:
## DIR=/home/linksrc/sys? (y/n) y
## Link to which directory? (eg: /usr/src/sys)? /refsrc/403/sys
## (Select #3 from the menu which appears)
##
##
## Your src/sys structure is now ready, with all links set up.
## You should be able to do all normal sccs functions including
## 'smerge' within that hierarchy--just make sure that any
## SCCS directories which will contain modified or new files
## actually point to your local SCCS_DIRECTORIES.
##
## 5) Build your modified kernel
## cd `arch -k`/conf
## /etc/config -g GENERIC
## cd ../GENERIC
## make
##----------------------END EXAMPLE-----------------------------------
##
## Please send bugs/RFE's to Janet Timbol (janet@firenze)
##
######################################################################
get_yn='(while read yn
do
case "$yn" in
[Yy]* ) exit 0;;
[Nn]* ) exit 1;;
* ) echo -n "Please answer y or n: ";;
esac
done)'
top=`pwd`
mk_dirs=
ln_files=
echo -n "DIR=$top? (y/n) "
eval "$get_yn"
[ "$?" = 1 ] && exit 1
#dirname=/usr/src/sys
echo -n "Link to which directory? (eg: /usr/src/sys)? "
read dirname
[ ! -d $dirname ] && echo "$dirname not found" && exit 1
echo -n '
1) Create unbundled directory tree
2) Link files recursively under unbundled tree
3) Do #1 and #2
Do what? '
read choice
case $choice in
[1Mm]* ) mk_dirs=1;;
[2Ll]* ) ln_files=1;;
[3Dd]* ) mk_dirs=1; ln_files=1;;
* ) echo "$choice not valid!" && exit 1;;
esac
cd $dirname
echo "Output file is /tmp/dir$$. Please wait..."
find . -type d -print >/tmp/dir$$
cd $top
if [ "$mk_dirs" ] ; then
for eachdir in `cat /tmp/dir$$`
do
echo "Creating $eachdir"
mkdir $eachdir
done
fi
#
#Create generic links to SCCS/s.* files and 'gotten' sources,
#if they do not exist in feature source tree
#
#Create links made by '/usr/src/makelinks'. Links should point to
#generic source links, unless they have been modified in the
#feature tree.
#
if [ "$ln_files" ] ; then
for eachdir in `cat /tmp/dir$$ | sed -e '/^.\//s///g'`
do
echo "Linking files in $eachdir"
for eachfile in `ls $dirname/$eachdir`
do
while :
do
linkit=
linksrc=
if [ "$eachfile" = "SCCS" ]; then
if [ ! -h $top/$eachdir/SCCS ] ; then
linkit=1
else
linksrc=1
fi
break
fi
if [ -f $dirname/$eachdir/SCCS/s.$eachfile ]; then
linkit=1 #assumes 'sccs get' done for feature src
break
fi
if [ -h $dirname/$eachdir/$eachfile ] ; then
linkto=`ls -l $dirname/$eachdir/$eachfile | \
awk '{print $NF}'`
cd $top/$eachdir
if [ -d $linkto -o -f $linkto ] ; then
ln -s $linkto $eachfile
else
linkit=1
fi
cd $top
fi
break
done
if [ "$linksrc" ] ; then
for eachsrc in `ls $dirname/$eachdir/SCCS`
do
if [ ! -f $eachdir/SCCS/$eachsrc ]; then
ln -s $dirname/$eachdir/SCCS/$eachsrc \
$eachdir/SCCS
fi
done
fi
[ "$linkit" ] || continue
if [ $eachdir = '.' ] ; then
ln -s $dirname/$eachfile $eachdir
else
ln -s $dirname/$eachdir/$eachfile $eachdir
fi
done
done
fi
echo "DONE."
rm -f /tmp/dir$$
cd $top