blob: 036339e4411293c91b4c9f561d37813ee4bcf33a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#!/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="$(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 `[[ ${MERGELIBS} == "ALL" ]] && echo sw`
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"
fi
make_autoload writerfilter program libwriterfilterlo."$DYLIB"
# vim:set shiftwidth=4 softtabstop=4 expandtab:
|