Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.framework / org.gvsig.andami / src / main / resources-application / tools / make-portable @ 43774

History | View | Annotate | Download (14.5 KB)

1
#!/bin/bash
2
#############################################################################
3
# Require la siguiente estructura de carpetas:
4
#
5
# - packages
6
#   - custom (carpeta con los paquetes adicionales a incluir en la portable)
7
#   - exclude (fichero con los codigos de paquetes a excluir)
8
# - standard
9
#   - gvSIG-desktop*-lin-x86-online.zip
10
#   - gvSIG-desktop*-lin-x86_64-online.zip
11
#   - gvSIG-desktop*-win-x86-online.zip
12
#   - gvSIG-desktop*-win-x86_64-online.zip
13
#   - gvSIG-desktop*-lin-x86.gvspkg
14
#   - gvSIG-desktop*-lin-x86_64.gvspkg
15
#   - gvSIG-desktop*-win-x86.gvspkg
16
#   - gvSIG-desktop*-win-x86_64.gvspkg
17
# - patchs
18
#   - patchs.sh (se ejecuta antes que los scripts de ant y zipear la instalacion)
19
# - make-portable
20
#
21
# Y se ejecutara el archivo "make-portable" desde ese directorio.
22
#
23
# Al final se crean las carpetas y archivos:
24
#
25
# - target/gvsig-desktop-VERSION-lin-x86
26
# - target/gvsig-desktop-VERSION-lin-x86_64
27
# - target/gvsig-desktop-VERSION-win-x86
28
#
29
# - target/gvsig-desktop-VERSION-lin-x86.zip
30
# - target/gvsig-desktop-VERSION-lin-x86_64.zip
31
# - target/gvsig-desktop-VERSION-win-x86.zip
32
#
33
##############################################################################
34

    
35

    
36
#=============================================
37
# JREs to use
38
URL_JRE_FOLDER="http://downloads.gvsig.org/download/gvsig-desktop-testing/pool/jre"
39

    
40
GVSPKG_JRE_darwin_x86_64="gvSIG-desktop-2.3.0-jre-1.8.0-72-testing-darwin_macos_10.11-x86_64-j1_8.gvspkg"
41
GVSPKG_JRE_lin_x86_64="gvSIG-desktop-2.3.0-jre-1.8.0-72-testing-lin-x86_64-j1_8.gvspkg"
42
GVSPKG_JRE_lin_x86="gvSIG-desktop-2.3.0-jre-1.8.0-92-testing-lin-x86-j1_8.gvspkg"
43
GVSPKG_JRE_win_x86_64="gvSIG-desktop-2.3.0-jre-1.8.0-65-testing-win-x86_64-j1_8.gvspkg"
44
GVSPKG_JRE_win_x86="gvSIG-desktop-2.3.0-jre-1.8.0-73-testing-win-x86-j1_8.gvspkg"
45

    
46
#
47
#=============================================
48

    
49
#set -x
50

    
51
#function handle_error() {
52
#    echo "FAILED: line $1, exit code $2"
53
#    exit 1
54
#}
55
#
56
#trap 'handle_error $LINENO $?' ERR
57

    
58
set -e
59

    
60
cd "$(dirname $0)"
61
SCRIPT_NAME=$(basename $0)
62

    
63
export BASEFOLDER="$PWD"
64
export TARGET="$BASEFOLDER/target"
65
export PATCHSFOLDER=$BASEFOLDER/patchs
66

    
67
function logger_info() {
68
    echo "$*"
69
}
70

    
71
function logger_warn() {
72
    echo "$*"
73
}
74

    
75
function get_package_info() {
76
  PACKAGE_PATH="$1"
77

    
78
  #
79
  # A veces en el zip los archivos comienzan por "/" y otras no.
80
  # Asi que lo primero que hacemos es comprobar eso.
81
  #
82
  local prefix=""
83
  local line=""
84
  # El flag -Z1 muestra los ficheros unicamente, similar a -l pero
85
  # sin ningun tipo de cabezaras, resumenes o informacion adicional
86
  # por cada fichero. Solo el nombre con ruta de cada fichero.
87
  local x=$(unzip -Z1 "$PACKAGE_PATH" "*/package.info")
88
  if [ "${x:0:1}" == "/" ] ; then
89
    prefix="/"
90
  fi
91
  #
92
  # Usamos una redireccion y no un pipe ya que los elementos de un pipe se
93
  # ejecutan en un subshell separado y la asignacion a las variables dentro del
94
  # while solo tendria efecto en ese subshell.
95
  #
96
  # Atencion al parametro W del unzip, ya que si lo quitamos y en el zip hay
97
  # mas de un "package.info" nos los sacaria todos, y los resultados no serian
98
  # los esperados. Solo tenemos que leer el "package.info" que hay en el primer
99
  # subdirectorio del zip.
100
  # Con el tr intentamos eliminar lo \r ya que algunos package.info generados
101
  # desde windows tienen \r.
102
  #
103
  PACKE_INFO_CONTENTS=$(unzip -nlpWc "$PACKAGE_PATH" "${prefix}*/package.info" | tr -d '\r')
104
  while read line ; do
105
    case "$line" in
106
    type=*)
107
      PACKAGE_TYPE=${line#type=}
108
      ;;
109
    version=*)
110
      PACKAGE_VERSION=${line#version=}
111
      ;;
112
    code=*)
113
      PACKAGE_CODE=${line#code=}
114
      ;;
115
    esac
116
  done <<END_OF_PACKAGE_INFO_CONTENTS
117
$PACKE_INFO_CONTENTS
118
END_OF_PACKAGE_INFO_CONTENTS
119
}
120

    
121

    
122
function install_symbols() {
123
    INSTALL_FOLDER="$1"
124

    
125
    cd "$INSTALL_FOLDER"
126
    mkdir -p "preferences/gvSIG/plugins/org.gvsig.app.mainplugin/Symbols"
127
    cd "preferences/gvSIG/plugins/org.gvsig.app.mainplugin/Symbols"
128
    rm -rf "$PACKAGE_CODE"
129
    logger_info "Install symbols $PACKAGE_CODE $PACKAGE_VERSION"
130
    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
131
}
132

    
133
function install_icontheme() {
134
    INSTALL_FOLDER="$1"
135

    
136
    cd "$INSTALL_FOLDER"
137
    mkdir -p "preferences/gvSIG/icon-theme"
138
    cd "preferences/gvSIG/icon-theme"
139
    rm -rf "$PACKAGE_CODE"
140
    logger_info "Install icon theme $PACKAGE_CODE $PACKAGE_VERSION"
141
    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
142
}
143

    
144
function install_script() {
145
    INSTALL_FOLDER="$1"
146

    
147
    cd "$INSTALL_FOLDER"
148
    
149
    mkdir -p "preferences/gvSIG/plugins/org.gvsig.scripting.app.mainplugin/$PORTABLE_VERSION_WITHOUT_BUILDNUMBER/scripts/addons"
150
    cd "preferences/gvSIG/plugins/org.gvsig.scripting.app.mainplugin/$PORTABLE_VERSION_WITHOUT_BUILDNUMBER/scripts/addons"
151
    rm -rf "$PACKAGE_CODE"
152
    logger_info "Install script $PACKAGE_CODE $PACKAGE_VERSION"
153
    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
154
}
155

    
156
function install_jCRS_EPSG() {
157
    INSTALL_FOLDER="$1"
158

    
159
    cd "$INSTALL_FOLDER"
160
    mkdir -p "preferences/gvSIG/plugins/org.gvsig.projection.app.jcrs/db/EPSG"
161
    cd "preferences/gvSIG/plugins/org.gvsig.projection.app.jcrs/db/EPSG"
162
    rm -rf "$PACKAGE_CODE"
163
    logger_info "Install jCRS EPSG data base $PACKAGE_CODE $PACKAGE_VERSION"
164
    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
165
}
166

    
167
function install_plugin() {
168
    INSTALL_FOLDER="$1"
169

    
170
    cd "$INSTALL_FOLDER/gvSIG/extensiones"
171
    rm -rf "$PACKAGE_CODE"
172
    logger_info "Install plugin $PACKAGE_CODE $PACKAGE_VERSION"
173
    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
174
}
175

    
176
function install_translations() {
177
    INSTALL_FOLDER="$1"
178

    
179
    cd "$INSTALL_FOLDER/i18n"
180
    rm -rf "$PACKAGE_CODE"
181
    logger_info "Install translations $PACKAGE_CODE $PACKAGE_VERSION"
182
    unzip -nqq "$PACKAGE_PATH" 2>&1 | sed "/warning:  stripped absolute path/d"
183
}
184

    
185
function run_plugins_install_scripts() {
186
    INSTALL_FOLDER="$1"
187

    
188
    logger_info ""
189
    logger_info "Running plugins install scripts"
190
    cd "$INSTALL_FOLDER/gvSIG/extensiones"
191
    for PLUGIN_CODE in *
192
    do
193
        if [ -f "$INSTALL_FOLDER/gvSIG/extensiones/$PLUGIN_CODE/install/install.xml" ] ; then
194
            logger_info "Running custom install script of $PLUGIN_CODE"
195
            cd $INSTALL_FOLDER
196
            ant -Dgvsig_dir="$INSTALL_FOLDER" -Dextensions_dir="$INSTALL_FOLDER/gvSIG/extensiones" -f "$INSTALL_FOLDER/gvSIG/extensiones/$PLUGIN_CODE/install/install.xml"
197
        fi
198
    done
199
}
200

    
201
function install_packages() {
202
    INSTALL_FOLDER="$1"
203
    PACKAGES_FOLDER="$2"
204

    
205
    logger_info ""
206
    logger_info "Processing $(basename $PACKAGES_FOLDER) packages"
207
    for PACKAGE_PATH in $PACKAGES_FOLDER/*.gvspkg
208
    do
209
      if [ -f "$PACKAGE_PATH" ] ; then
210
        PACKAGE_NAME="$(basename $PACKAGE_PATH)"
211
        get_package_info $PACKAGE_PATH
212
        if include_package $PACKAGE_CODE ; then
213
          case $PACKAGE_TYPE in
214
          plugin)
215
            install_plugin "$INSTALL_FOLDER"
216
            ;;
217
          jCRS_EPSG)
218
            install_jCRS_EPSG "$INSTALL_FOLDER"
219
            ;;
220
          symbols)
221
            install_symbols "$INSTALL_FOLDER"
222
            ;;
223
          Script)
224
            install_script "$INSTALL_FOLDER"
225
            ;;
226
          translations)
227
            install_translations "$INSTALL_FOLDER"
228
            ;;
229
          icontheme)
230
            install_icontheme "$INSTALL_FOLDER"
231
            ;;
232
          *)
233
            echo "ERROR: Type of package $PACKAGE_TYPE of $PACKAGE_NAME not supported."
234
            exit 1
235
            ;;
236
          esac
237
        else
238
          logger_info "Exclude package $PACKAGE_CODE"
239
          #cp "$PACKAGE_PATH" "$INSTALL_FOLDER/install"
240
        fi
241
      fi
242
    done
243
}
244

    
245
function include_package0() {
246
    set +e
247
    egrep  "^$1\$" "$BASEFOLDER/packages/excludes" >/dev/null
248
    FOUND=$?
249
    set -e
250
    if [ "$FOUND" == 1 ] ; then
251
        return 0
252
    fi
253
    return 1
254
}
255

    
256
function include_package() {
257
  while read pattern ; do
258
    if [ "${1/#${pattern}/ok}" == "ok" ] ; then
259
      return 1
260
    fi
261
  done <<END_OF_EXCLUDE_CONTENTS
262
$(cat "$BASEFOLDER/packages/excludes")
263
END_OF_EXCLUDE_CONTENTS
264
    return 0
265
}
266

    
267
function remove_excluded_packages() {
268
    logger_info "Checking plugins to remove"
269
    cd "$INSTALL_FOLDER/gvSIG/extensiones"
270
    while read line; do
271
        if [ -d "$line" ] ; then
272
            logger_info "Removing plugin $line"
273
            rm -rf "$line"
274
        fi
275
    done < "$BASEFOLDER/packages/excludes"
276
}
277

    
278
function install_portable_configuration_files() {
279
    logger_info "Install portable configuration file (gvSIG.config)"
280
    cp "$INSTALL_FOLDER/tools/gvSIG.config" "$INSTALL_FOLDER"
281
    chmod a+x "$INSTALL_FOLDER/gvSIG.sh"
282
}
283

    
284
function prepare_portable_macos() {
285
    echo "Creating MacOS app layout"
286
    mkdir -p "$INSTALL_FOLDER/Contents/MacOS"
287
    cd "$INSTALL_FOLDER/Contents/MacOS"
288
    echo '#!/bin/bash
289
cd "$(dirname $0)/../.."
290
exec "./gvSIG.sh"
291
' >"${PORTABLE_NAME}"
292
    chmod a+x "${PORTABLE_NAME}"
293
    cp "${PORTABLE_NAME}" "gvSIG"
294
    cp "${PORTABLE_NAME}" "gvSIG-desktop"
295
    cp "${PORTABLE_NAME}" "gvSIG-desktop-${PORTABLE_VERSION/-*/}"
296
    cp "${PORTABLE_NAME}" "gvSIG-desktop-${PORTABLE_VERSION}"
297
    rm -f "$INSTALL_FOLDER/gvSIG/extensiones/org.gvsig.gdal.app.mainplugin/gdal/libc++.1.dylib"
298
    cd "$INSTALL_FOLDER"
299
}
300

    
301
function zipfolder() {
302
    echo zip -qyr9 "$1" "$2"
303
    if type zip >/dev/null 2>/dev/null
304
    then
305
  zip -qyr9 "$1" "$2"
306
    else
307
      echo "
308

    
309
  WARNING: zip command not found.
310
           $1 not compressed.
311

    
312
"
313
    fi
314
}
315

    
316
function expandsVarsOnFile() {
317
  sed 's/\${INSTALL_DRIVE}/./
318
s/\${INSTALL_PATH}/./' "$1" >"$1.tmp"
319
  mv "$1.tmp" "$1"
320
}
321

    
322
function download_jre() {
323
  GVSPKG_JRE="GVSPKG_JRE_${PORTABLE_OSFAMILY}_${PORTABLE_PLATFORM}"
324
  GVSPKG_JRE="${!GVSPKG_JRE}"
325

    
326
  if [ ! -f "${GVSPKG_JRE}" ] ; then
327
    echo "Downloading JRE ${URL_JRE_FOLDER}/${GVSPKG_JRE}"
328
    wget  -q "${URL_JRE_FOLDER}/${GVSPKG_JRE}"
329
  fi
330
}
331

    
332
function mkdist() {
333
    cd $BASEFOLDER/standard
334

    
335
    # OS code (lin/win/darwin) + distribution + version
336
    export PORTABLE_OS="$1"
337

    
338
    # OS family code (lin/win/darwin)
339
    export PORTABLE_OSFAMILY="${PORTABLE_OS/_*/}"
340

    
341
    # OS name (linux/windows/darwin) for show only
342
    export PORTABLE_OSNAME="$2"
343

    
344
    # Architectute X86, x86_64
345
    export PORTABLE_PLATFORM="$3"
346

    
347
    # OS used to locate the online zip
348
    export ONLINE_OS
349
    case "$PORTABLE_OSFAMILY" in
350
    darwin)
351
        ONLINE_OS="lin"
352
        ;;
353
    lin)
354
        ONLINE_OS="lin"
355
        ;;
356
    win)
357
        ONLINE_OS="win"
358
        ;;
359
    *)
360
        ONLINE_OS="$PORTABLE_OS"
361
        ;;
362
    esac
363

    
364
    export PORTABLE_VERSION=$(expr *${ONLINE_OS}-${PORTABLE_PLATFORM}-online.zip : "gvSIG-desktop-\\([0-9.]*-[0-9]*\\)")
365
    export PORTABLE_STATUS=$(expr *${ONLINE_OS}-${PORTABLE_PLATFORM}-online.zip : "gvSIG-desktop-[0-9.]*-[0-9]*-\\([a-zA-Z]*[0-9]*\)")
366
    export PORTABLE_NAME="gvSIG-desktop-$PORTABLE_VERSION-${PORTABLE_STATUS}-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
367

    
368
    export PORTABLE_VERSION_WITHOUT_BUILDNUMBER="${PORTABLE_VERSION/-*/}"
369
    export INSTALL_FOLDER="$TARGET/$PORTABLE_NAME"
370

    
371
    logger_info "
372
=
373
=    Creating portable for ${PORTABLE_OSNAME} (${PORTABLE_OSFAMILY}/${PORTABLE_OS}/${PORTABLE_PLATFORM} - online os ${ONLINE_OS})
374
=
375
    "
376
    logger_info "Removing previous files"
377
    rm -rf "$TARGET/gvsig-desktop"
378
    rm -rf "$INSTALL_FOLDER"
379
    rm -f  "$TARGET/${PORTABLE_NAME}"
380
    rm -f  "$TARGET/${PORTABLE_NAME}.zip"
381
    rm -rf "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
382

    
383
    logger_info "Uncompressing ${PORTABLE_OSNAME} (${ONLINE_OS}) base files"
384
    cd $TARGET
385
    mkdir $PORTABLE_NAME
386
    cd $PORTABLE_NAME
387
    ff="$BASEFOLDER/standard/gvSIG-desktop-$PORTABLE_VERSION-$PORTABLE_STATUS-${ONLINE_OS}-${PORTABLE_PLATFORM}-online.zip"
388
    if [ ! -f "$ff" ] ; then
389
       echo "ERROR: Can't locate online zip for ${PORTABLE_OSNAME} (${PORTABLE_OSFAMILY}/${PORTABLE_OS}/${PORTABLE_PLATFORM} - online os ${ONLINE_OS})"
390
       echo "ERROR: Expected file $ff"
391
       exit 1
392
    fi
393
    unzip -nqq "$ff"
394

    
395
    logger_info "Uncompressing ${PORTABLE_OSNAME}-${PORTABLE_PLATFORM} package set"
396
    mkdir -p "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
397
    cd "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
398
    ff="$BASEFOLDER/standard/gvSIG-desktop-${PORTABLE_VERSION}-${PORTABLE_STATUS}-${PORTABLE_OS}-${PORTABLE_PLATFORM}.gvspks"
399
    if [ ! -f "$ff" ] ; then
400
       echo "ERROR: Can't locate package set for ${PORTABLE_OSNAME} (${PORTABLE_OSFAMILY}/${PORTABLE_OS}/${PORTABLE_PLATFORM} - online os ${ONLINE_OS})"
401
       echo "ERROR: Expected file $ff"
402
       exit 1
403
    fi
404
    unzip -nqq "$ff"
405

    
406
    download_jre
407

    
408
    echo "Remove platform independent GDAL version"
409
    echo "... package $TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}/gvSIG-desktop-${PORTABLE_VERSION/-*/}-org.gvsig.gdal.app.mainplugin-"*-all-all-j1_7.gvspkg
410
    rm -f "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}/gvSIG-desktop-${PORTABLE_VERSION/-*/}-org.gvsig.gdal.app.mainplugin-"*-all-all-j1_7.gvspkg
411

    
412
    install_packages "$INSTALL_FOLDER" "$TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}"
413

    
414
    install_packages "$INSTALL_FOLDER" "$BASEFOLDER/packages/custom"
415

    
416
    install_portable_configuration_files
417

    
418
    remove_excluded_packages
419

    
420
    if [ -f $PATCHSFOLDER/patchs.sh ] ; then
421
        chmod a+x $PATCHSFOLDER/patchs.sh
422
        logger_info "Appling patch to the instalation."
423
        source $PATCHSFOLDER/patchs.sh
424
    fi
425

    
426
    run_plugins_install_scripts $INSTALL_FOLDER
427

    
428
    case "$PORTABLE_OSFAMILY" in
429
    darwin)
430
        prepare_portable_macos
431
        rm -rf "${INSTALL_FOLDER}.app"
432
        mv "$INSTALL_FOLDER" "${INSTALL_FOLDER}.app"
433
        INSTALL_FOLDER="${INSTALL_FOLDER}.app"
434
        PORTABLE_NAME="${PORTABLE_NAME}.app"
435
        ;;
436
    win)
437
        expandsVarsOnFile "${INSTALL_FOLDER}/gvsig-desktop.vbs"
438
        expandsVarsOnFile "${INSTALL_FOLDER}/gvsig-desktop.cmd"
439
        expandsVarsOnFile "${INSTALL_FOLDER}/gvsig-package-installer.cmd"
440
        ;;
441
    esac
442

    
443
    logger_info "Compresing ${PORTABLE_OSNAME}-${PORTABLE_PLATFORM} portable (this take a moment)"
444
    cd "$TARGET"
445
    zipfolder "${PORTABLE_NAME}.zip" "${PORTABLE_NAME}"
446

    
447
    logger_info "Removing temporary package folder"
448
    rm -rf $TARGET/packages-${PORTABLE_OS}-${PORTABLE_PLATFORM}
449

    
450
    logger_info "
451
=
452
=    Portable created for ${PORTABLE_OSNAME} (${PORTABLE_OSFAMILY}/${PORTABLE_OS}/${PORTABLE_PLATFORM} - online os ${ONLINE_OS})
453
=
454
    "
455
}
456

    
457

    
458
function main() {
459
    mkdist lin linux x86_64
460
    mkdist win windows x86_64
461
    mkdist darwin_macos_10.11 darwin x86_64
462
    mkdist lin linux x86
463
    mkdist win windows x86
464
    mkdist lin_ubuntu_14.04 linux x86
465
    mkdist lin_ubuntu_14.04 linux x86_64
466
    echo "Creation ended"
467
}
468

    
469
mkdir -p "$TARGET"
470
main | tee "$TARGET/${SCRIPT_NAME}.log"
471