#!/bin/sh
-#
-# Shell script to create proper links to machine-dependent files in
+# 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
-case $# in
-1)
- machine=$1
- paramfile=m-${machine}.h
- initfile=m-${machine}init.h
- pinsnfile=${machine}-pinsn.c
- opcodefile=${machine}-opcode.h
-
- case $machine in
- hp9k320)
- initfile=m-sun3init.h
- pinsnfile=m68k-pinsn.c
- opcodefile=m68k-opcode.h
- ;;
- hp9k320bsd)
- initfile=m-sun3init.h
- pinsnfile=m68k-pinsn.c
- opcodefile=m68k-opcode.h
- ;;
- isi)
- # some version of m68k-pinsn.c should work here
- pinsnfile=m68k-pinsn.c
- opcodefile=m68k-opcode.h
- ;;
- merlin)
- # m-umaxinit.h?
- initfile=unknown-or-unavailable
- pinsnfile=ns32k-pinsn.c
- opcodefile=ns32k-opcode.h
- ;;
- news)
- pinsnfile=m68k-pinsn.c
- opcodefile=m68k-opcode.h
- ;;
- npl)
- pinsnfile=gld-pinsn.c
- ;;
- pn)
- pinsnfile=gld-pinsn.c
- ;;
- sun2)
- pinsnfile=m68k-pinsn.c
- opcodefile=m68k-opcode.h
- ;;
- sun3)
- pinsnfile=m68k-pinsn.c
- opcodefile=m68k-opcode.h
- ;;
- sun4)
- pinsnfile=sparc-pinsn.c
- opcodefile=sparc-opcode.h
- ;;
- umax)
- pinsnfile=ns32k-pinsn.c
- opcodefile=ns32k-opcode.h
- ;;
- test)
- paramfile=one
- initfile=two
- pinsnfile=three
- opcodefile=four
- ;;
- esac
-
- files="$paramfile $initfile $pinsnfile $opcodefile"
- links="param.h m-init.h pinsn.c opcode.h"
-
- while [ -n "$files" ]
- do
- # set file to car of files, files to cdr of files
- set $files; file=$1; shift; files=$*
- set $links; link=$1; shift; links=$*
-
- if [ ! -r $file ]
- then
- echo "$progname: cannot create a link \`$link',"
- echo "since the file \`$file' does not exist."
- exit 1
- fi
-
- rm -f $link config.status
- # Make a symlink if possible, otherwise try a hard link
- ln -s $file $link 2>/dev/null || ln $file $link
-
- if [ ! -r $link ]
- then
- echo "$progname: unable to link \`$link' to \`$file'."
- exit 1
- fi
- echo "Linked \`$link' to \`$file'."
- done
-
- echo "Links are now set up for use with a $machine." \
- | tee config.status
- exit 0
- ;;
-*)
- echo "Usage: $progname machine"
- echo -n "Where \`machine' is something like "
- echo "\`vax', \`sun3', \`umax', etc."
- if [ -r config.status ]
- then
- cat config.status
- fi
- exit 1
- ;;
+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
+rm -f Makefile
+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