Blame src/make-debug-archive.in

Packit Service 97d2fb
#!/bin/sh
Packit Service 97d2fb
#
Packit Service 97d2fb
# Script to make an offline archive for debugging with libdwfl-based tools.
Packit Service 97d2fb
#
Packit Service 97d2fb
#	make-debug-archive ARCHIVE {options}
Packit Service 97d2fb
#	make-debug-archive --kernel [--force] [RELEASE]
Packit Service 97d2fb
#
Packit Service 97d2fb
# Valid options are those listed under 'Input selection options'
Packit Service 97d2fb
# by running @UNSTRIP@ --help.
Packit Service 97d2fb
#
Packit Service 97d2fb
# The archive installed by --kernel be used automatically by -K.
Packit Service 97d2fb
# An offline archive can be used via -e in any tool that accepts those options.
Packit Service 97d2fb
#
Packit Service 97d2fb
Packit Service 97d2fb
UNSTRIP=${UNSTRIP:-@UNSTRIP@}
Packit Service 97d2fb
AR=${AR:-@AR@}
Packit Service 97d2fb
SUDO=${SUDO:-/usr/bin/sudo}
Packit Service 97d2fb
Packit Service 97d2fb
LS=/bin/ls
Packit Service 97d2fb
RM=/bin/rm
Packit Service 97d2fb
MV=/bin/mv
Packit Service 97d2fb
MKDIR=/bin/mkdir
Packit Service 97d2fb
XARGS=/usr/bin/xargs
Packit Service 97d2fb
Packit Service 97d2fb
outdir=${TMPDIR:-/tmp}/debugar$$
Packit Service 97d2fb
Packit Service 97d2fb
usage()
Packit Service 97d2fb
{
Packit Service 97d2fb
  echo "Usage: $0 ARCHIVE {options}"
Packit Service 97d2fb
  echo "   or: $0 --kernel [--sudo] [--force] [RELEASE]"
Packit Service 97d2fb
  echo
Packit Service 97d2fb
  echo "Valid options are listed under 'Input selection options'"
Packit Service 97d2fb
  echo "when running: $UNSTRIP --help"
Packit Service 97d2fb
  echo
Packit Service 97d2fb
  echo "The --kernel form updates the file used by -K if the"
Packit Service 97d2fb
  echo "kernel installation has changed, or always with --force."
Packit Service 97d2fb
  echo "With --sudo, touches the installed file via $SUDO."
Packit Service 97d2fb
}
Packit Service 97d2fb
Packit Service 97d2fb
fatal_usage()
Packit Service 97d2fb
{
Packit Service 97d2fb
  usage >&2
Packit Service 97d2fb
  exit 2
Packit Service 97d2fb
}
Packit Service 97d2fb
Packit Service 97d2fb
script_version()
Packit Service 97d2fb
{
Packit Service 97d2fb
  echo "`basename $0` (@PACKAGE_NAME@) @PACKAGE_VERSION@"
Packit Service 97d2fb
  echo "Copyright (C) 2007 Red Hat, Inc."
Packit Service 97d2fb
  echo "This is free software; see the source for copying conditions."
Packit Service 97d2fb
  echo "There is NO warranty; not even for MERCHANTABILITY or"
Packit Service 97d2fb
  echo "FITNESS FOR A PARTICULAR PURPOSE."
Packit Service 97d2fb
  echo "Written by Roland McGrath."
Packit Service 97d2fb
}
Packit Service 97d2fb
Packit Service 97d2fb
sudo=
Packit Service 97d2fb
kernel=no
Packit Service 97d2fb
force_kernel=no
Packit Service 97d2fb
while [ $# -gt 0 ]; do
Packit Service 97d2fb
  case "x$1" in
Packit Service 97d2fb
  x--help) usage; exit 0 ;;
Packit Service 97d2fb
  x--version) script_version; exit 0 ;;
Packit Service 97d2fb
  x--kernel) kernel=yes ;;
Packit Service 97d2fb
  x--force) force_kernel=yes ;;
Packit Service 97d2fb
  x--sudo) sudo=$SUDO ;;
Packit Service 97d2fb
  *) break ;;
Packit Service 97d2fb
  esac
Packit Service 97d2fb
  shift
Packit Service 97d2fb
done
Packit Service 97d2fb
Packit Service 97d2fb
if [ $kernel = no ] && [ $force_kernel = yes -o -n "$sudo" ]; then
Packit Service 97d2fb
  usage
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
if [ $kernel = yes ]; then
Packit Service 97d2fb
  if [ $# -eq 0 ]; then
Packit Service 97d2fb
    release=`uname -r`
Packit Service 97d2fb
  elif [ $# -eq 1 ]; then
Packit Service 97d2fb
    release=$1
Packit Service 97d2fb
  else
Packit Service 97d2fb
    fatal_usage
Packit Service 97d2fb
  fi
Packit Service 97d2fb
Packit Service 97d2fb
  dir=/usr/lib/debug/lib/modules/$release
Packit Service 97d2fb
  archive=$dir/debug.a
Packit Service 97d2fb
  dep=/lib/modules/$release/modules.dep
Packit Service 97d2fb
Packit Service 97d2fb
  if [ ! -d $dir ]; then
Packit Service 97d2fb
    echo >&2 "$0: $dir not installed"
Packit Service 97d2fb
    exit 1
Packit Service 97d2fb
  fi
Packit Service 97d2fb
Packit Service 97d2fb
  # Without --force, bail if the kernel installation is not newer.
Packit Service 97d2fb
  # This file is normally touched by installing new kernels or modules.
Packit Service 97d2fb
  if [ $force_kernel = no -a "$archive" -nt "$dep" ]; then
Packit Service 97d2fb
    exit 0
Packit Service 97d2fb
  fi
Packit Service 97d2fb
Packit Service 97d2fb
  # We have to kill the old one first, because our own -K would use it.
Packit Service 97d2fb
  [ ! -e "$archive" ] || $sudo $RM -f "$archive" || exit
Packit Service 97d2fb
Packit Service 97d2fb
  set "$archive" "-K$release"
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
if [ $# -lt 2 ]; then
Packit Service 97d2fb
  fatal_usage
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
archive="$1"
Packit Service 97d2fb
shift
Packit Service 97d2fb
Packit Service 97d2fb
case "$archive" in
Packit Service 97d2fb
/*) ;;
Packit Service 97d2fb
*) archive="`/bin/pwd`/$archive" ;;
Packit Service 97d2fb
esac
Packit Service 97d2fb
Packit Service 97d2fb
if [ -z "$sudo" ]; then
Packit Service 97d2fb
  new_archive="$archive.new"
Packit Service 97d2fb
else
Packit Service 97d2fb
  new_archive="$outdir.a"
Packit Service 97d2fb
fi
Packit Service 97d2fb
Packit Service 97d2fb
$RM -f "$new_archive" || exit
Packit Service 97d2fb
Packit Service 97d2fb
trap '$RM -rf "$outdir" "$new_archive"' 0 1 2 15
Packit Service 97d2fb
Packit Service 97d2fb
$MKDIR "$outdir" &&
Packit Service 97d2fb
$UNSTRIP -d "$outdir" -m -a -R "$@" &&
Packit Service 97d2fb
(cd "$outdir" && $LS | $XARGS $AR cq "$new_archive") &&
Packit Service 97d2fb
$sudo $MV -f "$new_archive" "$archive"
Packit Service 97d2fb
Packit Service 97d2fb
exit