#!/bin/bash
###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

. "$(dirname "${0}")/prologue.sh"

handleInitialHelpOption "${@}" <<END-OF-HELP
Execute the specified command, with the specified arguments,
such that it picks up shared objects from the BRLTTY build tree.

Syntax: ${programName} {-h | command [argument ...]}

The working directory must be somewhere within the build tree that's to be used.
If it isn't then the source tree will be used.

Environment Variables:
  <COMMAND>_VALGRIND_DIRECTORY=path
    If set then write a valgrind memory usage log to a file named
    <command>-yyyymmdd-HHMMSS.vg in the specified directory.
END-OF-HELP

setBuildRoot

[ "${#}" -gt 0 ] || syntaxError "missing command"
commandName="${1}"
shift 1

readonly commandPath="$(type -P "${commandName}")"
[ -n "${commandPath}" ] || semanticError "command not found: ${commandName}"
readonly commandName="${commandPath##*/}"
set -- "${commandPath}" "${@}"

[ -n "${LD_LIBRARY_PATH}" ] && LD_LIBRARY_PATH=":${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH="${buildRoot}/Programs${LD_LIBRARY_PATH}"

readonly variablePrefix="${commandName^^?}"
getVariable "${variablePrefix}_VALGRIND_DIRECTORY" vgDirectory
readonly vgDirectory

[ -n "${vgDirectory}" ] && {
   [ -e "${vgDirectory}" ] || semanticError "directory not found: ${vgDirectory}"
   [ -d "${vgDirectory}" ] || semanticError "not a directory: ${vgDirectory}"
   [ -w "${vgDirectory}" ] || semanticError "directory not writable: ${vgDirectory}"

   vgFile="${vgDirectory}/${commandName}-$(date +%Y%m%d-%H%M%S).vg"
   programMessage "valgrind log: ${vgFile}"

   set -- valgrind \
       --log-file="${vgFile}" \
       --leak-check=full \
       --show-reachable=yes \
       "${@}"
}

exec "${@}"
exit "${?}"
