#! /bin/sh

# (must be called from the valgrind top source dir).
#
# Make local links in the gdbserver_tests directory
# so that tests needing gdb can be disabled if
# a too old version of gdb is provided or if no gdb is
# provided.
#
# The vgdb link is needed either for gdb tests
# or for standalone vgdb tests.

# Make sure we're in the correct directory, i.e. the root of the valgrind
# source tree. We use the existence of the coregrind directory as evidence
# that we're in the right place.
if [ ! -d "coregrind" ]; then
  echo  "make_local_links is not invoked from the top-of-tree directory" 1>&2
  exit 1
fi

# Make sure there is an argument
if [ "x$1" = "x" ]; then
  echo  "usage: make_local_links /path/to/gdb" 1>&2
  exit 1
fi


export GDB=""
export GDBVERSIONLINE=""
export GDBMAJ=""
export GDBMIN=""

# $1 = Major.Minor gdb version needed
# $2 = marker file to touch (if version ok) or to remove (version not ok)
# $3 and following: msg in output
check_version()
{
  NEEDED=$1
  shift
  NEEDEDMAJ=$(echo $NEEDED | awk -F\. '{ print $1 }')
  NEEDEDMIN=$(echo $NEEDED | awk -F\. '{ print $2 }')

  MARKERFILE=$1
  shift

  if [   \( $GDBMAJ -gt $NEEDEDMAJ \)         \
      -o \(   \( $GDBMAJ -eq $NEEDEDMAJ \)    \
           -a \( $GDBMIN -ge $NEEDEDMIN \) \)     ]
  then
    if [ ! -f $MARKERFILE ]
    then
      touch $MARKERFILE
    fi
  else
    echo "$@"  "suppressed as $GDB version" $GDBVERSIONLINE "is <" $NEEDED 
    rm -f $MARKERFILE
  fi
}

if [ -x "$1" ]
then
   GDB=$1
   ln -f -s "$GDB" gdbserver_tests/gdb
   # Try to extract the gdb version major and minor numbers.
   # We assume these are the first two integers separated by a .
   GDBVERSIONLINE=`gdbserver_tests/gdb --version | head -n 1`
   GDBMAJ=`echo $GDBVERSIONLINE | sed -e 's/[^0-9\.]//g' |
                  awk -F\. '{print $1}'`
   GDBMIN=`echo $GDBVERSIONLINE | sed -e 's/[^0-9\.]//g' |
                  awk -F\. '{print $2}'`
   
   # We need at least a 6.5 version to use the Valgrind gdbserver.
   # However, the gdb tests are only supported/maintained for gdb >= 7
   check_version 7.0 gdbserver_tests/gdb "gdbserver gdb tests"

   # We need at least a 7.1 version to run the 'pic' executable tests
   # (with 7.0, it fails on many platforms)
   check_version 7.1 gdbserver_tests/gdb.pic "pic executable tests"

   # by default, we can run tests needed next/step/...
   # But on ARM, we need at least 7.1 to run the 'next/step/...' tests.
   # (gdb 7.0 has bugs in the 'guess next pc' heuristic in thumb mode).
   if tests/arch_test arm
   then
      check_version 7.1 gdbserver_tests/gdb.step "gdbserver next/step/... tests ARM"
   else
      check_version 7.0 gdbserver_tests/gdb.step "gdbserver next/step/... tests"
   fi

   # We need at least a 7.2 version for gdb tests using eval command
   check_version 7.2 gdbserver_tests/gdb.eval "gdbserver eval tests"

else
   echo "gdbserver gdb tests suppressed as $1 is not executable"
fi

ln -f -s ../coregrind/vgdb gdbserver_tests/vgdb

# if ptrace not implemented in vgdb or OS restricts the initial attach,
# some tests would block for a loooonnnng time.
if gdbserver_tests/vgdb --help 2>&1 |
    grep -e 'invoker not implemented' > /dev/null
then
    rm -f gdbserver_tests/vgdb.invoker
else
    touch gdbserver_tests/vgdb.invoker
fi

# cleanup the possibly big garbage previously collected output
rm -f gdbserver_tests/garbage.filtered.out
