binutils-gdb/gdb/config.gdb

186 lines
4.9 KiB
Plaintext
Executable File

#!/bin/sh
# Shell script to do machine-dependent things in
# preparation for compiling gdb.
#
# Usage: config.gdb machine
#
# If config.gdb succeeds, it leaves its status in config.status.
# If config.gdb fails after disturbing the status quo,
# config.status is removed.
progname=$0
host=
target=
list_hosts=
list_targets=
srcdir=
for arg in $*; do
case $arg in
-srcdir=*|+srcdir=*)
srcdir=`echo $arg | sed 's/[+-]srcdir=//'`
;;
-host|+host)
list_hosts=true
;;
-target|+target)
list_targets=true
;;
-host=*|+host=*)
if [ "$host" = "" ]; then
host=`echo $arg | sed 's/[+-]host=//'`
else
echo Error: Attempt to specify host machine twice
bad=true
fi
;;
-target=*|+target=*)
if [ "$target" = "" ]; then
target=`echo $arg | sed 's/[+-]target=//'`
else
echo Error: Attempt to specify target machine twice
bad=true
fi
;;
*)
if [ "$host" = "" ]; then
host=$arg
else
if [ "$target" = "" ]; then
target=$arg
else
echo Error: More arguments than host and target machine names
bad=true
fi
fi
;;
esac
done
if [ "$target" = "" ]; then target=$host; fi
if [ "$host" = "" ]; then bad=true; fi
# Find the source files, if location was not specified
if [ "$srcdir" = "" ]; then
srcdirdefaulted=true
srcdir=.
if [ ! -r main.c ]; then
srcdir=..
fi
fi
if [ ! -r ${srcdir}/main.c ]; then
if [ "$srcdirdefaulted" != "true" ]; then
echo "$progname: Can't find debugger sources in \`${srcdir}'." 1>&2
else
echo "$progname: Can't find debugger sources in \`.' or \`..'." 1>&2
fi
exit 1
fi
if [ "$list_hosts" = "true" ]; then
cd $srcdir/xconfig
for i in * ; do
# The {} in ${i} are required or else /bin/sh in sony newsos 3.2 removes
# the quote after it.
awk <$i "NR == 1 { lastchar = substr(\"${i}\", length(\"${i}\"), 1)
if (lastchar != \"~\" && lastchar != \"#\") \
printf \"%-12s %s\n\", \"${i}\", substr(\$0,2) }"
done
fi
if [ "$list_targets" = "true" ]; then
cd $srcdir/tconfig
for i in * ; do
awk <$i "NR == 1 { lastchar = substr(\"${i}\", length(\"${i}\"), 1)
if (lastchar != \"~\" && lastchar != \"#\") \
printf \"%-12s %s\n\", \"${i}\", substr(\$0,2) }"
done
fi
if [ "$list_hosts" = "true" -o "$list_targets" = "true" ]; then
exit 0
fi
if [ "$host" != "" -a ! -f $srcdir/xconfig/$host ]; then
echo "No such host $host"
bad=true
fi
if [ "$target" != "" -a ! -f $srcdir/tconfig/$target ]; then
echo "No such target $target"
bad=true
fi
if [ "$bad" = "true" ] ; then
echo "Usage: "
echo " $progname [+srcdir=\`dir'] machine"
echo " For normal usage"
echo " $progname [+srcdir=\`dir'] \`host' \`target'"
echo " $progname [+srcdir=\`dir'] +host=\`host' +target=\`target'"
echo " If you are doing remote debugging between machines of two"
echo " different types (cross-debugging). \`host' is the type of"
echo " machine on which GDB will be running. \`target' is the"
echo " machine that the program you are debugging will be"
echo " running on."
echo " $progname +host"
echo " Print a list of valid host machine types."
echo " $progname +target"
echo " Print a list of valid target machine types."
echo
echo " +srcdir=\`dir' means that the sources are in \`dir'. For"
echo " example, \`cd /obj/hp300; config.gdb +srcdir=/src/gdb hp300'"
echo " If +srcdir is not specified, sources can either be in \`.'"
echo " or \`..'."
echo
if [ -r config.status ]
then
cat config.status
fi
exit 1
fi
rm -f tm.h xm.h
cat $srcdir/xconfig/$host $srcdir/tconfig/$target | awk '$1 == "#msg" {
print substr($0,6)}'
paramfile=${srcdir}/`awk '
$1 == "TM_FILE=" { print $2 }' <$srcdir/tconfig/$target`
if [ "$paramfile" != "${srcdir}/" ] ; then
# Make a symlink if possible, otherwise try a hard link
ln -s $paramfile tm.h 2>/dev/null || ln $paramfile tm.h
fi
paramfile=${srcdir}/`awk '
$1 == "XM_FILE=" { print $2 }' <$srcdir/xconfig/$host`
if [ "$paramfile" != "${srcdir}/" ] ; then
# Make a symlink if possible, otherwise try a hard link
ln -s $paramfile xm.h 2>/dev/null || ln $paramfile xm.h
fi
rm -f config.status
case ${srcdir} in
.)
;;
*)
echo "srcdir=${srcdir}" >./Makefile.sdir
grep -s "source ${srcdir}/.gdbinit" .gdbinit 2>/dev/null || \
echo "source ${srcdir}/.gdbinit" >> .gdbinit
if [ ! -d readline ]; then
mkdir readline
# This could be a symlink, but getting the name right (because
# srcdir can be either relative or absolute) would be hairy.
cp ${srcdir}/readline/Makefile readline
fi
esac
make "srcdir=${srcdir}" \
"M_MAKEFILE=$srcdir/tconfig/$target $srcdir/xconfig/$host" \
-f $srcdir/Makefile.dist Makefile
echo "GDB is now set up for host machine $host and target machine $target." \
| tee config.status
exit 0