Fix GnuPG package name
[gpg4win.git] / packages / download.sh
1 #!/bin/sh
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). Checksums are sha256 sums.
29 #
30 # Example:
31 #
32 #    # GnuPG stuff.
33 #    server ftp://ftp.gnupg.org/gcrypt
34 #
35 #    file gnupg/gnupg-1.4.2.tar.gz
36 #    chk  1e92b39ef4f4cdf3b1849b6f824dd8f160276aa5c9718be35f8a7bd190bf6154
37 #
38
39
40 usage()
41 {
42     cat <<EOF
43 Usage: $0 [OPTIONS]
44 Options:
45         [--force]
46         [--quiet]
47         [--ipv4]
48         [--ipv6]
49 EOF
50     exit $1
51 }
52
53
54 force=no
55 quiet=no
56 ipvx=
57 #keep_list=no
58 #sig_check=yes
59 while [ $# -gt 0 ]; do
60     case "$1" in
61         --*=*)
62             optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
63             ;;
64         *)
65             optarg=""
66             ;;
67     esac
68
69     case $1 in
70         --force)
71             force=yes
72             ;;
73         --keep-list)
74             # Now a dummy
75             # keep_list=yes
76             ;;
77         --no-sig-check)
78             # Now a dummy
79             sig_check=no
80             ;;
81         --quiet)
82             quiet=yes
83             ;;
84         --ipv4)
85             ipvx="-4"
86             ;;
87         --ipv6)
88             ipvx="-6"
89             ;;
90         *)
91             usage 1 1>&2
92             ;;
93     esac
94     shift
95 done
96
97
98 WGET="wget $ipvx"
99
100 # We used to download the packages.current list but it turned out that
101 # this is too problematic: As there is no history of these files it is
102 # not possible to build and older version of gpg4win using the online
103 # version of the list.  Thus we keep the list now with the installer
104 # and in case a package update is required we will post an updated
105 # list to the mailing list.
106 #
107 #url="http://www.gpg4win.org"
108 #if [ "$keep_list" = "no" ]; then
109 #  echo "downloading packages list from \`$url'."
110 #  if ! ${WGET} -N -q $url/packages.current{,.sig} ; then
111 #      echo "download of packages list failed." >&2
112 #      exit 1
113 #  fi
114 #fi
115 #
116 #if [ "$sig_ckeck" = yes ]; then
117 # if ! gpgv --keyring ./packages.keys packages.current.sig packages.current
118 #   then
119 #    echo "list of packages is not usable." >&2
120 #    exit 1
121 # fi
122 #fi
123
124 lnr=0
125 name=
126 [ -f '.#download.failed' ] && rm '.#download.failed'
127 cat packages.current | \
128 while read key value ; do
129     : $(( lnr = lnr + 1 ))
130     [ -z "$key" ] && continue
131     case "$key" in
132      \#*)    ;;
133     server)
134        server="$value"
135        name=
136        ;;
137      name)
138        if [ -z "$value" ]; then
139            echo "syntax error in name statement, line $lnr" >&2
140            exit 1
141        fi
142        name="$value"
143        [ $quiet = no ] && echo "using name  \`$name'"
144        ;;
145     file)
146        if [ -z "$value" ]; then
147            echo "syntax error in file statement, line $lnr" >&2
148            exit 1
149        fi
150        if [ -z "$server" ]; then
151            echo "no server location for file \`$value', line $lnr" >&2
152            exit 1
153        fi
154        url="$server/$value"
155        if [ -z "$name" ]; then
156            name=`basename "$value"`
157        fi
158        if [ -s "$name" -a "$force" = "no" ]; then
159            [ $quiet = no ] && echo "package     \`$url' ... already exists"
160        else
161            echo -n "downloading \`$url' ..."
162            if ${WGET} -c -q "$url" -O "$name" ; then
163                if [ $(stat -c'%s' "$name" 2>/dev/null || echo 0) -eq 0 ]; then
164                  echo " FAILED (line $lnr)"
165                  echo "line $lnr: $url has zero length" >> '.#download.failed'
166                else
167                  echo " okay"
168                fi
169            else
170                echo " FAILED (line $lnr)"
171                echo "line $lnr: downloading $url failed" >> '.#download.failed'
172            fi
173        fi
174        ;;
175     link)
176        if [ -z "$value" ]; then
177            echo "syntax error in file statement, line $lnr" >&2
178            exit 1
179        fi
180        if [ -z "$name" ]; then
181            echo "no name for link in line $lnr" >&2
182            exit 1
183        fi
184        if [ -f "$value" -a "$force" = "no" ]; then
185            [ $quiet = no ] && echo "package     \`$value' ... already exists"
186        else
187            echo -n "linking \`$value' to \`$name' ..."
188            if ln -f "$name" "$value"; then
189                echo " okay"
190            else
191                echo " FAILED (line $lnr)"
192                echo "line $lnr: linking $value failed" >> '.#download.failed'
193            fi
194        fi
195        ;;
196      chk)
197        if [ -z "$value" ]; then
198            echo "syntax error in chk statement, line $lnr" >&2
199            exit 1
200        fi
201        if [ -z "$name" ]; then
202            echo "no file name for chk statement, line $lnr" >&2
203            exit 1
204        fi
205        [ $quiet = no ] && echo -n "checking    \`$name' ..."
206        if echo "$value *$name" | sha256sum -c >/dev/null 2>&1 ; then
207            [ $quiet = no ] && echo " okay"
208        else
209            [ $quiet = no ] && echo " FAILED (line $lnr)"
210            [ $quiet = no ] || echo "checking    \`$name' FAILED (line $lnr)"
211            echo "line $lnr: checking $name failed" >> '.#download.failed'
212        fi
213        name=
214        ;;
215      *)
216        echo "syntax error in \`packages.current', line $lnr." >&2
217        exit 1
218      esac
219 done
220 if [ -f '.#download.failed' ]; then
221   cat '.#download.failed' >&2
222   rm '.#download.failed'
223   echo "some files failed to download or checksums are not matching" >&2
224   exit 1
225 fi