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