Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /config/trunk/unpack
ViewVC logotype

Annotation of /config/trunk/unpack

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1672 - (view) (download)
Original Path: sml/trunk/config/unpack

1 : mblume 1355 #!/bin/sh
2 :     #
3 :     # This script was extracted from install.sh and deals with the fetching
4 :     # and unpacking of source/bootfile trees. The first argument must be
5 :     # the installation root directory. Subsequent arguments are the names
6 :     # of modules whose source trees are required.
7 :     #
8 :     # (C) 2003 The Fellowship of SML/NJ
9 :     #
10 :     # Author: Matthias Blume (blume@tti-c.org)
11 :     #
12 :    
13 :     this=$0
14 :     ROOT=$1
15 :     shift
16 :    
17 :     CONFIGDIR=$ROOT/config
18 :     SRCDIR=$ROOT/src
19 :    
20 :     VERSION=`cat $CONFIGDIR/version`
21 : mblume 1672 . $CONFIGDIR/srcarchiveurl
22 : mblume 1355
23 :     vsay() {
24 :     if [ x${INSTALL_DEBUG} = xtrue ] ; then
25 :     echo "$@"
26 :     elif [ x${INSTALL_QUIETLY} = xtrue ] ; then
27 :     :
28 :     else
29 :     echo "$@"
30 :     fi
31 :     }
32 :    
33 :     #
34 :     # Function for asking user to fetch source archive.
35 :     # $1 - descriptive name
36 :     # $2 - base name without extension, without version, and without dir
37 :     # $3 - remote directory
38 :     #
39 :     askurl() {
40 : mblume 1385 echo "$this: Please, fetch $1 archive"
41 : mblume 1355 echo ' ('$2.'*' or $VERSION-$2.'*)'
42 :     echo " from $3"
43 :     echo " and then re-run this script!"
44 :     exit 1
45 :     }
46 :    
47 :     #
48 :     # Function for fetching source archives automatically using wget or lynx.
49 :     # $1 - command to actually get the stuff
50 :     # $2 - descriptive name
51 :     # $3 - base name without extension and without dir
52 :     # $4 - remote directory
53 :     #
54 :     fetchurl() {
55 :     getter=$1 ; shift
56 :     vsay $this: Fetching $1 from $3. Please stand by...
57 :     fetched=no
58 :     for base in $2 $VERSION-$2 ; do
59 :     for ext in tgz tar.gz tar.Z tz tar tar.bz2 ; do
60 :     try=$base.$ext
61 :     vsay $this: Trying $try ...
62 :     if $getter $3/$try $ROOT/$try ; then
63 :     fetched=yes
64 :     vsay $this: Fetching $try was a success.
65 :     break 2 # get out of both for-loops
66 :     else
67 :     rm -f $ROOT/$try
68 :     fi
69 :     done
70 :     done
71 :     if [ $fetched = no ] ; then
72 :     echo $this: Fetching $try was no success.
73 :     echo ' ' You should try to do it manually now.
74 :     askurl "$1" "$2" "$3"
75 :     fi
76 :     }
77 :    
78 :     # wrapper for wget
79 :     usewget() {
80 :     wget -nv -O $2 $1
81 :     }
82 :    
83 :     # wrapper for lynx
84 :     uselynx() {
85 :     lynx -source $1 >$2
86 :     }
87 :    
88 :     # wrapper for curl
89 :     usecurl() {
90 :     curl -s $1 >$2
91 :     }
92 :    
93 :     testurlgetter() {
94 :     (exec >/dev/null 2>&1 ; exec $*)
95 :     }
96 :    
97 :     #
98 :     # Function to check whether wget or lynx is available.
99 :     # Set URLGETTER accordingly. URLGETTER can be set externally
100 :     # to either 'wget' or 'curl' or 'lynx' -- in which case the
101 :     # corresponding command will be used (properly wrapped). Any
102 :     # other external setting will be passed directly to fetchurl (without
103 :     # wrapping -- meaning it must take precisely two argumets: source and
104 :     # destination, in that order).
105 :     #
106 :     urlgetter() {
107 :     case ${URLGETTER:-unknown} in
108 :     fetchurl*)
109 :     ;;
110 :     unknown)
111 :     # automatically figure out which wrapper to use
112 :     if testurlgetter wget --help ; then
113 :     URLGETTER="fetchurl usewget"
114 :     elif testurlgetter curl -s -O file:///dev/null -o /dev/null ; then
115 :     URLGETTER="fetchurl usecurl"
116 :     elif testurlgetter lynx -help ; then
117 :     URLGETTER="fetchurl uselynx"
118 :     else
119 :     URLGETTER="askurl"
120 :     fi
121 :     ;;
122 :     wget|curl|lynx)
123 :     # special getters we know how to wrap
124 :     URLGETTER="fetchurl use${URLGETTER}"
125 :     ;;
126 :     *)
127 :     # other -- must be able to work without wrapper
128 :     URLGETTER="fetchurl ${URLGETTER}"
129 :     ;;
130 :     esac
131 :     }
132 :    
133 :     # wrapper for tar
134 :     un_tar() {
135 :     vsay "$this: Un-TAR-ing $1 archive."
136 :     tar -xf $2
137 :     }
138 :    
139 :     # wrapper for zcat followed by tar
140 :     un_tar_Z() {
141 :     vsay "$this: Un-COMPRESS-ing and un-TAR-ing $1 archive."
142 :     zcat $2 | tar -xf -
143 :     }
144 :    
145 :     # wrapper for gunzip followed by tar
146 :     un_tar_gz() {
147 :     vsay "$this: Un-GZIP-ing and un-TAR-ing $1 archive."
148 :     gunzip -c $2 | tar -xf -
149 :     }
150 :    
151 :     # wrapper for bunzip2 followed by tar
152 :     un_tar_bz2() {
153 :     vsay "$this: Un-BZIP2-ing and un-TAR-ing $1 archive."
154 :     bunzip2 -c $2 | tar -xf -
155 :     }
156 :    
157 :     # unarchive archive without and with version number attached
158 :     unarchive() {
159 :     # $1: descriptive string, $2: archive, $3: unpacker
160 :     if [ -r $ROOT/$2 ] ; then
161 :     $3 "$1" $ROOT/$2
162 :     elif [ -r $ROOT/$VERSION-$2 ]; then
163 :     $3 "$1" $ROOT/$VERSION-$2
164 :     else
165 :     return 1
166 :     fi
167 :     }
168 :    
169 :     #
170 :     # Function to unpack a source archive.
171 :     #
172 :     # $1: descriptive name of the sources to be unpacked
173 :     # $2: the directory into which to unpack the sources
174 :     # $3: the sub-directory of $2 that is going to be created by unpacking
175 :     # $4: the basename of the source archive (the script will check several
176 :     # different suffixes to determine what kind of de-compression is to
177 :     # be used)
178 :     #
179 :     # fetch_n_unpack is the helper function that does the real work. If
180 :     # no archive is found locally, it invokes $URLGETTER and tries again.
181 :     # The variable $tryfetch is used to make sure this happens only once.
182 :     fetch_n_unpack() {
183 :     cd $2
184 :     if unarchive "$1" $4.tgz un_tar_gz ||
185 :     unarchive "$1" $4.tar.gz un_tar_gz ||
186 :     unarchive "$1" $4.tar.Z un_tar_Z ||
187 :     unarchive "$1" $4.tar un_tar ||
188 :     unarchive "$1" $4.tar.bz2 un_tar_bz2 ||
189 :     unarchive "$1" $4.tz un_tar_Z
190 :     then
191 :     : we are done
192 :     elif [ $tryfetch = yes ] ; then
193 :     urlgetter
194 :     $URLGETTER "$1" $4 $SRCARCHIVEURL
195 :     tryfetch=no
196 :     fetch_n_unpack "$1" "$2" "$3" "$4"
197 :     fi
198 :     }
199 :    
200 :     #
201 :     # The main "unpack" driver function that invokes the above helper.
202 :     #
203 :     unpack() {
204 :     tryfetch=yes
205 :     if [ -d $2/$3 ]; then
206 :     vsay "$this: The $1 tree already exists."
207 :     else
208 :     fetch_n_unpack "$1" "$2" "$3" "$4"
209 :     fi
210 :     if [ ! -d $2/$3 ]; then
211 : mblume 1485 echo "$this: !!! Unable to unpack $1 archive."
212 :     exit 1
213 : mblume 1355 fi
214 :     }
215 :    
216 :     #
217 :     # Now do it:
218 :     #
219 :    
220 : mblume 1368 for i
221 :     do
222 : mblume 1355 case $i in
223 :     runtime)
224 :     unpack run-time $ROOT/src runtime runtime
225 :     ;;
226 :     boot.*)
227 :     unpack bootfiles $ROOT sml.$i $i
228 :     ;;
229 : mblume 1485 compiler)
230 :     unpack compiler $ROOT/src compiler compiler
231 : mblume 1355 ;;
232 : mblume 1485 cm)
233 :     unpack compiler $ROOT/src cm cm
234 :     ;;
235 :     system)
236 :     unpack compiler $ROOT/src system system
237 :     ;;
238 : mblume 1355 ml-yacc)
239 :     unpack ML-Yacc $ROOT/src ml-yacc ml-yacc
240 :     ;;
241 :     ml-lex)
242 :     unpack ML-Lex $ROOT/src ml-lex ml-lex
243 :     ;;
244 :     ml-burg)
245 :     unpack ML-Burg $ROOT/src ml-burg ml-burg
246 :     ;;
247 :     ml-nlffigen)
248 :     unpack ML-NLFFI-Gen $ROOT/src ml-nlffigen ml-nlffigen
249 :     ;;
250 :     nowhere)
251 :     unpack "MLRISC Tools Library" $SRCDIR MLRISC MLRISC
252 :     ;;
253 :     smlnj-lib)
254 :     unpack "SML/NJ Library" $SRCDIR smlnj-lib smlnj-lib
255 :     ;;
256 :     cml)
257 :     unpack CML $SRCDIR cml cml
258 :     ;;
259 :     cml-lib)
260 :     unpack CML $SRCDIR cml cml
261 :     ;;
262 :     eXene)
263 :     unpack EXene $SRCDIR eXene eXene
264 :     ;;
265 :     ckit)
266 :     unpack "C-Kit" $ROOT ckit ckit
267 :     ;;
268 :     ml-nlffi-lib)
269 :     unpack "NLFFI Library" $SRCDIR ml-nlffi-lib ml-nlffi-lib
270 :     ;;
271 :     pgraph-util)
272 :     unpack "CM source code" $SRCDIR cm cm
273 :     ;;
274 :     mlrisc)
275 :     unpack "MLRISC Library" $SRCDIR MLRISC MLRISC
276 :     ;;
277 :     mlrisc-tools)
278 :     unpack "MLRISC Tools Library" $SRCDIR MLRISC MLRISC
279 :     ;;
280 : mblume 1485 smlnj-c)
281 :     unpack "SML/NJ-C FFI" $SRCDIR smlnj-c smlnj-c
282 :     ;;
283 : mblume 1355 doc)
284 :     echo Package doc is currently unavailable.
285 :     # unpack Doc $ROOT doc doc
286 :     # cd $ROOT/doc
287 :     # build $ROOT
288 :     ;;
289 :     *)
290 : mblume 1485 echo Unknown package: ${i}.
291 :     exit 1
292 : mblume 1355 ;;
293 :     esac
294 :     done
295 : mblume 1368
296 :     exit 0

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0