Statistics
| Revision:

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

History | View | Annotate | Download (11.8 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
# - busybox (win32) don't support typeset
36
#
37

    
38
#set -x
39
set -e
40

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

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

    
54
UNAME=$(uname -a | tr '[:upper:]' '[:lower:]')
55
if [ "${UNAME/*win*/win}" == "win" ] ; then
56
	OS="win"
57
	ARG_D32=""
58
        CPSEP=";"
59
else
60
        if [ "${UNAME/*lin*/lin}" == "lin" ] ; then
61
		OS="lin"
62
		# Only linux support -d32 arg
63
		ARG_D32="-d32"
64
                CPSEP=":"
65
	else
66
		OS="unknown"
67
		ARG_D32=""
68
                CPSEP=":"
69
	fi
70
fi
71
if [ "${UNAME/*x86_64*/x86_64}" == "x86_64" -o  "${UNAME/*x86_64*/amd64}" == "amd64" ] ; then
72
	ARCH="x86_64"
73
else
74
	ARCH="x86"
75
fi
76

    
77
if [ "${OS}" == "win" ] ; then
78
  xmkdir() {
79
    if [ "$1" == "-p" ] ; then
80
      if [ "${2:1:2}" == ":/" ] ; then
81
	cd "${2:0:3}"
82
	if mkdir -p "${2:3}" ] ; then
83
	  cd - >/dev/null
84
	else
85
	  cd - >/dev/null
86
	  false
87
	fi
88
      else
89
	mkdir -p "$2"
90
      fi
91
    else
92
      mkdir "$1"
93
    fi
94
  }
95
else
96
  xmkdir() {
97
    if [ "$1" == "-p" ] ; then
98
      mkdir -p "$2"
99
    else
100
      mkdir "$1"
101
    fi
102
  }
103
fi
104

    
105
########################
106

    
107
getJavaArchitecture() {
108
	if [ "$ARCH" = "x86" ] ; then
109
                # Si la arquitectura del SO es x86 decimos
110
                # que la de java es x86
111
		echo "x86"
112
	else
113
                # si la arquitectura es x86_64, comprobamos
114
                # la arquitectura de la java que nos pasan
115
		if "$1" -version 2>&1 | egrep -i "64-Bit" >/dev/null ; then
116
			echo "x86_64"
117
		else
118
			echo "x86"
119
		fi
120
	fi
121
}
122

    
123
#################################
124
# Set install and home folders  #
125
#################################
126

    
127
# Go into the gvSIG installation folder, just in case
128
x=$(dirname "$0")
129
cd "$x"
130

    
131
if [ "$GVSIG_APPLICATION_NAME" = "" ] ; then
132
  GVSIG_APPLICATION_NAME=gvSIG
133
fi
134
export GVSIG_APPLICATION_NAME
135

    
136
# gvSIG installation folder
137
export GVSIG_INSTALL_FOLDER="$PWD"
138

    
139
# gvSIG home folder
140
if [ "$OS" = "win" ] ; then
141
  # https://redmine.gvsig.net/redmine/issues/4033
142
  export GVSIG_HOME_FOLDER="$USERPROFILE/$GVSIG_APPLICATION_NAME"
143
else
144
  export GVSIG_HOME_FOLDER="$HOME/$GVSIG_APPLICATION_NAME"
145
fi
146

    
147
####################
148
# Load config file #
149
####################
150

    
151
if [ -f "$GVSIG_INSTALL_FOLDER/gvSIG.config" ] ; then
152
  . "$GVSIG_INSTALL_FOLDER/gvSIG.config"
153
fi
154
if [ -f "$GVSIG_HOME_FOLDER/gvSIG.config" ] ; then
155
  . "$GVSIG_HOME_FOLDER/gvSIG.config"
156
fi
157

    
158
if [ ! -d "$GVSIG_HOME_FOLDER" ] ; then
159
  xmkdir -p "$GVSIG_HOME_FOLDER"
160
fi
161

    
162
#################
163
# Logger config #
164
#################
165

    
166
LOGGER_FILE="$GVSIG_HOME_FOLDER/${GVSIG_APPLICATION_NAME}-launcher.log"
167
echo > "$LOGGER_FILE"
168

    
169

    
170
logger () {
171
  # level (INFO/WARNIG) message
172
  LOGGER_LEVEL="$1"
173
  shift
174
  echo "$LOGGER_LEVEL launch $@"
175
  echo "$LOGGER_LEVEL launch $@" >> "$LOGGER_FILE"
176
}
177

    
178
logger_info () {
179
  logger "INFO" "$@"
180
}
181

    
182
logger_warn () {
183
  logger "WARNING" "$@"
184
}
185

    
186
logger_cmd() {
187
  logger_info "$@"
188
  eval $@ 2>&1 | tee -a  "$LOGGER_FILE"
189
}
190

    
191
logger_info "gvSIG Installation folder: $GVSIG_INSTALL_FOLDER"
192
logger_info "gvSIG home folder: $GVSIG_HOME_FOLDER"
193

    
194
##########################################################
195
# Search in gvSIG/extensiones the architecture of plugins
196
# installeds and set as PREFERED_ARCHITECTURE
197
# Note: Busybox n windows don't support -exec in find
198
##########################################################
199

    
200
setPreferedArchitecture() {
201
  pf_foundArch=""
202
  pf_fname=""
203
  cd "$GVSIG_INSTALL_FOLDER"
204
  find . -name package.info | while read pf_fname
205
  do
206
    cat $pf_fname
207
  done | grep "architecture=[^a]" | sort | head -n 1 | read pf_foundArch || true
208
  # El comando "read x" de la linea anterior puede fallar si
209
  # no hay ningun plugin depdendiente de la arquitectura, por eso
210
  # el "|| true" del final.
211
  if [ "X${pf_foundArch}X" != "XX" ] ; then
212
	  eval $pf_foundArch
213
	  PREFERED_ARCHITECTURE="$architecture"
214
  else
215
	  PREFERED_ARCHITECTURE="$ARCH"
216
  fi
217
  cd - >/dev/null
218
}
219

    
220
setPreferedArchitecture
221

    
222
##########################################################
223

    
224
export JAVA_HOME
225
export JAVA
226
export FORCE_JAVA_32BITS
227

    
228
FORCE_JAVA_32BITS=""
229
JAVA_HOME_OTHER_ARCHITECTURE=""
230

    
231
# PRIVATE JAVA HOMEs
232
PJH1=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.6* 2>/dev/null | head -1)
233
PJH2=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.5* 2>/dev/null | head -1)
234
PJH3=
235
PJH4=
236
PJH5=
237
PJH6=
238
if [ -d "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre_7_windows_i586/jre" ] ; then
239
    PJH5="$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre_7_windows_i586/jre"
240
fi
241
if [ -d /usr/lib/jvm ] ; then
242
    PJH6=$(find /usr/lib/jvm -maxdepth 1 ! -name "jvm" -name "[a-zA-Z]*" ! -type l -print)
243
fi
244

    
245
#
246
# in next line, JAVA_HOME is set during instalation process
247
DEFAULT_JAVA_HOME="${JAVA_HOME}"
248
#
249
#
250
# Try to use java from:
251
# 1. Java specified in JAVA_HOME variable
252
# 2. Java specified in the instalation process
253
# 3. Java in the HOME/gvsig/jre folder (optionally created during installation process)
254
# 4. Java in the system path.
255
#
256

    
257
for JAVA_HOME_TO_USE in "$JAVA_HOME" "$DEFAULT_JAVA_HOME" "$PJH1" "$PJH2" "$PJH3" "$PJH4" "$PJH5" $PJH6 ""
258
do
259
        if [ "$JAVA_HOME_TO_USE" = "" ] ; then
260
                continue
261
        fi
262
	logger_info "Checking JAVA_HOME ${JAVA_HOME_TO_USE}..."
263
        if [ ! -d "$JAVA_HOME_TO_USE" ] ; then
264
                logger_warn "Folder not found ($JAVA_HOME_TO_USE), skip"
265
                continue
266
        fi
267
        if [ ! -x "$JAVA_HOME_TO_USE/bin/java" ] ; then
268
                logger_warn "Not a valid JAVA_HOME ($JAVA_HOME_TO_USE), bin/java not found, skip"
269
                continue
270
        fi
271
	JAVA_ARCH=$(getJavaArchitecture "$JAVA_HOME_TO_USE/bin/java")
272
	if [ "$JAVA_ARCH" != "$PREFERED_ARCHITECTURE" ] ; then
273
                JAVA_HOME_OTHER_ARCHITECTURE="$JAVA_HOME_TO_USE"
274
                logger_warn "Prefered architecture is $PREFERED_ARCHITECTURE, java $JAVA_ARCH found in $JAVA_HOME_TO_USE, skip"
275
                continue
276
        fi
277
        break
278
done
279

    
280
if [ "$JAVA_HOME_TO_USE" = "" ] ; then
281
        # Try to use the java in the system path
282
        if ! type java >/dev/null ; then
283
                # java not found in the system path
284
                if [ "$JAVA_HOME_OTHER_ARCHITECTURE" != "" ] ; then
285
                        JAVA_HOME="$JAVA_HOME_OTHER_ARCHITECTURE"
286
                        JAVA="$JAVA_HOME/bin/java"
287
                        logger_warn "java $PREFERED_ARCHITECTURE not found in the system path, using $JAVA_HOME_OTHER_ARCHITECTURE"
288
                else
289
                        logger_warn "java not found in the system"
290
                        exit 1
291
                fi
292
        else
293
		if [ "$(getJavaArchitecture $(type -p java))" != "$PREFERED_ARCHITECTURE" ] ; then
294
                      logger_warn "java $PREFERED_ARCHITECTURE not found, using $(type -p java)"
295
                fi
296
                unset JAVA_HOME
297
                JAVA="java"
298
        fi
299
else
300
        JAVA_HOME="$JAVA_HOME_TO_USE"
301
        JAVA="$JAVA_HOME/bin/java"
302
fi
303

    
304
if [ "$PREFERED_ARCHITECTURE" = "x86" ] ; then
305
	FORCE_JAVA_32BITS="$ARG_D32"
306
else
307
	FORCE_JAVA_32BITS=""
308

    
309
fi
310
logger_info "Using java " $(type -p "$JAVA")
311

    
312
###################################################################
313
# gvSIG native libraries location
314
###################################################################
315

    
316
export GVSIG_NATIVE_LIBS=""
317
export LD_LIBRARY_PATH
318
export PATH
319
export GVSIG_PROPERTIES=""
320

    
321
add_library_path() {
322
  #logger_info "add_library_path $1"
323
  LD_LIBRARY_PATH="$1${CPSEP}$LD_LIBRARY_PATH"
324
  GVSIG_NATIVE_LIBS="$1${CPSEP}$GVSIG_NATIVE_LIBS"
325
  PATH="$1${CPSEP}$PATH"
326
}
327

    
328
list_shared_library_dependencies() {
329
  logger_info "Checking shared library dependencies for $1"
330
  if [ "$OS" = "win" ] ; then
331
        logger_cmd ./cygcheck.exe "\"$1\""
332
  else
333
        logger_cmd ldd "\"$1\""
334
  fi || logger_warn "Problens checking shared library $1"  || true
335
}
336

    
337
add_classpath() {
338
  GVSIG_CLASSPATH="$GVSIG_CLASSPATH${CPSEP}$1"
339
}
340

    
341
add_property() {
342
  value="\"$2\""
343
  GVSIG_PROPERTIES="$GVSIG_PROPERTIES -D$1=$value"
344
}
345

    
346

    
347
###################################################################
348
# gvSIG java libraries location
349
###################################################################
350

    
351
export LIBRARIES=""
352
# Load gvSIG Andami jars and dependencies for the classpath
353
for i in "$GVSIG_INSTALL_FOLDER/lib/"*.jar ; do
354
  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.jar" -a "$i" != "" ]; then
355
    LIBRARIES="${LIBRARIES}${CPSEP}${i}"
356
  fi
357
done
358
for i in "$GVSIG_INSTALL_FOLDER/lib/"*.zip ; do
359
  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.zip" -a "$i" != "" ]; then
360
    LIBRARIES="${LIBRARIES}${CPSEP}${i}"
361
  fi
362
done
363

    
364
# echo Initial libraries found: ${LIBRARIES}
365

    
366
# gvSIG Andami launcher
367

    
368
if [ "$GVSIG_LAUNCHER" = "" ] ; then
369
  GVSIG_LAUNCHER=org.gvsig.andamiupdater.Updater
370
fi
371
if [ "$GVSIG_PARAMS" = "" ] ; then
372
  GVSIG_PARAMS="$GVSIG_APPLICATION_NAME gvSIG/extensiones $@"
373
fi
374

    
375
export GVSIG_LAUNCHER
376
export GVSIG_PARAMS
377

    
378
# gvSIG initial classpath
379
export GVSIG_CLASSPATH="$LIBRARIES:$GVSIG_CLASSPATH"
380

    
381
########################
382
# Memory configuration #
383
########################
384

    
385
# Initial gvSIG memory (M=Megabytes, G=Gigabytes)
386
export GVSIG_INITIAL_MEM=${GVSIG_INITIAL_MEM:-256M}
387
# Maximum gvSIG memory (M=Megabytes, G=Gigabytes)
388
export GVSIG_MAX_MEM=${GVSIG_MAX_MEM:-1024M}
389
# Maximum permanent memory size: needed to load classes and statics
390
export GVSIG_MAX_PERM_SIZE=${GVSIG_MAX_PERM_SIZE:-128M}
391

    
392
#############################
393
# Execute plugin's autorun  #
394
#############################
395

    
396
for PLUGIN_FOLDER in "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/"*
397
do
398
  if [ -f "$PLUGIN_FOLDER/autorun.sh" ] ; then
399
    logger_info "Running autorun from plugin " $(basename "$PLUGIN_FOLDER")
400
    . "$PLUGIN_FOLDER/autorun.sh"
401
    cd "$GVSIG_INSTALL_FOLDER"
402
  fi
403
done
404

    
405
if [ "$OS" = "win" ] ; then
406
	add_library_path "$GVSIG_INSTALL_FOLDER"
407
fi
408

    
409
logger_info "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
410

    
411
#####################
412
# Java debug mode ? #
413
#####################
414

    
415
ARGS="$@" # Can't use ${@/ , use ${ARGS/ instead
416
if [ "${ARGS/*--pause*/--pause}" == "--pause" ] ; then
417
    DEBUG_PAUSE="y"
418
else
419
    DEBUG_PAUSE="n"
420
fi
421

    
422
if [ "${ARGS/*--debug*/--debug}" == "--debug" ] ; then
423
  DEBUG_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=8765,server=y,suspend=$DEBUG_PAUSE"
424
else
425
  DEBUG_OPTIONS=""
426
fi
427

    
428
################
429
# Launch gvSIG #
430
################
431

    
432
# For Java parameters documentation and more parameters look at:
433
# http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html
434
# http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
435
CMD="\"${JAVA}\" \
436
  $FORCE_JAVA_32BITS \
437
  -Xms${GVSIG_INITIAL_MEM} \
438
  -Xmx${GVSIG_MAX_MEM} \
439
  -XX:MaxPermSize=${GVSIG_MAX_PERM_SIZE} \
440
  ${DEBUG_OPTIONS} \
441
  -Djava.library.path=\"${GVSIG_NATIVE_LIBS}\" \
442
  ${GVSIG_PROPERTIES} \
443
  -cp \"${GVSIG_CLASSPATH}\" \
444
  ${GVSIG_JAVA_PARAMS} \
445
  ${GVSIG_LAUNCHER} ${GVSIG_PARAMS}"
446

    
447
logger_info Launching gvSIG: "${CMD}"
448
eval "$CMD"