#!/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 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