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