about to release 0.3.0
[gpg4win.git] / packages / download.sh
1 #!/bin/sh
2 # download.sh - Download source and binary packages for GPG4Win.
3 # Copyright (C) 2005 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 #    file gnupg/gnupg-1.4.2.tar.gz.sig
35 #    
36
37 force=no
38 if [ "$1" = "--force" ]; then
39     force=yes
40     shift
41 fi
42
43 WGET=wget
44
45 url="ftp://ftp.gpg4win.org/gpg4win/"
46 echo "downloading packages list from \`$url'."
47 if ! ${WGET} -N -q $url/packages.current{,.sig} ; then
48     echo "download of packages list failed." >&2
49     exit 1
50 fi
51
52 if ! gpgv --keyring ./packages.keys packages.current.sig packages.current
53   then
54     echo "list of packages is not usable." >&2
55     exit 1
56 fi
57
58
59 lnr=0
60 [ -f '.#download.failed' ] && rm '.#download.failed'
61 cat packages.current | \
62 while read key value ; do
63     (( lnr++ ))
64     [ -z "$key" ] && continue
65     case "$key" in
66      \#*)    ;;
67     server) 
68        server="$value" 
69        ;;
70     file)
71        if [ -z "$value" ]; then
72            echo "syntax error in file statement" >&2
73            exit 1
74        fi
75        if [ -z "$server" ]; then
76            echo "no server location available for file \`$value'" >&2
77            exit 1
78        fi
79        url="$server/$value"
80        name=`basename "$value"`
81        if [ -f "$name" -a "$force" = "no" ]; then
82            echo "package     \`$url' already exists."
83        else
84            echo "downloading \`$url'."
85            if ! ${WGET} -c -q "$url" ; then
86                echo "download of \`$url' failed." >&2
87                echo "$url" >> '.#download.failed'
88            fi
89        fi
90        ;;
91      *)
92        echo "syntax error in packages.current, line $lnr." >&2
93        exit 1
94      esac
95 done
96 if [ -f '.#download.failed' ]; then
97   echo "some files failed to download" 2>&1
98   exit 1
99 fi