-
Notifications
You must be signed in to change notification settings - Fork 20
/
freemind.sh
235 lines (211 loc) · 6.6 KB
/
freemind.sh
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#!/bin/sh
# 2004-02-13, modified for Debian by [email protected]
# 2004-06-19, rewritten for Linux/UN*X by [email protected]
# (based on Jan Schulz's input)
# 2004-11-28, minor changes for version 0.8.0 by [email protected]
# 2005-01-08, removed bashims to make script POSIX conform
# 2005-01-16, added usage of FREEMIND_BASE_DIR variable
# 2005-02-18, add -Dfreemind.base.dir to make plugins work, add some ""
# and enhance debug mode.
# 2005-11-08, adding commons-codec to classpath.
# 2005-11-09, add some dpkg/rpm information and check for Sun/Blackdown VM.
# 2006-10-29, follow links to this script using readlink.
# 2008-02-02, improve Java recognition, add lsb_release, fix -x which being empty
# add -Dgnu.java.awt.peer.gtk.Graphics=Graphics2D for non-Sun JREs
# 2008-02-03, add debug values script and exit
# 2008-05-20 (fc): -Xmx256M added
# 2008-08-08 (ewl) accept OpenJDK as valid VM to run FreeMind.
# we only want to test the script, not FreeMind itself
if ( echo "${DEBUG}" | grep -qe "script" )
then
set -x
fi
########## FUNCTIONS DEFINITIONS #######################################
_debug() {
if [ -n "${DEBUG}" ]
then
echo "DEBUG: $1" >&2
shift
for text in "$@"
do
echo " ${text}" >&2
done
fi
}
_error() {
echo "ERROR: $1" >&2
shift
for text in "$@"
do
echo " ${text}" >&2
done
}
findjava() {
# We try hard to find the proper 'java' command
if [ -n "${JAVACMD}" ] && [ -x "${JAVACMD}" ]
then
_debug "Using \$JAVACMD to find java virtual machine."
elif [ -n "${JAVA_BINDIR}" ] && [ -x "${JAVA_BINDIR}/java" ]
then
JAVACMD="${JAVA_BINDIR}/java"
_debug "Using \$JAVA_BINDIR to find java virtual machine."
elif [ -n "${JAVA_HOME}" ] && [ -x "${JAVA_HOME}/bin/java" ]
then
JAVACMD="${JAVA_HOME}/bin/java"
_debug "Using \$JAVA_HOME to find java virtual machine."
else
JAVACMD=$(which java)
if [ -n "${JAVACMD}" ] && [ -x "${JAVACMD}" ]
then
_debug "Using \$PATH to find java virtual machine."
elif [ -x /usr/bin/java ]
then
_debug "Using /usr/bin/java to find java virtual machine."
JAVACMD=/usr/bin/java
fi
fi
# if we were successful, we return 0 else we complain and return 1
if [ -n "${JAVACMD}" ] && [ -x "${JAVACMD}" ]
then
_debug "Using '$JAVACMD' as java virtual machine..."
if [ -n "${DEBUG}" ]
then
"$JAVACMD" -version >&2
fi
if (! "${JAVACMD}" -version 2>&1 | grep -qe 'Java(TM)' \
-e 'OpenJDK')
then
_error "Your Java VM is not a complete implementation," \
"=======================================" \
"FREEMIND WILL MOST PROBABLY *NOT* WORK," \
"=======================================" \
"define JAVACMD, JAVA_BINDIR, JAVA_HOME or PATH in order" \
"to point to such a VM. See the manpage of freemind(1) for details."
JAVA_TYPE=other
else
JAVA_TYPE=sun
fi
return 0
else
_error "Couldn't find a java virtual machine," \
"define JAVACMD, JAVA_BINDIR, JAVA_HOME or PATH."
return 1
fi
}
_source() {
if [ -f "$1" ]
then
_debug "Sourcing '$1'."
. "$1"
fi
}
output_debug_info() {
if [ -z "${DEBUG}" ]
then
return 0
fi
_debug "Freemind parameters are '${@}'."
_debug "$(uname -a)"
if [ -x "$(which lsb_release 2>/dev/null)" ]
then
_debug "$(lsb_release -a)"
else
_debug "System is not LSB conform, 'lsb_release' does not exist."
fi
if [ -x "$(which dpkg 2>/dev/null)" ]
then
_debug "The following DEB packages are installed:"
COLUMNS=132 dpkg -l | grep -i -e freemind >&2
elif [ -x "$(which rpm 2>/dev/null)" ]
then
_debug "The following RPM packages are installed:"
rpm -qa | grep -i -e freemind >&2
else
_debug "Neither dpkg nor rpm is installed."
fi
}
findFreeMindJar() {
if [ -L "$1" ] && [ -x $(which readlink) ]
then # if the script is a link and we have 'readlink' to follow it
# -m should be faster and link does always resolve, else this script
# wouldn't be called, would it?
freefile=$(readlink -mn "$1")
_debug "Link '$1' resolved to '${freefile}'."
else
freefile="$1"
fi
freepath=$(dirname "${freefile}")
freepath="${freepath%/bin}" # nothing happens if freemind is not installed
# under something/bin
# we try different possibilities to find freemind.jar
for jar in "${FREEMIND_BASE_DIR}" \
"${freepath}" "${freepath}/share/freemind" "${freepath}/freemind"
do
if [ -f "${jar}/lib/freemind.jar" ]
then
freedir="${jar}"
_debug "Freemind Directory is '${jar}'."
break
fi
done
}
fillClassPath() {
# The CLASSPATH also lets one specify additional jars, which is good, if
# you want to add a new Look&Feel jar (the motif one is so ugly...).
#
CLASSPATH="${ADD_JARS}:${CLASSPATH}:${freedir}/lib/freemind.jar:\
${freedir}/lib/jibx/jibx-run.jar:\
${freedir}/lib/jibx/xpp3.jar:\
${freedir}/lib/bindings.jar:\
${freedir}/lib/commons-lang-2.0.jar:\
${freedir}/lib/jgoodies-forms.jar:\
${freedir}/lib/jgoodies-common.jar:\
${freedir}/lib/jortho.jar:\
${freedir}/lib/xalan.jar:\
${freedir}/lib/serializer.jar:\
${freedir}/lib/xml-apis.jar:\
${freedir}/lib/xercesImpl.jar:\
${freedir}"
}
########## START MAIN PART #############################################
#--------- Put the environment together --------------------------------
_source /etc/freemind/freemindrc
_source ~/.freemind/freemindrc
findjava
if [ $? -ne 0 ]
then
exit 1
fi
output_debug_info
findFreeMindJar "$0"
if [ -z "${freedir}" ]
then
_error "Couldn't find freemind under '${freepath}'."
exit 1
fi
if [ ! -f ~/.freemind/patterns.xml ] && [ -f /etc/freemind/patterns.xml ]
then
if [ ! -d ~/.freemind ]
then
_debug "Creating directory ~/.freemind."
mkdir -p ~/.freemind
fi
_debug "Copying patterns.xml to ~/.freemind."
cp /etc/freemind/patterns.xml ~/.freemind/patterns.xml
fi
#--------- Call (at last) FreeMind -------------------------------------
fillClassPath
if [ "${FREEMIND_RUN_TYPE}" = "server" ]
then
exit 0
fi
if [ "${JAVA_TYPE}" = "sun" ]
then
_debug "Calling: '${JAVACMD} -Dfreemind.base.dir=${freedir} -cp ${CLASSPATH} freemind.main.FreeMindStarter $@'."
( echo "${DEBUG}" | grep -qe "exit" ) && exit 0 # do not start FreeMind
"${JAVACMD}" -Xmx256M -Dfreemind.base.dir="${freedir}" -cp "${CLASSPATH}" freemind.main.FreeMindStarter "$@"
else # non-Sun environments don't work currently.
_debug "Calling: '${JAVACMD} -Dgnu.java.awt.peer.gtk.Graphics=Graphics2D -Dfreemind.base.dir=${freedir} -cp ${CLASSPATH} freemind.main.FreeMindStarter $@'."
( echo "${DEBUG}" | grep -qe "exit" ) && exit 0 # do not start FreeMind
"${JAVACMD}" -Xmx256M -Dgnu.java.awt.peer.gtk.Graphics=Graphics2D -Dfreemind.base.dir="${freedir}" -cp "${CLASSPATH}" freemind.main.FreeMindStarter "$@"
fi