Date: Thu, 17 Oct 2002 19:58:17 +1300 From: Andrew Turner <zombie@i4free.co.nz> To: current@freebsd.org Subject: Re: WARNING: Re: Kernel option dependency finding Message-ID: <3DAE5F89.5020607@i4free.co.nz> References: <3DAE4216.40706@i4free.co.nz> <3DAE545F.CBE1E1B2@mindspring.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Try this then:
#!/bin/sh
#Default options
LINTCONF=LINT.CONF
LINTCONF1=LINT.CONF1
ARCH=`uname -m`
ARCH1=$ARCH
SRCDIR=/sys
START=0
END=0
NOCLEAN=0
TMPDIR=/tmp/makedepend
WD=`pwd`
#Read the command line
while [ $# -ne 0 ]
do
case "$1" in
--src-dir)
shift
SRCDIR=$1
shift
;;
--conf-dir)
shift
CNFDIR=$1
shift
;;
--compile-dir)
shift
CMPDIR=$1
shift
;;
--arch)
shift
ARCH=$1
shift
;;
--no-copy)
NOCOPY="YES"
shift
;;
--no-clean)
shift
NOCLEAN=1
;;
--start)
shift
START=$1
shift
;;
--end)
shift
END=$1
shift
;;
--clean)
rm -f ${LINTCONF} ${LINTCONF1} bad_list LINT tmp
exit 0
;;
*)
CMD=`basename $0`
echo "USAGE: $CMD [option]"
echo
echo "Where option is any of:"
echo
echo "--help"
echo " This help"
echo "--clean"
echo " Clean the work directory"
echo "--no-clean"
echo " Don't clean up"
echo "--src-dir <Kernel Source Directory>:"
echo " The top of the kernel source default: /sys"
echo "--conf-dir <Kernel Conf Directory>:"
echo " The conf files dir default: <src-dir>/<arch>/conf"
echo "--compile-dir <Kernel Compile Dir>:"
echo " The dir the kernel to run make [depend] in default:
<src-dir>/compile"
echo "--arch <Build Arch>:"
echo " The Arch to build for default: $ARCH1"
echo "--start <start>"
echo "--end <end>"
echo " Only build kernels numbered between <start> and <end>"
exit 1
;;
esac
done
# Move the options in the order we wan't them
# This script builds in a decending order so $START is always larger
then $END
if [ $START -lt $END ]
then
STARTTMP=$START
START=$END
END=$STARTTMP
fi
# If we change end then finish on the one we said to
if [ $END -ne 0 ]
then
END=`expr $END - 1`
fi
# Set the default dir for running make
COMPDIR=$SRCDIR/$ARCH/compile
# If is set as an option change it
if [ $CMPDIR ]
then
COMPDIR=$CMPDIR
fi
# Set the default dir for the config files
CONFDIR=$SRCDIR/$ARCH/conf
# If is set as an option change it
if [ $CNFDIR ]
then
CONFDIR=$CNFDIR
fi
# Clean the build directories
if [ $NOCLEAN -eq 0 ]
then
rm -f ${LINTCONF} ${LINTCONF1} bad_list LINT tmp
rm -f ${CONFDIR}/DEPEND.*
rm -fr ${TMPDIR}
mkdir -p ${TMPDIR}
touch ${TMPDIR}/pass
touch ${TMPDIR}/fail.config
touch ${TMPDIR}/fail.depend
touch ${TMPDIR}/fail.make
fi
# Do the copying on LINT/NOTES
if [ $NOCOPY ]
then
:
else
cd ${CONFDIR}
make LINT
cd $WD
cp ${CONFDIR}/LINT ./
fi
if [ -f LINT ]
then
:
else
echo "Error: No LINT/NOTES File"
exit 1
fi
if [ -f depend ]
then
:
else
touch depend
fi
# The changeable Config Options from LINT/NOTES
cat LINT | grep "^options" > ${LINTCONF}
cat LINT | grep "^device" >> ${LINTCONF}
cat LINT | grep "^pseudo-device" >> ${LINTCONF}
# Make a list of unwanted options
# The first character is always a !
awk '{ if ($1 =="!") print $2 " " $3 }' < depend > bad_list
# Remove the unwanted options
BADLINES=`awk '{ nlines++ } END { if ( nlines ) { print nlines } else {
print "0" } }' < bad_list`
while [ ${BADLINES} -ne 0 ]
do
LINE=`cat bad_list | head -n ${BADLINES} | tail -n 1`
BADTYPE=`echo ${LINE} | awk '{print $1}'`
BADDEV=`echo ${LINE} | awk '{print $2}'`
cat ${LINTCONF} | awk "{ if ((\$1 == \"$BADTYPE\") && (\$2 ~
\"$BADDEV\")) { } else { print \$0 } }" > ${LINTCONF}2
mv ${LINTCONF}2 ${LINTCONF}
BADLINES=`expr $BADLINES - 1`
done
rm -f bad_list
# Unchangable Config Options from LINT/NOTES
cat LINT | grep "^ident" > ${LINTCONF1}
cat LINT | grep "^machine" >> ${LINTCONF1}
cat LINT | grep "^maxusers" >> ${LINTCONF1}
cat LINT | grep "^makeoptions" >> ${LINTCONF1}
cat LINT | grep "^cpu" >> ${LINTCONF1}
# If start is set use it as the first config
if [ $START -eq 0 ]
then
START=`awk '{ nlines++ } END { print nlines }' < ${LINTCONF}`
fi
LINE=$START
#echo $LINE > no_lines
# Build the config files for LINT/NOTES in $CONFDIR
# The file is always called DEPEND.${LINE}
while [ ${LINE} -ne $END ]
do
cat ${LINTCONF1} > ${CONFDIR}/DEPEND.${LINE}
awk "{ line++; if ( line == $LINE ) printf \"#\"; print \$0}" <
${LINTCONF} >> ${CONFDIR}/DEPEND.${LINE}
LINE=`expr $LINE - 1`
done
# Do the builds
LINE=$START
while [ $LINE -ne $END ]
do
cd ${CONFDIR}
config DEPEND.${LINE} > ${TMPDIR}/${LINE}.config
if [ $? -eq 0 ]
then
cd ${COMPDIR}/DEPEND.${LINE}
make clean > /dev/null 2>&1
make depend > ${TMPDIR}/${LINE}.depend 2>&1
if [ $? -eq 0 ]
then
make > ${TMPDIR}/${LINE}.make 2>&1
if [ $? -eq 0 ]
then
echo $LINE >> ${TMPDIR}/pass
else
echo $LINE >> ${TMPDIR}/fail.make
fi
else
echo $LINE >> ${TMPDIR}/fail.depend
fi
else
echo $LINE >> ${TMPDIR}/fail.config
fi
make clean > /dev/null 2>&1
LINE=`expr $LINE - 1`
done
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3DAE5F89.5020607>
