Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.framework / org.gvsig.andami / src / main / resources-application / gvSIG.sh @ 42649

History | View | Annotate | Download (11.6 KB)

1
#!/bin/bash
2
#
3
# gvSIG. Desktop Geographic Information System.
4
#
5
# Copyright (C) 2007-2013 gvSIG Association.
6
#
7
# This program is free software; you can redistribute it and/or
8
# modify it under the terms of the GNU General Public License
9
# as published by the Free Software Foundation; either version 3
10
# of the License, or (at your option) any later version.
11
#
12
# This program is distributed in the hope that it will be useful,
13
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
# GNU General Public License for more details.
16
#
17
# You should have received a copy of the GNU General Public License
18
# along with this program; if not, write to the Free Software
19
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
# MA  02110-1301, USA.
21
#
22
# For any additional information, do not hesitate to contact us
23
# at info AT gvsig.com, or visit our website www.gvsig.com.
24
#
25

    
26
# gvSIG.sh
27

    
28
#
29
# Notes:
30
# - find command in busybox (win32) don't support "-exec"
31
# - trap command in busybox (win32) don't support "trap comando ERR"
32
# - busybox (win32) don't support statement "local"
33
# - Careful with loop "while", changes in variables within the loop are 
34
#   lost when you leave this.  Use "for" loops to avoid this.
35
#
36

    
37
#set -x
38
set -e
39

    
40
onerror() {
41
  set +x
42
  echo "Error executing the command:"
43
  echo ">>> $BASH_COMMAND <<<"
44
  echo "At line $BASH_LINENO"
45
  exit 1
46
}
47
#trap onerror ERR
48

    
49
####################
50
# Identify OS and Architecture  #
51
####################
52

    
53
UNAME=$(uname -a)
54
if echo "$UNAME" | grep -i "win" >/dev/null; then
55
	OS="win"
56
	ARG_D32=""
57
        CPSEP=";"
58
else
59
	if echo "$UNAME" | grep -i "lin" >/dev/null ; then
60
		OS="lin"
61
		# Only linux support -d32 arg
62
		ARG_D32="-d32"
63
                CPSEP=":"
64
	else
65
		OS="unknown"
66
		ARG_D32=""
67
                CPSEP=":"
68
	fi
69
fi
70
if echo "$UNAME" | egrep -i "(x86_64)|(amd64)" >/dev/null ; then
71
	ARCH="x86_64"
72
else
73
	ARCH="x86"
74
fi
75

    
76
########################
77

    
78
getJavaArchitecture() {
79
	if [ "$ARCH" = "x86" ] ; then
80
                # Si la arquitectura del SO es x86 decimos
81
                # que la de java es x86
82
		echo "x86"
83
	else
84
                # si la arquitectura es x86_64, comprobamos
85
                # la arquitectura de la java que nos pasan
86
		if "$1" -version 2>&1 | egrep -i "64-Bit" >/dev/null ; then
87
			echo "x86_64"
88
		else
89
			echo "x86"
90
		fi
91
	fi
92
}
93

    
94
#################################
95
# Set install and home folders  #
96
#################################
97

    
98
# Go into the gvSIG installation folder, just in case
99
x=$(dirname "$0")
100
cd "$x"
101

    
102
if [ "$GVSIG_APPLICATION_NAME" = "" ] ; then
103
  GVSIG_APPLICATION_NAME=gvSIG
104
fi
105
export GVSIG_APPLICATION_NAME
106

    
107
# gvSIG installation folder
108
export GVSIG_INSTALL_FOLDER="$PWD"
109

    
110
# gvSIG home folder
111
if [ "$OS" = "win" ] ; then
112
  # https://redmine.gvsig.net/redmine/issues/4033
113
  export GVSIG_HOME_FOLDER="$USERPROFILE/$GVSIG_APPLICATION_NAME" 
114
else
115
  export GVSIG_HOME_FOLDER="$HOME/$GVSIG_APPLICATION_NAME" 
116
fi
117

    
118
if [ ! -d "$GVSIG_HOME_FOLDER" ] ; then
119
  mkdir -p "$GVSIG_HOME_FOLDER"
120
fi
121

    
122
####################
123
# Load config file #
124
####################
125

    
126
if [ -f "$GVSIG_INSTALL_FOLDER/gvSIG.config" ] ; then
127
  . "$GVSIG_INSTALL_FOLDER/gvSIG.config"
128
fi
129

    
130
#################
131
# Logger config #
132
#################
133

    
134
LOGGER_FILE="$GVSIG_HOME_FOLDER/${GVSIG_APPLICATION_NAME}-launcher.log"
135
echo > "$LOGGER_FILE"
136

    
137

    
138
logger () {
139
  # level (INFO/WARNIG) message
140
  LOGGER_LEVEL="$1"
141
  shift
142
  echo "$LOGGER_LEVEL launch $@"
143
  echo "$LOGGER_LEVEL launch $@" >> "$LOGGER_FILE"
144
}
145

    
146
logger_info () {
147
  logger "INFO" "$@"
148
}
149

    
150
logger_warn () {
151
  logger "WARNING" "$@"
152
}
153

    
154
logger_cmd() {
155
  logger_info "$@"
156
  eval $@ 2>&1 | tee -a  "$LOGGER_FILE"
157
}
158

    
159
#########################
160
# Locate whitch command #
161
#########################
162

    
163
if type which >/dev/null; then
164
        WHICH=which
165
else
166
        WHICH=type
167
fi
168

    
169
logger_info "gvSIG Installation folder: $GVSIG_INSTALL_FOLDER"
170
logger_info "gvSIG home folder: $GVSIG_HOME_FOLDER"
171

    
172
##########################################################
173
# Search in gvSIG/extensiones the architecture of plugins
174
# installeds and set as PREFERED_ARCHITECTURE
175
# Note: Busybox n windows don't support -exec in find
176
##########################################################
177

    
178
setPreferedArchitecture() {
179
  pf_foundArch=""
180
  pf_fname=""
181
  cd "$GVSIG_INSTALL_FOLDER"
182
  find . -name package.info | while read pf_fname
183
  do
184
    cat $pf_fname
185
  done | grep "architecture=[^a]" | sort | head -n 1 | read pf_foundArch || true
186
  # El comando "read x" de la linea anterior puede fallar si
187
  # no hay ningun plugin depdendiente de la arquitectura, por eso
188
  # el "|| true" del final.
189
  if [ "X${pf_foundArch}X" != "XX" ] ; then
190
	  eval $pf_foundArch
191
	  PREFERED_ARCHITECTURE="$architecture"
192
  else
193
	  PREFERED_ARCHITECTURE="$ARCH"
194
  fi
195
  cd - >/dev/null
196
}
197

    
198
setPreferedArchitecture
199

    
200
##########################################################
201

    
202
export JAVA_HOME
203
export JAVA
204
export FORCE_JAVA_32BITS
205

    
206
FORCE_JAVA_32BITS=""
207
JAVA_HOME_OTHER_ARCHITECTURE=""
208

    
209
# PRIVATE JAVA HOMEs
210
PJH1=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.6* 2>/dev/null | head -1)
211
PJH2=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.5* 2>/dev/null | head -1)
212
PJH3=
213
PJH4=
214
PJH5=
215
PJH6=
216
if [ -d "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre_7_windows_i586/jre" ] ; then
217
    PJH5="$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre_7_windows_i586/jre"
218
fi
219
if [ -d /usr/lib/jvm ] ; then
220
    PJH6=$(find /usr/lib/jvm -maxdepth 1 ! -name "jvm" -name "[a-zA-Z]*" ! -type l -print)
221
fi
222

    
223
#
224
# in next line, JAVA_HOME is set during instalation process
225
DEFAULT_JAVA_HOME="${JAVA_HOME}"
226
#
227
#
228
# Try to use java from:
229
# 1. Java specified in JAVA_HOME variable
230
# 2. Java specified in the instalation process
231
# 3. Java in the HOME/gvsig/jre folder (optionally created during installation process)
232
# 4. Java in the system path.
233
#
234

    
235
for JAVA_HOME_TO_USE in "$JAVA_HOME" "$DEFAULT_JAVA_HOME" "$PJH1" "$PJH2" "$PJH3" "$PJH4" "$PJH5" $PJH6 ""
236
do
237
        if [ "$JAVA_HOME_TO_USE" = "" ] ; then
238
                continue
239
        fi
240
	logger_info "Checking JAVA_HOME ${JAVA_HOME_TO_USE}..."
241
        if [ ! -d "$JAVA_HOME_TO_USE" ] ; then
242
                logger_warn "Folder not found ($JAVA_HOME_TO_USE), skip"
243
                continue
244
        fi
245
        if [ ! -x "$JAVA_HOME_TO_USE/bin/java" ] ; then
246
                logger_warn "Not a valid JAVA_HOME ($JAVA_HOME_TO_USE), bin/java not found, skip"
247
                continue
248
        fi
249
	JAVA_ARCH=$(getJavaArchitecture "$JAVA_HOME_TO_USE/bin/java")
250
	if [ "$JAVA_ARCH" != "$PREFERED_ARCHITECTURE" ] ; then
251
                JAVA_HOME_OTHER_ARCHITECTURE="$JAVA_HOME_TO_USE"
252
                logger_warn "Prefered architecture is $PREFERED_ARCHITECTURE, java $JAVA_ARCH found in $JAVA_HOME_TO_USE, skip"
253
                continue
254
        fi
255
        break
256
done
257

    
258
if [ "$JAVA_HOME_TO_USE" = "" ] ; then
259
        # Try to use the java in the system path
260
        if ! type java >/dev/null ; then
261
                # java not found in the system path
262
                if [ "$JAVA_HOME_OTHER_ARCHITECTURE" != "" ] ; then
263
                        JAVA_HOME="$JAVA_HOME_OTHER_ARCHITECTURE"
264
                        JAVA="$JAVA_HOME/bin/java"
265
                        logger_warn "java $PREFERED_ARCHITECTURE not found in the system path, using $JAVA_HOME_OTHER_ARCHITECTURE"
266
                else
267
                        logger_warn "java not found in the system"
268
                        exit 1
269
                fi
270
        else
271
		if [ "$(getJavaArchitecture $($WHICH java))" != "$PREFERED_ARCHITECTURE" ] ; then
272
                      logger_warn "java $PREFERED_ARCHITECTURE not found, using $($WHICH java)"
273
                fi
274
                unset JAVA_HOME
275
                JAVA="java"
276
        fi
277
else
278
        JAVA_HOME="$JAVA_HOME_TO_USE"
279
        JAVA="$JAVA_HOME/bin/java"
280
fi
281

    
282
if [ "$PREFERED_ARCHITECTURE" = "x86" ] ; then
283
	FORCE_JAVA_32BITS="$ARG_D32"
284
else
285
	FORCE_JAVA_32BITS=""
286

    
287
fi
288
logger_info "Using java " $($WHICH "$JAVA")
289

    
290
###################################################################
291
# gvSIG native libraries location
292
###################################################################
293

    
294
export GVSIG_NATIVE_LIBS=""
295
export LD_LIBRARY_PATH=""
296
export PATH
297
export GVSIG_PROPERTIES=""
298

    
299
add_library_path() {
300
  #logger_info "add_library_path $1"
301
  LD_LIBRARY_PATH="$LD_LIBRARY_PATH${CPSEP}$1"
302
  GVSIG_NATIVE_LIBS="$GVSIG_NATIVE_LIBS${CPSEP}$1"
303
  PATH="$PATH${CPSEP}$1"
304
}
305

    
306
list_shared_library_dependencies() {
307
  logger_info "Cheking shared library dependencies for $1"
308
  if [ "$OS" = "win" ] ; then
309
        logger_cmd ./cygcheck.exe "$1"
310
  else
311
        logger_cmd ldd "$1"
312
  fi || logger_warn "Problens checking shared library $1"  || true
313
}
314

    
315
add_classpath() {
316
  GVSIG_CLASSPATH="$GVSIG_CLASSPATH${CPSEP}$1"
317
}
318

    
319
add_property() {
320
  GVSIG_PROPERTIES="$GVSIG_PROPERTIES -D$1=$2"
321
}
322

    
323
###################################################################
324
# gvSIG java libraries location
325
###################################################################
326

    
327
export LIBRARIES=""
328
# Load gvSIG Andami jars and dependencies for the classpath
329
for i in "$GVSIG_INSTALL_FOLDER/lib/"*.jar ; do
330
  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.jar" -a "$i" != "" ]; then
331
    LIBRARIES="${LIBRARIES}${CPSEP}${i}"
332
  fi
333
done
334
for i in "$GVSIG_INSTALL_FOLDER/lib/"*.zip ; do
335
  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.zip" -a "$i" != "" ]; then
336
    LIBRARIES="${LIBRARIES}${CPSEP}${i}"
337
  fi
338
done
339

    
340
# echo Initial libraries found: ${LIBRARIES}
341

    
342
# gvSIG Andami launcher
343

    
344
if [ "$GVSIG_LAUNCHER" = "" ] ; then
345
  GVSIG_LAUNCHER=org.gvsig.andamiupdater.Updater
346
fi
347
if [ "$GVSIG_PARAMS" = "" ] ; then
348
  GVSIG_PARAMS="$GVSIG_APPLICATION_NAME gvSIG/extensiones $@"
349
fi
350

    
351
export GVSIG_LAUNCHER
352
export GVSIG_PARAMS
353

    
354
# gvSIG initial classpath
355
export GVSIG_CLASSPATH="$LIBRARIES:$GVSIG_CLASSPATH"
356

    
357
########################
358
# Memory configuration #
359
########################
360

    
361
# Initial gvSIG memory (M=Megabytes, G=Gigabytes)
362
export GVSIG_INITIAL_MEM=256M
363
# Maximum gvSIG memory (M=Megabytes, G=Gigabytes)
364
export GVSIG_MAX_MEM=1024M
365
# Maximum permanent memory size: needed to load classes and statics
366
export GVSIG_MAX_PERM_SIZE=128M
367

    
368

    
369
#############################
370
# Execute plugin's autorun  #
371
#############################
372

    
373
for PLUGIN_FOLDER in "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/"*
374
do
375
  if [ -f "$PLUGIN_FOLDER/autorun.sh" ] ; then
376
    logger_info "Running autorun from plugin " $(basename "$PLUGIN_FOLDER")
377
    . "$PLUGIN_FOLDER/autorun.sh"
378
    cd "$GVSIG_INSTALL_FOLDER"
379
  fi
380
done
381

    
382
if [ "$OS" = "win" ] ; then
383
	add_library_path "$GVSIG_INSTALL_FOLDER"
384
else
385
	add_library_path "/usr/lib"
386
fi
387

    
388
logger_info "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
389

    
390
#####################
391
# Java debug mode ? #
392
#####################
393

    
394
DEBUG_ARGS="X${@}X"
395
if expr match "$DEBUG_ARGS" "X.*--pause.*X" >/dev/null; then
396
    DEBUG_PAUSE="y"
397
else
398
    DEBUG_PAUSE="n"
399
fi
400

    
401
if expr match "$DEBUG_ARGS" "X.*--debug.*X" >/dev/null; then
402
  DEBUG_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=8765,server=y,suspend=$DEBUG_PAUSE"
403
else
404
  DEBUG_OPTIONS=""
405
fi
406

    
407
################
408
# Launch gvSIG #
409
################
410

    
411
# For Java parameters documentation and more parameters look at:
412
# http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html
413
# http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
414

    
415
logger_info Launching gvSIG: ${JAVA} \
416
	$FORCE_JAVA_32BITS \
417
	-Xms${GVSIG_INITIAL_MEM} \
418
	-Xmx${GVSIG_MAX_MEM} \
419
	-XX:MaxPermSize=${GVSIG_MAX_PERM_SIZE} \
420
        $DEBUG_OPTIONS \
421
	-Djava.library.path=\"${GVSIG_NATIVE_LIBS}\" \
422
        $GVSIG_PROPERTIES \
423
	-cp $GVSIG_CLASSPATH \
424
        $GVSIG_JAVA_PARAMS \
425
	$GVSIG_LAUNCHER $GVSIG_PARAMS
426

    
427
"${JAVA}" \
428
	$FORCE_JAVA_32BITS \
429
	-Xms${GVSIG_INITIAL_MEM} \
430
	-Xmx${GVSIG_MAX_MEM} \
431
	-XX:MaxPermSize=${GVSIG_MAX_PERM_SIZE} \
432
        $DEBUG_OPTIONS \
433
	-Djava.library.path="${GVSIG_NATIVE_LIBS}" \
434
        $GVSIG_PROPERTIES \
435
	-cp "$GVSIG_CLASSPATH" \
436
        $GVSIG_JAVA_PARAMS \
437
	$GVSIG_LAUNCHER $GVSIG_PARAMS
438