diff options
Diffstat (limited to 'solenv/bin/install-gdb-printers')
-rwxr-xr-x | solenv/bin/install-gdb-printers | 143 |
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: |