#!/bin/sh
#
# Script to make an offline archive for debugging with libdwfl-based tools.
#
#	make-debug-archive ARCHIVE {options}
#	make-debug-archive --kernel [--force] [RELEASE]
#
# Valid options are those listed under 'Input selection options'
# by running /usr/bin/eu-unstrip --help.
#
# The archive installed by --kernel be used automatically by -K.
# An offline archive can be used via -e in any tool that accepts those options.
#

UNSTRIP=${UNSTRIP:-/usr/bin/eu-unstrip}
AR=${AR:-/usr/bin/eu-ar}
SUDO=${SUDO:-/usr/bin/sudo}

LS=/bin/ls
RM=/bin/rm
MV=/bin/mv
MKDIR=/bin/mkdir
XARGS=/usr/bin/xargs

outdir=${TMPDIR:-/tmp}/debugar$$

usage()
{
  echo "Usage: $0 ARCHIVE {options}"
  echo "   or: $0 --kernel [--sudo] [--force] [RELEASE]"
  echo
  echo "Valid options are listed under 'Input selection options'"
  echo "when running: $UNSTRIP --help"
  echo
  echo "The --kernel form updates the file used by -K if the"
  echo "kernel installation has changed, or always with --force."
  echo "With --sudo, touches the installed file via $SUDO."
}

fatal_usage()
{
  usage >&2
  exit 2
}

script_version()
{
  echo "`basename $0` (elfutils) 0.177"
  echo "Copyright (C) 2007 Red Hat, Inc."
  echo "This is free software; see the source for copying conditions."
  echo "There is NO warranty; not even for MERCHANTABILITY or"
  echo "FITNESS FOR A PARTICULAR PURPOSE."
  echo "Written by Roland McGrath."
}

sudo=
kernel=no
force_kernel=no
while [ $# -gt 0 ]; do
  case "x$1" in
  x--help) usage; exit 0 ;;
  x--version) script_version; exit 0 ;;
  x--kernel) kernel=yes ;;
  x--force) force_kernel=yes ;;
  x--sudo) sudo=$SUDO ;;
  *) break ;;
  esac
  shift
done

if [ $kernel = no ] && [ $force_kernel = yes -o -n "$sudo" ]; then
  usage
fi

if [ $kernel = yes ]; then
  if [ $# -eq 0 ]; then
    release=`uname -r`
  elif [ $# -eq 1 ]; then
    release=$1
  else
    fatal_usage
  fi

  dir=/usr/lib/debug/lib/modules/$release
  archive=$dir/debug.a
  dep=/lib/modules/$release/modules.dep

  if [ ! -d $dir ]; then
    echo >&2 "$0: $dir not installed"
    exit 1
  fi

  # Without --force, bail if the kernel installation is not newer.
  # This file is normally touched by installing new kernels or modules.
  if [ $force_kernel = no -a "$archive" -nt "$dep" ]; then
    exit 0
  fi

  # We have to kill the old one first, because our own -K would use it.
  [ ! -e "$archive" ] || $sudo $RM -f "$archive" || exit

  set "$archive" "-K$release"
fi

if [ $# -lt 2 ]; then
  fatal_usage
fi

archive="$1"
shift

case "$archive" in
/*) ;;
*) archive="`/bin/pwd`/$archive" ;;
esac

if [ -z "$sudo" ]; then
  new_archive="$archive.new"
else
  new_archive="$outdir.a"
fi

$RM -f "$new_archive" || exit

trap '$RM -rf "$outdir" "$new_archive"' 0 1 2 15

$MKDIR "$outdir" &&
$UNSTRIP -d "$outdir" -m -a -R "$@" &&
(cd "$outdir" && $LS | $XARGS $AR cq "$new_archive") &&
$sudo $MV -f "$new_archive" "$archive"

exit
