- #!/bin/sh
- #
- # This file is part of the LibreOffice project.
- #
- # This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- #
- # This file incorporates work covered by the following license notice:
- #
- # Licensed to the Apache Software Foundation (ASF) under one or more
- # contributor license agreements. See the NOTICE file distributed
- # with this work for additional information regarding copyright
- # ownership. The ASF licenses this file to you under the Apache
- # License, Version 2.0 (the "License"); you may not use this file
- # except in compliance with the License. You may obtain a copy of
- # the License at http://www.apache.org/licenses/LICENSE-2.0 .
- #
- # use POSIX locale for well-defined tool output
- LO_SAVE_LC_ALL="$LC_ALL"
- LC_ALL=C
- export LC_ALL
- #
- test -r /etc/sysconfig/libreoffice5 && . /etc/sysconfig/libreoffice5 ||:
- # resolve installation directory
- sd_cwd=$(pwd)
- sd_res="$0"
- while [ -h "$sd_res" ] ; do
- sd_dirname=$(dirname "$sd_res")
- cd "$sd_dirname" || exit $?
- sd_basename=$(basename "$sd_res")
- sd_res=$(ls -l "$sd_basename" | sed "s/.*$sd_basename -> //g")
- done
- sd_dirname=$(dirname "$sd_res")
- cd "$sd_dirname" || exit $?
- sd_prog=$(pwd)
- cd "$sd_cwd" || exit $?
- # linked build needs additional settings
- if [ -e "${sd_prog}/ooenv" ] ; then
- # shellcheck source=../../instsetoo_native/ooenv
- . "${sd_prog}/ooenv"
- fi
- # try to get some debug output?
- GDBTRACECHECK=
- STRACECHECK=
- VALGRINDCHECK=
- RRCHECK=
- # count number of selected checks; only one is allowed
- checks=
- EXTRAOPT=
- # force the --valgrind option if the VALGRIND variable is set
- test -n "$VALGRIND" && EXTRAOPT="--valgrind"
- # force the --record option if the RR variable is set
- test -n "$RR" && EXTRAOPT="--record"
- for arg in "$@" $EXTRAOPT ; do
- case "$arg" in
- --record)
- if command -v rr >/dev/null ; then
- # smoketest may already be recorded => ignore nested
- RRCHECK="rr record --nested=ignore"
- checks="c$checks"
- else
- echo "Error: Can't find the tool \"rr\", --record option will be ignored."
- exit 1
- fi
- ;;
- --backtrace)
- if command -v gdb >/dev/null ; then
- GDBTRACECHECK="gdb -nx --command=$sd_prog/gdbtrace --args"
- checks="c$checks"
- else
- echo "Error: Can't find the tool \"gdb\", --backtrace option will be ignored."
- exit 1
- fi
- ;;
- --strace)
- if command -v strace >/dev/null ; then
- STRACECHECK="strace -o strace.log -f -tt -s 256"
- checks="c$checks"
- else
- echo "Error: Can't find the tool \"strace\", --strace option will be ignored."
- exit 1;
- fi
- ;;
- --valgrind)
- test -n "$VALGRINDCHECK" && continue;
- if command -v valgrind >/dev/null ; then
- # another valgrind tool might be forced via the environment variable
- test -z "$VALGRIND" && VALGRIND="memcheck"
- # --trace-children-skip is pretty useful but supported only with valgrind >= 3.6.0
- valgrind_ver=$(valgrind --version | sed -e "s/valgrind-//")
- valgrind_ver_maj=$(echo "$valgrind_ver" | awk -F. '{ print $1 }')
- valgrind_ver_min=$(echo "$valgrind_ver" | awk -F. '{ print $2 }')
- valgrind_skip=
- if [ "$valgrind_ver_maj" -gt 3 ] || ( [ "$valgrind_ver_maj" -eq 3 ] && [ "$valgrind_ver_min" -ge 6 ] ) ; then
- valgrind_skip='--trace-children-skip=*/java,*/gij'
- fi
- # finally set the valgrind check
- VALGRINDCHECK="valgrind --tool=$VALGRIND --trace-children=yes $valgrind_skip --num-callers=50 --error-limit=no"
- echo "use kill -SIGUSR2 pid to dump traces of active allocations"
- checks="c$checks"
- case "$VALGRIND" in
- helgrind|memcheck|massif|exp-dhat)
- export G_SLICE=always-malloc
- export GLIBCXX_FORCE_NEW=1
- ;;
- callgrind)
- unset MALLOC_CHECK_ MALLOC_PERTURB_ G_SLICE
- export SAL_DISABLE_FLOATGRAB=1
- export OOO_DISABLE_RECOVERY=1
- export SAL_DISABLE_WATCHDOG=1
- export LD_BIND_NOW=1
- ;;
- esac
- else
- echo "Error: Can't find the tool \"valgrind\", --valgrind option will be ignored"
- exit 1
- fi
- ;;
- esac
- done
- if echo "$checks" | grep -q "cc" ; then
- echo "Error: The debug options --record, --backtrace, --strace, and --valgrind cannot be used together."
- echo " Please, use them one by one."
- exit 1;
- fi
- case "$(uname -s)" in
- OpenBSD)
- # this is a temporary hack until we can live with the default search paths
- LD_LIBRARY_PATH="$sd_prog${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
- JAVA_HOME=$(javaPathHelper -h libreoffice-java 2> /dev/null)
- export LD_LIBRARY_PATH
- if [ -n "${JAVA_HOME}" ]; then
- export JAVA_HOME
- fi
- ;;
- NetBSD|DragonFly)
- # this is a temporary hack until we can live with the default search paths
- LD_LIBRARY_PATH="$sd_prog${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
- export LD_LIBRARY_PATH
- ;;
- esac
- # restore locale setting, avoiding to export empty LC_ALL, s. tdf#130080
- if [ -n "$LO_SAVE_LC_ALL" ]; then
- LC_ALL="$LO_SAVE_LC_ALL"
- else
- unset LC_ALL
- fi
- # run soffice.bin directly when you want to get the backtrace
- if [ -n "$GDBTRACECHECK" ] ; then
- exec $GDBTRACECHECK "$sd_prog/soffice.bin" "$@"
- fi
- # valgrind --log-file=valgrind.log does not work well with --trace-children=yes
- if [ -n "$VALGRINDCHECK" ] && [ -z "$VALGRIND" ] ; then
- echo "redirecting the standard and the error output to valgrind.log"
- exec > valgrind.log 2>&1
- fi
- # ALT: find certificates database folder
- _find_cert_dir() { # path [mindepth [maxdepth [name [variable_name]]]]
- local md="${2:-1}"
- local Md="${3:-10}"
- local N="${4:-cert8.db}"
- local var="${5:-MOZILLA_CERTIFICATE_FOLDER}"
- local cert8
- test -d "$1" || return
- cert8="$(find "$1" -mindepth "$md" -maxdepth "$Md" -name "$N" -print -quit)"
- test -n "$cert8" || return
- eval "export $var='$(dirname $cert8)'"
- }
- test -n "$MOZILLA_CERTIFICATE_FOLDER" || _find_cert_dir $HOME/.mozilla/firefox 2 2
- test -n "$MOZILLA_CERTIFICATE_FOLDER" || _find_cert_dir $HOME/.mozilla 3 3
- test -n "$MOZILLA_CERTIFICATE_FOLDER" || _find_cert_dir $HOME/.local
- # oosplash does the rest: forcing pages in, javaldx etc. are
- exec $RRCHECK $VALGRINDCHECK $STRACECHECK "$sd_prog/oosplash" "$@"
