Updated kdelibs and kleopatra. Restructured kleopatra nsi files to reduce diff with...
[gpg4win.git] / packages / download.sh
1 #!/bin/bash
2 # download.sh - Download source and binary packages for GPG4Win.
3 # Copyright (C) 2005, 2007 g10 Code GmbH
4
5 # This file is part of Gpg4win.
6
7 # Gpg4win is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
11
12 # Gpg4win 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
20
21 # Syntax of the packages.current file:
22 #
23 # If the first non whitespace character of a line is #, the line is
24 # considered a comment.  If the first word of a line is "server", the
25 # rest of the line will be taken as the base URL for following file
26 # commands.  If the first word of a line is "file" the rest of the
27 # line will be appended to the current base URL (with a / as
28 # delimiter).  Example:
29 #
30 #    # GnuPG stuff.
31 #    server ftp://ftp.gnupg.org/gcrypt
32 #    
33 #    file gnupg/gnupg-1.4.2.tar.gz
34 #    chk  1234567890123456789012345678901234567890
35 #    
36
37
38 usage()
39 {
40     cat <<EOF
41 Usage: $0 [OPTIONS]
42 Options:
43         [--force]
44         [--quiet]
45 EOF
46     exit $1
47 }
48
49
50 force=no
51 quiet=no
52 #keep_list=no
53 #sig_check=yes
54 while [ $# -gt 0 ]; do
55     case "$1" in
56         --*=*)
57             optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
58             ;;
59         *)
60             optarg=""
61             ;;
62     esac
63
64     case $1 in
65         --force)
66             force=yes
67             ;;
68         --keep-list)
69             # Now a dummy
70             # keep_list=yes
71             ;;
72         --no-sig-check)
73             # Now a dummy
74             sig_check=no
75             ;;
76         --quiet)
77             quiet=yes
78             ;;
79         *)
80             usage 1 1>&2
81             ;;
82     esac
83     shift
84 done
85
86
87 WGET=wget
88
89 # We used to download the packages.current list but it turned out that
90 # this is too problematic: As there is no history of these files it is
91 # not possible to build and older version of gpg4win using the online
92 # version of the list.  Thus we keep the list now with the installer
93 # and in case a package update is required we will post an updated
94 # list to the mailing list.
95 #
96 #url="http://www.gpg4win.org"
97 #if [ "$keep_list" = "no" ]; then
98 #  echo "downloading packages list from \`$url'."
99 #  if ! ${WGET} -N -q $url/packages.current{,.sig} ; then
100 #      echo "download of packages list failed." >&2
101 #      exit 1
102 #  fi
103 #fi
104 #
105 #if [ "$sig_ckeck" = yes ]; then
106 # if ! gpgv --keyring ./packages.keys packages.current.sig packages.current
107 #   then
108 #    echo "list of packages is not usable." >&2
109 #    exit 1
110 # fi
111 #fi
112
113 lnr=0
114 name=
115 [ -f '.#download.failed' ] && rm '.#download.failed'
116 cat packages.current | \
117 while read key value ; do
118     (( lnr++ ))
119     [ -z "$key" ] && continue
120     case "$key" in
121      \#*)    ;;
122     server) 
123        server="$value" 
124        name=
125        ;;
126      name)
127        if [ -z "$value" ]; then
128            echo "syntax error in name statement, line $lnr" >&2
129            exit 1
130        fi
131        name="$value"
132        [ $quiet = no ] && echo "using name  \`$name'"
133        ;;
134     file)
135        if [ -z "$value" ]; then
136            echo "syntax error in file statement, line $lnr" >&2
137            exit 1
138        fi
139        if [ -z "$server" ]; then
140            echo "no server location for file \`$value', line $lnr" >&2
141            exit 1
142        fi
143        url="$server/$value"
144        if [ -z "$name" ]; then
145            name=`basename "$value"`
146        fi
147        if [ -f "$name" -a "$force" = "no" ]; then
148            [ $quiet = no ] && echo "package     \`$url' ... already exists"
149        else
150            echo -n "downloading \`$url' ..."
151            if ${WGET} -c -q "$url" -O "$name" ; then
152                echo " okay"
153            else
154                echo " FAILED (line $lnr)"
155                echo "line $lnr: downloading $url failed" >> '.#download.failed'
156            fi
157        fi
158        ;;
159     link)
160        if [ -z "$value" ]; then
161            echo "syntax error in file statement, line $lnr" >&2
162            exit 1
163        fi
164        if [ -z "$name" ]; then
165            echo "no name for link in line $lnr" >&2
166            exit 1
167        fi
168        if [ -f "$value" -a "$force" = "no" ]; then
169            [ $quiet = no ] && echo "package     \`$value' ... already exists"
170        else
171            echo -n "linking \`$value' to \`$name' ..."
172            if ln -f "$name" "$value"; then
173                echo " okay"
174            else
175                echo " FAILED (line $lnr)"
176                echo "line $lnr: linking $value failed" >> '.#download.failed'
177            fi
178        fi
179        ;;
180      chk)
181        if [ -z "$value" ]; then
182            echo "syntax error in chk statement, line $lnr" >&2
183            exit 1
184        fi
185        if [ -z "$name" ]; then
186            echo "no file name for chk statement, line $lnr" >&2
187            exit 1
188        fi
189        [ $quiet = no ] && echo -n "checking    \`$name' ..."
190        if echo "$value *$name" | sha1sum -c >/dev/null 2>&1 ; then
191            [ $quiet = no ] && echo " okay"
192        else
193            [ $quiet = no ] && echo " FAILED (line $lnr)"
194            [ $quiet = no ] || echo "checking    \`$name' FAILED (line $lnr)"
195            echo "line $lnr: checking $name failed" >> '.#download.failed'
196        fi
197        name=
198        ;;
199      *)
200        echo "syntax error in \`packages.current', line $lnr." >&2
201        exit 1
202      esac
203 done
204 if [ -f '.#download.failed' ]; then
205   cat '.#download.failed' >&2
206   rm '.#download.failed'
207   echo "some files failed to download or checksums are not matching" >&2
208   exit 1
209 fi