summaryrefslogtreecommitdiffstats
path: root/solenv/bin/install-gdb-printers
diff options
context:
space:
mode:
Diffstat (limited to 'solenv/bin/install-gdb-printers')
-rwxr-xr-xsolenv/bin/install-gdb-printers143
1 files changed, 143 insertions, 0 deletions
diff --git a/solenv/bin/install-gdb-printers b/solenv/bin/install-gdb-printers
new file mode 100755
index 000000000..3eae4d9ef
--- /dev/null
+++ b/solenv/bin/install-gdb-printers
@@ -0,0 +1,143 @@
+#!/usr/bin/env bash
+#
+# 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/.
+#
+
+GDBDIR="${SRCDIR}/solenv/gdb"
+INSTALLDIR="${TESTINSTALLDIR}"
+DYLIB=so
+if [ "$(uname)" = Darwin ]; then
+ INSTALLDIR=$INSTALLDIR/LibreOffice.app/Contents
+ DYLIB=dylib
+fi
+
+die() {
+ echo "$1" >&2
+ exit 1
+}
+
+usage() {
+ cat <<EOT
+Install gdb pretty printers and autoloaders for them.
+
+Usage:
+install-gdb-printers [ -a dir ] [ -i dir ] [ -p dir ] [ -c ]
+install-gdb-printers -h
+
+Options:
+-a dir The dir where autoloaders will be placed. Defaults to whatever -i
+ is.
+-c Create the autoloader's dir if it does not exist. This option only
+ makes sense if both -a and -i are used.
+-h Show this help text.
+-i dir The dir where libreoffice is installed. Defaults to whatever -a is.
+-p dir The dir where pretty printers are placed.
+
+Env. variables:
+DESTDIR If set, it is prepended to all dir arguments.
+
+Examples:
+1) Install pretty printers into /usr/share/libreoffice/gdb, with
+ autoloaders in /usr/share/gdb/auto-load (run
+ "info gdb 'Extending GDB' Python Auto-loading" to learn more) and
+ installation in /usr/lib64/libreoffice (this is what Fedora does):
+
+install-gdb-printers -a /usr/share/gdb/auto-load/usr/lib64/libreoffice -c \\
+ -i /usr/lib64/libreoffice -p /usr/share/libreoffice/gdb
+EOT
+}
+
+make_autoload() {
+ local lib="${DESTDIR}${autoloaddir}/$2/$3"
+ local merged="$4"
+
+ local resolved;
+ resolved=$(readlink "${DESTDIR}${installdir}/$2/$3")
+ [ -n "$resolved" ] && lib=$resolved
+ local dir="${lib%/*}"
+
+ if ${create}; then
+ mkdir -p "${dir}" || die "cannot create dir '${dir}'"
+ fi
+
+ [[ -f ${lib}-gdb.py ]] && rm -f "${lib}-gdb.py"
+ if [[ -n "${merged}" ]]; then
+ sed -e "s!%PYTHONDIR%!${pythondir}!" -e "s!%MODULES%!${*:5}!" \
+ "${GDBDIR}/autoload.template" > "${lib}-gdb.py"
+ else
+ sed -e "s!%PYTHONDIR%!${pythondir}!" -e "s!%MODULES%!$1!" \
+ "${GDBDIR}/autoload.template" > "${lib}-gdb.py"
+ fi
+}
+
+# dir where the autoloaders will be placed
+autoloaddir=
+# The installation dir. If only one of these is set, the other is set to
+# the same value.
+installdir=
+# dir where the pretty printers will be placed
+pythondir="${GDBDIR}"
+# Create autoload dir if it does not exist. This only makes sense when
+# installing into system gdb dir, so $autoloaddir must be absolute path.
+create=false
+
+# b de g jklmno qrstuvwxyzABCDEFGHIJK MNOPQRSTUVWXYZ0123456789
+while getopts :a:cfhi:p:L opt; do
+ case ${opt} in
+ a) autoloaddir="${OPTARG}" ;;
+ c) create=true ;;
+ h) usage; exit ;;
+ i) installdir="${OPTARG}" ;;
+ p) pythondir="${OPTARG}" ;;
+ *) die "unknown option ${OPTARG}" ;;
+ esac
+done
+
+if [[ -z ${autoloaddir} && -z ${installdir} ]]; then
+ autoloaddir="${INSTALLDIR}"
+ installdir="${INSTALLDIR}"
+elif [[ -n ${autoloaddir} && -z ${installdir} ]]; then
+ installdir="${autoloaddir}"
+elif [[ -z ${autoloaddir} && -n ${installdir} ]]; then
+ autoloaddir="${installdir}"
+fi
+
+if [[ -n ${DESTDIR} ]]; then
+ [[ ${autoloaddir:0:1} = / ]] || die 'the arg to -a must be an absolute path'
+ [[ ${pythondir:0:1} = / ]] || die 'the arg to -p must be an absolute path'
+fi
+if ${create}; then
+ [[ ${autoloaddir:0:1} = / ]] || die 'the arg to -a must be an absolute path'
+else
+ [[ ! -d ${DESTDIR}${autoloaddir} ]] && die "directory '${DESTDIR}${autoloaddir}' does not exist"
+fi
+[[ ! -d ${DESTDIR}${installdir} ]] && die "directory '${DESTDIR}${installdir}' does not exist"
+[[ ! -d ${GDBDIR} ]] && die "directory '${GDBDIR}' does not exist"
+
+if [[ ${DESTDIR}${pythondir} != ${GDBDIR} ]]; then
+ mkdir -p "${DESTDIR}${pythondir}" || die "cannot create dir '${DESTDIR}${pythondir}'"
+ cp -pr "${GDBDIR}/libreoffice" "${DESTDIR}${pythondir}"
+fi
+
+if [[ -n "${MERGELIBS}" ]]; then
+ make_autoload merged program libmergedlo."$DYLIB" merge svl tl basegfx vcl utl
+ make_autoload cppu program libuno_cppu."$DYLIB".3
+ make_autoload sal program libuno_sal."$DYLIB".3
+ make_autoload sw program libswlo."$DYLIB"
+else
+ make_autoload basegfx program libbasegfxlo."$DYLIB"
+ make_autoload cppu program libuno_cppu."$DYLIB".3
+ make_autoload sal program libuno_sal."$DYLIB".3
+ make_autoload svl program libsvllo."$DYLIB"
+ make_autoload sw program libswlo."$DYLIB"
+ make_autoload tl program libtllo."$DYLIB"
+ make_autoload utl program libutllo."$DYLIB"
+ make_autoload vcl program libvcllo."$DYLIB"
+fi
+make_autoload writerfilter program libwriterfilterlo."$DYLIB"
+
+# vim:set shiftwidth=4 softtabstop=4 expandtab: