Better detection of package version
[maemo-efl] / trunk / build-all.sh
1 #!/bin/sh
2
3 ###########################################################
4 # Maemo-efl building script
5 # Build script
6 ###########################################################
7
8 source "./scripts/message-functions.sh"
9 source "./scripts/var-definitions.sh"
10 source "./scripts/log-functions.sh"
11 source "./scripts/repository-functions.sh"
12 source "./scripts/package-functions.sh"
13 source "./scripts/setup-functions.sh"
14
15 ###########################################################
16 # Begin script
17 ###########################################################
18
19
20 # Parse comand line options
21
22 usage () {
23      cat << EOF
24 Usage: $__this_script [OPTIONS]
25 Build script for Maemo EFL debian packages.
26 Options:
27     -n           Don't sign packages.
28     -c           Don't update source repositories.
29     -h           Show this usage guide.
30     -s PATH      Specify alternate scratchbox path (default: $__sbox_path).
31     -r           Remove module sub-directories (not the high level debian dir)
32                  and then exit.
33     -t A:B:Z     Specify scratchbox building targets 
34                  (default: all targets installed).
35     -u svn_rev   Update the latest revision number to "svn_rev" and exit. This
36                  only works on revision numbers that has the svn label on
37                  the version part (e.g 0.9.9.043+svn32000-maemo1)  Also,
38                  this option will not create a new entry on the changelog
39                  file, it will only change its first line. If you want to
40                  update to the latest repository revision number, just use
41                  HEAD as parameter.
42     -p P1:P2:PN  Specify packges to build (default: build all packages available).
43
44 EOF
45 }
46
47 while getopts "anchre:s:t:u:p:" opt ; do
48     case "$opt" in
49         p)
50             __lib_modules_temp=""
51             __python_modules_temp=""
52             __python_efl_utils_module_temp=""
53             __python_dispatcher_module_temp=""
54             __virtual_packages_temp=""
55             __not_all_pkgs=1
56             __parameters=`echo "$OPTARG" | $__sed -e 's/:/ /g'`
57             for i in $__parameters; do
58                 for module in `echo "$__lib_modules"|$__sed -e 's/:/ /g'`; do
59                     if [ x$module == x$i ]; then
60                         __lib_modules_temp=$__lib_modules_temp:$i
61                         continue
62                     fi
63                 done
64
65                 for module in `echo "$__python_modules"|$__sed -e 's/:/ /g'`; do
66                     if [ x$module == x$i ]; then
67                         __python_modules_temp=$__python_modules_temp:$i
68                     fi
69                 done
70
71                 for module in `echo "$__python_efl_utils_module"|$__sed -e 's/:/ /g'`; do
72                     if [ x$module == x$i ]; then
73                         __python_efl_utils_module_temp=$__python_efl_utils_module_temp:$i
74                         continue
75                     fi
76                 done
77
78                 for module in `echo "$__python_dispatcher_module" |$__sed -e 's/:/ /g'`; do
79                     if [ x$module == x$i ]; then
80                         __python_dispatcher_module_temp=$__python_dispatcher_module_temp:$i
81                         continue
82                     fi
83                 done
84
85                 for module in `echo "$__virtual_packages" |$__sed -e 's/:/ /g'`; do
86                     if [ x$module == x$i ]; then
87                         __virtual_packages_temp=$__virtual_packages_temp:$i
88                         continue
89                     fi
90                 done
91
92             done
93             __lib_modules_temp=`echo "$__lib_modules_temp" | tr "[:upper:]" "[:lower:]"`
94             __python_modules_temp=`echo "$__python_modules_temp" | tr "[:upper:]" "[:lower:]"`
95             __python_efl_utils_module_temp=`echo "$__python_efl_utils_module_temp" | tr "[:upper:]" "[:lower:]"`
96             __python_dispatcher_module_temp=`echo "$__python_dispatcher_module_temp" | tr "[:upper:]" "[:lower:]"`
97             __virtual_packages_temp=`echo "$__virtual_packages_temp" | tr "[:upper:]" "[:lower:]"`
98         ;;
99         c)
100             __update_repositories=0
101         ;;
102         e)
103             __export_dir=$OPTARG
104             if [ "x$__sbox_path" = "x" ] || [ ! -d $__sbox_path ]; then
105                 error "Invalid export path: $__export_dir"
106                 exit 1
107             fi
108         ;;
109         h)
110             usage
111             exit 0
112         ;;
113         r)
114             __force_remove=1
115         ;;
116         s)
117             __sbox_path=$OPTARG
118             if [ "x$__sbox_path" = "x" ] || [ ! -d $__sbox_path ]; then
119                 error "Invalid scratchbox path: $__sbox_path"
120                 exit 1
121             fi
122         ;;
123         n)
124             __no_signing=1
125         ;;
126         t)
127             __sbox_targets_temp=`echo $OPTARG | tr "[:lower:]" "[:upper:]"`
128         ;;
129         u)
130             __changelog_update=$OPTARG
131         ;;
132         ?)
133             usage
134             exit 1
135         ;;
136     esac
137 done
138
139 ############################
140 #     Initial checks       #
141 ###########################
142
143 update_all_modules
144 init_checks
145
146 # Remove modules subdirectories and exit
147 if [ $__force_remove -eq 1 ]; then
148     clean_modules
149     exit 0
150 fi
151
152 # Modify debian changelog
153 if [ -n "$__changelog_update" ]; then
154     update_changelog $__changelog_update
155     exit 0
156 fi
157
158 setup_dirs
159 generate_versions
160
161 if [ $__not_all_pkgs -eq 1 ]; then
162     __lib_modules=$__lib_modules_temp
163     __python_modules=$__python_modules_temp
164     __python_efl_utils_module=$__python_efl_utils_module_temp
165     __python_dispatcher_module=$__python_dispatcher_module_temp
166     __virtual_packages=$__virtual_packages_temp
167
168     update_all_modules
169
170 fi
171
172 # Create log file
173 create_log_file
174 start_log
175
176 # update modules
177 download_modules
178 # Setup scratchbox variables
179 setup_sbox
180
181 # Setup scratchbox targets if option -t was used
182 if [ ! -z $__sbox_targets_temp ]; then
183     __sbox_targets=`echo $__sbox_targets_temp|$__sed -e 's/:/ /g'`
184 fi
185
186 ###########################################################
187 # ARCHITECTURE DEPENDENT MODULES
188 ###########################################################
189 # For each scratchbox target
190 for target in $__sbox_targets; do
191     msg_begin "Checking distro and arch for target $target"
192     setup_distro $target
193     msg_end $?
194
195     msg "  Distribution..: $__distro"
196     msg "  Architecture..: $__arch"
197     msg "  Build Options.: $__build_pkg_options"
198
199     if [ ! -d $__pkg_dir ]; then
200         msg_begin "  Creating dir for $__distro $__arch packages"
201         $__mkdir -p $__pkg_dir
202         msg_end $?
203     fi
204
205     msg_begin "  Changing current sbox target to $target"
206     change_sbox_target $target
207     msg_end $?
208
209     # For each module
210     for module in `echo $__lib_modules:$__python_modules|$__sed -e 's/:/ /g'`; do
211         msg "  Building $module packages for $__distro $__arch"
212
213         update_debian_dir $module
214
215         if [ -d $__tmp_dir/$module/$module ]; then
216             msg_begin "  Removing temporary $module"
217             rm -rf $__tmp_dir/$module/$module
218             msg_end $?
219         fi
220
221         msg_begin "  Copying $module dir to $__tmp_dir"
222         $__tar c --exclude=.svn --exclude=.git $module | $__tar x --directory $__tmp_dir
223         msg_end $?
224
225 #        msg_begin "  Cleaning $module repository"
226 #        git_clean_repository $module/$module
227 #        msg_end $?
228
229         msg_begin "  Building $module packages"
230         build_pkg $__tmp_dir/$module
231         msg_end $?
232
233         if [ -z $__no_signing ]; then
234             msg_begin "  Signing $module packages"
235             sign_pkgs $__tmp_dir/$module
236             msg_end $?
237         fi
238
239         msg_begin "  Installing $module packages"
240         install_pkgs $__tmp_dir/$module
241         msg_end $?
242
243         msg_begin "  Copying $module packages"
244         if [ "x$__arch" != "xarmel" ]; then
245             mv $__tmp_dir/$module/*.dsc $__tmp_dir/$module/*.tar.gz $__pkg_dir
246         fi
247         mv $__tmp_dir/$module/*.deb $__tmp_dir/$module/*.changes $__pkg_dir
248         msg_end $?
249
250         msg_begin "  Removing temporary $module"
251         rm -rf $__tmp_dir/$module/$module
252         msg_end $?
253     done
254
255     msg_begin "  Uninstalling packages $__installed_packages"
256     uninstall_pkgs
257     msg_end $?
258 done
259
260 ###########################################################
261 # ARCHITECTURE INDEPENDENT MODULES
262 ###########################################################
263 # For each scratchbox target
264 for target in $__sbox_targets; do
265     msg_begin "Checking distro and arch for target $target"
266     setup_distro $target
267     msg_end $?
268
269     msg "  Distribution..: $__distro"
270     msg "  Architecture..: $__arch"
271     msg "  Build Options.: $__build_pkg_options"
272
273     if [ "x$__arch" = "xarmel" ]; then
274         warn "Skipping target $target for architecture independent packages"
275         continue
276     fi
277
278     __arch="all"
279     __pkg_dir=`dirname $__pkg_dir`/$__arch
280
281     if [ ! -d $__pkg_dir ]; then
282         msg_begin "  Creating dir for $__distro $__arch packages"
283         $__mkdir -p $__pkg_dir
284         msg_end $?
285     fi
286
287     msg_begin "  Changing current sbox target to $target"
288     change_sbox_target $target
289     msg_end $?
290
291     # For each module
292     for module in `echo $__python_efl_utils_module|$__sed -e 's/:/ /g'`; do
293
294         msg "  Building $module packages for $__distro $__arch"
295         update_debian_dir $module
296
297
298         if [ ! -d $__tmp_dir/$module ]; then
299             mkdir $__tmp_dir/$module
300         fi
301
302         if [ -d $__tmp_dir/$module/$module ]; then
303             msg_begin "  Removing temporary $module"
304             rm -rf $__tmp_dir/$module/$module
305             msg_end $?
306         fi
307
308
309         msg_begin "  Copying $module dir to $__tmp_dir"
310         $__tar c --exclude=.svn --exclude=.git $module | $__tar x --directory $__tmp_dir
311     #cp -f -u -r $module $__tmp_dir
312         msg_end $?
313
314 #        msg_begin "  Cleaning $module repository"
315 #        git_clean_repository $module/$module
316 #        msg_end $?
317
318         msg_begin "  Building $module packages"
319         build_pkg $__tmp_dir/$module
320         msg_end $?
321
322         if [ -z $__no_signing ]; then
323             msg_begin "  Signing $module packages"
324             sign_pkgs $__tmp_dir/$module
325             msg_end $?
326     fi
327
328         msg_begin "  Installing $module packages"
329         install_pkgs $__tmp_dir/$module
330         msg_end $?
331
332         msg_begin "  Copying $module packages"
333         mv $__tmp_dir/$module/*.dsc $__tmp_dir/$module/*.tar.gz $__tmp_dir/$module/*.deb $__tmp_dir/$module/*.changes $__pkg_dir
334         msg_end $?
335
336         msg_begin "  Removing temporary $module"
337         rm -rf $__tmp_dir/$module/$module
338         msg_end $?
339     done
340
341     msg_begin "  Uninstalling packages $__installed_packages"
342     uninstall_pkgs
343     msg_end $?
344 done
345
346 ###########################################################
347 # VIRTUAL PACKAGES
348 ###########################################################
349 # For each scratchbox target
350 for target in $__sbox_targets; do
351     msg_begin "Checking distro and arch for target $target"
352     setup_distro $target
353     msg_end $?
354
355     msg "  Distribution..: $__distro"
356     msg "  Architecture..: $__arch"
357     msg "  Build Options.: $__build_pkg_options"
358
359     if [ "x$__arch" = "xarmel" ]; then
360         warn "Skipping target $target for architecture independent packages"
361         continue
362     fi
363
364     __arch="all"
365     __pkg_dir=`dirname $__pkg_dir`/$__arch
366
367     if [ ! -d $__pkg_dir ]; then
368         msg_begin "  Creating dir for $__distro $__arch packages"
369         $__mkdir -p $__pkg_dir
370         msg_end $?
371     fi
372
373     msg_begin "  Changing current sbox target to $target"
374     change_sbox_target $target
375     msg_end $?
376
377     # For each module
378     for module in `echo $__virtual_packages|$__sed -e 's/:/ /g'`; do
379         msg "  Building $module packages for $__distro $__arch"
380
381         update_debian_dir $module
382
383         if [ ! -d $__tmp_dir/$module ]; then
384             mkdir $__tmp_dir/$module
385         fi
386
387         if [ -d $__tmp_dir/$module/$module ]; then
388             msg_begin "  Removing temporary $module"
389             rm -rf $__tmp_dir/$module/$module
390             msg_end $?
391         fi
392
393         msg_begin "  Copying $module dir to $__tmp_dir"
394         $__tar c --exclude=.svn --exclude=.git $module | $__tar x --directory $__tmp_dir
395     #cp -f -u -r $module $__tmp_dir/$module
396         msg_end $?
397
398         msg_begin "  Building $module packages"
399         build_pkg $__tmp_dir/$module
400         msg_end $?
401
402     if [ -z $__no_signing ]; then
403             msg_begin "  Signing $module packages"
404             sign_pkgs $__tmp_dir/$module
405             msg_end $?
406     fi
407
408         msg_begin "  Installing $module packages"
409         install_pkgs $__tmp_dir/$module
410         msg_end $?
411
412         msg_begin "  Copying $module packages"
413         mv $__tmp_dir/$module/*.dsc $__tmp_dir/$module/*.tar.gz $__tmp_dir/$module/*.deb $__tmp_dir/$module/*.changes $__pkg_dir
414         msg_end $?
415
416         msg_begin "  Removing temporary $module"
417         rm -rf $__tmp_dir/$module/$module
418         msg_end $?
419     done
420
421     msg_begin "  Uninstalling packages $__installed_packages"
422     uninstall_pkgs
423     msg_end $?
424 done
425
426 # END
427 finish_log