Statistics
| Revision:

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

History | View | Annotate | Download (12.5 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 -p -o | tr '[:upper:]' '[:lower:]')
55
case "$UNAME" in
56
*darwin*)
57
    OS="darwin"
58
    ARG_D32=""
59
    CPSEP=":"
60
    ;;
61
*win*)
62
    OS="win"
63
    ARG_D32=""
64
    CPSEP=";"
65
    ;;
66
*lin*)
67
    OS="lin"
68
    # Only linux support -d32 arg
69
    ARG_D32="-d32"
70
    CPSEP=":"
71
    ;;
72
*)
73
    OS="unknown"
74
    ARG_D32=""
75
    CPSEP=":"
76
    ;;
77
esac
78
case "$UNAME" in
79
*x86_64*)
80
    ARCH="x86_64"
81
    ;;
82
*amd64*)
83
    ARCH="x86_64"
84
    ;;
85
*)
86
    ARCH="x86"
87
    ;;
88
esac
89

    
90
if [ "${OS}" == "win" ] ; then
91
  xmkdir() {
92
    if [ "$1" == "-p" ] ; then
93
      if [ "${2:1:2}" == ":/" ] ; then
94
	cd "${2:0:3}"
95
	if mkdir -p "${2:3}" ; then
96
	  cd - >/dev/null
97
	else
98
	  cd - >/dev/null
99
	  false
100
	fi
101
      else
102
	mkdir -p "$2"
103
      fi
104
    else
105
      mkdir "$1"
106
    fi
107
  }
108
else
109
  xmkdir() {
110
    if [ "$1" == "-p" ] ; then
111
      mkdir -p "$2"
112
    else
113
      mkdir "$1"
114
    fi
115
  }
116
fi
117

    
118
########################
119

    
120
getJavaArchitecture() {
121
	if [ "$ARCH" = "x86" ] ; then
122
                # Si la arquitectura del SO es x86 decimos
123
                # que la de java es x86
124
		echo "x86"
125
	else
126
                # si la arquitectura es x86_64, comprobamos
127
                # la arquitectura de la java que nos pasan
128
		if "$1" -version 2>&1 | egrep -i "64-Bit" >/dev/null ; then
129
			echo "x86_64"
130
		else
131
			echo "x86"
132
		fi
133
	fi
134
}
135

    
136
#################################
137
# Set install and home folders  #
138
#################################
139

    
140
# Go into the gvSIG installation folder, just in case
141
x=$(dirname "$0")
142
cd "$x"
143

    
144
if [ "$GVSIG_APPLICATION_NAME" = "" ] ; then
145
  GVSIG_APPLICATION_NAME=gvSIG
146
fi
147
export GVSIG_APPLICATION_NAME
148

    
149
# gvSIG installation folder
150
export GVSIG_INSTALL_FOLDER="$PWD"
151

    
152
# gvSIG home folder
153
if [ "$OS" = "win" ] ; then
154
  # https://redmine.gvsig.net/redmine/issues/4033
155
  export GVSIG_HOME_FOLDER="$USERPROFILE/$GVSIG_APPLICATION_NAME"
156
else
157
  export GVSIG_HOME_FOLDER="$HOME/$GVSIG_APPLICATION_NAME"
158
fi
159

    
160
####################
161
# Load config file #
162
####################
163

    
164
if [ -f "$GVSIG_INSTALL_FOLDER/gvSIG.config" ] ; then
165
  . "$GVSIG_INSTALL_FOLDER/gvSIG.config"
166
fi
167
if [ -f "$GVSIG_HOME_FOLDER/gvSIG.config" ] ; then
168
  . "$GVSIG_HOME_FOLDER/gvSIG.config"
169
fi
170

    
171
if [ ! -d "$GVSIG_HOME_FOLDER" ] ; then
172
  xmkdir -p "$GVSIG_HOME_FOLDER"
173
fi
174

    
175
#################
176
# Logger config #
177
#################
178

    
179
LOGGER_FILE="$GVSIG_HOME_FOLDER/${GVSIG_APPLICATION_NAME}-launcher.log"
180
echo > "$LOGGER_FILE"
181

    
182

    
183
logger () {
184
  # level (INFO/WARNIG) message
185
  LOGGER_LEVEL="$1"
186
  shift
187
  echo "$LOGGER_LEVEL launch $@"
188
  echo "$LOGGER_LEVEL launch $@" >> "$LOGGER_FILE"
189
}
190

    
191
logger_info () {
192
  logger "INFO" "$@"
193
}
194

    
195
logger_warn () {
196
  logger "WARNING" "$@"
197
}
198

    
199
logger_cmd() {
200
  logger_info "$@"
201
  eval $@ 2>&1 | tee -a  "$LOGGER_FILE"
202
}
203

    
204
logger_info "gvSIG Installation folder: $GVSIG_INSTALL_FOLDER"
205
logger_info "gvSIG home folder: $GVSIG_HOME_FOLDER"
206

    
207
##########################################################
208
# Search in gvSIG/extensiones the architecture of plugins
209
# installeds and set as PREFERED_ARCHITECTURE
210
# Note: Busybox in windows don't support -exec in find
211
##########################################################
212

    
213
setPreferedArchitecture() {
214
  pf_foundArch=""
215
  pf_fname=""
216
  cd "$GVSIG_INSTALL_FOLDER"
217
  find . -name package.info | while read pf_fname
218
  do
219
    cat "$pf_fname"
220
  done | grep "architecture=[^a]" | sort | head -n 1 | read pf_foundArch || true
221
  # El comando "read x" de la linea anterior puede fallar si
222
  # no hay ningun plugin depdendiente de la arquitectura, por eso
223
  # el "|| true" del final.
224
  if [ "X${pf_foundArch}X" != "XX" ] ; then
225
	  eval $pf_foundArch
226
	  PREFERED_ARCHITECTURE="$architecture"
227
  else
228
	  PREFERED_ARCHITECTURE="$ARCH"
229
  fi
230
  cd - >/dev/null
231
}
232

    
233
setPreferedArchitecture
234

    
235
##########################################################
236

    
237
export JAVA_HOME
238
export JAVA
239
export FORCE_JAVA_32BITS
240

    
241
FORCE_JAVA_32BITS=""
242
JAVA_HOME_OTHER_ARCHITECTURE=""
243

    
244
# PRIVATE JAVA HOMEs
245
if [ -d "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre" ] ; then
246
    PJH1="$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/jre"
247
else
248
    PJH1=
249
fi
250
#
251
# El ls|head casca en win10 64 bits. Parece que hay algun problema con los
252
# pipes y el find y el ls.
253
if [ "${OS}" == "win" ] ; then
254
  PJH2=""
255
  PJH3=""
256
  PJH4=""
257
  PJH5=""
258
else
259
  PJH2=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.8* 2>/dev/null | head -1)
260
  PJH3=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.7* 2>/dev/null | head -1)
261
  PJH4=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.6* 2>/dev/null | head -1)
262
  PJH5=$(ls -dt "$GVSIG_HOME_FOLDER/jre/"*1.5* 2>/dev/null | head -1)
263
fi
264
if [ -d /usr/lib/jvm ] ; then
265
    PJH6=$(find /usr/lib/jvm -maxdepth 1 ! -name "jvm" -name "[a-zA-Z]*" ! -type l -print)
266
else
267
    PJH6=
268
fi
269

    
270
if [ -f "$PJH1/bin/java" ] ; then
271
    if [ ! -x "$PJH1/bin/java" ] ; then
272
	chmod a+x "$PJH1/bin/java"
273
    fi
274
fi
275

    
276
#
277
#
278
# Try to use java from:
279
# 1. Java in gvSIG/extensiones/jre (jre plugin)
280
# 2. Java specified in JAVA_HOME variable
281
# 3. Java in the HOME/gvsig/jre folder (old gvsig versions optionally create during installation process)
282
# 4. Java installed in the system (/usr/lib/jvm)
283
# 5. Java in the system path.
284
#
285
for JAVA_HOME_TO_USE in "$PJH1" "$JAVA_HOME" "$PJH2" "$PJH3" "$PJH4" "$PJH5" $PJH6 ""
286
do
287
  if [ "$JAVA_HOME_TO_USE" = "" ] ; then
288
	  continue
289
  fi
290
  logger_info "Located possible jre at: ${JAVA_HOME_TO_USE}"
291
done
292

    
293
for JAVA_HOME_TO_USE in "$JAVA_HOME" "$PJH1" "$PJH2" "$PJH3" "$PJH4" "$PJH5" $PJH6 ""
294
do
295
        if [ "$JAVA_HOME_TO_USE" = "" ] ; then
296
                continue
297
        fi
298
	logger_info "Checking JAVA_HOME ${JAVA_HOME_TO_USE}..."
299
        if [ ! -d "$JAVA_HOME_TO_USE" ] ; then
300
                logger_warn "Folder not found ($JAVA_HOME_TO_USE), skip"
301
                continue
302
        fi
303
        if [ ! -x "$JAVA_HOME_TO_USE/bin/java" ] ; then
304
                logger_warn "Not a valid JAVA_HOME ($JAVA_HOME_TO_USE), bin/java not found, skip"
305
                continue
306
        fi
307
	JAVA_ARCH=$(getJavaArchitecture "$JAVA_HOME_TO_USE/bin/java")
308
	if [ "$JAVA_ARCH" != "$PREFERED_ARCHITECTURE" ] ; then
309
                JAVA_HOME_OTHER_ARCHITECTURE="$JAVA_HOME_TO_USE"
310
                logger_warn "Prefered architecture is $PREFERED_ARCHITECTURE, java $JAVA_ARCH found in $JAVA_HOME_TO_USE, skip"
311
                continue
312
        fi
313
        break
314
done
315

    
316
if [ "$JAVA_HOME_TO_USE" = "" ] ; then
317
        # Try to use the java in the system path
318
        if ! type java >/dev/null ; then
319
                # java not found in the system path
320
                if [ "$JAVA_HOME_OTHER_ARCHITECTURE" != "" ] ; then
321
                        JAVA_HOME="$JAVA_HOME_OTHER_ARCHITECTURE"
322
                        JAVA="$JAVA_HOME/bin/java"
323
                        logger_warn "java $PREFERED_ARCHITECTURE not found in the system path, using $JAVA_HOME_OTHER_ARCHITECTURE"
324
                else
325
                        logger_warn "java not found in the system"
326
                        exit 1
327
                fi
328
        else
329
		if [ "$(getJavaArchitecture $(type -p java))" != "$PREFERED_ARCHITECTURE" ] ; then
330
                      logger_warn "java $PREFERED_ARCHITECTURE not found, using $(type -p java)"
331
                fi
332
                unset JAVA_HOME
333
                JAVA="java"
334
        fi
335
else
336
        JAVA_HOME="$JAVA_HOME_TO_USE"
337
        JAVA="$JAVA_HOME/bin/java"
338
fi
339

    
340
if [ "$PREFERED_ARCHITECTURE" = "x86" ] ; then
341
	FORCE_JAVA_32BITS="$ARG_D32"
342
else
343
	FORCE_JAVA_32BITS=""
344

    
345
fi
346
logger_info "Using java " $(type -p "$JAVA")
347

    
348
###################################################################
349
# gvSIG native libraries location
350
###################################################################
351

    
352
export GVSIG_NATIVE_LIBS=""
353
export LD_LIBRARY_PATH
354
export DYLD_LIBRARY_PATH
355
export PATH
356
export GVSIG_PROPERTIES=""
357

    
358
add_library_path() {
359
  #logger_info "add_library_path $1"
360
  GVSIG_NATIVE_LIBS="$1${CPSEP}$GVSIG_NATIVE_LIBS"
361

    
362
  # On Linux family systems
363
  LD_LIBRARY_PATH="$1${CPSEP}$LD_LIBRARY_PATH"
364
  # On Darwin family systems
365
  DYLD_LIBRARY_PATH="$1${CPSEP}$DYLD_LIBRARY_PATH"
366
  # On Windows family systems
367
  PATH="$1${CPSEP}$PATH"
368
}
369

    
370
list_shared_library_dependencies() {
371
  logger_info "Checking shared library dependencies for $1"
372
  case "$OS" in
373
  "win")
374
        logger_cmd ./cygcheck.exe "\"$1\""
375
        ;;
376
  "lin")
377
        logger_cmd ldd "\"$1\""
378
        ;;
379
  "darwin")
380
        logger_cmd otool -L "\"$1\""
381
        ;;
382
  esac || logger_warn "Problens checking shared library $1"  || true
383
}
384

    
385
add_classpath() {
386
  GVSIG_CLASSPATH="$GVSIG_CLASSPATH${CPSEP}$1"
387
}
388

    
389
add_property() {
390
  value="\"$2\""
391
  GVSIG_PROPERTIES="$GVSIG_PROPERTIES -D$1=$value"
392
}
393

    
394

    
395
###################################################################
396
# gvSIG java libraries location
397
###################################################################
398

    
399
# Load gvSIG Andami jars and dependencies for the classpath
400
for i in "$GVSIG_INSTALL_FOLDER/lib/"*.jar ; do
401
  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.jar" -a "$i" != "" ]; then
402
    add_classpath "$i"
403
  fi
404
done
405
for i in "$GVSIG_INSTALL_FOLDER/lib/"*.zip ; do
406
  if [ "$i" != "$GVSIG_INSTALL_FOLDER/lib/*.zip" -a "$i" != "" ]; then
407
    add_classpath "$i"
408
  fi
409
done
410

    
411
# gvSIG Andami launcher
412

    
413
if [ "$GVSIG_LAUNCHER" = "" ] ; then
414
  GVSIG_LAUNCHER=org.gvsig.andamiupdater.Updater
415
fi
416
if [ "$GVSIG_PARAMS" = "" ] ; then
417
  GVSIG_PARAMS="$GVSIG_APPLICATION_NAME gvSIG/extensiones $@"
418
fi
419

    
420
export GVSIG_LAUNCHER
421
export GVSIG_PARAMS
422

    
423
########################
424
# Memory configuration #
425
########################
426

    
427
# Initial gvSIG memory (M=Megabytes, G=Gigabytes)
428
export GVSIG_INITIAL_MEM=${GVSIG_INITIAL_MEM:-256M}
429
# Maximum gvSIG memory (M=Megabytes, G=Gigabytes)
430
export GVSIG_MAX_MEM=${GVSIG_MAX_MEM:-1024M}
431
# Maximum permanent memory size: needed to load classes and statics
432
export GVSIG_MAX_PERM_SIZE=${GVSIG_MAX_PERM_SIZE:-128M}
433

    
434
#############################
435
# Execute plugin's autorun  #
436
#############################
437

    
438
for PLUGIN_FOLDER in "$GVSIG_INSTALL_FOLDER/gvSIG/extensiones/"*
439
do
440
  if [ -f "$PLUGIN_FOLDER/autorun.sh" ] ; then
441
    logger_info "Running autorun from plugin " $(basename "$PLUGIN_FOLDER")
442
    . "$PLUGIN_FOLDER/autorun.sh"
443
    cd "$GVSIG_INSTALL_FOLDER"
444
  fi
445
done
446

    
447
if [ "$OS" = "win" ] ; then
448
	add_library_path "$GVSIG_INSTALL_FOLDER"
449
fi
450

    
451
logger_info "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
452

    
453
#####################
454
# Java debug mode ? #
455
#####################
456

    
457
ARGS="$@" # Can't use ${@/ , use ${ARGS/ instead
458
if [ "${ARGS/*--pause*/--pause}" == "--pause" ] ; then
459
    DEBUG_PAUSE="y"
460
else
461
    DEBUG_PAUSE="n"
462
fi
463

    
464
if [ "${ARGS/*--debug*/--debug}" == "--debug" ] ; then
465
  DEBUG_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=8765,server=y,suspend=$DEBUG_PAUSE"
466
else
467
  DEBUG_OPTIONS=""
468
fi
469

    
470
################
471
# Launch gvSIG #
472
################
473

    
474
# For Java parameters documentation and more parameters look at:
475
# http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html
476
# http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
477
CMD="\"${JAVA}\" \
478
  $FORCE_JAVA_32BITS \
479
  -Xms${GVSIG_INITIAL_MEM} \
480
  -Xmx${GVSIG_MAX_MEM} \
481
  -XX:MaxPermSize=${GVSIG_MAX_PERM_SIZE} \
482
  ${DEBUG_OPTIONS} \
483
  -Djava.library.path=\"${GVSIG_NATIVE_LIBS}\" \
484
  ${GVSIG_PROPERTIES} \
485
  -cp \"${GVSIG_CLASSPATH}\" \
486
  ${GVSIG_JAVA_PARAMS} \
487
  ${GVSIG_LAUNCHER} ${GVSIG_PARAMS}"
488

    
489
logger_info Launching gvSIG: "${CMD}"
490
eval "$CMD"